Curso de microcontroladores capitulo 12

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

Transcript of Curso de microcontroladores capitulo 12

Page 1: Curso de microcontroladores capitulo 12

UNIVERSALSYNCHRONOUSASYNCHRONOUSRECEIVER TRANSMITTER(USART)

El módulo transmisor (USART)es otro de los dos puertos serie de losque dispone esta familia de micro-controladores. Los módulos de I/O.(USART también se conocen comoSerial Communications o Interface oSCI). El USART puede configurarse

como asíncrono full dúplex que pue-de comunicar con los dispositivos pe-riféricos como el terminales de CRTy los ordenadores personales, o pue-de configurarse como un sistema sín-crono half duplex que puede comu-nicar con otros microcontroladores,con dispositivos periféricos comoA/D o D/A circuitos integrados, EE-PROMs serie etc.

El USART puede configurarse enlos modos siguientes:

Asíncrono( Full duplex ) Síncrono-Master (half duplex) Síncrono-Slave (half duplex)

Poniendo a "1" el bit SPEN (RCS-TA <7>), y los bits TRISC <7:6> (RC7se configura como entrada y RC6 co-mo salida), se configura RC6/TX/CK yRC7 /RX/DT como USART. En modosíncrono se utilizan formatos estándar:un bit de Start y ocho bits o nueve bitsde datos y un bit de Stop, siendo el máscomún el de ocho bits de datos.

CURSO DE MICROCONTROLADORESPIC16F87X (...y XII)

CURSO DE MICROCONTROLADORESPIC16F87X (...y XII)

Fernando Remiro DomínguezProfesor de Sistemas Electrónicos

IES. Juan de la Ciervawww.terra.es/personal/fremiro

MICR

OCON

TROL

ADOR

ES

60RESISTOR

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

Page 2: Curso de microcontroladores capitulo 12

GENERADOR DE BAUDIOSDEL USART (BRG).

En el protocolo asíncrono RS-232la frecuencia en baudios a la que serealiza la transferencia se debeefectuar a un valor normalizado: 330,600,1.200, 2400, 4800, 9600, 19.200,38.400, etc. Para generar estafrecuencia, el USART dispone de ungenerador de frecuencia en Baudios,BRG, cuyo valor se controla por elcontenido del registro SPBRG.

Además del valor X cargado en el

registro SPBRG. Lafrecuencia en baudios delgenerador depende del bitBRGH (TXSTA<1>). SiBRGH=0 se trabaja a bajavelocidad y si BRGH=1 setrabaja a alta velocidad.Según este bit se obtendrá el valor deuna constante K necesaria paradeterminar la frecuencia defuncionamiento.

Este generador sirve tanto para elmodo síncrono como el asíncrono y

consiste de un contador/divisor defrecuencia de 8 bits controlado por elregistro SPBRG (99H). De talmanera que la frecuencia detransmisión se calcula de acuerdo a lasiguiente tabla:

Registro de Estado y Transmisión TXTA (dirección 98h)

R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0CSRC TX9 TXEN SYNC ---- BRGH TRMT TX9DBit 7 Bit 0

bit 7: CSRC: Bit de selección de fuente del reloj Modo AsíncronoSin importanciaModo Síncrono1 = Modo master (reloj generado internamente para BRG(Generador de Baudios))0 = Modo esclavo (fuente de reloj externa)

bit 6: TX9: Habilita transmisión de 9-8 bits1 = Selecciona la transmisión de 9 bits0 = Selecciona la transmisión de 8 bits

bit 5: TXEN: Bit de habilitación del transmisor1 = Habilita transmisión0 = Deshabilita transmisiónNota: SREN/CREN anula TXEN en modo SYNC.

bit 4: SYNC: Bit de selección del modo USART1 = Modo Síncrono0 = Modo Asíncrono

bit 3: Sin implementar: En lectura es'0'bit 2: BRGH: Bit de selección del rango de baudios alto

Modo Asíncrono1 = Alta velocidad0 = Baja velocidad

Modo SíncronoNo se usa este modo

bit 1: TRMT: Bit de estado del registro de desplazamiento deltransmisor (TSR)1 = TSR vacío0 = TSR lleno

bit 0: TX9D: Noveno bit de datos de transmisión. Se puedeemplear como bit de paridad.

Registro de Estado y Control de recepciónRCSTA (Dirección 18h)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0SPEN RX9 SREN CREN ADDEN FERR OERR RX9DBit 7 Bit 0

bit 7: SPEN: Bit de habilitación del puerto serie 1 = Habilita puerto serie (configura patillas RC7/RX/DT yRC6/TX/CK para el puerto serie)0 = Deshabilita puerto serie

bit 6: RX9: Habilita recepción de 9-8 bits1 = Selecciona 9 bits de recepción0 = Selecciona 8 bits de recepción

bit 5: SREN: Bit de habilitación de recepción única Modo asíncronoEste modo no se usa

Modo Síncrono master1 = Habilita una recepción única0 = Deshabilita una recepción únicaEste bit se borra después de completar la recepción

Modo Síncrono esclavoEn este modo no se usa

bit 4: CREN: Bit de habilitación de recepción continuaModo Asíncrono1 = Habilita recepción continua0 = Deshabilita recepción continua

Modo Síncrono1 = Habilita recepción continua hasta que el bit CREN seaborrado (CREN anula SREN)0 = Deshabilita la recepción continua

bit 3:ADDEN: Bit de direcciónModo Asíncrono con 9 bits (RX9=1)1= Activa la detección de dirección, activa la interrupción y des-carga el buffer de recepción al activarse RSR<8>0= Desactiva la detección de dirección, todos los bits son recibidosy el noveno bit puede utilizarse como bit de paridad.

bit 2: FERR: Bit de error de empaquetamiento1 = Error de empaquetamiento (Puede actualizarse al leer elregistro RCREG y recibir el siguiente byte)0 = No hay error

bit 1: OERR: Bit de error de desbordamiento1 = Error de desbordamiento (puede ser borrado al borrar CREN)0 = No hay desbordamiento

bit 0: RX9D: Noveno bit de datos de recepción. Se puede emplearcomo bit de paridad

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)

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

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

Page 3: Curso de microcontroladores capitulo 12

MICR

OCON

TROL

ADOR

ES

62RESISTOR

Debido a que el divisor es de 8bits, no se puede tener cualquiervelocidad de transmisión deseada, yaque X se deberá redondear al enteromás cercano. En las dos tablasanteriores se muestran algunos

valores de velocidad de transmisión(baud) estándar, el divisor necesario(X=SPBRG) bajo diferentesfrecuencias Fosc y el error producidoen porcentaje. Como puedeapreciarse, el error no tiene ninguna

importancia para la mayoría delas aplicaciones, no obstante, sepuede realizar los cálculosempleando el índice (BRGH=1)y sustituyendo la constante 64por 16 (ver la tabla) y comprobarsi el error se reduce.

Los datos que llegan a lapatilla RC7/RX/DT se muestreanen tres instantes para detectar ydeterminar mejor si el nivelpresente en la patilla RX está anivel alto o bajo. Si el bit BRGH(TXSTA<2>) está a cero, elmuestreo se realiza en el séptimo,octavo, y noveno flanco debajada de x16 de reloj.

Si por el contrario, el bitBRGH está a uno, el muestreo tienelugar en el tercer flanco de relojprecedido de la segunda subida dereloj y de la primera bajada de x4 dereloj.

BAUD FOSC = 20MHz FOSC = 16MHz FOSC = 10MHzRATES KBAUD % SPBRG KBAUD % SPBRG KBAUD % SPBRG(K) ERROR Valor decimal ERROR Valor decimal ERROR Valor

decimal0.3 - - - - - - - - -1.2 1.221 1.75 255 1.202 0.17 207 1.202 0.17 1292.4 2.404 0.17 129 2.404 0.17 103 2.404 0.17 649.6 9.766 1.73 31 9.615 0.16 25 9.766 1.73 1519.2 19.531 1.72 15 19.231 0.16 12 19.531 1.72 728.8 31.250 8.51 9 27.778 3.55 8 31.350 8.51 433.6 34.722 3.34 8 35.714 6.29 6 31.250 6.99 457.6 62.500 8.51 4 62.500 8.51 3 52.083 9.58 2HIG 1.221 - 255 0.977 - 255 0.610 - 255LOW 312.500 - 0 250.000 - 0 156.250 - 0

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

BAUD FOSC = 20MHz FOSC = 16MHz FOSC = 10MHzRATES KBAUD % SPBRG KBAUD % SPBRG KBAUD % SPBRG(K) ERROR Valor decimal ERROR Valor decimal ERROR Valor

decimal0.3 - - - - - - - - -1.2 - - - - - - - - -2.4 - - - - - - 2441 1.71 2559.6 9.615 0.16 129 9.615 0.16 103 9.615 0.16 6419.2 19.231 0.16 64 19.231 0.16 51 19.531 1.72 3128.8 29.070 0.94 42 29.412 2.13 33 28.409 1.36 2133.6 33.784 0.55 36 33.333 0.79 29 32.895 2.10 1857.6 59.524 3.34 20 58.825 2.13 16 56.818 1.36 10HIG 4.883 - 255 3.906 - 255 2.441 - 255LOW 1250.000 - 0 1000.000 - 0 625.000 - 0

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

BAUD FOSC = 4MHz FOSC = 3.6864MHzRATES KBAUD % PBRG KBAUD % SPBRG (K) ERROR Valor ERROR Valor decimal

decimal0.3 0.300 0 207 0.3 0 1911.2 1.202 0.17 51 1.2 0 472.4 2.404 0.17 25 2.4 0 239.6 8.929 6.99 5 9.6 0 519.2 20.833 8.51 2 19.3 0 228.8 31.250 8.51 1 28.8 0 133.6 - - - - 0 -57.6 62.500 8.51 0 57.6 0 0HIG 0.244 - 255 0.225 0 255LOW 62.500 - 0 57.6 0 0

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

Page 4: Curso de microcontroladores capitulo 12

63RESISTOR

BAUD FOSC = 4MHz FOSC = 3.6864MHzRATES KBAUD % PBRG KBAUD % SPBRG (K) ERROR Valor ERROR Valor decimal

decimal0.3 - - - - - -1.2 1.202 0.17 207 1.2 0 1912.4 2.404 0.17 103 2.4 0 959.6 9.615 0.16 25 9.6 0 2319.2 19.231 0.16 12 19.2 0 1128.8 27.798 3.55 8 28.8 0 733.6 35.714 6.29 6 32.9 2.04 657.6 62.500 8.51 3 57.6 0 3HIG 0.977 - 255 0.9 0 255LOW 250.000 - 0 230.4 0 0

EL USART EN MODOASÍNCRONO

Como ya se ha dicho, en estemodo de comunicaciones se empleauna configuración estándar de un bitde Start, ocho o nueve bits de datos, yun bit de Stop. Este modo de trabajose detiene durante la función Sleep.

Aunque el USART tienefunciones independientes para latransmisión y recepción, los formatosde datos y de velocidad detransmisión es igual para los doscasos. El generador de baudiosproduce siempre las señales de relojx16 ó x64 dependiendo de BRGH(TXSTA<2>) para el desplazamientode los bits. El bit de paridad no estásoportado por el hardware, pero se

puede implementar por softwareempleando para ello el noveno bit dedatos.

La selección del modo asíncronose realiza poniendo a cero el bitSYNC (TXSTA<4>).

El modulo asíncrono del USARTse consigue con la combinación deimportantes elementos: El generador de baudios El circuito de muestreo Transmisor asíncrono Receptor asíncrono

EL USART TRANSMISIÓNASINCRONA

Para realizar una transmisión dedatos, el registro de desplazamientoTSR obtiene los datos del registro

(buffer) de lectura/escritura TXREG.El registro de desplazamiento TSR nocarga el bit de Stop hasta que se hayantransmitido los datos cargados. Unavez que se haya enviado este bit, elregistro será cargado con los nuevosdatos (si están disponibles), en estecaso el bit TXIF (PIR1 <4>) se pone auno, y se genera una interrupción siestá habilitada (PIE1 <4>).

Los pasos necesarios pararealizar una transmisión asíncrona sonlos siguientes:Inicializar el registro SPBRG con el

valor apropiado según los cálculosrealizados. Si se desea elmargen alto se pondrá a uno el bitBRGH.

Habilitar el puerto asíncrono bo-rrando el bit SYN y poniendo a unoel SPEN.

Habilitar la interrupción (si se de-sea) poniendo a uno el bit TXIE.

Poner a cero o a uno el bit TX9 (8 ó9 bits).

Habilitar la transmisión poniendo auno el bit TXEN, el cual pondrá auno el bit TXIF.

Si se han seleccionado 9 bits sedeben poner el noveno en el bitTX9D.

Cargar el dato en el registro TXREG(comenzar la transmisión).

Ejemplo:Cálculo de la proporción del error de velocidad de

transmisión para las siguientes condiciones:

FOSC = 16 MHZ Velocidad de transmisión deseada = 9600 baudios BRGH = 0 SYNC = 0

Velocidad de transmisión =

9600 =

X = (25,042) = 25

= 9615

= 0,16%

FOSC

(64* (X + 1))

error = 9615 - 96009600

Velocidad de transmisión = 16000000(64* (X + 1))

16.000.000(64* (X + 1))

bitSTART

1ºbit

8ºbit

bitStop

Dato

Figura 1.- La palabra de transmisión va precedida de un bit de Start ytermina con un bit de Stop

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 Reset98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –01018h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000X 0000 000X99h SPGBRG Registro generador de Baud RateLeyenda x = desconocido u= sin cambios - = Sin implementar, se lee "0"

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

Page 5: Curso de microcontroladores capitulo 12

EL USART EN MODORECEPCIÓN ASÍNCRONA`

En el modo de recepción, los datosson recibidos por la patilla RC7/RX/DTy se introducen en serie en el registroRSR; después de recibir el bit de Stoplos datos acumulados en este registro secargan en el de datos RCREG (si estávacío). Cuando la transferencia se hacompletado, el bit RCIF (PIR1 <5>)pone a uno. La interrupción puedehabilitarse o deshabilitarse colocando auno o a cero, respectivamente, el bitRCIE (PIE1 <5>). El bit RCIF se borracuando el registro RCREG se ha leído(se "vacía" el registro). Para configurarel puerto como receptor hay que seguirlos siguientes pasos:

Inicializar el registro SPBRG con elvalor apropiado según los cálculos re-alizados. Si se desea el margen alto sepondrá a uno el bit BRGH.

Habilitar el puerto asíncrono borran-do el bit SYN y poniendo a uno elSPEN.

Habilitar la interrupción (si se desea)poniendo a uno el bit RCIE.

Poner a uno el bit RX9 para habilitar9 bits de recepción.

Habilitar la recepción poniendo a unoel bit CREN.

El flag RCIF subirá a uno cuandose complete la recepción.

Se ocasionará una interrupción si es-tá habilitado el bit RCIE.

Leer el registro RCSTA, cargar el no-

veno bit (si está habilitado) y com-probar si ha ocurrido un error duran-te la recepción.

Leer el octavo bit recibido y dar lec-tura al registro RCREG para conocersi el dispositivo se ha direccionado.

Si ha ocurrido un error borrarlo po-niendo a cero el bit CREN.

Si el dispositivo ha sidodireccionado, borrar el bit ADDENpara permitir que los datos puedanleerse del buffer receptor

MODO SÍNCRONOEste modo de trabajo tiene dos

posibles formas de configuración, comomaster y como esclavo. En el modomaster la transmisión y recepción no

MICR

OCON

TROL

ADOR

ES

64RESISTOR

TXIETXIF

Interrupción

TXENCLKRango de Baudios

Generador de Baudios

MSB LSB

Bus de Datos

Registro TXREG

Pin del Buffery Control

RC6/TX/CX pin

TRMT SPEN

SPBRG

Registro TSR

(8) (0)

TX9

TX9D

8

Figura 2.- Diagrama de bloques delmódulo USART configurado como

transmisor

Escritura en TXREGPalabra 1

Salida BRG(Reloj desplaz.)

Pin RC6/TX/CX

Bit TXIF(Flag de Buffer vacio)

Bit TRMT(Flag reg. desplazamientovacío)

Palabra 1Transmite Reg. de desplazamiento

Bit de Start Bit 0 Bit 1 Bit 7/8 Bit StopPALABRA 1

Escritura en TXREGPalabra1 Palabra2Salida BRG

(Reloj desplazamiento)

Pin RC6/TX/CK

Bit TXIF(flag reg.Interrupción)

bit TRMT(flag regi.desplazamiento)

PALABRA1Transmite Reg. desplazamiento

Nota.- Este diagrama muestra dos transmisiones consecutivas

PALABRA1

Bit Start Bit 0 Bit 1 Bit 7/8 Bit Stop Bit Start Bit 0

PALABRA 2

PALABRA2Transmite Reg. desplazamiento

TRANSMISIÓN ASÍNCRONAFigura 3

Figura 4TRANSMISIÓN ASINCRONA CONTINUA

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

Page 6: Curso de microcontroladores capitulo 12

65RESISTOR

REGISTROS ASOCIADOS A LA TRANSMISIÓN ASINCRONADirecció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 Reset0Bh, 8Bh10Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 000018h RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00X 0000 000X19h TXREG Registro Transmisor USAR 0000 0000 0000 00008Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 000098h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –01099h SPGBRG Registro generador de Baud Rate

tienen lugar al mismo tiempo, cuando setransmite un dato, la recepción esinhibida y viceversa. En la transmisión elregistro de desplazamiento, TSR(Transmit Shift Register), obtiene losdatos del registro de lectura/escrituraTXREG, pero éste no se carga hasta queel último bit de la anterior carga no hayasido transmitido; cuando esto suceda elTSR se vuelve a cargar con el nuevo datodel registro TXREG (si está disponible)éste se vacía y se genera una interrupción(si está habilitada por el bit TXIE,PIE1<4>. La transmisión se habilita por

el bit TXEN del registro TXSTA<5>, sise borra durante una transmisión, éstaserá abortada y reseteado el transmisor.

Para iniciar una transmisión esnecesario seguir los siguientes pasos:Inicializar el registro SPBRG con el

valor apropiado calculado.Habilitar el puerto master asíncrono

colocando a uno los bits SYN, SPENy CSRC.

Si se desea emplear la interrupción,habilitarla poniendo a uno el bit TXIE.

Si se desea una transmisión de nuevebits, el noveno se cargar en el bit TX9.

Habilitar la transmisión poniendo auno el bit TXEN.

Si se ha habilitado la transmisión de9 bits, el noveno se cargar en el regis-tro TX9D.

La transmisión se iniciar alcargar los datos en el registroTXREG.

EL USART EN MODO MASTERSÍNCRONO

Para seleccionar el modo receptormaster hay que poner a uno el bitSREN (RCSTA<5> o habilitar el

REGISTROS ASOCIADOS A LA RECEPCIÓN ASINCRONADirecció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 Reset0Bh, 8Bh10Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 000018h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 -00X 0000 000X1Ah RCREG Registro Receptor USAR 0000 0000 0000 00008Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 000098h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –01099h SPGBRG Registro generador de Baud Rate

SPBRG

RC7/RX/DT

SPEN

Patilla del bufferde control

Recuperaciónde datos

Stop (8) 7 å åå 1 0 Start

Registro RSRMsb LSb

Rx9

8

CRENOERR FERR

8

RX9D Registro RCREG

RX9ADDEN

RX9ADDEN

RSR<8>

Habilitacarga del

bufferreceptor

Interrupción8

Bus de datos

FIFO

RCIF

RCIE

P64

P16o

Figura 5.- Diagrama de Bloques delMódulo USART configurado en modoReceptor

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

Page 7: Curso de microcontroladores capitulo 12

66RESISTOR

CREN (RCSTA<4>). El dato estomado de la patilla RC7/WDT porcada flanco de caída del reloj , si el bitSREN está a uno, sólo se recibir unapalabra, pero si se borra el bit CREN larecepción ser continua. Después delúltimo impulso de reloj, el datorecibido en el registro dedesplazamiento RSR será transferidoal RCREG (si está vacío). Una vezhaya terminado la recepción se originaruna interrupción si ésta está habilitada,RCIE (PIE1 <5>).

Los pasos a seguir para iniciar larecepción en modo master son lassiguientes:

Inicializar el registro SPBRG con elvalor apropiado de baudios.

Habilitar el puerto master asíncronocolocando a uno los bits SYN, SPENy CSRC.

Asegurarse de que los bits CREN ySREN están borrados.

Si se desea emplear la interrupciónhabilitarla poniendo a uno el bit RCIE.

Si se desean nueve bits poner a unoel bit RX9.

Si sólo se desea una recepción única,poner a uno el bit SREN; para recep-ción continua poner a uno el bitCREN.

El flag de interrupción RCIF se pone

a uno cuando la recepción haya fina-lizado si está habilitada por el bitRCIE.

Leer el registro RCSTA y cargar elnoveno bit (si está habilitado) y com-probar si ha ocurrido un error duran-te la recepción.

Leer el octavo bit recibido y dar lec-tura al registro RCREG.

Si ha ocurrido un error borrarlo po-niendo a cero el bit CREN.

MODO ESCLAVO SÍNCRONOEste modo de trabajo difiere del

modo master, pues la señal de reloj dedesplazamientos es proporcionada

RC7/RX/DT (pin)

Carga RSR

Lectura

RCIF

bitStart bit 0 bit 1 bit 8 bit 0 bit 8 bit

Stopbit

Stop

bitStart

Bit8=0, Byte de datos Bit8=1, Byte de dirección PALABRA1RCREG

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

RC7/RX/DT (pin)

Carga RSR

Lectura

RCIF

bitStart bit 0 bit 1 bit 8 bit 0 bit 8 bit

Stopbit

Stop

bitStart

Bit 8 = 1. Byte de Dirección Bit8 = 0, Byte de Datos PALABRA1RCREG

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

Figura 7

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

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

Registros de Sincronización en modo master en transmisiónDirecció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 Reset0Bh, 8Bh,108Bh,18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u0Ch PIR1 PSPIF(1 ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 000018h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000X 0000 000X1Ah TXREG Registro Receptor USAR 0000 0000 0000 00008Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 000098h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –01099h SPGBRG Registro generador de Baud RateLeyenda x = desconocido u= sin cambios - = Sin implementar, se lee "0"

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

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

Page 8: Curso de microcontroladores capitulo 12

67RESISTOR

Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1Q2Q2Q2 Q2Q2Q2Q2Q2Q2Q2Q2Q3 Q3 Q3 Q3 Q3 Q3 Q3Q3 Q3 Q3 Q3 Q3Q4Q4Q4 Q1Q4Q4Q4Q4Q4Q4Q4Q4Q4

Bit0 Bit 1 Bit 2 Bit0 Bit 1Bit 7 Bit 7

Palabra 1 Palabra 2

RC7/RX/DT pin

TC6/TX/CK pin

Escritura enReg. TXREG

bit TXIF(Flag de Interrupción)

bit TRMT

bit TXEN"1" "1"

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

Figura 8

externamente por la patillaRC6/TX/CK en lugar de ser generadainternamente, esto permite que sepuedan transferir o recibir datos cuandoel dispositivo está en el modo Sleep.Las operaciones de transmisión sonidénticas al modo Master, excepto en elcaso del modo Sleep.

Si se escriben dos palabras en elregistro TXREG y después se ejecuta lainstrucción Sleep, ocurrirá lo siguiente:La primera palabra será inmediata-

mente transferida al registro TSR ytransmitida.

La segunda palabra permanece en elregistro TXREG.

El bit TXIF no se pondrá a uno. Cuando la primera palabra haya sali-

do del registro TSR, la segunda pala-

bra, que permanece en el registro TX-REG, se envía al TSR y el flag TXIFse pone a uno.

Si está habilitado el bit TXIF la inte-rrupción despierta al microcontroladorde modo Sleep y el programa saltar ala dirección del vector de interrupcio-nes (0004 hex.).

EJEMPLOS DE CONTROL DELUSAR CONECTADO ALPUERTO SERIE DELORDENADOR

Para poder conectar las líneas delPIC16F87X que entrega niveles TTLcon el puerto serie RS-232 que soncompatibles, es necesario utilizar uncircuito interface que traduzca los datosdel microcontrolador al puerto serie del

ordenador y viceversa, nosotroshemos utilizado un MAX232, te-niendo mucho cuidado para noequivocarnos con la polaridad delos condensadores. El circuito uti-lizado es el que se muestra en laFigura 10. Los lectores que lo de-seen pueden ponerse en contactocon el autor de este curso en [email protected] para solicitar lasplacas del entrenador de micro-controladores PIC de bajo costoque se ha diseñado para elaprendizaje de estos microcon-troladores.

Además del circuito, necesi-taremos para comprobar el funciona-miento los estos ejemplos de comuni-caciones, necesitamos un programa decomunicaciones como el HiperTerminalde Windows y un cable serie en cone-xión de MODEM nulo, que deberá deconectarse tal y como se muestra en laFigura 11.

EL HyperTerminal es un programageneral de comunicaciones de Win-dows, que resulta válido para conectar-se con otros ordenadores o dispositi-vos. Hay programas de comunicacio-nes mucho más potentes que éste. Sinembargo, HyperTerminal se caracterizapor su facilidad de uso y su fácil ad-quisición ya que viene integrado dentrode Windows. Puede ocurrir que el pro-grama HyperTerminal no esté cargado,

TRANSMISIÓN SINCRONA

pin RC7/RX/DT bit 0 bit 1 bit 2 bit 6 bit 7

Pin RC6/TX/CK

Escritura enel reg. TXREG

bit TXIF

bit TRMT

bit TXEN

TRANSMISIÓN ASINCRONA ( a traves del TXEN)

Registros de Sincronización en modo master en recepciónDirecció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 Reset0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMREIF TMR1IF 0000 0000 0000 000018h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000X 0000 000X1Ah RCGEG Registro Receptor USAR 0000 0000 0000 00008Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 000098h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 –010 0000 –01099h SPGBRG Registro generador de Baud RateLeyenda x = desconocido u= sin cambios - = Sin implementar, se lee "0"

Figura 9

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

Page 9: Curso de microcontroladores capitulo 12

MICR

OCON

TROL

ADOR

ES

68RESISTOR

para ello hay que seguir el mismo pro-cedimiento que para cualquier otro pro-grama de Windows, ejecutando en elsiguiente orden: Panel de Control >Agregar o Quitar programas > Insta-lación de Windows > Comunicacionesy activar la casilla correspondiente aHyperTerminal.

Para ejecutar HyperTerminal hayque seguir los siguientes pasos:1. Activar Inicio > Programas > Acce-

sorios > Comunicaciones y selec-

VCC

C41µF

C51µF U1

TXPC

RC7

RC6

C3

10nFMAX232

1413

12

11

9

10

1516

RXPC

TXPC

C61µF

C71µF

1

2

3

6

4

5

8

7

C1+

V+

C1-

V-

C2+

C2-

T1OUT

R1IN

R10UT

T1IN

9

10

8

7 GND

VCC

1

DB9

5 9 4 8 3 7 2 6

VCC

RXPC

Vcc= 5V

MCLR

RA0RA1RA2RA3RA4RA5Vss

OSC1

OSC2/CKOUT

RC0RC1RC2RC3

RB7

RB6

RB5RB4RB3RB2RB1RB0

VDD

VSS

RC7RC6RC5RC4

Reset

R110KΩ

R2 100Ω

R9 300Ω

R8 300Ω

R7 300Ω

R6 300Ω

R5 300Ω

R4 300Ω

RB0

RB1

RB2

RB3

RB4

RB5

RB6

R3 300Ω

Vcc=5V

C1 27 pF

C2 27 pF

XT 4Mhz

R10 300Ω RB7

PIC16F876

Figura 10.- Circuito de aplicación paracomprobar el funcionamiento del USART

del PIC16F876 y el puerto serie delordenador.

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

Figura 14 HyperTerminal.Figura 12.-Hipertermina

Figura 13.- Conectar con...

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

Page 10: Curso de microcontroladores capitulo 12

MICR

OCON

TROL

ADOR

ES

69RESISTOR

cionar HyperTerminal. Se advierteque no se trata de un programa, si-no de una carpeta cuyo contenido esun único programa denominada Hy-pertrm. Cada vez que se ejecuta elprograma Hypertrm se le pide alusuario la información suficiente pa-ra crear en la carpeta HyperTermi-nal una nueva conexión, es decir, unlugar de destino con el que conec-tarse.

2. Ejecutar el programa Hypertrm paracrear una nueva conexión, se le pre-gunta el nombre que asignará a la co-nexión, teclear por ejemplo"PIC16F876" y elegir un icono conel que se quiera representar la cone-xión, figura 12.

3.En la siguiente pantalla Conecta conelegir la opción Conectar usando: Di-

recto a Com2, figura 13. Se va a utili-zar el puerto serie Com2 para comu-nicar el ordenador y el microcontro-lador. También se puede elegir elCOM1.

4. Aparece una pantalla con lasPropiedades de COM. Seleccionar lasapropiadas para el sistema utilizado. Paranuestros ejemplos utilizamos lasopciones que se muestran en la figura 14.

5. A continuación aparece la pantalla detrabajo tal como la mostrada en lafigura 15.

Para conectar el ordenador y elmicrocontrolador a través del puertoserie COM 2, basta con activar la opción"Llama" (o icono de teléfono colgado) ypara desconectar hay que activar opción"Desconecta" (o icono de teléfonodescolgado. Una vez configurada una

conexión, para comenzar lacomunicación simplemente ha deejecutar el icono de la conexiónpreviamente configurada tal como semuestra en la figura 16.

El programa monitor232.asmconfigura el USART para trabajar a9.600 baudios, con un bit de Stop y sinbit de paridad, seguidamente se queda ala espera de recibir un dato por el puertoserie y cuando lo hace lo muestra en elPORTB.

Por su parte el programaTransmite232.asm configura el USARTpara trabajar a 9.600 baudios, con un bitde Stop y sin bit de paridad,seguidamente transmite cada segundo lacadena de caracteres "HOLA" cadasegundo que se reflejan en elHiperTerminal.

Figura 15 .-Hyperterminal. Pantalla de trabajoFigura 16.- Hyperterminal. Ejemplos de conexionesconfiguradas

; ;*********************************************************************************; 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 procesadorINCLUDE <P16f876.inc> ;se incluye la definicion de los

CBLOCK 0x20Buffer ;Buffer entrante

ENDC

;***************************** VECTOR DE RESET *************************************; ORG 0x00 ;Inicio en el Vector de Reset; goto INICIO ;Va a la primera instrucción del

;programaORG 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 69

Page 11: Curso de microcontroladores capitulo 12

clrf PORTC ;del PORTB y del PORTC

bsf STATUS,RP0 ;Selecciona el Banco1clrf TRISB ;Puerta B como salidamovlw b'10011111' ;RC7/Rx entrada,movwf TRISC ;RC6/Tx salida y RC5 Salida.movlw b'00000100' ;Configuracion USARTmovwf TXSTA ;y activacion de transmisionmovlw .25 ;9600 baudiosmovwf SPBRGbcf STATUS,RP0 ;Selecciona el Banco 0

bsf RCSTA,SPEN ;se activa la USARTmovlw b'10010000' ;Configuracion de la usart movwf RCSTA ;para recepcion continua

;------Bucle de comprobacion si llega dato mayor de 0 por puerto serie------

BUCLE movf RCREG,W ;Lectura dato recibidomovwf Buffer ;Visualiza dato recibidomovlw .0 ;comprueba que se reciba algo quesubwf Buffer,W ;no sea cero...btfsc STATUS,Cgoto Mayordecero ;dato valido.goto BUCLE ;dato no valido.. es cero..vuelve.

Mayordecero movf Buffer,W ;muestra el dato en portbmovwf PORTB ;y lo deja ayi hasta que llegue otrogoto BUCLE ;retorna a esperar otro dato valido

;*****************************************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la página 0goto INICIO ;Salto a la dirección de INICIO del programa

;*****************************************************************************

END

;***********************************************************************; PROGRAMA :Trans232.asm;Este programa transmite los bytes ASCII "HOLA "por el puerte serie del microcontrolador; a intervalos de 1 segundo.; Configuración del piuerto serie COM: 9600 baudios,8 bits,paridad = none; ; Revision : 1.0 Programa para : PIC16F876; CPU Clock : 4 MHz Reloj instruccion : 1 MHz = 1 us; 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 losCBLOCK 0x20

ContadorAContadorBContadorC

ENDC;************************************ VECTOR DE RESET *********************; ORG 0x00; goto INICIO ;Va a la primera instruccion del programa

ORG 0x05

;*******************************INICIO PROGRAMA PRINCIPAL ****************INICIO clrf PORTB ;Limpia PORTB y PORTC

clrf PORTC

bsf STATUS,RP0 ;Selecciona el Banco 1clrf TRISB ;Puerta B como salidamovlw b'10111111' ;RC7/Rx entrada,movwf TRISC ;RC6/Tx salida.

movlw b'00100100' ;Configuración USARTmovwf TXSTA ;y activación de transmisiónmovlw .25 ;9600 baudiosmovwf SPBRGbcf STATUS,RP0 ;Selecciona el Banco 0

bsf RCSTA,SPEN ;se activa la USARTbsf STATUS,RP0 ;Selecciona el Banco 1

bsf TXSTA,TXEN ;Habilita la transmisiónbcf STATUS,RP0 ;Selecciona el Banco 0

Bucle call Delaymovlw 'H' ;Carácter ASCII movwf TXREG ;

bsf STATUS,RP0 ;Selecciona el Banco 1

COMP_TX btfss TXSTA,TRMT ;comprueba si acabo de Tx.goto COMP_TXbcf STATUS,RP0 ;Selecciona el Banco 0movlw 'O' ;carácter ASCII movwf TXREGbsf STATUS,RP0 ;Selecciona el Banco 1

COMP_TX_2 btfss TXSTA,TRMT ;comprueba si acabo de Tx.goto COMP_TX_2bcf STATUS,RP0 ;Selecciona el Banco 0movlw 'L' ;carácter ASCIImovwf TXREGbsf STATUS,RP0 ;Selecciona el Banco 1

COMP_TX_3 btfss TXSTA,TRMT ;comprueba si acabo de Tx.goto COMP_TX_3bcf STATUS,RP0 ;Selecciona el Banco 0movlw 'A' ;carácter ASCII movwf TXREGbsf STATUS,RP0 ;Selecciona el Banco 1

COMP_TX_4 btfss TXSTA,TRMT ;comprueba si acabo de Tx.goto COMP_TX_4bcf STATUS,RP0 ;Selecciona el Banco 0movlw '-' ;carácter ASCII en decimalmovwf TXREGgoto Bucle

;**************************SUBRUTINAS *********************;Delay = 1,0000020 s with Osc = 4 MHzDelay movlw D'6'

movwf ContadorCmovlw D'24'movwf ContadorBmovlw D'168'movwf ContadorA

loop decfsz ContadorA,Fgoto loopdecfsz ContadorB,Fgoto loopdecfsz ContadorC,Fgoto loopreturn

;***********************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la página 0goto INICIO ;Salto a la dirección de

INICIO del programa;**********************************************************

END

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