Sei sulla pagina 1di 24

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

IMPLEMENTACIN DE UNA INTERFAZ DE COMUNICACIN SERIAL VIRTUAL EN UN MICROCONTROLADOR PIC 16F84

Recibido: noviembre 18 de 2003 Revisado: Noviembre 25 de 2003 Aceptado: Diciembre 10 de 2003 WILDER RAMREZ DELGADO
1

Resumen En el presente trabajo se muestra la manera de como agregar posibilidades de comunicacin serial a un microcontrolador Pic16f84. Inicialmente se describen, para una comunicacin serial estndar, los intervalos de muestreo necesarios para obtener los caracteres transmitidos o recibidos, basndose en este intervalo de tiempo se configura la interrupcin del timer 0 de micro para ejecutar la rutina de supervisin peridicamente en asocio con todo el cdigo necesario para la implementacin del protocolo RS232, el nico hardware adicional es una interfaz MAX 232 cuya funcin es acondicionar los niveles de voltaje pero no toma ningn tipo de papel activo dentro de la transmisin Abstract This work shows the way of adding possibilities of serial communication to a microcontroller Pic16f84. At the begining, sampling intervals are described for a standard serial communication to obtain the transmitted and received characters. Based on these intervals, the timer0 interruption of the microcontroller is configured to execute the supervision routine periodically with the code for implementing of protocol RS232, the only additional hardware is an interface MAX232 whose function is to prepare the voltage levels, but it does not take any type from active function inside the transmission.

Introduccin
1

Docente Facultad de Ingeniera, Universidad de Manizales. E-mail: wramirez@um.umanizales.edu.co

VENTANA INFORMTICA No. 11 Universidad de Manizales, enero junio / 2004 pp 69-91

Universidad de Manizales, enero junio / 2004

El intercambio de informacin entre dispositivos electrnicos es un aspecto que da a da toma mayor trascendencia, ya que, entre otras cosas, permite crear aplicaciones muy robustas con grandes prestaciones, basadas en mdulos independientes con funciones propias muy especializadas, trabajando en conjunto. En los sistemas embebidos actuales se tienen dispositivos con grandes prestaciones que pueden llegar, inclusive a permitir supervisin y monitoreo de cualquier tipo de seal desde cualquier lugar del mundo utilizando la red TCP/IP Existen muchas maneras de clasificar las comunicaciones basada cada una en diferentes aspectos, como son velocidades, tipos de medio, entre otros; desde un punto de vista muy general se puede clasificar el intercambio de informacin entre equipos, en dos tipos diferentes: Las comunicaciones paralelas y las comunicaciones seriales. Teniendo en cuenta que la informacin a transmitir normalmente est contenida en bytes o palabras, cuando se establece una comunicacin paralela entre dos equipos, se llevan todos los bits de este byte o palabra al mismo tiempo, esto redunda en transferencia de informacin a grandes velocidades pero, se tiene como condicin, que la interfaz fsica debe tener un medio de transferencia de datos por cada bit de los datos a transmitir, normalmente se tienen interfaces de 8 y 16 bits, esta caracterstica de la transmisin paralela hace que sea muy utilizada para intercambio de informacin entre equipos que estn muy cerca (p. Ej. Impresora, scanner), pero hace muy difcil su implementacin cuando las distancias aumentan, tanto desde el punto de vista econmico debido a el nmero tan grande de conductores, como desde el punto de vista fsico al aumentar de manera directa efectos capacitivos y de interferencias parsitas entre los diferentes conductores; otro aspecto a tener en cuenta es que se deben agregar mas conductores al enlace para efectos de sincronizacin incrementando aun ms las limitantes mencionadas Otra opcin para intercambio de informacin son las interfaces seriales, en las cuales la informacin es transmitida bit a bit sobre una sola lnea de comunicacin, esta tcnica es mucho ms lenta que los enlaces paralelos, pero tiene la gran ventaja que nicamente se necesitan dos medios de comunicacin, uno para enviar informacin (TX) y otro para recibir informacin (RX), una de las ventajas de tener nicamente dos lneas, adems de la gran reduccin de costos, es que para aumentar las distancias simplemente se deben modificar las tcnicas de transmisin, por ejemplo se pueden utilizar mdems o algn otro tipo de tcnica para manejo de datos logrando alcanzar mayores distancias, sin embargo en el fondo se tiene que en la comunicacin simplemente se est llevando de un extremo al otro un bit, independiente de la manera en que sea transportado Debido a esto las transmisiones seriales han tenido gran aceptacin entre los fabricantes de sistemas electrnicos, razn por la cual se vio la necesidad de 2

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

crear un estndar que unificara este tipo de protocolo, este estndar fue desarrollado y publicado por la Electronic Industries Association EIA y se denomin como la recomendacin RS-232C, fue diseada inicialmente para realizar conexiones entre terminales y mdems, aunque hoy en da sea utilizada en multitud de aplicaciones, es comn encontrar equipos electrnicos que incluyen interfaces seriales bajo este estndar. Debido a esto es importante al desarrollar software para aplicaciones embebidas, tener en cuenta que se hace casi indispensable tener previstas las opciones de comunicacin con otros dispositivos, ya sean de diseo propio o de terceros,

Estndar RS-232c
Existen dos tipos de comunicacin serial, la asincrnica y la sincrnica, estos trminos se refieren a la existencia o no de una lnea adicional que lleve seales que sincronicen todo el sistema, cuando la lnea existe, se habla de comunicaciones Sincrnicas; cuando no existe lnea alguna y se tiene solo la lnea de datos, se habla de comunicaciones Asncronas, es muy importante tener en cuenta que as no exista un camino especfico de pulsos de sincrona, de todas maneras existen seales que ayudan a coordinar el intercambio de informacin entre los dispositivos. Para el caso del presente trabajo se centra en los sistemas asincrnicos, buscando dar una descripcin clara acerca del funcionamiento y las reglas que rigen este tipo de protocolo de comunicaciones. La sincronizacin de los datos en una transmisin serial asncrona, se logra teniendo el ancho de cada bit, como un valor constante, el receptor solo debe leer los bits entrantes a intervalos fijos de tiempo, y con esto obtendr la informacin adecuada, la lnea de transmisin normalmente debe encontrase un valor de voltaje alto (IDLE). Cuando se inicia la transmisin se debe enviar un bit inicial (en realidad se enva un 0), llamado el bit de arranque o StarBit, despus de recibir este bit se procede a la recepcin del resto de bits de la palabra entrante, al cabo de dicha operacin el transmisor enva 1 o 2 Bits de Parada o Stop bits, que le indican la finalizacin de la transmisin del byte, y prepara el sistema para la recepcin del prximo carcter. En la figura 1 se observa la estructura de un byte transfirindose serialmente

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

Universidad de Manizales, enero junio / 2004

Figura 1. Comunicacin Serial, Ejemplo de Transmisin Se tienen entonces los primeros parmetros que se deben tener en cuenta al configurar un enlace serial, el primer valor importante es el ancho de cada bit, este valor se obtiene al fijar la velocidad de transmisin, son valores normales 1200 bps, 2400 bps, 9600 bps, etc. Suponiendo una velocidad de 2400 bps se tiene que la duracin de cada pulso es de:

1 416 Seg 2400


Otros dos parmetro importantes son el nmero de bits de datos (normalmente se habla de valores de 7 u 8 bits) y el nmero de bits de parada (1 o 2), se tienen otros valores que pueden configurarse como son bits de paridad y control de flujo, entre otros, que brindan cierto tipo de correccin de errores, pero que no son obligatorios.

MAX232
Cuando se habla de dispositivos ubicados muy cerca, es posible manejar seales con niveles de voltaje reducido, normalmente se manejan niveles de voltaje TTL, sin embargo cuando las distancias aumentan estos voltajes sufren atenuaciones considerables, para solucionar este problema la norma RS-232 fija valores de voltaje ms grandes que tienen menos problemas de atenuacin y alcanzan distancias considerablemente mayores, para RS-232 se tiene que: 1. En el transmisor un 1 lgico es un valor de voltajes comprendido entre -15 y -5 voltios 2. En el transmisor un 0 lgico es un valor de voltajes comprendido entre +5 y +15 voltios 3. En el receptor un 1 lgico es un valor de voltajes comprendido entre 25 y -3 voltios 4. En el receptor un 0 lgico es un valor de voltajes comprendido entre 4

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

+3 y +25 voltios En la figura 2 se observan los diferentes valores de voltajes para este estndar

Figura 2. Niveles de voltaje RS-232 Se observa que para implementar enlaces seriales se debe contar con fuentes de alimentacin duales, que brinden los niveles de voltaje negativos que se necesitan, como se mencion anteriormente RS-232 se diseo inicialmente para enlazar PCs y mdems, en estos equipos los voltajes negativos son necesarios para el funcionamiento de diferentes dispositivos internos, y se utilizaban adems para el enlace de comunicaciones sin problemas, sin embargo cuando se disean aplicaciones embebidas el factor espacio es vital y la implementacin de circuitos que generen los voltajes exigidos por la norma se hace bastante complicada, para solucionar este problema aparecen circuitos que permiten hacer la conversin de voltajes TTL a voltajes RS232 teniendo como nica fuente de alimentacin los 5 voltios que alimentan todo el circuito, un ejemplo de este tipo de dispositivos son los chip MAX232 fabricado por MAXIM, el funcionamiento interno de este circuito no es objetivo del presente trabajo, pero a manera general el MAX232 est compuesto por un elevador de voltaje el cual se encarga de multiplicar los niveles TTL (0-5) obtener los voltajes RS232 (+/- 12), basndose en un par de condensadores externos Una aplicacin tpica es mostrada en la figura 3, se conecta un dispositivo emisor (en este caso un microcontrolador) con un dispositivo receptor (un computador). Es importante tener en cuenta que utilizando la configuracin adecuada del protocolo es posible tener comunicacin bidireccional.

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

Universidad de Manizales, enero junio / 2004

Figura 3. Circuito de comunicacin entre Microcontrolador y PC

Desarrollo de la Aplicacin
El presente software permite la comunicacin de dispositivos con el Microcontrolador 16f84 utilizando el protocolo de comunicacin serial RS232, es importante anotar que este microcontrolador no tiene internamente ningn componente de hardware (UART) que le permita tener estas caractersticas de comunicacin, debido a esto es necesario desarrollar el software que permita establecer la comunicacin serial, asncrona con 8 bit de datos, sin paridad; es por esta razn que este software esta basado en el manejo de la interrupcin del TMR0 la cual es generada 3 veces en el intervalo correspondiente a cada bit durante la transmisin, podemos definir el periodo de disparo del TMR0 como
1 T= V Nb

Donde T= periodo de disparo del TMR0 V= velocidad de transmisin en baudios Nb = Nmero de muestreos de cada bit Para V=2400 bps se tiene T=1/2400/3 = 138 s (si se toman tres muestras por bit) Se debe entonces configurar el TMR0 para interrumpirse cada 138 s, para realizar variaciones de la velocidad de transmisin es posible cambiar el valor T o modificar el valor del cristal de oscilacin externo del PIC, (para el funcionamiento propuesto se maneja un cristal de 4 Mhz) si duplica el valor del cristal (8Mhz) se duplica la taza de transmisin (4800 Mhz), para el desarrollo del presente prototipo se implement una taza de transmisin de 2400 baudios (cristal 4Mhz) por consideraciones de estabilidad y consumo de potencia

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Como se mencion anteriormente, cuando se tienen comunicaciones asncronas, se manejan pulsos de seal con intervalos de duracin constantes, debido a esto la funcin bsica del software es la lectura del puerto de recepcin a intervalos constantes y exactos de tiempo. Teniendo en cuenta lo anterior, existen varias maneras de realizar el enlace, la primera y la mas obvia es configurar un microcontrolador que contenga Uart lo cual no es el objetivo de este trabajo; una segunda manera es utilizando rutinas de retardo y realizar escaneos sobre los puertos, este tipo de estrategia presenta una gran simplicidad de implementacin, pero se tiene la desventaja de no manejar altos niveles de exactitud. Una tercera manera de realizar la comunicacin es utilizando rutinas de interrupcin generadas desde un timer del microcontrolador, en estas rutinas se encuentran todas las funciones necesarias para cumplir con las exigencias del protocolo, esta tercera forma de realizar el enlace fue la seleccionada para el desarrollo del presente montaje, debido a que, desde el punto de vista didctico pretende aclarar conceptos tericos que van desde la misma implementacin del protocolo hasta manejo de conceptos en lo referente a timers y microcontroladores; tambin es importante aclarar que en algunas secciones del programa se sacrific en cierta medida la eficiencia de cdigo en bsqueda de la facilidad de comprensin del mismo.

Uart.asm
Para obtener estos intervalos de 138 s es necesario llevar al timer el nmero de ciclos que debe manejar para esto se debe tener en cuenta que. NroCiclos = 256+T1+T2-F Donde NroCiclos: Valor necesario para interrumpirse cada 138s T1= 2, Ciclos, durante los cuales el timer es deshabilitado al estar reinicindose T2= 7, Valor del timer al momento de la recarga F= 138s, frecuencia deseada Entonces NroCiclos = 256+2+7-138=127 Se tiene entonces que configurando el timer con un valor de 127, se generan interrupciones constantes cada 138 s

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

Universidad de Manizales, enero junio / 2004

El funcionamiento bsico del programa se centra en dos rutinas y un registro de control, las rutinas son el MAIN o programa principal y la rutina de la Interrupcin o INTERRUPT, el registro de control es Palabra232, estos tres componentes trabajan de manera coordenada en el manejo de la transmisin, la recepcin y los indicadores de funcionamiento El registro Palabra232 maneja 4 bits que indican 4 funciones bsicas, estos bits se observan en la Figura 4

Figura 4. Palabra232 Donde: Iniciotrans: Es el bit que indica que se puede dar inicio a la transmisin MemobitAnt: Utilizado para tener la informacin del ltimo bit recibido Transmitiendo: Le indica a la rutina de la interrupcin que se est llevando a cabo una Transmisin CaracterListo: Indica al programa que ya se recibi un carcter valido Estos bits se unificaron en un solo registro, pero pudieron tambin haberse trabajado desde registros individuales pasibilidad que no afecta en gran medida el desempeo del sistema pero no es muy eficiente desde el punto de vista del manejo de recursos. Cada bit es modificado en las diferentes subrutinas, indicndole a cada una de las otras el estado actual de la comunicacin y permitindole a las rutinas principales (MAIN, INTERRUPT) la seleccin de la subrutina adecuada. La rutina principal MAIN, as como los procesos de inicializacin del microcontrolador, se muestran en la Figura 5, esta rutina bsicamente realiza dos funciones: detectar que ya se haya recibido un carcter valido para dar la respuesta programada y manejar un led externo que oscila indicando el funcionamiento del sistema

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Figura 5. Rutinas MAIN e inicio Las subrutinas principales de MAIN son PreparaResp y EnviaResp, en la primera el usuario define cual es el dato que va a transmitir, en este caso y para fines de prueba del sistema, se enva el carcter recibido en mayscula, en esta rutina se podra manejar cualquier tipo de necesidad especifica del usuario, una vez listo el carcter a transmitir se verifica que no exista una transmisin en proceso y se configura el bit iniciotrans del registro Palabra232 para dar inicio a la transmisin, ver figura 6.

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

Universidad de Manizales, enero junio / 2004

Figura 6. Subrutinas de MAIN La rutina INTERRUPT, es realizada cada 130s independiente del MAIN, en enlace entre estas dos rutinas se realiza desde el registro Palabra232 de all la importancia de este registro, esta rutina bsicamente esta conformada por 4 etapas (ver figura 7) las cuales son: 1) 2) 3) 4) Rutinas de Backup y Reinicio Muestreo Transmisin Recepcin

Las rutinas de Backup y recarga buscan almacenar los valores de los registros de sistema (W, STATUS, PCLATH) durante la atencin a la interrupcin, para despus ser reubicados y garantizar el adecuado funcionamiento del programa en general; los datos son almacenados en la subrutina GuardaVector y son restaurados en la subrutina RecuperaVector al final de la rutina INTERRUPT. La rutina de muestreo busca garantizar que los datos recibidos no sean productos de ruidos en el canal de comunicacin, por tal razn cada vez que se tiene la necesidad de capturar un bit se toman 3 muestras sucesivas, descartando de esa manera posibles oscilaciones de la lnea. Una vez terminado el proceso de muestreo se debe detectar si se est transmitiendo, si se debe iniciar la transmisin o si se va a realizar la recepcin; esta decisin se toma en la rutina transmisin, analizando el estado de los bits Iniciotrans y transmitiendo del Registro Palabra232. El proceso de transmisin esta conformado por 3 subrutinas estas son IniciaTransmision, EnviarBit y FinTransmision en la figura 7 se observa la estructura de estas tres subrutinas. El proceso se dispara en la subrutina IniciaTransmision donde en primera instancia se inicializa la variable ContadorTx con el valor 10, este valor se debe a que son 8 bits de datos 1 bit de inicio y un bit de parada, a continuacin se inicializa la bandera Transmitiendo para indicarle al resto de subrutinas que se dio inicio a la transmisin, a continuacin y debido a que la interrupcin esta configurada para activarse cada 138 s, es decir un tercio del periodo de cada bit, (esto para tomar tres muestras de cada dato recibido) se maneja la variable TempoTx, la cual permite esperar 3 interrupciones para enviar el siguiente bit. Todo el proceso se ejecuta hasta que se envan los 10 bits, a continuacin se limpia la bandera transmisin y finaliza el proceso de envo de datos.
10

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

11

Universidad de Manizales, enero junio / 2004

Figura 7. INTERRUPT La seccin de recepcin est conformada por 7 subrutinas las cuales son 1. DeteccionInicio 2. BitInicioOk 3. IniciaRecepcion 4. Espera 5. RecibirBit 6. DetectaUltimoBit 7. StopBitOk

12

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Figura 8. Rutinas de Recepcin La subrutina BitInicioOk se ejecuta 138 s despus para verificar que todava est presente el StartBit, si no est presente es porque existi un falso disparo y se procede a reiniciar el proceso de recepcin llevando el
Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

13

Universidad de Manizales, enero junio / 2004

valor de EstadoRx a cero, en caso de que aun este presente el StartBit se procede a iniciar el proceso de recepcin a travs de la rutina IniciaRecepcion, cuya funcin es preparar todo para recibir 8 bits a travs de la variable CuentaByte, luego incrementa EstadoRx y finaliza la interrupcin, observe que desde que dio inicio el proceso de recepcin se han utilizado dos ciclos, es necesario utilizar un tercer retardo, dado por la rutina Espera con la cual se completan los tres ciclos, en la figura 9 se observan estas subrutinas.

Figura 9. Subrutinas de Recepcin I Las rutinas recibirBit y DetectaUltimoBit (ver figura 10) se encargan de recibir el bit que llega y analizar si se tiene un bit intermedio o es el ltimo bit, si se da el primer caso se retorna a las rutinas anteriores para seguir capturando ms bits. Si se tiene que es el ltimo bit se espera una interrupcin ms para detectar el bit de parada utilizando la rutina StopBitOk, en esta se verifica que no exista un falso fin, si todo est correcto se recupera el carcter recibido y se almacena en las posiciones de memoria correspondientes, adems se esto a travs del registro Palabra232 se indica que ya se tiene un carcter listo llevando a uno el valor de la bandera correspondiente Es importante aclarar que las 7 rutinas mencionadas se ejecutan de de manera independiente en cada interrupcin y siguiendo el orden dado por EstadoRx, en cada interrupcin se ejecutan dos rutinas mas:
14

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

END_INTERRUPT y RecuperaVector, la primera almacena los valores de banderas para la prxima interrupcin y actualiza el valor para el led indicador, la rutina RecuperaVector restaura los valores almacenados en GuardaVector. Estos valores son analizados por la rutina MAIN donde se toma la decisin sobre la respuesta que debe ser generada desde el Microcontrolador, el listado completo con todas las subrutinas se muestra a continuacin, este fue compilado utilizando las herramientas del Mplab.

Figura 10. Subrutinas de Recepcin II Listado del Programa


Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

15

Universidad de Manizales, enero junio / 2004

; Implementacin de una UART virtual ; Wilder Ramrez D. ; Universidad de Manizales ; wramirez@um.umanizales.edu.co LIST P=16F84 INCLUDE "P16F84.INC" ; Librera estndar de declaraciones para 16F64 ; Configuracin Inicial: Code Protection=off ; WathDog: no, Power On Timer=yes, Oscilador: cristal __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;***************************** ;* DECLARACION DE CONSTANTES * ;***************************** DEFINET equ muestreo de 138us d'127' ; dato necesario para un intervalo de

;********************************************** ;* DECLARACION DE BANDERAS PROPOSITO GENERAL * ;********************************************** SalidaBits equ EntradaBits equ Activo equ esta funcionando 0x00 ; Bit a travs del cual se efecta la transmisin 0x00 ; Bit a travs del cual se efecta la recepcin. 0x05 ; una seal que permita verificar que el sistema ; es este caso se tiene un led conectado ;************************************************** ;* DECLARACION DE BANDERAS PARA EL PROTOCOLO 232 * ;************************************************** InicioTrans equ MemoBitAnt equ Transmitiendo CaracterListo 0x00 0x01 equ equ ; bandera que indica que se empieza a transmitir. ; Guarda el ultimo BIT recibido 0x02 ; indica que hay una transmisin en proceso 0x03 ; se recibi ya un carcter valido

;***************************** ;* DECLARACION DE REGISTROS * ;*****************************


16

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Wtemp STATUStemp PCLATHTemp Palabra232 equ DatosTx ContadorTx equ TempoTx UltimoCar equ DatosRx CuentaByte equ EstadoRx equ Promedio equ Microseg equ Milis equ

equ equ equ 0x0F equ 0x12 equ 0x14 equ 0x16 0x17 0x18 0x19 0x20

0x0c ; Copia del aculumador 0x0D ; Copia del registro STATUS 0x0E ; Copia de los datos del PCLATH ; Aqu se renen todas las banderas del protocolo 0x11 ; Configuracin y estado de la TX ; Coordina la deteccin del ultimo bit 0x13 ; Contador de los tres muestreos ; Ultimo carcter recibido 0x15 ; Configuracin y estado de la Rx ; Lleva la cuenta de los 8 bits que llegan ; Controla el estado de la recepcin ; Ayuda a prevenir falsos bits ; Cuenta los intervalos de 138useg (muestreo) ; Cuenta los intervalos de 0.01 sec (Indicador)

;*********************************** ;* DECLARACION DE otros REGISTROS * ;*********************************** RespuestaMicro equ 0x21 ; carcter a transmitir

;*********************************** ;* INICIO CODIGO * ;*********************************** ORG 0x0000 ; Primera operacin: goto PIC_POWER_ON ; salto a la rutina de arranque ;***************************** ;* INTERRUPCION * ;***************************** ORG 0x0004 INTERRUPT ;-------------------------------------------------;Se salvan los valores de los registros del sistema ;-------------------------------------------------GuardaVector movwf Wtemp swapf STATUS, W movwf STATUStemp movf PCLATH, W movwf PCLATHTemp
Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

; Posmem de las rutinas de interrupcin

17

Universidad de Manizales, enero junio / 2004

;-------------------------------------------------;Se reinicia el conteo ;-------------------------------------------------movlw DEFINET ; Recargar el TMR0 para otros movwf TMR0 ; 138 microsegundos bcf INTCON, T0IF ; Borrar banderas de interrupcin ;---------------------------------------------------------------;Tomar tres muestras de los datos de entrada para descartar oscilacin ;---------------------------------------------------------------MuestreaBit clrf Promedio btfsc PORTB, EntradaBits incf Promedio, F btfsc PORTB, EntradaBits incf Promedio, F btfsc PORTB, EntradaBits incf Promedio, F ; En esta bandera se almacena el promedio de ; los datos de entrada ;---------------------------------------------------------------; Rutinas de transmisin ;---------------------------------------------------------------transmisin btfsc Palabra232, InicioTrans ; Si la bandera es verdadera goto IniciaTransmision ; inicie la transmison btfss Palabra232, Transmitiendo ; si no se est en proceso de goto recepcin ; transmisin ir a recepcin. decfsz TempoTx, F ; Transmisin en proceso, si no estan goto recepcin ; las tres muestras, ir a recepcin ; si ya estan enviar el siguiente bit ;---------------------------------------------------------------;enviar el siguiente bit ;---------------------------------------------------------------EnviarBit movf DatosTx, W ; Lleva el valor de DatoTx,0 a SalidaBits, xorwf PORTA, W andlw b'00000001' xorwf PORTA, F bsf STATUS, C ; C=1, al rotar DatosRx ingresa como el rrf DatosTx, F ; Bit de parada movlw 0x03 ; Se envia un bit cada tres llamados movwf TempoTx ; a la interrupcin decfsz ContadorTx, F ; ya se enviaron los 10 bits? goto recepcin ; no, ir a recepcin; si, finalizar TX
18

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

FinTransmision bcf Palabra232, Transmitiendo ; fin de la transmisin goto recepcin ; ir a recibir otro bit ;---------------------------------------------------------------;Transmitir un dato ;---------------------------------------------------------------IniciaTransmision movlw d'10' ; se tienen que enviar diez bits: movwf ContadorTx ; 8 bits + 1 stop bit + 1 bit para separacin bsf Palabra232, Transmitiendo ; Activar transmisin bcf Palabra232, InicioTrans ; desactivar Iniciar transmisin movlw 0x03 ; hay que contar tres interrupciones movwf TempoTx bcf PORTA, SalidaBits ; Enviar start bit ;---------------------------------------------------------------;Rutinas de recepcin ;---------------------------------------------------------------recepcin clrf PCLATH ; Segun el valor que traiga el registro movf EstadoRx, W ; EstadoRx de las otras rutinas se selecciona addwf PCL, F ; la rutina actual goto DeteccionInicio ; EstadoRx=0, Verfificar si hay Start Bit goto BitInicioOk ; EstadoRx=1, Comprobar que no sea falso start goto Iniciarecepcion ; EstadoRx=2, Empieza a capturar el Byte goto Espera ; EstadoRx=3, Espera la prxima INT goto RecibirBit ; EstadoRx=4, Capturar el bit que sigue goto DetectaUltimoBit ; EstadoRx=5, Ver si ya es el bit 7 goto Espera ; EstadoRx=6, Espera la prxima INT goto StopBitOk ; EstadoRx=7, Recupera el byte completo DeteccionInicio btfss Palabra232, MemoBitAnt ; la linea estaba en 1? goto END_INTERRUPT ; no, entonces no es Start Bit btfsc Promedio, 1 ; si, pero, el dato actual es 0? goto END_INTERRUPT ; no, falso arranque, esperar a otra INT incf EstadoRx, F ; si, entonces si es el Start bit, comenzar goto END_INTERRUPT ; recepcin, esperar el prximo ciclo BitInicioOk incf EstadoRx, F ; entr otro bit? no, entonces fue un
19

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

Universidad de Manizales, enero junio / 2004

btfsc Promedio, 1 ; falso arranque, empezar de nuevo clrf EstadoRx ; si, empezar recepcin goto END_INTERRUPT Iniciarecepcion movlw 0x08 ; hay que capturar un byte movwf CuentaByte incf EstadoRx, F ; EstadoRx = 3 goto END_INTERRUPT Espera incf goto RecibirBit rrf rrf rrf incf goto EstadoRx, F ; esperar otro ciclo END_INTERRUPT Promedio, F Promedio, F DatosRx, F EstadoRx, F END_INTERRUPT

; se captura el bit actual ; ir a "DetectaUltimoBit" a ver ; si es el ultimo

DetectaUltimoBit movlw 0x06 ; sin es el ultimo espera la ultima vez decfsz CuentaByte, F ; cuantos bits van? movlw 0x03 ; todava faltan bits ir a leer otro movwf EstadoRx goto END_INTERRUPT StopBitOk clrf EstadoRx ; Inicializar registro para otra lectura btfss Promedio, 1 goto FalsoFin bsf Palabra232, CaracterListo ; Indica que se tiene el carcter movf DatosRx, W ; Salvar movwf UltimoCar goto END_INTERRUPT FalsoFin clrf EstadoRx ; empezar de nuevo ;---------------------------------------------------------------;Fin de Rutinas de recepcin ;---------------------------------------------------------------END_INTERRUPT
20

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

bcf Palabra232, MemoBitAnt ; salvar valores de las banderas btfsc Promedio, 1 ; para la prxima interrupcin bsf Palabra232, MemoBitAnt ; decfsz Microseg, F ; registros utilizados para el led goto RecuperaVector ; indicador movlw d'72' ; se decrementa durante 72 INT movwf Microseg ; aproximadamente 10 milisegundos incf Milis, F RecuperaVector movf PCLATHTemp, W movwf PCLATH swapf STATUStemp, W movwf STATUS swapf Wtemp, F swapf Wtemp, W RETFIE ;***************************** ;* FIN DE INTERRUPCION ;***************************** * ; Recupera los registros

;***************************** ;* INICIALIZAR REGISTROS * ;***************************** PIC_POWER_ON clrwdt ; No se usa el watch dog timer clrf INTCON ; ni el resto de las interrupciones bsf STATUS, RP0 ; configurar los puertos movlw b'00000000' movwf TRISA movlw b'00000001' movwf TRISB movlw b'00001000' ; Configurar las interrupciones movwf OPTION_REG bcf STATUS, RP0 clrf PORTB movlw b'00000001' ; La linea de comunicaiones debe movwf PORTA ; permanecer en 1 ;--------------------------------------------------; Borrar todas las posiciones de memoria ;--------------------------------------------------movlw 0x0C ; hay que borrar 50 posiciones
Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

21

Universidad de Manizales, enero junio / 2004

movwf FSR

; partiendo desde 0x0c

BorraMem clrf INDF incf FSR, F movlw 0x50 ; Ciclo repetido 50 veces subwf FSR, W btfss STATUS, C goto BorraMem ;--------------------------------------------------; Habilitar el TMR0 ;--------------------------------------------------clrf TMR0 bsf INTCON, T0IE ; Solo se habilita el TMR0 bsf INTCON, GIE ;***************************** ;* RUTINA PRINCIPAL ;***************************** MAIN clrf Milis EsperaLedActivo btfsc Palabra232, CaracterListo ; ya se tiene el carcter? call PreparaResp ; responder movlw d'50' subwf Milis, W ; si ya pasaron 500 milisegundos btfss STATUS, C ; cambiar el estado de led piloto goto EsperaLedActivo ; si no esperar (la variable Milis call CambiaPiloto ; se actualiza en las INT goto MAIN ;***************************** ;* FIN DE RUTINA PRINCIPAL * ;***************************** ;--------------------------------------------------; Parpadeo del led piloto ;--------------------------------------------------CambiaPiloto movlw b'00100000' ; Invertir el estado del xorwf PORTB, F ; Led Return ;--------------------------------------------------22

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

; Definir el dato que se va a responder ;--------------------------------------------------PreparaResp bcf UltimoCar,5 ;Convertir mayscula bcf Palabra232, CaracterListo call EnviaResp Return ;--------------------------------------------------; Enviar la respuesta ;--------------------------------------------------EnviaResp btfsc Palabra232, Transmitiendo ; esperar hasta que se detenga goto EnviaResp ; una posible transmisin movwf DatosTx ; Llevar al dato a transmitir ; al registro DatosTx bsf Palabra232, InicioTrans ; inicia transmisin Return END ;*********************************** ;* FIN CODIGO * ;***********************************

Perspectivas de Desarrollo
El circuito descrito anteriormente presenta una manera simple de realizar intercambio de informacin entre diferentes elementos y un microcontrolador 16F84, caracterstica muy importante y que debe ser tenida en cuenta en el momento de disear e implementar aplicaciones embebidas o cualquier otro tipo de aplicacin Este tipo de comunicacin es apenas el paso inicial en el desarrollo de aplicaciones que tengan posibilidades de comunicacin ms poderosas, si se quieren disear aplicaciones con caractersticas de comunicacin mucho ms robustas debe tenerse en cuenta, que como consecuencia de las tendencias actuales en el manejo de la informacin, esta ya no es un componente estrictamente local si no que debe tenerse la posibilidad de ser accedida desde cualquier lugar, caracterstica no debe ser ajena a las aplicaciones embebidas, las cuales deben encaminarse hacia la interconectividad a un nivel ms alto Protocolos como PPP y TCP/IP permiten la interconexin hacia redes de mucho mayor tamao, algunos elementos en el mercado permiten adicionar en aplicaciones basadas en microprocesadores y microcontroladores, la utilizacin de estos elementos o la implementacin directa de algunas
Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91

23

Universidad de Manizales, enero junio / 2004

caractersticas de estos protocolos permitirn disear aplicaciones que iran desde simple supervisin y monitoreo hasta sistemas muchos ms robustas como procesamiento distribuido, la implementacin de estos protocolos y su aplicacin prctica est actualmente en curso y ser presentado a la comunidad acadmica a travs de este medio ms adelante.

Bibliografa
BENTHAM, Jeremy. TCP/IP Lean, Web Servers For Embedded Systems, 2002, CMP Books DUQUE Edison, Curso Avanzado de microcontroladores pic, 1998, ed. CEKIT HINTZ, Kenneth y TABAK, Daniel. Microcontrollers. implementation & Programming. Singapur, 1992, McGraw Hill. Architecture,

LAVARELLO, Alejandro. Proyectos con Microcontroladores, Uruguay, e-mail: alejol@montevideo.com.uy www.maxim.com www.microchip.com

24

Potrebbero piacerti anche