Académique Documents
Professionnel Documents
Culture Documents
MICROCONTROLADORES II
MDULO USART
(Comunicacin Serial Asncrona)
PROF. LUIS ZURITA
INTRODUCCIN
En los sistemas con microcontroladores puede existir
la necesidad de conectarse con el mundo exterior, y
esto se logra mediante las comunicaciones seriales y
paralelas.
En este tema se tratar la comunicacin serial
asncrona mediante el mdulo USART. Dicha
comunicacin permite establecer un enlace de
comunicacin tipo Full Duplex.
RC6/TX
RC7/RX
C
Prof. Luis Zurita
TX
RX
RX
TX
GND
Dispositivo
Externo
Microcontroladores II
20/05/2013
PROTOCOLO RS-232
Este protocolo es el utilizado por los
microcontroladores y su mdulo USART.
Cada dato se enva independientemente de los
dems.
Consta de 8 9 bits de datos
Consta de 1 bit de Inicio (START)
Consta de 1 bit de Parada (STOP)
BIT INICIO
LSB
DATO
MSB
BIT PARADA
Microcontroladores II
MDULO USART
1. Circuito de Muestreo (RC7/RX)
2. Generador de Baudios
La frecuencia en baudios (bits por segundos) es la
velocidad a la que se realiza la transferencia de
datos. Valores normalizados: 330, 600, 1200, 2400,
4800, 9600, 19200, 38400, otros.
El USART tiene un generador de Frecuencia en
baudios, BRG. Su valor es controlado por el
Registro SPBRG.
La frecuencia en baudios del generador depende
del bit BRGH del registro TXSTA (2).
Prof. Luis Zurita
Microcontroladores II
20/05/2013
TRANSMISOR ASNCRONO
El dato a transmitirse se coloca en TXREG. De
inmediato pasa al registro de desplazamiento TSR,
que empieza a sacar los bits secuencialmente, segn
la frecuencia establecida. Se incluye antes de los
datos el bit de Inicio. Y despus de los bits de datos,
se agrega el bit de parada.
Como podemos ver, el corazn del transmisor lo
constituye el TSR, cuyo contenido es cargado con el
Dato a transmitir desde el TXREG.
Lo va sacando bit a bit desde el LSB hasta el MSB.
Microcontroladores II
TRANSMISOR ASNCRONO
Microcontroladores II
20/05/2013
TX9D
TX9=1
TXREG
1 bit
8 bits
REGISTRO DE DESPLAZAMIENTO DE SALIDA
RC6/TX
D0
D1
D2
D3
D4
D5
D6
D7
Bit start
1
Bit stop
D0
D1
D2
D3
D4
D5
D6
Bit start
Prof. Luis Zurita
D7
TX9D
1
Bit stop
Tramas a enviar
Microcontroladores II
RECEPTOR ASNCRONO
Los datos se reciben en serie, bit a bit, por el pin RC7/RX, y se
van introduciendo secuencialmente en el registro de
desplazamiento RSR, que opera a una frecuencia 16 veces
ms rpida que la de trabajo.
Despus de recibir el bit de Stop los datos acumulados en este
registro se cargan en el de datos RCREG (si est vaco).
Cuando la transferencia se ha completado, el bit RCIF (PIR1,5)
se pone a uno. La interrupcin puede habilitarse o
deshabilitarse colocando a uno o borrando, respectivamente,
el bit RCIE (PIE1,5). El bit RCIF se borra cuando el registro
RCREG se ha ledo (se "vaca" el registro).
Microcontroladores II
20/05/2013
RECEPTOR ASNCRONO
Microcontroladores II
1 bit
8 bits
Buffer
RX9=1
RX9D
RCREG
FIFO
RC7/RX
Recepcin de datos
Microcontroladores II
20/05/2013
Mdulo USART en C
Las siguientes directivas permiten una configuracin genrica
del mdulo USART:
#USE RS232 (opciones)
Esta directiva permite configurar varios parmetros del mdulo
USART, tales como la velocidad de transmisin, pines
utilizados, entre otros. Se puede modificar en cualquier parte
del programa, pero siempre despus de haber definido la
directiva #USE DELAY.
Esta directiva habilita el uso de funciones tales como GETCH,
PUTCHAR y PRINTF. Permite su uso en dispositivos que no
poseen mdulo USART mediante software USART.
Cuando se utilizan dispositivos con USART, si no se puede
alcanzar una tasa de baudios dentro del 3 % del valor deseado
utilizando la frecuencia de reloj actual, se generar un error.
Prof. Luis Zurita
Microcontroladores II
Mdulo USART en C
BAUD=X
XMIT=pin
RCV= pin
FORCE_SW
RESTART_WDT
BRGH1OK
Velocidad en Baudios
Pin de transmisin
Pin de recepcin
Usa un software UART en lugar del hardware,
an cuando se especifican los pines del
hardware.
Hace que la funcin GETC ( ) ponga a cero el
WDT mientras espera un carcter.
Permite velocidades de transmisin bajas en
chips que tienen problemas de transmisin.
Microcontroladores II
20/05/2013
Mdulo USART en C
ENABLE= pin
DEBUGGER
INVERT
PARITY= X
BITS= X
FLOAT_HIGH
Microcontroladores II
Mdulo USART en C
ERRORS
SAMPLE_EARLY
RETURN= pin
MULTI_MASTER
LONG_DATA
DISABLE_INTS
Microcontroladores II
20/05/2013
Mdulo USART en C
STOP= x
TIMEOUT= x
SYNC_SLAVE
SYNC_MASTER
UART1
UART2
Microcontroladores II
Mdulo USART en C
Ejemplos:
#use delay (clock=20000000);
#use rs232 (BAUD=9600 , XMIT=PIN_C6 , RCV=PIN_C7 , BITS=8)
#use rs232 (BAUD=9600 , XMIT=PIN_A2 , RCV=PIN_A3)
Setup_uart(baud)
baud es una constante que define la velocidad. Un 1 enciende el
USART y un 0 lo apaga. Con cualquier valor de velocidad, el USART
se enciende.
set_uart_speed (baud)
Idntica a la funcin anterior. Ejemplo:
// Se establece la velocidad mediante la combinacin de los pines B0
y B1:
switch (input_b ( ) & 3){
case 0: set_uart_speed(2400); break;
case 1: set_uart_speed(4800); break;
case 2: set_uart_speed(9600); break;
case 3: set_uart_speed(19200); break;
Microcontroladores II
20/05/2013
Mdulo USART en C
Transmisin de datos:
putc (cdata)
putchar (cdata)
cdata es un carcter de 8 bits. Esta funcin enva un
carcter mediante el pin XMIT. La directiva #USE RS232
debe situarse siempre antes de utilizar esta funcin.
puts (string)
string: cadena de caracteres constante o matriz de
caracteres terminada con un 0. La funcin puts ( ) manda
los caracteres de la cadena, uno a uno, a travs del bus
RS232 utilizando la funcin PUTC ( ); detrs de la cadena
enva un RETURN (13) y un retorno de carro (10)
Prof. Luis Zurita
Microcontroladores II
Mdulo USART en C
printf (fname, cstring, values)
cstring: es una cadena de caracteres (constante) o matriz
de caracteres terminada con un cero.
fname: las funciones a utilizar para escribir la cadena
indicada; por defecto se utiliza la funcin PUTC ( ), que
permite escribir en el bus RS232.
values: valores a incluir en la cadena separados por comas;
se debe indicar %nt. El formato es %nt, donde n es
opcional y puede ser:
1-9
para especificar cuantos caracteres deben ser
especificados;
01-09
para indicar la cantidad de ceros a la izquierda.
1.1-9.9
para coma flotante.
Prof. Luis Zurita
Microcontroladores II
20/05/2013
Mdulo USART en C
t puede indicar:
c Carcter
s Cadena o carcter
u Entero sin signo
d Entero con signo
Lu Entero sin signo
Ld Entero largo con signo
x Entero hexadecimal (minscula)
X Entero hexadecimal (mayscula)
Lx Entero largo hexadecimal (minscula)
LX Entero largo hexadecimal (mayscula)
f
Flotante con truncado
g Flotante con redondeo
e Flotante en formato exponencial
w Entero sin signo con decimales insertados. La 1ra cifra
indica el total, la 2da el nmero de decimales.
Prof. Luis Zurita
Microcontroladores II
Mdulo USART en C
Recepcin de datos:
value= getc ( );
value= getch ( );
value= getchar ( );
value (valor) es un carcter de 8 bits. Espera recibir un
carcter por la lnea RS232 y devuelve su valor. En los
dispositivos con USART interno, se pueden almacenar
hasta tres caracteres; para evitar esperas se puede
utilizar la funcin KBHIT ( ).
valor= kbhit ( );
valor es 0 (FALSE) si GETC ( ) debe esperar a que llegue un
carcter; 1 (TRUE) si ya hay un carcter listo para ser
ledo por la funcin GETC ( ).
Prof. Luis Zurita
Microcontroladores II
10
20/05/2013
Ejemplo 1. Enviar los datos del 0 al 10, en modo asncrono, entre dos
PICS. Visualizar con un LCD, los datos enviados y los datos recibidos;
la recepcin del dato deber ser por interrupcin del USART.
// PIC MAESTRO
#include <16F877.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
#include <LCD.C>
void main() {
int valor;
lcd_init();
while(1){
for (valor=0;valor<=10;valor++) {
PUTC(valor);
// Envia valor
printf(lcd_putc,"\fENVIANDO\n");
printf(lcd_putc,"%1D",valor);
delay_ms(2000);
}
}
}
Microcontroladores II
// PIC ESCLAVO
#include <16F877.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#include <LCD.C>
#BYTE TRISA=0X85
#BYTE PORTA=0X05
int valor;
#int_RDA
RDA_isr() {
valor=GETC();} //Recibe valor
void main() {
bit_clear(TRISA,0);
lcd_init();
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
for (;;) {
lcd_gotoxy(1,1);
printf(lcd_putc,"recibiendo=%1D",valor);
}
}
Prof. Luis Zurita
Microcontroladores II
11
20/05/2013
Microcontroladores II
La norma RS232
Es la ms bsica de las comunicaciones serie. Comunica un
equipo terminal de datos (DTE) con el equipo de
comunicacin de datos (DCE).
Las caractersticas elctricas de la seal en esta norma
establecen que la longitud mxima entre dos equipos no
debe ser superior a 15 metros, sin embargo, el autor ha
realizado pruebas de campo que permiten alcanzar los 30
metros. La velocidad mxima de transmisin es de 20 kbps.
Los niveles lgicos no son compatibles con los niveles TTL,
ya que se situan dentro de los siguientes rangos: 1 lgico
entre -3 v a -15 v y 0 lgico entre +3 v a +15 v.
Se utilizan conectores DB9 y DB25.
Prof. Luis Zurita
Microcontroladores II
12
20/05/2013
La norma RS232
Para una comunicacin full duplex desde el USART
del PIC, se debe conectar un mnimo nmero de
seales, a saber: TXD, RXD y tierra (GND). Los PICS
utilizan seal TTL en el mdulo USART, por lo que
debe utilizarse un convertidor de niveles a RS232,
como el circuito integrado MAX232
RX
TX
GND
NIVELES TTL
TX
MAX232
RX
GND
NIVELES RS232
Microcontroladores II
Microcontroladores II
13
20/05/2013
Convertidor
USB-232
Familia PIC16F87X
Prof. Luis Zurita
Mdulo
USART
Mdulo
USB
PIC
PIC
Familia PIC18
Microcontroladores II
Microcontroladores II
14
20/05/2013
if (k!=0) {
if (x==1)
{valor=0x17;
PUTC(valor);
printf(lcd_putc,"\fORDEN 1");}
else if (x==4)
{valor=0x2D;
PUTC(valor);
printf(lcd_putc,"\fORDEN 2");}
else if (x==7)
{valor=0x64;
PUTC(valor);
printf(lcd_putc,"\fORDEN 3");}
else
{valor=0xC2;
PUTC(valor);
printf(lcd_putc,"\fTODOS OFF");
delay_ms(1000);}
}
}
void main() {
char k;
int x;
int valor;
lcd_init();
kbd_init();
port_b_pullups(TRUE);
printf(lcd_putc,"\fPRESIONE FUNCION");
OUTPUT_C(0x00);
while (TRUE) {
k=kbd_getc();
x=k-48;
Microcontroladores II
delay_ms(50);}
else if (valor==0x2D)
{printf(lcd_putc,"\fORDEN 2");
output_low (PIN_C0);
output_high (PIN_C1);
output_low (PIN_C2);
delay_ms(50);}
else if (valor==0X64)
{printf(lcd_putc,"\fORDEN 3");
output_low (PIN_C0);
output_low (PIN_C1);
output_high (PIN_C2);
delay_ms(50);}
else if
(valor==0XC2)
{printf(lcd_putc,"\fTODOS OFF");
output_low (PIN_C0);
output_low (PIN_C1);
output_low (PIN_C2);
delay_ms(50);}
else{
}
Microcontroladores II
15
20/05/2013
Microcontroladores II
Microcontroladores II
16
20/05/2013
for (;;) {
set_adc_channel(0); // Conversin
//de la seal del potencimetro
delay_ms(10);
// Espera el TADQ
valor = read_adc(); // Lee el valor
de //la conversin
p=valor*0.098; // Factor escalar
//para pasar de 0-1023 a 0-100
putc(p);
delay_ms(200); //Tiempo de
//muestreo
}
Microcontroladores II
void main() {
set_tris_b(0x00);
#FUSES XT,NOWDT,NOPROTECT,NOLVP
enable_interrupts(INT_RDA);
#use standard_io(c)
enable_interrupts(GLOBAL);
#use fast_io(b)
while (1){
#use delay(clock=4000000)
output_b(valor);}
#use rs232(baud=9600, xmit=pin_c6,
}
rcv=pin_c7, bits=8, parity=N)
int valor;
Microcontroladores II
17
20/05/2013
Microcontroladores II
Microcontroladores II
18
20/05/2013
Microcontroladores II
DCD
DSR
RXD
RTS
TXD
CTS
DTR
RI
ERROR
COMPIM
Microcontroladores II
19
20/05/2013
Microcontroladores II
Microcontroladores II
20
20/05/2013
Microcontroladores II
Recibe
Transmite
Prof. Luis Zurita
Microcontroladores II
21