You are on page 1of 3

;***************************** Librera "RS232.INC" ****************************** ******* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. Lpez.

www.pic16f84a.com ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Estas subrutinas permiten realizar las tareas bsicas de control de la transmisin ; sere asincrona segn normas RS-232. ; ; Los parmetros adoptados para la comunicacin son los siguientes: ; - Velocidad de transmisin de 9600 baudios. La duracin de cada bit ser 104 s. ; - Un bit de inicio o Start a nivel bajo. ; - Dato de 8 bits. ; - Sin paridad. ; - Dos bits de final o Stop a nivel alto. ; ; El tiempo entre bit y bit debe coincidir con el periodo de la seal leda o envia da. ; Como la velocidad de transmisin o recepcin es de 9600 baudios, el periodo ser: ; 1/9600 Baudios = 104 s. Se utilizar pues la subrutina Retardos_100micros. CBLOCK RS232_ContadorBits RS232_Dato ENDC #DEFINE RS232_Entrada PORTA,4 ; Lnea por la que se reciben los datos. #DEFINE RS232_Salida PORTA,3 ; Lnea por la que se envan los datos. ; ; Subrutina "RS232_Inicializa" -----------------------------------------------------------; ; Configura las lneas de salida y entrada del microcontrolador. RS232_Inicializa bsf RS232_Salida alto para resposo. bsf STATUS,RP0 bsf RS232_Entrada como entrada. bcf RS232_Salida como salida. bcf STATUS,RP0 return ; Al principio salida en ; Esta lnea se configura ; Esta lnea se configura

; Subrutina "RS232_LeeDato" -----------------------------------------------------------; ; El microcontrolador lee el dato por la lnea de entrada comenzando por el bit de menor ; peso. El dato ledo se enva finalmente en el registro de trabajo W. ; ; El ordenador parte siempre de un nivel alto, que es el estado que tiene cuando no ; enva informacin. La secuencia utilizada es: ; 1 Espera que se ejecute el pulso negativo del bit Start o flanco de bajada .

; 2 Deja pasar un tiempo una y media veces mayor que el periodo de transmisin para ; saltarse el bit de Start y lee el primer bit en su mitad. ; 3 Lee el resto de los bits de datos, esperando un tiempo igual a la duracin del ; perodo entre lectura y lectura para testearlos en mitad del bit. ; ; Salida: En el registro de trabajo W el byte ledo. RS232_LeeDato movlw d'8' . movwf RS232_ContadorBits RS232_EsperaBitStart btfsc RS232_Entrada sea "0". goto RS232_EsperaBitStart call Retardo_100micros iempo igual a una call Retardo_50micros smisin. RS232_LeeBit bcf STATUS,C in. En principio supone que es 0. btfsc RS232_Entrada bsf STATUS,C a a "1". rrf RS232_Dato,F registro de lectura. call Retardo_100micros periodo ms tarde. decfsz RS232_ContadorBits,F goto RS232_LeeBit er el siguiente. call Retardo_200micros 2 bits de Stop. movf RS232_Dato,W return ; Nmero de bits a recibir

; Lee la entrada y espera a que ; No, pues espera el nivel bajo. ; El primer bit debe leerlo un t ; vez y media el periodo de tran ; Ahora lee el p ; Realmente es cero? ; No, pues cambi ; Introduce el bit en el ; Los siguientes bits los lee un ; Comprueba que es el ltimo bit. ; Si no es el ltimo bit pasa a le ; Espera un tiempo igual al los ; El resultado en el registro W.

; Subrutinas "RS232_EnviaDato" y "RS232_EnviaNmero" -----------------------------------; ; El microcontrolador enva un dato por la lnea de salida comenzando por el bit de menor ; peso. En dato enviado ser el que le llegue a travs del registro de trabajo W. ; 1. Enva un "0" durante un tiempo igual al periodo de la velocidad de transmi sin. ; Este es el bit de "Start". ; 2. Enva el bit correspondiente: ; - Si va a enviar un "0" permanece en bajo durante el periodo cor respondiente. ; - Si va a escribir un "1" permanece en alto durante el periodo c orrespondiente. ; 3. Enva dos bits "1" durante un tiempo igual al perodo de la velocidad de ; transmisin cada uno. Estos son los dos bits de Stop. ; ; Entrada: En (W) el dato a enviar. RS232_EnviaNumero n nmero. ; Enva el cdigo ASCII de u

addlw '0' ASCII sumndole el ASCII del 0. RS232_EnviaDato movwf RS232_Dato l byte a transmitir. movlw d'8' s a transmitir. movwf RS232_ContadorBits bcf RS232_Salida call Retardo_100micros RS232_EnviaBit s. rrf RS232_Dato,F iere enviar al Carry para btfss STATUS,C "1" el bit a transmitir? goto RS232_EnviaCero RS232_EnviaUno bsf RS232_Salida goto RS232_FinEnviaBit RS232_EnviaCero bcf RS232_Salida RS232_FinEnviaBit call Retardo_100micros alto o bajo. decfsz RS232_ContadorBits,F goto RS232_EnviaBit la operacin. bsf RS232_Salida call Retardo_200micros return ; ; ; ; ;

; Lo pasa a cdigo ; Guarda el contenido de ; Este es el nmero de bit ; Bit de Start. ; Comienza a enviar dato ; Lleva el bit que se qu ; deducir su valor. Es un ; No, pues enva un "0". ; Transmite un "1". ; Transmite un "0". ; Este es el tiempo que estar en ; Comprueba que es el ltimo bit. ; Como no es el ltimo bit repite ; Enva dos bits de Stop.

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

You might also like