Está en la página 1de 16

El puerto serial RS232, permite la comunicación serial de un procesador a otro, otro

microcontrolador, con otra computadora, dispositivos como el mouse, impresoras, entre otros.

Existe la transmisión de información binaria: paralela y serial.

La transmisión paralela permite que los bits de un dato o instrucción se realicen con un solo pulso
de reloj, la transmisión es rápida y la desventaja es que se requieren una gran cantidad de
terminales, lo que encarece los costos de transmisión además el mantenimiento y
acondicionamiento se incrementa al aumentar las distancias de transmisión.

La comunicación serial, transmite un bit cada pulso de reloj, por lo que es más lenta, pero solo
requiere de dos a tres líneas de transmisión, para la transferencia de información y las distancias
de transmisión aumentan notablemente y con el uso de modem, la comunicación se puede
realizar a cualquier lugar del planeta.
Existen dos tipos de transmisión serial: síncrona y asíncrona.

La comunicación síncrona, se requiere una línea para transmitir la información y una segunda para
el pulso de reloj, el cual sincroniza la transmisión de información entre emisor y receptor.

La comunicación asíncrona, no se requieren pulsos de reloj para la transmisión y recepción de


información, esta forma de comunicación se describe a continuación.

El procedimiento normal para demarcar caracteres durante la transmisión asíncrona es


enviar al menos dos bits adicionales con cada carácter .

Estos bits adicionales son llamados bits de paro y de inicio. Por ejemplo, una unidad de
teletipo usa un código de carácter de 8 bits pero envía 11 bits por cada carácter transmitido.
El primer bit es el bit de inicio. Está seguido por los 8 bits del carácter y luego por los dos
bits de paro.

En este sistema es permanecer en el estado 1 cuando no se transmiten caracteres. El primer


bit es siempre CERO y es el bit de INICIO para indicar el inicio de un carácter. El receptor
puede detectar el bit de comienzo cuando la línea va de 1 a 0. Un reloj en el receptor
conoce la razón de transferencia y el número de bits del carácter que se esperan. Después
de los 8 bits de caracteres, el receptor comprueba los dos bits de PARO. El tiempo que la
línea permanece en 1, es utilizado para que el sistema se re sincronice.
SIGNAL PIN No.
Carrier Detect 1
Receive Data 2
Transmit Data 3
Data Terminal Ready 4
Signal Ground 5
Data Set Ready 6
Request To Send 7
Clear To Send 8
Ring Indicator 9
Puerto de comunicación serie síncrono:

Este módulo, llamado MSSP, integrado en los PIC16F87X proporciona un excelente medio de
comunicación con otros microcontroladores o periféricos que trabajan en serie.

Tiene dos alternativas de trabajo:

 SPI (Serial Peripheral Interface).


 I2C (Inter-Integrated Circuit).

La comunicación en modo SPI la utilizan principalmente las memorias RAM y EEPROM y utiliza tres
líneas. En el modo I 2C sólo se emplean dos líneas y se usa en la comunicación de circuitos
integrados diversos. Básicamente el módulo MSSP está basado en dos registros: el SSPSR, que es
un registro de desplazamiento que transforma la información serie en paralelo y viceversa, y el
registro SSPBUF, que actúa como buffer de la información que se recibe o se transmite en serie. En
transmisión, el byte que se desea enviar se carga en el SSPBUF y automáticamente se traspasa a
SSPSR, donde se va desplazando bit a bit, sacándolo al exterior al ritmo de los pulsos de reloj. En
recepción, los bits van entrando al ritmo del reloj por una pata del PIC y se van desplazando en el
SSPSR hasta que lo llenan, en cuyo momento se traspasa la información al SSPEUF.

En el modo SPI se utilizan tres líneas del PIC, mientras que en el modo I 2C sólo se emplean dos
líneas para la comunicación del PIC maestro con los circuitos integrados que funcionan como
esclavos.
USART: El USART soporta la comunicación serie síncrona y asíncrona. Puede funcionar como un
sistema de comunicación bidireccional asíncrono o full duplex, adaptándose a multitud de
periféricos que transfieren información de esta manera. También puede trabajar en modo
unidireccional o halfduplex.

En resumen puede trabajar de tres maneras:

 SERIE ASÍNCRONA (Full duplex, bidireccional).


 SERIE SÍNCRONA-MAESTRO (Halfduplex, unidireccional).
 SERIE SÍNCRONA-ESCLAVO (Halfduplex, unidireccional).

En el primero, las transferencias de información se realizan sobre dos líneas TX y RX, saliendo y
entrando los bits por dichas líneas al ritmo de la frecuencia controlada internamente por el USART.
En el modo síncrono la comunicación se realiza sobre dos líneas, la DT, que traslada los bits en
ambos sentidos a la frecuencia de los pulsos de reloj que salen por la línea CK desde el maestro.

EL USART EN MODO ASÍNCRONO

En este modo de comunicaciones se emplea una configuración estándar de un bit de Start,


ocho o nueve bits de datos, y un bit de Stop. Este modo de trabajo se detiene durante la

función Sleep. Aunque el USART tiene funciones independientes para la transmisión y


recepción, los formatos de datos y de velocidad de transmisión es igual para los dos casos.
El generador de baudios produce siempre las señales de reloj x16 ó x64 dependiendo de
BRGH (TXSTA<2>) para el desplazamiento de los bits. El bit de paridad no está soportado
por el hardware, pero se puede implementar por software empleando para ello el noveno bit
de datos.
La selección del modo asíncrono se realiza poniendo a cero el bit SYNC (TXSTA<4>).

El modulo asíncrono del USART se consigue con la combinación de importantes


elementos:

· El generador de baudios (SPBRG).


· Transmisor asíncrono (TXSTA Y TXREG)
· Receptor asíncrono (RCSTA y RXREG).
· Al usar Interrupciones, los registros (PIE y PIR1)

GENERADOR DE BAUDIOS DEL USART (BRG).

En el protocolo asíncrono RS-232 la frecuencia en baudios a la que se realiza la transferencia se


debe efectuar a un valor normalizado: 330, 600,1.200, 2400, 4800, 9600, 19.200, 38.400, etc. Para
generar esta frecuencia, el USART dispone de un generador de frecuencia en Baudios, BRG, cuyo
valor se controla por el contenido del registro SPBRG.

Además del valor X cargado en el registro SPBRG. La frecuencia en baudios del generador depende
del bit BRGH (TXSTA<1>). Si BRGH=0 se trabaja a baja velocidad y si BRGH=1 se trabaja a alta
velocidad. Según este bit se obtendrá el valor de una constante K necesaria para determinar la
frecuencia de funcionamiento.

Este generador sirve tanto para el modo síncrono como el asíncrono y consiste de un
contador/divisor de frecuencia de 8 bits controlado por el registro SPBRG (99H). De tal manera
que la frecuencia de transmisión se calcula de acuerdo a la siguiente tabla:
EL USART TRANSMISIÓN ASÍNCRONA

Para realizar una transmisión de datos, el registro de desplazamiento TSR obtiene los datos del
registro (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 caso el bit TXIF (PIR1 <4>)
se pone a uno, y se genera una interrupción si está habilitada (PIE1 <4>).

Los pasos necesarios para realizar una transmisión asíncrona son los siguientes:

· Inicializar el registro SPBRG con el valor apropiado según los cálculos realizados.
Si se desea el margen alto se pondrá a uno el bit BRGH.
· Habilitar el puerto asíncrono borrando el bit SYN y poniendo a uno el SPEN.
· Habilitar la interrupción (si se desea) poniendo a uno el bit TXIE.
· Poner a cero o a uno el bit TX9 (8 ó 9 bits).
· Habilitar la transmisión poniendo a uno el bit TXEN, el cual pondrá a uno el bit
TXIF.
· Si se han seleccionado 9 bits se deben poner el noveno en el bit TX9D.
· Cargar el dato en el registro TXREG (comenzar la transmisión).

Programa ensamblador en MPLAB

;*********************************************************************
; PROGRAMA transmisión serie ASINCRONA.
; Este programa transmite los bytes ASCII "TEMP ºC" por el puerto ;serie
del microcontrolador
; a intervalos de 1 segundo.
; Configuración del puerto serie COM: 9600 baudios,8 bits
;*********************************************************************

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


INCLUDE <P16f873.inc>

ContadorA EQU 30H


ContadorB EQU 31H
ContadorC EQU 32H

;VECTOR DE RESET

ORG 0x00
goto INICIO ;Va a la primera instruccion del programa
ORG 0x05

;RETARDO = 1,0000020 s con Oscilador = 4 MHz

Delay movlw D'6'


movwf ContadorC
movlw D'24'
movwf ContadorB
movlw D'168'
movwf ContadorA
loop decfsz ContadorA,F
goto loop
decfsz ContadorB,F
goto loop
decfsz ContadorC,F
goto loop
return

;INICIO PROGRAMA

INICIO
bsf STATUS,RP0 ;Selecciona el Banco 1

movlw b'10111111' ;configuración de


movwf TRISC ;RC7/Rx entrada, RC6/Tx salida.

movlw b'00100100'
movwf TXSTA ;Configuración USART

movlw .25
movwf SPBRG ;9600 baudios

bcf STATUS,RP0 ;Selecciona el Banco 0


bsf RCSTA,SPEN ;se activa la USART

bsf STATUS,RP0 ;Selecciona el Banco 1


bsf TXSTA,TXEN ;Habilita la transmisión

bcf STATUS,RP0 ;Selecciona el Banco 0

Bucle call Delay

movlw 'T' ;Carácter ASCII a desplegar


movwf TXREG ;se carga el caracter an TXREG
bsf STATUS,RP0 ;Selecciona el Banco 1
COMP_TX btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX
bcf STATUS,RP0 ;Selecciona el Banco 0

movlw 'E' ;carácter ASCII


movwf TXREG
bsf STATUS,RP0 ;Selecciona el Banco 1
COMP_TX_2 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX_2
bcf STATUS,RP0 ;Selecciona el Banco 0

movlw 'M' ;carácter ASCII


movwf TXREG
bsf STATUS,RP0 ;Selecciona el Banco 1
COMP_TX_3 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX_3
bcf STATUS,RP0 ;Selecciona el Banco 0

movlw 'P' ;carácter ASCII


movwf TXREG
bsf STATUS,RP0 ;Selecciona el Banco 1
COMP_TX_4 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX_4
bcf STATUS,RP0 ;Selecciona el Banco 0
movlw b'100000' ;carácter ASCII en binario
movwf TXREG
bsf STATUS,RP0 ;Selecciona el Banco 1
COMP_TX_5 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX_5
bcf STATUS,RP0 ;Selecciona el Banco 0

movlw b'11111000' ;carácter ASCII en binario


movwf TXREG
bsf STATUS,RP0
COMP_TX_6 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX_6
bcf STATUS,RP0 ;Selecciona el Banco 0

movlw 'C' ;carácter ASCII


movwf TXREG
bsf STATUS,RP0
COMP_TX_7 btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX_7
bcf STATUS,RP0 ;Selecciona el Banco 0
movlw ' ' ;carácter ASCII
movwf TXREG

goto Bucle
END

Descripción de configuración de los registros mediante el programa.

1. Seleccionamos el Banco 1
2. Cargamos en W el valor binario b'10111111'
3. Movemos el valor en W hacia el registro TRISC, para configurar las patillas
RC7/Rx y RC6/TX como entrada y salida respectivamente.
4. Ahora cargamos a W con el valor binario b'00100100'
5. Movemos el valor en W hacia el registro TXSTA

De esta manera queda las siguientes condiciones:


6. Cargamos el valor 25, en notación decimal, al registro W
7. Cargamos el valor de W en el registro SPBRG, de esta forma seleccionamos los
baudios a los que se desea trabajar (en este caso 9600)
8. Regresamos al Banco 0
9. Activamos el USART poniendo en 1 el bit SPEN del registro RCSTA
10. Pasamos al Banco 1

11. Habilitamos la transmisión poniendo a 1 el bit TXEN del registro TXSTA (antes
descrito.)
12. Regresamos al Banco 0 y comenzamos el programa principal.
13. Se inicia con un retardo de 1 segundo.
14. Se carga en el registro W el carácter a transmitir
15. Se mueve este carácter al registro TXREG
16. Después de cargar el carácter en TXREG este comienza la transmisión y el bit
TRMT se pone en 0.
17. Debemos movernos al banco 1 y explorar este bit y cuando cambie a 1 podremos
continuar y cargar un nuevo carácter o valor para ser transmitido nuevamente.
18. Regresamos al banco 0.
19. Para transmitir otro carácter repetimos los pasos descritos desde en paso 14.
20. Terminamos el programa END.

Circuito simulado en PROTEUS fue:

https://www.youtube.com/watch?v=4Q18tyi8J-Y&t=2324s

También podría gustarte