You are on page 1of 3

;**************************** Librera "BUS_1LIN.

INC" **************************** ***** ; ; =================================================================== ; =================================================================== ; ; Estas subrutinas permiten realizar las tareas bsicas de control del bus de una sola lnea ; ; ZONA DE DATOS **************************************************************** ****** CBLOCK Bus1Linea_Dato el bus. Bus1Linea_ContadorBits ir. ENDC #DEFINE Bus1Linea PORTB,3 ; Guarda dato a transmitir o recibir por ; Cuenta los bits a transmitir o a recib

; Lnea donde se conecta el DS1820.

; Subrutina "Bus1Linea_AltaImpedancia" ------------------------------------------------; ; Configura la lnea nica de 1-Wire Bus como entrada. Lo pone en alta impedancia. Bus1Linea_AltaImpedancia bsf STATUS,RP0 bsf Bus1Linea a bcf STATUS,RP0 return

; La lnea como entrada, por tanto, en alt ; impedancia.

; Subrutina "Bus1Linea_Bajo" ----------------------------------------------------------; ; Mantiene el pin de datos del Bus de 1 lnea en bajo. Bus1Linea_Bajo bsf bcf bcf bcf return STATUS,RP0 Bus1Linea STATUS,RP0 Bus1Linea

; La lnea como salida. ; Pasa a bajo.

; Subrutina "Bus1Linea_Reset" ---------------------------------------------------------; ; Enva un impulso de Reset al dispositivo conectado en el bus de 1 lnea y despus ; espera recibir un impulso de Presence". Esto consiste en: ; 1. El PIC manda un impulso en bajo durante unos 500 s. (El protocolo permite entre 480 ; y 960 s). ; 2. El PIC pasa a modo entrada, espera 20 s. (El protocolo fija entre 15 y 60 s). ; 3. El PIC lee la lnea de entrada y si es bajo est correcto (pulso de "Presenc e"). ; Se interpreta como que el procedimiento est correctamente inicializado.

Bus1Linea_Reset call Bus1Linea_AltaImpedancia el flanco de ; call Bus1Linea_Bajo ; call Retardo_500micros call Bus1Linea_AltaImpedancia nivel alto por call Retardo_20micros urante unos s. Bus1Linea_EsperaLeerBajo btfsc Bus1Linea ; pulso goto Bus1Linea_EsperaLeerBajo Bus1Linea_EsperaLeerAlto btfss Bus1Linea ; n alto. goto Bus1Linea_EsperaLeerAlto return

; Empieza en alto para conseguir bajada con la siguiente instruccin. El bus de 1 lnea en bajo durante 500 s. ; Permanece en alta impedancia ( ; las resistencias de Pull-Up) d Espera a que el dispositivo le enve el ; en bajo de "Presence". Y ahora el dispositivo lo debe poner e

; Subrutina "Bus1Linea_EscribeByte" ---------------------------------------------------; ; El maestro escribe un byte al esclavo conectado al bus de 1 lnea comenzando por el bit LSB. ; Consiste en enviar 8 bits, repitiendo 8 veces la siguiente secuencia: ; 1 El PIC manda un impulso en bajo durante unos microsegundos. (El protocol o fija un ; mnimo de 1 s y sin exceder con lo que viene a continuacin de 60 s) A continu acin: ; - Si va a enviar un "0" permanece en bajo durante 50 s. ; - Si va a escribir un "1" se pone en alta impedancia durante 50 s. (El pr otocolo ; permite unos valores entre 15 y 60 s para ambos casos). ; 2 Para escribir otro bit se pone en alta impedancia durante unos s. (El pro tocolo ; establece un mnimo de 1 s). ; ; Entrada: En (W) el dato a enviar. Bus1Linea_EscribeByte movwf Bus1Linea_Dato ; Guarda el byte a transmitir. movlw 0x08 ; 8 bits a transmitir. movwf Bus1Linea_ContadorBits call Bus1Linea_AltaImpedancia ; Empieza en alta impedancia. Bus1Linea_EnviaBit call Bus1Linea_Bajo ; Flanco de bajada. ; ; Pregunta por el valor del bit a transmitir. ; rrf Bus1Linea_Dato,F ; Lleva el bit de menor peso LSB al Carry. btfss STATUS,C ; Es un "1" el bit a transmitir?. goto Bus1Linea_EnviaCero ; No, pues enva un "0". Bus1Linea_EnviaUno call Bus1Linea_AltaImpedancia ; Transmite un "1". goto Bus1Linea_Espera50us Bus1Linea_EnviaCero call Bus1Linea_Bajo ; Transmite un "0".

Bus1Linea_Espera50us call Retardo_50micros call Bus1Linea_AltaImpedancia ; Flanco de subida. decfsz Bus1Linea_ContadorBits,1 ; Comprueba que es el ltimo bit. goto Bus1Linea_EnviaBit ; Como no es el ltimo bit repite la opera cin. return ; ; Subrutina "Bus1Linea_LeeByte" -------------------------------------------------------; ; El microcontrolador maestro lee un byte del dispositivo esclavo conectado al b us de ; 1 lnea. Consiste en leer 8 bits, repitiendo 8 veces la siguiente secuencia: ; 1 El PIC manda un pulso en bajo durante unos s. (El protocolo fija un mnimo de 1 s). ; 2 El PIC se pone en entrada (alta impedancia) durante otros 10 s (con un to tal de 15 s ; desde el flanco de bajada) para proceder a la lectura de la lnea. ; 3 El PIC espera 50 s para realizar la siguiente lectura (total unos 65 s des de el ; flanco de bajada). El protocolo fija que las lecturas se harn cada 60 s ms. ; ; Salida: En (W) el dato ledo. Bus1Linea_LeeByte movlw 0x08 ; movwf Bus1Linea_ContadorBits call Bus1Linea_AltaImpedancia Bus1Linea_LeeBit call Bus1Linea_Bajo ; call Bus1Linea_AltaImpedancia call Retardo_10micros riores, supone ; ada. bcf STATUS,C ; que es 0. btfsc Bus1Linea ; bsf STATUS,C ; rrf Bus1Linea_Dato,1 o. call Retardo_50micros call Bus1Linea_AltaImpedancia itivo. decfsz Bus1Linea_ContadorBits,1 goto Bus1Linea_LeeBit er el siguiente. movf Bus1Linea_Dato,W return ; ; ; ; ; 8 bits a recibir. ; Empieza en alta impedancia. Flanco de bajada. ; Aadiendo las instrucciones ante un total de 15 s desde el flanco de baj Ahora lee el pin. En principio supone Realmente es cero?. No, pues cambia a uno. ; Introduce el bit en el registr ; Espera. ; Flanco de subida del pulso pos ; Comprueba que es el ltimo bit. ; Si no es el ltimo bit pasa a le ; El resultado en el registro W.

=================================================================== Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" E. Palacios, F. Remiro y L. Lpez. Editorial Ra-Ma. www.ra-ma.es ===================================================================

You might also like