Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pic16f84 Teoria y Practica de Comunicacion Con PC Rs232-c
Pic16f84 Teoria y Practica de Comunicacion Con PC Rs232-c
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
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
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
+3 y +25 voltios
En la figura 2 se observan los diferentes valores de voltajes para este
estndar
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
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
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
11
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
13
15
;**********************************************
;* DECLARACION DE BANDERAS PROPOSITO GENERAL *
;**********************************************
SalidaBits equ
EntradaBits equ
Activo
equ
esta funcionando
;**************************************************
;* DECLARACION DE BANDERAS PARA EL PROTOCOLO 232 *
;**************************************************
InicioTrans equ
MemoBitAnt equ
Transmitiendo
CaracterListo
0x00
0x01
equ
equ
;*****************************
;* DECLARACION DE REGISTROS *
;*****************************
16
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
;***********************************
;* DECLARACION DE otros REGISTROS *
;***********************************
RespuestaMicro
equ
;***********************************
;*
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
17
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
19
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
EstadoRx, F
; esperar otro ciclo
END_INTERRUPT
RecibirBit
rrf
rrf
rrf
incf
Promedio, F
Promedio, F
DatosRx, F
EstadoRx, F
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
20
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
;*****************************
;*****************************
;* 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
movwf FSR
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
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
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,
24