curso de microcontroladores capitulo 12
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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