Está en la página 1de 11

56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 60

CURSO DE
MICROCONTROLADORES
MICROCONTROLADORES
PIC16F87X (...y XII)
Fernando Remiro Domínguez
Profesor de Sistemas Electrónicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro

60
RESISTOR

UNIVERSAL como asíncrono full dúplex que pue- ● Asíncrono( Full duplex )
SYNCHRONOUS de comunicar con los dispositivos pe- ● Síncrono-Master (half duplex)
ASYNCHRONOUS riféricos como el terminales de CRT ● Síncrono-Slave (half duplex)
RECEIVER TRANSMITTER y los ordenadores personales, o pue- Poniendo a "1" el bit SPEN (RCS-
(USART) de configurarse como un sistema sín- TA <7>), y los bits TRISC <7:6> (RC7
El módulo transmisor (USART) crono half duplex que puede comu- se configura como entrada y RC6 co-
es otro de los dos puertos serie de los nicar con otros microcontroladores, mo salida), se configura RC6/TX/CK y
que dispone esta familia de micro- con dispositivos periféricos como RC7 /RX/DT como USART. En modo
controladores. Los módulos de I/O. A/D o D/A circuitos integrados, EE- síncrono se utilizan formatos estándar:
(USART también se conocen como PROMs serie etc. un bit de Start y ocho bits o nueve bits
Serial Communications o Interface o El USART puede configurarse en de datos y un bit de Stop, siendo el más
SCI). El USART puede configurarse los modos siguientes: común el de ocho bits de datos.
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 61

Registro de Estado Registro de Estado y Control de recepción


y Transmisión TXTA (dirección 98h) RCSTA (Dirección 18h)
R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
CSRC TX9 TXEN SYNC ---- BRGH TRMT TX9D SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
Bit 7 Bit 0 Bit 7 Bit 0

bit 7: CSRC: Bit de selección de fuente del reloj bit 7: SPEN: Bit de habilitación del puerto serie
Modo Asíncrono 1 = Habilita puerto serie (configura patillas RC7/RX/DT y
Sin importancia RC6/TX/CK para el puerto serie)
Modo Síncrono 0 = Deshabilita puerto serie
1 = Modo master (reloj generado internamente para BRG bit 6: RX9: Habilita recepción de 9-8 bits
(Generador de Baudios)) 1 = Selecciona 9 bits de recepción
0 = Modo esclavo (fuente de reloj externa) 0 = Selecciona 8 bits de recepción
bit 6: TX9: Habilita transmisión de 9-8 bits bit 5: SREN: Bit de habilitación de recepción única
1 = Selecciona la transmisión de 9 bits Modo asíncrono
0 = Selecciona la transmisión de 8 bits Este modo no se usa
bit 5: TXEN: Bit de habilitación del transmisor Modo Síncrono master
1 = Habilita transmisión 1 = Habilita una recepción única
0 = Deshabilita transmisión 0 = Deshabilita una recepción única
Nota: SREN/CREN anula TXEN en modo SYNC. Este bit se borra después de completar la recepción
Modo Síncrono esclavo
bit 4: SYNC: Bit de selección del modo USART En este modo no se usa
1 = Modo Síncrono bit 4: CREN: Bit de habilitación de recepción continua
0 = Modo Asíncrono Modo Asíncrono
bit 3: Sin implementar: En lectura es'0' 1 = Habilita recepción continua
bit 2: BRGH: Bit de selección del rango de baudios alto 0 = Deshabilita recepción continua
Modo Asíncrono Modo Síncrono
1 = Alta velocidad 1 = Habilita recepción continua hasta que el bit CREN sea
0 = Baja velocidad borrado (CREN anula SREN)
Modo Síncrono 0 = Deshabilita la recepción continua
No se usa este modo bit 3:ADDEN: Bit de dirección
bit 1: TRMT: Bit de estado del registro de desplazamiento del Modo Asíncrono con 9 bits (RX9=1)
transmisor (TSR) 1= Activa la detección de dirección, activa la interrupción y des-
1 = TSR vacío carga el buffer de recepción al activarse RSR<8>
0 = TSR lleno 0= Desactiva la detección de dirección, todos los bits son recibidos
bit 0: TX9D: Noveno bit de datos de transmisión. Se puede y el noveno bit puede utilizarse como bit de paridad.
emplear como bit de paridad. bit 2: FERR: Bit de error de empaquetamiento
1 = Error de empaquetamiento (Puede actualizarse al leer el
registro RCREG y recibir el siguiente byte)
GENERADOR DE BAUDIOS registro SPBRG. La 0 = No hay error
DEL USART (BRG). frecuencia en baudios del bit 1: OERR: Bit de error de desbordamiento
En el protocolo asíncrono RS-232 generador depende del bit 1 = Error de desbordamiento (puede ser borrado al borrar CREN)
la frecuencia en baudios a la que se BRGH (TXSTA<1>). Si 0 = No hay desbordamiento
realiza la transferencia se debe BRGH=0 se trabaja a baja bit 0: RX9D: Noveno bit de datos de recepción. Se puede emplear
efectuar a un valor normalizado: 330, velocidad y si BRGH=1 se como bit de paridad
600,1.200, 2400, 4800, 9600, 19.200, trabaja a alta velocidad.
38.400, etc. Para generar esta Según este bit se obtendrá el valor de consiste de un contador/divisor de
frecuencia, el USART dispone de un una constante K necesaria para frecuencia de 8 bits controlado por el
generador de frecuencia en Baudios, determinar la frecuencia de registro SPBRG (99H). De tal
BRG, cuyo valor se controla por el funcionamiento. manera que la frecuencia de
contenido del registro SPBRG. Este generador sirve tanto para el transmisión se calcula de acuerdo a la
Además del valor X cargado en el modo síncrono como el asíncrono y siguiente tabla:

SYNC BRGH=0(baja velocidad) BRGH=1 (Alta Velocidad)


0 (Modo asíncrono) Baud rate = FOSC/(64(X+1)) Baud rate = FOSC/16(X+1))
1 (Modo Síncrono) Baud rate = FOSC/(4(X+1)) --
X = Valor en SPBRG (0 a 255)
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 62

BAUD RATES en Modo Asíncrono (BRGH=0)


BAUD FOSC = 20MHz FOSC = 16MHz FOSC = 10MHz
RATES KBAUD % SPBRG KBAUD % SPBRG KBAUD % SPBRG
(K) ERROR Valor decimal ERROR Valor decimal ERROR Valor
decimal
0.3 - - - - - - - - -
MICROCONTROLADORES
1.2 1.221 1.75 255 1.202 0.17 207 1.202 0.17 129
2.4 2.404 0.17 129 2.404 0.17 103 2.404 0.17 64
9.6 9.766 1.73 31 9.615 0.16 25 9.766 1.73 15
19.2 19.531 1.72 15 19.231 0.16 12 19.531 1.72 7
28.8 31.250 8.51 9 27.778 3.55 8 31.350 8.51 4
33.6 34.722 3.34 8 35.714 6.29 6 31.250 6.99 4
57.6 62.500 8.51 4 62.500 8.51 3 52.083 9.58 2
HIG 1.221 - 255 0.977 - 255 0.610 - 255
LOW 312.500 - 0 250.000 - 0 156.250 - 0

BAUD FOSC = 4MHz FOSC = 3.6864MHz importancia para la mayoría de


RATES KBAUD % PBRG KBAUD % SPBRG las aplicaciones, no obstante, se
(K) ERROR Valor ERROR Valor decimal puede realizar los cálculos
empleando el índice (BRGH=1)
decimal
y sustituyendo la constante 64
0.3 0.300 0 207 0.3 0 191 por 16 (ver la tabla) y comprobar
1.2 1.202 0.17 51 1.2 0 47 si el error se reduce.
2.4 2.404 0.17 25 2.4 0 23 Los datos que llegan a la
9.6 8.929 6.99 5 9.6 0 5 patilla RC7/RX/DT se muestrean
19.2 20.833 8.51 2 19.3 0 2 en tres instantes para detectar y
determinar mejor si el nivel
62
RESISTOR
28.8
33.6
57.6
31.250
-
62.500
8.51
-
8.51
1
-
0
28.8
-
57.6
0
0
0
1
-
0
presente en la patilla RX está a
nivel alto o bajo. Si el bit BRGH
(TXSTA<2>) está a cero, el
HIG 0.244 - 255 0.225 0 255 muestreo se realiza en el séptimo,
LOW 62.500 - 0 57.6 0 0 octavo, y noveno flanco de
bajada de x16 de reloj.

BAUD RATES en Modo Asíncrono (BRGH=1)


BAUD FOSC = 20MHz FOSC = 16MHz FOSC = 10MHz
RATES KBAUD % SPBRG KBAUD % SPBRG KBAUD % SPBRG
(K) ERROR Valor decimal ERROR Valor decimal ERROR Valor
decimal
0.3 - - - - - - - - -
1.2 - - - - - - - - -
2.4 - - - - - - 2441 1.71 255
9.6 9.615 0.16 129 9.615 0.16 103 9.615 0.16 64
19.2 19.231 0.16 64 19.231 0.16 51 19.531 1.72 31
28.8 29.070 0.94 42 29.412 2.13 33 28.409 1.36 21
33.6 33.784 0.55 36 33.333 0.79 29 32.895 2.10 18
57.6 59.524 3.34 20 58.825 2.13 16 56.818 1.36 10
HIG 4.883 - 255 3.906 - 255 2.441 - 255
LOW 1250.000 - 0 1000.000 - 0 625.000 - 0
Debido a que el divisor es de 8 valores de velocidad de transmisión Si por el contrario, el bit
bits, no se puede tener cualquier (baud) estándar, el divisor necesario BRGH está a uno, el muestreo tiene
velocidad de transmisión deseada, ya (X=SPBRG) bajo diferentes lugar en el tercer flanco de reloj
que X se deberá redondear al entero frecuencias Fosc y el error producido precedido de la segunda subida de
más cercano. En las dos tablas en porcentaje. Como puede reloj y de la primera bajada de x4 de
anteriores se muestran algunos apreciarse, el error no tiene ninguna reloj.
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 63

BAUD FOSC = 4MHz FOSC = 3.6864MHz


RATES KBAUD % PBRG KBAUD % SPBRG Ejemplo:
(K) ERROR Valor ERROR Valor decimal Cálculo de la proporción del error de velocidad de
transmisión para las siguientes condiciones:
decimal
0.3 - - - - - - FOSC = 16 MHZ
1.2 1.202 0.17 207 1.2 0 191 Velocidad de transmisión deseada = 9600 baudios
2.4 2.404 0.17 103 2.4 0 95 BRGH = 0
9.6 9.615 0.16 25 9.6 0 23 SYNC = 0
FOSC
19.2 19.231 0.16 12 19.2 0 11 Velocidad de transmisión =
(64* (X + 1))
28.8 27.798 3.55 8 28.8 0 7
33.6 35.714 6.29 6 32.9 2.04 6 9600 = 16.000.000
57.6 62.500 8.51 3 57.6 0 3 (64* (X + 1))
HIG 0.977 - 255 0.9 0 255 X = (25,042) = 25
LOW 250.000 - 0 230.4 0 0 16000000
Velocidad de transmisión = = 9615
(64* (X + 1))

9615 - 9600 = 0,16%


error =
9600

(buffer) de lectura/escritura TXREG.


El registro de desplazamiento TSR no
carga el bit de Stop hasta que se hayan
transmitido los datos cargados. Una
vez que se haya enviado este bit, el
registro será cargado con los nuevos
datos (si están disponibles), en este
bit 1º 8º bit caso el bit TXIF (PIR1 <4>) se pone a
START bit bit Stop
uno, y se genera una interrupción si
Dato

Figura 1.- La palabra de transmisión va precedida de un bit de Start y


está habilitada (PIE1 <4>).
Los pasos necesarios para
realizar una transmisión asíncrona son
63
RESISTOR
termina con un bit de Stop los siguientes:
●Inicializar el registro SPBRG con el
EL USART EN MODO puede implementar por software valor apropiado según los cálculos
ASÍNCRONO empleando para ello el noveno bit de realizados. Si se desea el
Como ya se ha dicho, en este datos. margen alto se pondrá a uno el bit
modo de comunicaciones se emplea La selección del modo asíncrono BRGH.
una configuración estándar de un bit se realiza poniendo a cero el bit ●Habilitar el puerto asíncrono bo-
de Start, ocho o nueve bits de datos, y SYNC (TXSTA<4>). rrando el bit SYN y poniendo a uno
un bit de Stop. Este modo de trabajo El modulo asíncrono del USART el SPEN.
se detiene durante la función Sleep. se consigue con la combinación de ●Habilitar la interrupción (si se de-
Aunque el USART tiene importantes elementos: sea) poniendo a uno el bit TXIE.
funciones independientes para la ● El generador de baudios ●Poner a cero o a uno el bit TX9 (8 ó
transmisión y recepción, los formatos ● El circuito de muestreo 9 bits).
de datos y de velocidad de ● Transmisor asíncrono ●Habilitar la transmisión poniendo a
transmisión es igual para los dos ● Receptor asíncrono uno el bit TXEN, el cual pondrá a
casos. El generador de baudios uno el bit TXIF.
produce siempre las señales de reloj EL USART TRANSMISIÓN ●Si se han seleccionado 9 bits se
x16 ó x64 dependiendo de BRGH ASINCRONA deben poner el noveno en el bit
(TXSTA<2>) para el desplazamiento Para realizar una transmisión de TX9D.
de los bits. El bit de paridad no está datos, el registro de desplazamiento ●Cargar el dato en el registro TXREG
soportado por el hardware, pero se TSR obtiene los datos del registro (comenzar la transmisión).

Registros asociados al Generador de Baud Rate


Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR,BOR Valor en el resto de Reset
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –010
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000X 0000 000X
99h SPGBRG Registro generador de Baud Rate
Leyenda x = desconocido u= sin cambios - = Sin implementar, se lee "0"
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 64

Bus de Datos

TXIF Registro TXREG


TXIE
8
MSB LSB
(8) (0) Pin del Buffer
y Control
Registro TSR RC6/TX/CX pin
Interrupción
CLK
TXEN Rango de Baudios
TRMT SPEN
SPBRG
MICROCONTROLADORES
TX9 Figura 2.- Diagrama de bloques del
Generador de Baudios módulo USART configurado como
TX9D transmisor

TRANSMISIÓN ASÍNCRONA
Figura 3
Escritura en TXREG
Palabra 1
Salida BRG
(Reloj desplaz.)
Pin RC6/TX/CX Bit de Start Bit 0 Bit 1 Bit 7/8 Bit Stop
PALABRA 1
Bit TXIF
(Flag de Buffer vacio)

Palabra 1
Bit TRMT Transmite Reg. de desplazamiento
(Flag reg. desplazamiento
vacío)

64
RESISTOR
Figura 4
Escritura en TXREG
TRANSMISIÓN ASINCRONA CONTINUA

Salida BRG Palabra1 Palabra2


(Reloj desplazamiento)

Pin RC6/TX/CK Bit Start


Bit Start Bit 0 Bit 1 Bit 7/8 Bit Stop Bit 0
Bit TXIF PALABRA1 PALABRA 2
(flag reg.Interrupción)

PALABRA1 PALABRA2
bit TRMT Transmite Reg. desplazamiento Transmite Reg. desplazamiento
(flag regi.desplazamiento)

Nota.- Este diagrama muestra dos transmisiones consecutivas

EL USART EN MODO ●Inicializar el registro SPBRG con el veno bit (si está habilitado) y com-
RECEPCIÓN ASÍNCRONA` valor apropiado según los cálculos re- probar si ha ocurrido un error duran-
En el modo de recepción, los datos alizados. Si se desea el margen alto se te la recepción.
son recibidos por la patilla RC7/RX/DT pondrá a uno el bit BRGH. ●Leer el octavo bit recibido y dar lec-
y se introducen en serie en el registro ●Habilitar el puerto asíncrono borran- tura al registro RCREG para conocer
RSR; después de recibir el bit de Stop do el bit SYN y poniendo a uno el si el dispositivo se ha direccionado.
los datos acumulados en este registro se SPEN. ●Si ha ocurrido un error borrarlo po-
cargan en el de datos RCREG (si está ●Habilitar la interrupción (si se desea) niendo a cero el bit CREN.
vacío). Cuando la transferencia se ha poniendo a uno el bit RCIE. Si el dispositivo ha sido
completado, el bit RCIF (PIR1 <5>) ●Poner a uno el bit RX9 para habilitar direccionado, borrar el bit ADDEN
pone a uno. La interrupción puede 9 bits de recepción. para permitir que los datos puedan
habilitarse o deshabilitarse colocando a ●Habilitar la recepción poniendo a uno leerse del buffer receptor
uno o a cero, respectivamente, el bit el bit CREN.
RCIE (PIE1 <5>). El bit RCIF se borra ●El flag RCIF subirá a uno cuando MODO SÍNCRONO
cuando el registro RCREG se ha leído se complete la recepción. Este modo de trabajo tiene dos
(se "vacía" el registro). Para configurar ●Se ocasionará una interrupción si es- posibles formas de configuración, como
el puerto como receptor hay que seguir tá habilitado el bit RCIE. master y como esclavo. En el modo
los siguientes pasos: ●Leer el registro RCSTA, cargar el no- master la transmisión y recepción no
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 65

REGISTROS ASOCIADOS A LA TRANSMISIÓN ASINCRONA


Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR,BOR Valor en el resto de Reset
0Bh, 8Bh
10Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 0000
18h RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00X 0000 000X
19h TXREG Registro Transmisor USAR 0000 0000 0000 0000
8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –010
99h SPGBRG Registro generador de Baud Rate

REGISTROS ASOCIADOS A LA RECEPCIÓN ASINCRONA


Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR,BOR Valor en el resto de Reset
0Bh, 8Bh
10Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 0000
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 -00X 0000 000X
1Ah RCREG Registro Receptor USAR 0000 0000 0000 0000
8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –010
99h SPGBRG Registro generador de Baud Rate

OERR FERR
CREN
SPBRG P64
o Msb Registro RSR LSb

RC7/RX/DT Patilla del buffer Recuperación


P16 Stop (8) 7 å å å 1 0 Start
65
RESISTOR
de control de datos Rx9
8
SPEN
Habilita
RX9 carga del
ADDEN
RX9 buffer
ADDEN receptor 8
RSR<8>
RX9D Registro RCREG FIFO

Figura 5.- Diagrama de Bloques del


Módulo USART configurado en modo Interrupción RCIF
8
Receptor Bus de datos
RCIE

tienen lugar al mismo tiempo, cuando se el bit TXEN del registro TXSTA<5>, si ●Habilitar la transmisión poniendo a
transmite un dato, la recepción es se borra durante una transmisión, ésta uno el bit TXEN.
inhibida y viceversa. En la transmisión el será abortada y reseteado el transmisor. ●Si se ha habilitado la transmisión de
registro de desplazamiento, TSR Para iniciar una transmisión es 9 bits, el noveno se cargar en el regis-
(Transmit Shift Register), obtiene los necesario seguir los siguientes pasos: tro TX9D.
datos del registro de lectura/escritura ●Inicializar el registro SPBRG con el ●La transmisión se iniciar al
TXREG, pero éste no se carga hasta que valor apropiado calculado. cargar los datos en el registro
el último bit de la anterior carga no haya ●Habilitar el puerto master asíncrono TXREG.
sido transmitido; cuando esto suceda el colocando a uno los bits SYN, SPEN
TSR se vuelve a cargar con el nuevo dato y CSRC. EL USART EN MODO MASTER
del registro TXREG (si está disponible) ●Si se desea emplear la interrupción, SÍNCRONO
éste se vacía y se genera una interrupción habilitarla poniendo a uno el bit TXIE. Para seleccionar el modo receptor
(si está habilitada por el bit TXIE, ● Si se desea una transmisión de nueve master hay que poner a uno el bit
PIE1<4>. La transmisión se habilita por bits, el noveno se cargar en el bit TX9. SREN (RCSTA<5> o habilitar el
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 66

RECEPCIÓN ASÍNCRONA CON DETECCIÓN DE DIRECCIÓN


bit bit
Start bit 0 bit 1 bit 8 bit Start bit 0 bit 8 bit
RC7/RX/DT (pin) Stop
Stop

Carga RSR

Bit8=1, Byte de dirección PALABRA1


Bit8=0, Byte de datos RCREG
Lectura

RCIF

Nota.- Este diagrama de tiempos muestra un byte de datosseguido de un byte de dirección. El byte de datos no se lee en el RCREG (buffer de rección)
porque ADDEN = 1

Figura 6.-Recepción Asíncrona con Dirección y Primer Byte

Figura 7 RECEPCIÓN ASÍNCRONA CON DIRECCIÓN Y PRIMER BYTE


RC7/RX/DT (pin) bit bit
Start bit 0 bit 1 bit 8 bit Start bit 0 bit 8 bit
Stop Stop

Carga RSR
Bit 8 = 1. Byte de Dirección Bit8 = 0, Byte de Datos PALABRA1
RCREG
Lectura

RCIF
Nota.- Este diagrama muestra un byte dirección seguido por un byte de datos. El byte de datos no se lee eb RCREC (Buffer recptor)
porque ADEN no se ha actualizado y todabía = 0

66
RESISTOR
CREN (RCSTA<4>). El dato es
tomado de la patilla RC7/WDT por
●Inicializar el registro SPBRG con el
valor apropiado de baudios.
a uno cuando la recepción haya fina-
lizado si está habilitada por el bit
cada flanco de caída del reloj , si el bit ●Habilitar el puerto master asíncrono RCIE.
SREN está a uno, sólo se recibir una colocando a uno los bits SYN, SPEN ●Leer el registro RCSTA y cargar el
palabra, pero si se borra el bit CREN la y CSRC. noveno bit (si está habilitado) y com-
recepción ser continua. Después del ●Asegurarse de que los bits CREN y probar si ha ocurrido un error duran-
último impulso de reloj, el dato SREN están borrados. te la recepción.
recibido en el registro de ●Si se desea emplear la interrupción ●Leer el octavo bit recibido y dar lec-
desplazamiento RSR será transferido habilitarla poniendo a uno el bit RCIE. tura al registro RCREG.
al RCREG (si está vacío). Una vez ●Si se desean nueve bits poner a uno ●Si ha ocurrido un error borrarlo po-
haya terminado la recepción se originar el bit RX9. niendo a cero el bit CREN.
una interrupción si ésta está habilitada, ●Si sólo se desea una recepción única,
RCIE (PIE1 <5>). poner a uno el bit SREN; para recep- MODO ESCLAVO SÍNCRONO
Los pasos a seguir para iniciar la ción continua poner a uno el bit Este modo de trabajo difiere del
recepción en modo master son las CREN. modo master, pues la señal de reloj de
siguientes: ●El flag de interrupción RCIF se pone desplazamientos es proporcionada

Registros de Sincronización en modo master en transmisión


Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR,BOR Valor en el resto de Reset
0Bh, 8Bh,
108Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
0Ch PIR1 PSPIF(1 ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 0000
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000X 0000 000X
1Ah TXREG Registro Receptor USAR 0000 0000 0000 0000
8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –010
99h SPGBRG Registro generador de Baud Rate
Leyenda x = desconocido u= sin cambios - = Sin implementar, se lee "0"
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 67

Figura 8 TRANSMISIÓN SINCRONA

Q1 Q2Q3 Q4 Q1Q2 Q3Q4 Q1Q2 Q3Q4 Q1Q2Q3Q4 Q1Q2 Q3Q4 Q3 Q4 Q1Q2Q3Q4 Q1Q2Q3Q4 Q1Q2 Q3Q4Q1Q2Q3Q4Q1 Q2Q3Q4 Q1Q2Q3Q4

RC7/RX/DT pin Bit0 Bit 1 Bit 2 Bit 7 Bit0 Bit 1 Bit 7


Palabra 1 Palabra 2
TC6/TX/CK pin

Escritura en
Reg. TXREG

bit TXIF
(Flag de Interrupción)

bit TRMT

"1" "1"
bit TXEN

Nota.- Modo master Sincrono; SPBRG="0". Transmisión Continua de 2 palagras de 8 bits

Figura 9 TRANSMISIÓN ASINCRONA ( a traves del TXEN)


ordenador y viceversa, nosotros
hemos utilizado un MAX232, te-
pin RC7/RX/DT bit 0 bit 1 bit 2 bit 6 bit 7 niendo mucho cuidado para no
equivocarnos con la polaridad de
Pin RC6/TX/CK los condensadores. El circuito uti-
lizado es el que se muestra en la
Escritura en
el reg. TXREG
Figura 10. Los lectores que lo de-
seen pueden ponerse en contacto
bit TXIF
con el autor de este curso en fre-
miro@teleline.es para solicitar las
placas del entrenador de micro-
bit TRMT controladores PIC de bajo costo
que se ha diseñado para el
bit TXEN aprendizaje de estos microcon-
troladores.

externamente por la patilla


RC6/TX/CK en lugar de ser generada
bra, que permanece en el registro TX-
REG, se envía al TSR y el flag TXIF
Además del circuito, necesi-
taremos para comprobar el funciona-
miento los estos ejemplos de comuni-
67
RESISTOR
internamente, esto permite que se se pone a uno. caciones, necesitamos un programa de
puedan transferir o recibir datos cuando ●Si está habilitado el bit TXIF la inte- comunicaciones como el HiperTerminal
el dispositivo está en el modo Sleep. rrupción despierta al microcontrolador de Windows y un cable serie en cone-
Las operaciones de transmisión son de modo Sleep y el programa saltar a xión de MODEM nulo, que deberá de
idénticas al modo Master, excepto en el la dirección del vector de interrupcio- conectarse tal y como se muestra en la
caso del modo Sleep. nes (0004 hex.). Figura 11.
Si se escriben dos palabras en el EL HyperTerminal es un programa
registro TXREG y después se ejecuta la EJEMPLOS DE CONTROL DEL general de comunicaciones de Win-
instrucción Sleep, ocurrirá lo siguiente: USAR CONECTADO AL dows, que resulta válido para conectar-
●La primera palabra será inmediata- PUERTO SERIE DEL se con otros ordenadores o dispositi-
mente transferida al registro TSR y ORDENADOR vos. Hay programas de comunicacio-
transmitida. Para poder conectar las líneas del nes mucho más potentes que éste. Sin
●La segunda palabra permanece en el PIC16F87X que entrega niveles TTL embargo, HyperTerminal se caracteriza
registro TXREG. con el puerto serie RS-232 que son por su facilidad de uso y su fácil ad-
●El bit TXIF no se pondrá a uno. compatibles, es necesario utilizar un quisición ya que viene integrado dentro
●Cuando la primera palabra haya sali- circuito interface que traduzca los datos de Windows. Puede ocurrir que el pro-
do del registro TSR, la segunda pala- del microcontrolador al puerto serie del grama HyperTerminal no esté cargado,

Registros de Sincronización en modo master en recepción


Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR,BOR Valor en el resto de Reset
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 0000
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000X 0000 000X
1Ah RCGEG Registro Receptor USAR 0000 0000 0000 0000
8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –010
99h SPGBRG Registro generador de Baud Rate
Leyenda x = desconocido u= sin cambios - = Sin implementar, se lee "0"
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 68

VCC

C4 C5
1µF 1µF U1
1 9
C1+ 9
2 10
V+ 10
3 11 RC6
C1- T1IN
4 12 RC7
C2+ R10UT
DB9 5 13 RXPC
MICROCONTROLADORES
C6 C2- R1IN
6 14 TXPC
1µF V- T1OUT

1
5
9
4
8
3
7
2
6
7 15
7 GND
8 16
8 VCC
RXPC C3
MAX232
C7 10nF
TXPC
1µF

Vcc= 5V
VCC

R10 300Ω RB7


R1
10KΩ R9 300Ω
RB6
Reset PIC16F876 R8 300Ω
R2 100Ω RB5
MCLR RB7 R7 300Ω
RB4
RA0 R6 300Ω
RA1 RB6 RB3
RA2 R5 300Ω
RA3 RB2
RA4 RB5 R4 300Ω
RB1
RA5 RB4
Vss RB3 R3 300Ω
RB2 RB0
C1 27 pF
RB1
RB0
OSC1
XT 4Mhz
OSC2/CKOUT Vcc=5V
VDD

VSS
C2 27 pF
RC0 RC7
Figura 10.- Circuito de aplicación para
RC1 RC6 comprobar el funcionamiento del USART

68
RC2 RC5
RC3 RC4 del PIC16F876 y el puerto serie del
ordenador.
RESISTOR

Figura 13.- Conectar con...

Figura 11.- Conexión del cable serie como MODEM nulo

para ello hay que seguir el mismo pro-


cedimiento que para cualquier otro pro-
grama de Windows, ejecutando en el
siguiente orden: Panel de Control >
Agregar o Quitar programas > Insta-
lación de Windows > Comunicaciones
y activar la casilla correspondiente a
HyperTerminal.
Para ejecutar HyperTerminal hay
que seguir los siguientes pasos:
1. Activar Inicio > Programas > Acce-
sorios > Comunicaciones y selec- Figura 12.-Hipertermina Figura 14 HyperTerminal.
56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 69

MICROCONTROLADORES
Figura 16.- Hyperterminal. Ejemplos de conexiones
Figura 15 .-Hyperterminal. Pantalla de trabajo configuradas
cionar HyperTerminal. Se advierte recto a Com2, figura 13. Se va a utili- conexión, para comenzar la
que no se trata de un programa, si- zar el puerto serie Com2 para comu- comunicación simplemente ha de
no de una carpeta cuyo contenido es nicar el ordenador y el microcontro- ejecutar el icono de la conexión
un único programa denominada Hy- lador. También se puede elegir el previamente configurada tal como se
pertrm. Cada vez que se ejecuta el COM1. muestra en la figura 16.
programa Hypertrm se le pide al 4. Aparece una pantalla con las El programa monitor232.asm
usuario la información suficiente pa- Propiedades de COM. Seleccionar las configura el USART para trabajar a
ra crear en la carpeta HyperTermi- apropiadas para el sistema utilizado. Para 9.600 baudios, con un bit de Stop y sin
nal una nueva conexión, es decir, un nuestros ejemplos utilizamos las bit de paridad, seguidamente se queda a
lugar de destino con el que conec- opciones que se muestran en la figura 14. la espera de recibir un dato por el puerto
tarse. 5. A continuación aparece la pantalla de serie y cuando lo hace lo muestra en el
2. Ejecutar el programa Hypertrm para trabajo tal como la mostrada en la PORTB.
crear una nueva conexión, se le pre- figura 15. Por su parte el programa
gunta el nombre que asignará a la co- Para conectar el ordenador y el Transmite232.asm configura el USART
nexión, teclear por ejemplo microcontrolador a través del puerto para trabajar a 9.600 baudios, con un bit
"PIC16F876" y elegir un icono con
el que se quiera representar la cone-
xión, figura 12.
serie COM 2, basta con activar la opción
"Llama" (o icono de teléfono colgado) y
para desconectar hay que activar opción
de Stop y sin bit de paridad,
seguidamente transmite cada segundo la
cadena de caracteres "HOLA" cada
69
RESISTOR
3.En la siguiente pantalla Conecta con "Desconecta" (o icono de teléfono segundo que se reflejan en el
elegir la opción Conectar usando: Di- descolgado. Una vez configurada una HiperTerminal.

; ;*********************************************************************************
; PROGRAMA : monitor232.asm
; Este programa escucha el puerto serie rs232 sin usar las interrupciones y cuando recibe un byte lo muestra
;en PortB hasta que otro lo sobrescriba.Configuración del puerto serie: 9600 baudios,8 bits,paridad = none
;
; Revisión : 1.0 Programa para : PIC16F876
; CPU Clock : 4 MHz Reloj instrucción : 1 MHz = 1 _s
; WDT : Deshabilitado Tipo de reloj : XT
; Protección de Código : OFF
;**********************************************************************************

LIST P=16F876 ;Se indica el modo de procesador


INCLUDE <P16f876.inc> ;se incluye la definicion de los

CBLOCK 0x20
Buffer ;Buffer entrante
ENDC

;***************************** VECTOR DE RESET *************************************


; ORG 0x00 ;Inicio en el Vector de Reset
; goto INICIO ;Va a la primera instrucción del
;programa
ORG 0x05 ;Inicio en el Vector de Reset

;*****************************INICIO PROGRAMA PRINCIPAL *****************************

INICIO clrf PORTB ;Limpia salidas


56-70 MICROCONTROLADORES2 17/6/04 13:16 Página 70

clrf PORTC ;del PORTB y del PORTC


movlw b'00100100' ;Configuración USART
bsf STATUS,RP0 ;Selecciona el Banco1 movwf TXSTA ;y activación de transmisión
movlw .25 ;9600 baudios
clrf TRISB ;Puerta B como salida movwf SPBRG
movlw b'10011111' ;RC7/Rx entrada, bcf STATUS,RP0 ;Selecciona el Banco 0
movwf TRISC ;RC6/Tx salida y RC5 Salida.
movlw b'00000100' ;Configuracion USART bsf RCSTA,SPEN ;se activa la USART
bsf STATUS,RP0 ;Selecciona el Banco 1
movwf TXSTA ;y activacion de transmision
movlw .25 ;9600 baudios bsf TXSTA,TXEN ;Habilita la transmisión
movwf SPBRG bcf STATUS,RP0 ;Selecciona el Banco 0
bcf STATUS,RP0 ;Selecciona el Banco 0
Bucle call Delay
movlw 'H' ;Carácter ASCII
bsf RCSTA,SPEN ;se activa la USART movwf TXREG ;
movlw b'10010000' ;Configuracion de la usart
movwf RCSTA ;para recepcion continua bsf STATUS,RP0 ;Selecciona el Banco 1
;------Bucle de comprobacion si llega dato mayor de 0 por puerto serie------
COMP_TX btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX
BUCLE movf RCREG,W ;Lectura dato recibido bcf STATUS,RP0 ;Selecciona el Banco 0
movwf Buffer ;Visualiza dato recibido movlw 'O' ;carácter ASCII
movlw .0 ;comprueba que se reciba algo que movwf TXREG
subwf Buffer,W ;no sea cero... bsf STATUS,RP0 ;Selecciona el Banco 1
btfsc STATUS,C COMP_TX_2 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto Mayordecero ;dato valido. goto COMP_TX_2
goto BUCLE ;dato no valido.. es cero..vuelve. bcf STATUS,RP0 ;Selecciona el Banco 0
Mayordecero movf Buffer,W ;muestra el dato en portb movlw 'L' ;carácter ASCII
movwf TXREG
movwf PORTB ;y lo deja ayi hasta que llegue otro bsf STATUS,RP0 ;Selecciona el Banco 1
goto BUCLE ;retorna a esperar otro dato valido
;***************************************************************************** COMP_TX_3 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
ORG 0x1F00 goto COMP_TX_3
bcf PCLATH,4 bcf STATUS,RP0 ;Selecciona el Banco 0
movlw 'A' ;carácter ASCII
bcf PCLATH,3 ;Selecciona la página 0 movwf TXREG
goto INICIO ;Salto a la dirección de INICIO del programa bsf STATUS,RP0 ;Selecciona el Banco 1
;*****************************************************************************
COMP_TX_4 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX_4
END bcf STATUS,RP0 ;Selecciona el Banco 0
movlw '-' ;carácter ASCII en decimal
;*********************************************************************** movwf TXREG
; PROGRAMA :Trans232.asm goto Bucle
;Este programa transmite los bytes ASCII "HOLA "por el puerte serie del microcontrolador
; a intervalos de 1 segundo. ;**************************SUBRUTINAS *********************
; Configuración del piuerto serie COM: 9600 baudios,8 bits,paridad = none ;Delay = 1,0000020 s with Osc = 4 MHz
; Delay movlw D'6'
; Revision : 1.0 Programa para : PIC16F876 movwf ContadorC
; CPU Clock : 4 MHz Reloj instruccion : 1 MHz = 1 us movlw D'24'
; WDT : Deshabilitado Tipo de reloj : XT movwf ContadorB
; Protección de Código : OFF movlw D'168'
;************************************************************************ movwf ContadorA
loop decfsz ContadorA,F
LIST P=16F876 ;Se indica el modo de procesador goto loop
decfsz ContadorB,F
INCLUDE<P16f876.inc> ;se incluye la definicion de los goto loop
CBLOCK 0x20 decfsz ContadorC,F
ContadorA goto loop
ContadorB return
ContadorC ;***********************************************************
ENDC ORG 0x1F00
;************************************ VECTOR DE RESET ********************* bcf PCLATH,4
; ORG 0x00 bcf PCLATH,3 ;Selecciona la página 0
; goto INICIO ;Va a la primera instruccion del programa goto INICIO ;Salto a la dirección de
INICIO del programa
;**********************************************************
ORG 0x05 END

;*******************************INICIO PROGRAMA PRINCIPAL ****************


INICIO clrf PORTB ;Limpia PORTB y PORTC
clrf PORTC

bsf STATUS,RP0 ;Selecciona el Banco 1


clrf TRISB ;Puerta B como salida
movlw b'10111111' ;RC7/Rx entrada,
movwf TRISC ;RC6/Tx salida.

También podría gustarte