Sunteți pe pagina 1din 24

Comunicacin PIC-PC va

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

Para comunicarse con un microcontrolador bastan con 3 lneas (visto


desde el PC):
3, TXD, Transmisin de datos.
2, RXD, Recepcin de datos.

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).

Es importante tener en cuenta que en el protocolo RS232 utiliza


lgica negativa, un nivel alto (1) es de -3V a -15 voltios, y un nivel
bajo (0) es de +3V a +15 voltios. Usualmente los valores son +/-12
voltios.
Puesto que un PIC utiliza niveles TTL es necesario un conversor de
niveles. El mas utilizado es el circuito integrado MAX232 de Dallas
Semiconductor.
El MAX232 convierte los niveles RS232 a TTL y viceversa con slo una
fuente de 5 voltios. Contiene dos driver TTL-RS232 y dos driver
RS232-TTL. Necesita 5 condensadores externos de 1 uF para el
MAX232 y de 100nF para el MAX232A. (Se coloca uno de los 5
condensadores entre la patilla 16 y masa).
Si se utilizan condensadores electrolticos hay que tener cuidado y
respetar la polaridad al conectarlos al circuito.

Para mas informacin ver la comunicacin serie.


Utilizando un PIC para la comunicacin tenemos dos alternativas:
PIC con hardware especfico para el puerto serie, como es el
caso del PIC16F876 (a sustituir por el PIC16F886), entre otros
(ver patillas 17 y 18). Dispone de una UART (Universal
Asynchronous
Receiver-Transmitter,
Transmisor-Receptor
Asncrono Universal) para controlar los puertos y dispositivos
serie.
PIC que no disponen de este hardware por lo que es necesario
implementar por software todos los detalles de la comunicacin
serie. Este es el caso por ejemplo del PIC16F84A.

Usaremos el PIC16F84A primero para ver un circuito que envia un


mensaje ASCII del PIC al PC implementado por software.
Luego realizaremos un circuito algo mas complejo para comunicar el
PC con el PIC, de forma bidireccional tambin con el PIC16F84A.
Mas adelante se ir profundizando mas en este tema pasando por el
16F886 y el 18F2550, este ltimo con puerto serie USB a 12 Mbit/s.

Ejemplo 1. Enviar un mensaje ASCII del


PIC al PC
Mandaremos el mensaje "Hola mundo" como caracteres ASCII al
puerto de comunicaciones serie COM de un PC.
Para enviar caracteres ASCII al PC con el PIC se conecta una salida
del PIC al terminal 2 (RXD) del puerto RS232 del PC.
En la figura siguiente se muestra como se enva el dato "01001101".
Con la calculadora de Windows en vista "cientfica" u otro medio
hallamos que "01001101" en binario es "77" en decimal. Con una
tabla ASCII o simplemente en una zona de texto, como el block de
notas, manteniendo pulsada la tecla ALT y marcando el 77 en el
teclado numrico, nos encontraremos que "77" es "M" (m mayscula)
en ASCII. Habremos enviado la "M" del PIC al PC.

Como la memoria de datos del PIC es escasa y difcil de usar,


pondremos el mensaje a enviar en la memoria de programa. Para
acceder a ella utilizaremos una tabla. En la subrutina MSGTXT
cargamos en el acumulador el offset o desplazamiento que queremos
representar, y este valor lo sumamos al contador del programa. Como
resultado de la rutina la instruccin RETLW devolver el valor de los
caracteres en el acumulador. Un cero en offset retornar "H", un uno
"o", un dos "l", etc.
MSGTXT

ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW

PCL, f ; sumamos offset al PCL


0x48
; 'H' 72d
0x6F
; 'o' 111d
0x6C
; 'l' 108d
0x61
; 'a' 97d
0x20
; ' ' 32d
0x6D
; 'm' 109d
0x75
; 'u' 117d
0x6E
; 'n' 110d
0x64
; 'd' 100d
0x6F
; 'o' 111d
0x0D
; retorno de carro
0x0A
; nueva lnea
0x00
; indica el final del mensaje

Para imprimir una cadena de caracteres, situamos un registro que


apunte al carcter inicial (MSGPTR), y llamamos repetidamente a
MSGTXT incrementando el puntero cada vez. Cuando hemos
alcanzado el final, la funcin devuelve un cero. La rutina debe
inicializarse con el offset cargado en w.
OUTMSG
MSGLOOP

alto
serie

MOVWF

MSGPTR

; mueve w al puntero del mensaje

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

; apuntamos al siguiente carcter


; vuelve a por ms caracteres

MSGPTR, f
MSGLOOP

Rutina de transmisin serie de PIC a PC

Al utilizar un PIC16F84 que no dispone de puertos especficos para


transmisin serie, la rutina de transmisin se implementar mediante
software.
La rutina que transmite los caracteres al PC va serie se llama
OUTCH. Para conseguir la duracin del bit podemos usar la rutina
MIC4 (ver Temporizacin). 52 x 4 bucles de un microsegundo
permiten temporizar los 208 microsegundos del periodo de un bit a
4800 baudios. Realmente 12 microsegundos son usados en la
cabecera de OUTCH, por lo que usamos los 49 bucles restantes para
contar el resto de la transmisin. La subrutina es llamada con el
carcter que deber ser transmitido por el bit 0 del puerto A que
estar unido a la patill 2 (RXD) del puerto serie del PC a travs de un
adaptador TTL-RS232.
OUTCH utiliza un registro denominado TXREG en donde se debe
almacenar el dato a transmitir. La variable BITS sirve para establecer
el nmero de bits a transmitir. Se utiliza la instruccin RRF y el CARRY
para ir obteniendo los bits del registro TXREG.
OUTCH
MOVWF
TXREG
;
MOVLW
8
;
MOVWF
BITS
;
BCF
PORTA,0
;
(activo a nivel bajo)
TXLOOP
MOVLW
0x31
;
CALL
MIC4
;
RRF
TXREG, f
;
acarreo
BTFSC
STATUS, C
;
la lnea a nivel bajo
GOTO
SETUNO
;
SETCERO
BCF
PORTA,0
;
(transmitir un 0)
GOTO
TDONE
;
los bits de TXREG
SETUNO
BSF
PORTA,0
;
(transmitir un 1)
NOP
;
directamente
TDONE
DECFSZ BITS, f
;
transmitido y salta cuando llega
GOTO
TXLOOP
;
siguiente
MOVLW
0x34
;
CALL
MIC4
;
ltimo bit de datos que queda
BSF
PORTA,0
;
de stop
MOVLW
0x68
;
104d

coloca W en el registro de transmisin


8 bits de datos sern transmitidos
BITS es un contador para los bits
bit de inicio en la salida serie
Retardo de 196 microsegundos 31h = 49d
49 x 4 = 196 microsegundos
rotamos a la derecha el bit en el
si el acarreo es 0 saltamos y ponemos
si no, ponemos la lnea a nivel alto
Ponemos la salida serie a nivel bajo
Comprobar si se han transmitido todos
Ponemos la salida serie a nivel alto
pasamos a probar si acabamos,
se decrementa BITS por el bit
a cero
quedan ms bits, vamos a transmitir el
Retardo de 208 microsegundos 34h = 52d
52 x 4 = 208 microsegundos para el
Salida serie a nivel alto para el bit
retardo de 104 x 4 microsegundos 68h =

CALL
MIC4
bits de parada
RETURN

; 104 x 4 =

416 microsegundos para dos

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

; Activa el banco de memoria 1.


; todos los pines de los puertos son
;
;
;
;

en el puerto A
y en el puerto B
Activa el banco de memoria 0.
ponemos a nivel alto la salida serie.

; retardo de 200 msec.


; para que no afecten las fluctuaciones
; offset inicial del mensaje
; representamos el mensaje
; nos quedamos aqui, en un bucle

Algunos comentarios acerca del algoritmo


Todos los bits de todos los puertos estn configurados como salidas.
Los bits de los puertos desconectados nunca deben ser puestos como
entradas. Dejar entradas al aire puede provocar un funcionamiento
imprevisible e incluso daar el PIC.
Otros mensajes pueden ser aadidos a la tabla, siempre que estn en
las primeras 256 posiciones de memoria de programa, que pueda ser
alcanzado sumando el mximo valor al PCL (Program Counter Low).
El orden de las subrutinas no importa; la rutina principal debe ser la
primera rutina ejecutada a partir de la direccin 0000. Cualquier caso
vale, tanto si lo ponemos directamente, o como si en la direccin
0000 ponemos un 'GOTO INICIO' antes de las instrucciones., de esta
manera podramos saltar la posicin de memoria 0004, que podemos
reservar para una subrutina de interrupcin.

Conexin del transmisor


Las conexiones que hemos puesto al PIC son pocas:
pin 3: RA0 - conexin a la patilla 2 (RXD) del conector DB9 del
PC a travs de un conversor TTL-RS232 con el MAX232.

pin 4: MCLR - terminal conectado a + 5 V a travs de una


resistencia de 10K. Entre este pin y masa se conecta un
pulsador para resetear el PIC
pin 5: 0V - terminal de alimentacin negativa. Adems de
conectarse a masa y a la fuente de alimentacin, debe ser
conectado a al pin 5 del conector DB9.
pin 14: +5V - terminal positivo de la alimentacin. Un
condensador de 100 nF debe ser conectado entre este terminal
y masa. Esto previene de acoplamientos y de ruidos en la
alimentacin, pero no es imprescindible.
pin 15: OSC1 - Una de la salidas del oscilador. Debe ser
conectado a un cristal de 4 MHz y a un condensador de 33pF. El
otro terminal del condensador debe ser conectado a masa.
pin 16: OSC2 - La otra de las salidas del oscilador. Esta va
conectada al otro terminal del cristal y a otro condensador de
33pF. El otro terminal de este condensador tambin va a masa.
El resto de las patillas quedan sin conectar a nada (al aire).
Es importante saber que no cualquier cable serie vale para la
conexin entre el PC y el PIC. Debe utilizarse un cable macho-hembra
no cruzado.

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.

;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

Utiliza el bit 0 del puerto A como salida serie.


Debe utilizarse un conversor TTL-RS232, como el MAX232, para
conectar la salida del PIC a RXD en el puerto serie del PC.
Cuando se alimenta por primera vez, o cuando se le d un reset
enva al PC el mensaje "Hola mundo" como caracteres ASCII.
Para recibir el mensaje puede utilizarse el programa Hyperterminal
de Windows o TerminalTOB, una aplicacin propia realizada al efecto
que, adems de funcionar como terminal, permite crear fcilmente
cdigo de mensajes.
Configuracin del puerto COM:
Bits por segundo = 4800 baudios
Bits de datos = 8
Paridad: ninguna
Bits de parada = 2
Control de flujo: ninguno
Tiempo por bit:
4800 baudios -> 1/4800 seg -> 208,3 microsegundos

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

_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

;**************************************************************
; Lista de variables para el uso del programa
;**************************************************************
MSGPTR
TXREG
BITS
CNTMSEC
retardo

EQU
EQU
EQU
EQU

0x0C
0x0D
0x0E
0x0F

;
;
;
;

Puntero del mensaje


Registro de transmisin
Nmero de bits de datos
Nmero de milisegundos de

;**************************************************************
ORG 0
;Comando que indica al Ensamblador
;la direccin de la memoria de programa

;donde situar la siguiente instruccin


;**************************************************************
;
INICIO
BSF
STATUS,RP0
; Activa el banco de memoria 1.
MOVLW
0
; todos los pines de los puertos son
salidas
MOVWF
TRISA
; en el puerto A
MOVWF
TRISB
; y en el puerto B
BCF
STATUS,RP0
; Activa el banco de memoria 0.
BSF
PORTA,0
; ponemos a nivel alto la salida serie.
Lnea en reposo.
MOVLW
0xC8
; retardo de 200 msec.
CALL
NMSEC
; para que no afecten las fluctuaciones
del encendido
MOVLW
0
; offset inicial del mensaje
CALL
OUTMSG
; representamos el mensaje
ENDLESS
GOTO
ENDLESS
; nos quedamos aqui, en un bucle
infinito
;
;**************************************************************
; SUBRUTINAS
;**************************************************************
;
OUTMSG
MOVWF
MSGPTR
; mueve w al puntero del mensaje
MSGLOOP
MOVF
MSGPTR, W
; mueve el puntero a W
CALL
MSGTXT
; retorna el carcter ASCII
ADDLW
0
; pone la bandera Zero a uno si W = 0
BTFSC
STATUS,Z
; salta si el bit Zero no est a nivel
alto
RETURN
; si llegamos al final, W = 0
CALL
OUTCH
; llama a la rutina de comunicacin
serie
INCF
MSGPTR, f
; apuntamos al siguiente carcter
GOTO
MSGLOOP
; vuelve a por ms caracteres
;
;**************************************************************
;
OUTCH
MOVWF
TXREG
; coloca W en el registro de transmisin
MOVLW
8
; 8 bits de datos sern transmitidos
MOVWF
BITS
; BITS es un contador para los bits
BCF
PORTA,0
; bit de inicio en la salida serie
(activo a nivel bajo)
TXLOOP
MOVLW
0x31
; Retardo de 196 microsegundos 31h = 49d
CALL
MIC4
; 49 x 4 = 196 microsegundos
RRF
TXREG, f
; rotamos a la derecha el bit en el
acarreo
BTFSC
STATUS, C
; si el acarreo es 0 saltamos y ponemos
la lnea a nivel bajo
GOTO
SETUNO
; si no, ponemos la lnea a nivel alto
SETCERO
BCF
PORTA,0
; Ponemos la salida serie a nivel bajo
(transmitir un 0)
GOTO
TDONE
; Comprobar si se han transmitido todos
los bits de TXREG
SETUNO

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

El programa puede descargarse, de picpcrs232cpp/01.rar y est en


"picpcrs232cpp\01\mplab\pic_pc001.asm". Los fuses se configuran
con WDT desactivado, oscilador XT, sin proteccin y con POR
activado.
El programa se ha realizado y simulado con MPLAB.

Prueba del programa


Una vez programado el PIC con ICPROG y JDMD, se monta el circuito
en una placa protoboard, y se conecta al puerto serie de un PC.
Tambin 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. Y en lugar de montar
fsicamente el circuito del PIC podemos simularlo con Proteus. Ver en
Puerto serie virtual VSPD y COMPIM de Proteus.
Para probar el funcionamiento del programa, puede ejecutarse un
programa de terminal en el PC, como Hyperterminal de Windows,
pues es fcil de usar y est al alcance de todo el mundo (debe estar
instalado en Inicio/Programas/Accesorios/Comunicaciones/ y si no
est, instlelo desde el CD de Windows).
Si utilizamos Windows Vista o Windows 7, que no lo incorporan
podemos descargarlo de aqu: hyperterminal.rar.
Si iniciamos Hyperterminal creamos una nueva conexin y nos
conectamos. Podemos seguir las siguientes capturas. Los dos cuadros
de dilogo siguientes slo aparecen la primera vez que utilizamos
Hyperterminal y no tienen importancia en nuestro caso:

Cada vez que utilizamos Hyperterminal nos preguntar por un


nombre de conexin. En este caso le hemos puesto picrs232 pero
puede ser otro nombre:

En este cuadro de dilogo seleccionamos que puerto del PC vamos a


utilizar, evidentemente debemos conectar el cable serie a dicho
puerto. Si el PC dispone de un slo puerto serie con toda seguridad
ser COM1.

Lo configuramos a 4800 baudios, 8 bits de datos, sin bit de paridad,


dos de parada y sin control de flujo.

Ahora alimentamos el circuito. El mensaje 'Hola mundo' debe


aparecer en la pantalla. Cada vez que se resetee el PIC el mensaje se
imprimir de nuevo.

Cuando cerremos el programa adems de preguntarnos si queremos


desconectarnos nos pregunta si deseamos guardar la conexin. Si
elegimos que s la prxima vez que queramos utilizar la configuracin

que hemos establecido en la conexin basta que en Inicio/Todos los


programas/Accesorios/Comunicaciones/Hyperterminal/picrs232.ht

Los archivos de hyperterminal (*.ht) en Windows XP se guardan en:


C:\Documents
and
Settings\...nombreusuario...\Men
Inicio\Programas\Accesorios\Comunicaciones\HyperTerminal\
Si vamos a esta carpeta y damos doble click al archivo se nos abrir
la conexin. Adems se crea un acceso directo a la conexin en dicha
carpeta que podemos pegar en el escritorio para obtener un rpido
acceso.

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.

Cominicacin bidireccional del PIC al PC


va RS232.

Se trata de utilizar el puerto serie RS232 de un PC para comunicar el


PC con el PIC, de forma bidireccional. Considerando el uso de un
PIC16F84 vamos a establecer:

VDD: +5V. Terminal positivo de


alimentacin. Un condensador de
100 nF debe ser conectado entre
este terminal y masa lo mas cerca
posible del microcontrolador. Esto
previene acoplamientos con ruidos
en la alimentacin.

VSS: 0V. Terminal de alimentacin


negativa (masa).

OSC1: Entrada del oscilador.


Conectado a un cristal de 4 MHz y
a un condensador de 22 pf. El otro
terminal del condensador debe ser
conectado a masa.

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).

MCLR: Conectado a un circuito de


reset/programacin ICSP.

RA0: Salida. Conexin a la patilla


2 (RXD) del conector DB9 del PC a
travs de un MAX232.

RA1: Entrada: Conexin a la


patilla 3 (TXD) del conector DB9
del PC a travs de un MAX232.

RA2 a RA4: Salida o entrada


segn la aplicacin.

RB1 a RB7: Salida o entrada


segn la aplicacin. RB6 y RB7

utilizados para programacin ICSP.


Nota: El pin 5 del conector DB9 debe ser conectado a masa.
El circuito base ser el siguiente:

El software necesario para la comunicacin PIC-PC es:


Programa en el PIC que incluya subrutinas de control del puerto
RS232.
Programa en el ordenador que gestione la comunicacin, como
HyperTerminal de Windows, TerminalTOB o programas hechos
especficamente, por ejemplo en Visual Basic o C++.
Es importante destacar que la configuracin del formato de
transmisin y recepcin debe ser la misma tanto para el programa en
el PIC como para el programa en el PC. En nuestro caso tomaremos:
Velocidad de transmisin de 9600 baudios. La duracin de cada
bit ser 104 s.
Un bit de inicio o Start a nivel bajo.

Dato de 8 bits.
Sin paridad.
Dos bits de final o Stop a nivel alto.

Libreras para RS232


La mejor forma para afrontar el programa a desarrollar es utilizando
archivos INCLUDE con las subrutinas necesarias.

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.

Ejemplo 2. Control desde PC


PICRS232Sal.asm
Control de salidas mediante un PC y RS232: Desde el teclado de un
ordenador se desea controlar el puerto B, segn la siguiente tabla:
TECLA SALIDA
0

RB0 =
1

RB1 =
1

RB2 =
1

RB3 =
1

RB4 =
1

RB5 =
1

RB6 =
1

RB7 =
1

Espacio

Todas a
0

La pulsacin de cualquiera de estas teclas activa el estado de las


salidas correspondiente,
Slo se activa una salida cada vez.
El estado de las salidas aparece reflejado en un mensaje en la
pantalla del ordenador.
El proyecto en MPLAB y el circuito en Proteus con COMPIM puede
descargarse de picpcrs232cpp/03.rar.
Los fuses se configuran con WDT desactivado, oscilador XT, sin
proteccin y con POR activado.

Prueba del programa

El programa lo podemos simular o probar fsicamente, en cuyo caso


seguiremos los siguientes pasos.
Sin conectar el circuito a la fuente de alimentacin se programa el
PIC con ICPROG y JDMD con ICSP.
A continuacin se conecta al puerto serie de un PC y se alimenta el
circuito.
Para probar el funcionamiento del programa, puede ejecutarse un
programa de terminal en el PC, como Hyperterminal de Windows o
tambin puede utilizarse TerminalTOB.
Debe configurarse a 9600 baudios, 8 bits de datos, dos de parada y
sin bit de paridad. Y muy importante, el flujo de datos debe ser:
ninguno.

Ejemplo 3. Monitorizacin de datos


Se trata de leer el estado de las entradas conectadas a las lneas
<RB7:RB4> del Puerto B y enviarlo por el puerto RS232 a un
terminal para monitorizar el estado de los mismos. Se utilizan las
interrupciones por cambio de nivel en una lnea del Puerto B, por ello
las entradas deben conectarse a la parte alta del Puerto B.

Tambin se activan las resistencias de pull-up del puerto B, as que


basta con dejarlas al aire para ponerlas a 1 o a masa para ponerlas a
0.
El programa puede verse aqu, de picpcrs232cpp/picmonitor.rar. Los
fuses se configuran con WDT desactivado, oscilador XT, sin proteccin
y con POR activado.
El orden de las subrutinas no importa; la rutina principal debe ser la
primera rutina ejecutada a partir de la direccin 0000. Cualquier caso
vale, tanto si lo ponemos directamente, o como si en la direccin
0000 ponemos un 'GOTO INICIO' antes de las instrucciones., de esta
manera podramos saltar la posicin de memoria 0004, que podemos
reservar para una subrutina de interrupcin.
El programa se ha realizado y simulado con MPLAB.
Los bits de los puertos desconectados nunca deben ser puestos como
entradas, sino que han de configurarse como salidas. Dejar entradas
al aire puede provocar un funcionamiento imprevisible e incluso daar
el PIC.

Prueba del programa


El programa lo podemos simular o probar fsicamente, en cuyo caso
seguiremos los siguientes pasos.
Sin conectar el circuito a la fuente de alimentacin se programa el
PIC con ICPROG y JDMD con ICSP.
A continuacin se conecta al puerto serie de un PC y se alimenta el
circuito.
Para probar el funcionamiento del programa, puede ejecutarse
Hyperterminal de Windows o TerminalTOB.zip.
Configrelo a 9600 baudios, 8 bits de datos, dos de parada, sin bit de
paridad y sin control de flujo.

Bibliografa
Libro
"MICROCONTROLADOR
PIC16F84.
PROYECTOS"
E.
Palacios,
F.
Remiro
y
Editorial Ra-Ma. www.ra-ma.es

DESARROLLO
L.

DE
Lpez.

S-ar putea să vă placă și