Está en la página 1de 24

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

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


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
Universidad de Manizales, enero junio / 2004

2
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
CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91
3
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

Universidad de Manizales, enero junio / 2004

4

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:

Seg 416
2400
1


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
CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91
5
+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.

Universidad de Manizales, enero junio / 2004

6


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

b
N
V
T
1
=

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

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

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

Universidad de Manizales, enero junio / 2004

8
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

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


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.


Universidad de Manizales, enero junio / 2004

10
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) Rutinas de Backup y Reinicio
2) Muestreo
3) Transmisin
4) 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.

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

12
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

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

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


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
Universidad de Manizales, enero junio / 2004

14
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:
CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91
15
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
Universidad de Manizales, enero junio / 2004

16

; 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 d'127' ; dato necesario para un intervalo de
muestreo de 138us

;**********************************************
;* DECLARACION DE BANDERAS PROPOSITO GENERAL *
;**********************************************

SalidaBits equ 0x00 ; Bit a travs del cual se efecta la transmisin
EntradaBits equ 0x00 ; Bit a travs del cual se efecta la recepcin.
Activo equ 0x05 ; una seal que permita verificar que el sistema
esta funcionando
; es este caso se tiene un led conectado

;**************************************************
;* DECLARACION DE BANDERAS PARA EL PROTOCOLO 232 *
;**************************************************

InicioTrans equ 0x00 ; bandera que indica que se empieza a transmitir.
MemoBitAnt equ 0x01 ; Guarda el ultimo BIT recibido
Transmitiendo equ 0x02 ; indica que hay una transmisin en proceso
CaracterListo equ 0x03 ; se recibi ya un carcter valido

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

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91
17
Wtemp equ 0x0c ; Copia del aculumador
STATUStemp equ 0x0D ; Copia del registro STATUS
PCLATHTemp equ 0x0E ; Copia de los datos del PCLATH
Palabra232 equ 0x0F ; Aqu se renen todas las banderas del protocolo
DatosTx equ 0x11 ; Configuracin y estado de la TX
ContadorTx equ 0x12 ; Coordina la deteccin del ultimo bit
TempoTx equ 0x13 ; Contador de los tres muestreos
UltimoCar equ 0x14 ; Ultimo carcter recibido
DatosRx equ 0x15 ; Configuracin y estado de la Rx
CuentaByte equ 0x16 ; Lleva la cuenta de los 8 bits que llegan
EstadoRx equ 0x17 ; Controla el estado de la recepcin
Promedio equ 0x18 ; Ayuda a prevenir falsos bits
Microseg equ 0x19 ; Cuenta los intervalos de 138useg (muestreo)
Milis equ 0x20 ; 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 ; Posmem de las rutinas de interrupcin

INTERRUPT

;--------------------------------------------------
;Se salvan los valores de los registros del sistema
;--------------------------------------------------
GuardaVector
movwf Wtemp
swapf STATUS, W
movwf STATUStemp
movf PCLATH, W
movwf PCLATHTemp
Universidad de Manizales, enero junio / 2004

18
;--------------------------------------------------
;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

CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91
19
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
Universidad de Manizales, enero junio / 2004

20
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 EstadoRx, F ; esperar otro ciclo
goto END_INTERRUPT

RecibirBit
rrf Promedio, F
rrf Promedio, F
rrf DatosRx, F ; se captura el bit actual
incf EstadoRx, F ; ir a "DetectaUltimoBit" a ver
; si es el ultimo
goto END_INTERRUPT

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
CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91
21
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 ; Recupera los registros
movwf PCLATH
swapf STATUStemp, W
movwf STATUS
swapf Wtemp, F
swapf Wtemp, W
RETFIE

;*****************************
;* FIN DE INTERRUPCION *
;*****************************


;*****************************
;* 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
Universidad de Manizales, enero junio / 2004

22
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
;---------------------------------------------------
CENTRO DE INVESTIGACIONES Y DESARROLLO FACULTAD DE INGENIERA

Implementacin de una interfaz - Ramrez Delgado Wilder (2003) pp 69-91
23
; 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
Universidad de Manizales, enero junio / 2004

24
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. Architecture,
implementation & Programming. Singapur, 1992, McGraw Hill.

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

www.maxim.com

www.microchip.com

También podría gustarte