Está en la página 1de 17

Sistemas Embebidos

 Comunicación Serial

José Oliden Martínez


Transmisión / Recepción Serial

•Emisión/ recepción de información.

•Dos grandes grupos: Ordenes y Datos (muestras).

•Conectar el PIC con el mundo externo a través de comunicación serial


en modo asíncrono.

José Oliden Martínez


Qué es y para qué sirve la RS232?
El estándar RS232 define una serie de especificaciones para la
transmisión de señales de modo serial entre dos dispositivos, DTE
(Data Terminal Equipment, que se encarga de gestionar una
comunicación) y DCE (Data Comunication Equipment, que se ocupa
de enviar o recibir data).
El estándar RS232 es utilizado sólo en la comunicación entre el DTE
y DCE.

José Oliden Martínez


En nuestro caso...

José Oliden Martínez


La comunicación serial asíncrona

Una comunicación serial consiste en transmitir datos de un punto a otro


a través de un código o protocolo de comunicación que especifica
velocidad de envío de datos, número de bits enviados, si hay
reconocimiento o detección de error, etc. La transmisión serial la vamos
a realizar a través del conector DB9 y sus pines y funciones son los que
se muestran en la tabla del laboratorio, sirven para normar la
comunicación entre los puntos.

2 RX
3 TX
5 GND

José Oliden Martínez


Conexión DTE-DTE

RX RX
TX TX

GND GND

DTE 1 (MACHO) DTE 2 (MACHO)

José Oliden Martínez


Conexión DTE-DCE

RX TX
TX RX

GND GND

DTE (Macho) DCE (Hembra)

José Oliden Martínez


La trama

La trama o secuencia de bits para la transmisión de un byte de


información se muestra en la figura, Qué se aprecia?

A mayúscula cuyo valor en binario es 01000001

José Oliden Martínez


Funcionamiento del MAX232 :

José Oliden Martínez


USART
En el PIC16F877A contiene un módulo USART que le permite transferir información
de manera serial utilizando la norma RS-232.
Los datos se transmiten por el pin RC6/TX/CK y se reciben por el pin RC7/RX/DT, la
velocidad a la que viajan los datos se determina por un generador de baudios.
Los datos se transmiten con un bit de INICIO (‘0’ lógico), seguido de los 8 o 9 bits de
datos (comenzando por el bit de menor peso) y finalmente un bit de STOP (‘1’ lógico).
Para generar la velocidad de transferencia de los datos hay que grabar un valor en el
registro SPBRG y además considerar el valor del bit BRGH (bit 2 del registro TXSTA).
Si el bit BRGH=0 entonces la constante K=64.
Si el bit BRGH=1 entonces la constante K=16.

Frecuencia en baudios = Fosc / (K * (SPBRG + 1) )

Mirar el Data Sheet del microcontrolador y ubicar la tabla de velocidades


José Oliden Martínez
USART: Transmisión
La transmisión se inicia cargando el dato en el registro TXREG, que pasan luego al
registro TSR que se encarga finalmente de transmitir el dato bit por bit por el pin RC6.
Cuando el buffer queda vacío, el bit TXIF se pone a ‘1’ para advertir que se puede
transmitir otro dato. Al escribirse otro dato en el registro TXREG, el bit TXIF se pone a
‘0’. También tenemos el bit TRMT que toma el valor de ‘1’ cuando el registro TSR
está vacío.

José Oliden Martínez


AQUI

USART: Recepción

Para iniciar la recepción se coloca el bit CREN=‘1’ (registro RCSTA). Los bits son
recibidos uno a uno y cuando se llena el buffer RSR considerando el bit No9 (RX9=1)
el señalizador RCIF se pone a 1, pudiendo generar una interrupción.

José Oliden Martínez


José Oliden Martínez
Rutinas
;****************************************************************************************************
; Inicialización del USART del PIC, ; deja habilitadas las interrupciones de Rx y Tx serial
; Vtx=19200 bps, asíncrona, 8 bits
; Operaciones del port habilitadas
;****************************************************************************************************
Iniciar_USART
bcf RCSTA,CREN ;aclara OVERRUN error bit
nop
bsf RCSTA,CREN
banco1
movlw B'00100000' ;operación asíncrona, 8bits, Tx on
movwf TXSTA
movlw .12 ;Vtx=19200 baudios; Xtal=16Mhz,
; movlw .25 ;Vtx= 9600 baudios; Xtal=16Mhz,
movwf SPBRG
banco0
movlw B'10010000' ;hab. operaciones en port serial,hab. recepción
movwf RCSTA
clrf TXREG ;aclarar buffers del port serial
clrf RCREG
return

José Oliden Martínez


Rutinas

;***********************************************
; Rutina de envío de caracteres
; el dato debe estar en el registro W (no se modifica)
;************************************************************
TxCar
nop ;asegura la estabilización del port
nop
bsf STATUS,RP0

TxCar1 btfss TXSTA,TRMT ;check estado del transmisor para enviar


goto TxCar1 ;si no esta listo intentar nuevamente
bcf STATUS,RP0
movwf TXREG ;transmitir un nuevo dato
return

José Oliden Martínez


Rutinas
; Rutina de recepción de caracteres
RxCar
movlw 06h ; enmascara. bits no deseados
andwf RCSTA,W ; chequeo de errores
btfss STATUS,Z
goto RxError ; error! flag
btfss PIR1,RCIF ; chequeo por dato listo
return ; NO, regresa
movf RCREG,W ; SI, lee el contenido del reg. serial
bsf regrx,0 ; setea flag de recepción
return

RxError:
bcf RCSTA,CREN ; aclara OVERRUN error bit
nop
bsf RCSTA,CREN
movlw "X"
call EnviaCarLCD
call ret300ms
movlw "E"
call EnviaCarLCD
call ret300ms
return
José Oliden Martínez
Rutinas en C
; Rutina de recepción de caracteres

#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)

void main() TERMINAL PC 232


{ RXD

int valor = 0; TXD

RTS
MCU_init(); CTS

lcd_putc("\fConversor AN0\n"); RV1 13


U1
33
RS232
Simula el puerto COM de la PC
OSC1/CLKIN RB0/INT
printf(“\fConversor AN0\n”); 14
OSC2/CLKOUT RB1
RB2
34
35
53%
2 36
delay_ms(1000); 3
4
RA0/AN0
RA1/AN1
RB3/PGM
RB4
37
38 LCD1
RA2/AN2/VREF-/CVREF RB5 LM016L
5 39
RA3/AN3/VREF+ RB6/PGC
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD
7
while(TRUE){ 8
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
15
16
RE0/AN5/RD RC1/T1OSI/CCP2
set_adc_channel(0); 9
10
RE1/AN6/WR
RE2/AN7/CS
RC2/CCP1
RC3/SCK/SCL
17
18

VDD
VSS

VEE

RW
23

RS

D0
D1
D2
D3
D4
D5
D6
D7
delay_ms(10); RC4/SDI/SDA

E
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK

1
2
3

4
5
6

7
8
9
10
11
12
13
14
valor=read_adc(); RC7/RX/DT
26

19
RD0/PSP0
output_c(valor); RD1/PSP1
20
21
RD2/PSP2
22
printf(lcd_putc,"\f%4u",valor); RD3/PSP3
RD4/PSP4
27
28
RD5/PSP5
printf("\f%4u",valor); RD6/PSP6
RD7/PSP7
29
30

} PIC16F877A

José Oliden Martínez

También podría gustarte