Documente Academic
Documente Profesional
Documente Cultură
RS232
Por terminar.
Introduccin
En ocasiones es necesario que un sistema con microcontroladores
recoja informacin que luego ha de ser procesada, por ejemplo
temperaturas, potencias consumidas, etc. siendo el sistema de
recogida de informacin mas usual un PC. En otros casos puede ser
necesario controlar mediante un PC las entradas y salidas de un
dispositivo. Tambin puede utilizarse un PC para actualizar el
firmware de un dispositivo.
En cualquier caso la forma mas simple de comunicar un dispositivo
con microcontroladores con un PC es a travs del puerto serie
utilizando el estndar RS232 (EIA 232).
Los ordenadores de sobremesa o fijos actuales suelen contar con un
puerto serie si bien se tiende a que desaparezca y muchos equipos
nuevos ya no lo incorporan. Adems hace tiempo que no se incluye
en los ordenadores porttiles. A pesar de lo anterior todava sigue
siendo til.
En caso de no disponer de ningn puerto podemos utilizar un
conversor USB/RS232. Ver en Conversores USB/RS232.
Para realizar pruebas podemos simular un puerto serie en el PC, de
tal manera que creamos un puerto virtual al que pueden acceder los
programas exactamente igual como si fuese uno real. Ver en Puerto
serie virtual VSPD y COMPIM de Proteus.
El puerto serie es accesible mediante conectores, siendo el DB9
macho (de 9 patillas) el nico que an puede encontrarse en un PC
de sobremesa.
Patillaje del conector RS232 en el PC:
1.
CD
2.
RX
D
3.
TX
D
4.
DT
R
5.
GN
D
6.
DS
R
7.
RT
S
8.
CT
S
9.
RI
(Carrie
r
Detect)
Entrad
a
(Receiv
e Data)
Entrad
a
(Trans
mit
Data)
Salida
(Data
termin
al
Ready)
Salida
(Groun
d)
(Data
Set
Ready)
Entrad
a
(Reque
st To
Send)
Salida
(Clear
To
Send)
Entrad
a
(Ring
Indicat
or)
Entrad
a
5, GND, Masa.
La velocidad de transmisin es un dato importante, y es la cantidad
de informacin enviada por segundo. Se expresa en baudios (bits por
segundo) y en los puertos COM de un PC suele utilizarse 4800, 9600
baudios o mas.
Enviar datos en formato serie RS232 de forma asncrona (la mas
simple) es cuestin de hacer que una salida est a nivel alto o bajo
en el momento adecuado. Normalmente, cuando no se transmite, la
salida est a nivel alto (1), y cuando empieza el bit de inicio, esta
pasa a ser de nivel bajo. A 4800 baudios la duracin del bit debe ser
de 1/4800 = 208 microsegundos. 8 bits de datos siguen al bit de
inicio, cada uno de un periodo. Un nivel alto de ms de un periodo es
un bit de parada. Debe tenerse en cuenta que primero se mandan
los bits menos significativos o LSB (Least Significant Bit).
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
alto
serie
MOVWF
MSGPTR
MOVF
CALL
ADDLW
BTFSC
MSGPTR, W
MSGTXT
0
STATUS,Z
;
;
;
;
mueve el puntero a W
retorna el carcter ASCII
pone la bandera Zero a uno si W = 0
salta si el bit Zero no est a nivel
RETURN
CALL
OUTCH
; si llegamos al final, W = 0
; llama a la rutina de comunicacin
INCF
GOTO
MSGPTR, f
MSGLOOP
CALL
MIC4
bits de parada
RETURN
; 104 x 4 =
Rutina principal
Ahora tenemos casi todo el cdigo necesario para programar un PIC
que transmita el mensaje "Hola mundo". La rutina principal utiliza
NMSEC (ver Temporizacin) y puede ser como esta.
INICIO
salidas
BSF
MOVLW
STATUS,RP0
0
MOVWF
TRISA
MOVWF
TRISB
BCF
STATUS,RP0
BSF
PORTA,0
Lnea en reposo.
MOVLW
0xC8
CALL
NMSEC
del encendido
MOVLW
0
CALL
OUTMSG
ENDLESS
GOTO
ENDLESS
infinito
en el puerto A
y en el puerto B
Activa el banco de memoria 0.
ponemos a nivel alto la salida serie.
Esquema electrnico
Programa completo
El programa puede verse aqu:
;*************************************************************
; Enviar mensajes ASCII del PIC al PC via RS232
;*************************************************************
;
; Programa original:
PIC_PC001.ASM
Fecha: 20/05/2005
; Revisin: 0.0
; Programa para PIC16F84A
; Velocidad de reloj: 4 MHz
; Instruccin: 1Mz=1 us
; Perro Guardin: OFF
; Tipo de Reloj: XT
; Proteccin de cdigo: OFF
; POR: ON
;
;*************************************************************
;
; DESCRIPCIN DEL PROGRAMA
;
; Este programa conecta al PIC con un PC a travs del puerto serie.
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;************************** Patillas *************************
;
___________
;
NC - RA,2 -|1
\__/ 18|- RA,1 - NC
;
NC - RA,3 -|2
17|- RA,0 - A RXD del PC a travs TTL-RS232
;
NC - RA,4 -|3 16F84A 16|- OSC1 - [XT]
; [PUL] - MCLR/ -|4
15|- OSC1 - [XT]
;
GND -|5
14|- Vcc
;
NC - RB,0 -|6
13|- RB,7 - nc
;
NC - RB,1 -|7
12|- RB,6 - nc
;
NC - RB,2 -|8
11|- RB,5 - nc
;
NC - RB,3 -|9________10|- RB,4 - nc
;
;**************************************************************
LIST P=PIC16F84A
; Pic a usar
#INCLUDE <P16F84A.INC>
microchip
; Lista de etiquetas de
;**************************************************************
; Fuses, configuran opciones externas de hardware para la programacion
__CONFIG
;**************************************************************
; Lista de variables para el uso del programa
;**************************************************************
MSGPTR
TXREG
BITS
CNTMSEC
retardo
EQU
EQU
EQU
EQU
0x0C
0x0D
0x0E
0x0F
;
;
;
;
;**************************************************************
ORG 0
;Comando que indica al Ensamblador
;la direccin de la memoria de programa
BSF
PORTA,0
; Ponemos la salida serie a nivel alto
(transmitir un 1)
NOP
; pasamos a probar si acabamos,
directamente
TDONE
DECFSZ BITS, f
; se decrementa BITS por el bit
transmitido y salta cuando llega a cero
GOTO
TXLOOP
; quedan ms bits, vamos a transmitir el
siguiente
MOVLW
0x34
; Retardo de 208 microsegundos 34h = 52d
CALL
MIC4
; 52 x 4 = 208 microsegundos para el
ltimo bit de datos que queda
BSF
PORTA,0
; Salida serie a nivel alto para el bit
de stop
MOVLW
0x68
; retardo de 104 x 4 microsegundos 68h =
104d
CALL
MIC4
; 104 x 4 = 416 microsegundos para dos
bits de parada
RETURN
;
;**************************************************************
;
NMSEC
MOVWF
CNTMSEC
; mueve W al registro msec
MSLOOP
MOVLW
0xF8
; cuenta 8 microsegundos por encima
CALL
MIC4
; 248 * 4 + 2 = 994
NOP
; realiza el resto del bucle
NOP
; aade 6 microsegundos
DECFSZ CNTMSEC, f
; decrementa el contador y salta cuando
llega a cero
GOTO
MSLOOP
; vuelve a realizar el bucle
RETURN
;
;**************************************************************
;
MIC4
ADDLW
0xFF
; substrae 1 de W
BTFSS
STATUS,Z
; salta cuando llega a cero
GOTO
MIC4
; si no llega a cero vuelve a restar
RETURN
;
;**************************************************************
;
MSGTXT
ADDWF
PCL, f
; sumamos offset al PCL
RETLW
0x48
; 'H' 72d
RETLW
0x6F
; 'o' 111d
RETLW
0x6C
; 'l' 108d
RETLW
0x61
; 'a' 97d
RETLW
0x20
; ' ' 32d
RETLW
0x6D
; 'm' 109d
RETLW
0x75
; 'u' 117d
RETLW
0x6E
; 'n' 110d
RETLW
0x64
; 'd' 100d
RETLW
0x6F
; 'o' 111d
RETLW
0x0D
; retorno de carro
RETLW
0x0A
; nueva lnea
RETLW
0x00
; indica el final del mensaje
;
;**************************************************************
;
END
TerminalTOB
Tambien se ha desarrollado un programa de terminal en Visual Basic,
que adems permite crear cdigo en ensamblador para enviar
mensajes, y que se encuentra aqu TerminalTOB.zip.
OSC2:
Salida
del
oscilador.
Conectada al otro terminal del
cristal y a otro condensador de 22
pF. El otro terminal de este
condensador tambin va a masa
(Para 4 MHz ambos condensadores
pueden ser de 15 a 33pF pero han
de ser iguales).
Dato de 8 bits.
Sin paridad.
Dos bits de final o Stop a nivel alto.
RS232.INC
Esta librera incluye subrutinas de control para el PIC16F84 para la
comunicacin RS232:
RS232_Inicializa: Configura la comunicacin RS232 para el PIC.
RS232_LeeDato: El PIC lee un dato por la lnea de entrada.
RS232_EnviaDato: El PIC enva un dato por la lnea de salida.
La librera puede verse aqu, rs232.inc.
RS232MEN.INC
Esta librera incluye subrutinas para enviar mensajes de texto del PIC
al PC:
RS232_Mensaje: Muestra en el PC un mensaje grabado en el
PIC.
RS232_LineasBlanco: Muestra lneas en blanco en el PC.
La librera puede verse aqu, rs232men.inc.
RETARDOS.INC
Incluye subrutinas para realizar retardos, desde 4 microsegundos
hasta 20 segundos. Se han calculado para un sistema
microcontrolador con un PIC trabajando con un cristal de cuarzo a 4
MHz. Como cada ciclo mquina son 4 ciclos de reloj, resulta que cada
ciclo mquina tarda 4 x 1/4MHz = 1 s.
La librera puede verse aqu, retardos.inc.
RB0 =
1
RB1 =
1
RB2 =
1
RB3 =
1
RB4 =
1
RB5 =
1
RB6 =
1
RB7 =
1
Espacio
Todas a
0
Bibliografa
Libro
"MICROCONTROLADOR
PIC16F84.
PROYECTOS"
E.
Palacios,
F.
Remiro
y
Editorial Ra-Ma. www.ra-ma.es
DESARROLLO
L.
DE
Lpez.