Extracto del
Capítulo X del libro Cómo programar en lenguaje C los
microcontroladores PIC16F88, 16F628A y 16F877A. 2da
edición. 2010
Regístrate aquí
para descargar una muestra gratis de este libro
Introducción al protocolo RS232
La
comunicación RS232 del PIC con el ordenador
es de gran importancia y para esto se ha incorporado
un módulo con las características
apropiadas para el intercambio de
información. Este módulo es conocido
como USART (Universal Synchronous Asynchronous
Receiver Transmitter) y se estudia en este
capítulo. El módulo USART opera de
acuerdo al protocolo RS232 que también es muy
utilizado en las computadoras personales.
Este es uno de los dos módulos serie E/S,
también llamado Interfaz de
Comunicación Serie SCI. El módulo
USART puede configurarse como un sistema
asincrónico full-dúplex que puede
comunicarse con dispositivos periféricos,
tales como terminales CRT y computadoras personales,
o puede configurarse como un sistema
sincrónico half-dúplex que puede
comunicarse con otros dispositivos tales como
conversores A/D y D/A, EEPROMs serie, etc.
Los modos de operación disponibles son los
siguientes:
- Asincrónico (full-dúplex)
- Sincrónico-Maestro (half-dúplex)
- Sincrónico-Esclavo (half-dúplex)
Protocolo RS232
Este es un protocolo de comunicación serie
ampliamente difundido en las computadoras personales
y empleado por los puertos COM del ordenador. El
acceso físico a estos puertos es a
través de un conector DB-25 o DB9, machos y
hembras. La norma RS232 se estableció para
comunicar un ordenador con un modem, por lo que en
los conectores DB-25 aparecen muchos pines que en
otras aplicaciones no se utilizan, y en las que es
más común emplear el conector DB9.
Cada uno de los terminales del conector RS232 tiene
una función especificada por la norma. Unos
pines transmiten y reciben datos, mientras que otros
permiten el control de la comunicación. En la
tabla 10.1 se observan estos detalles (RS232
pinout).
Tabla 10.1 Funciones de los pines del
conector RS232 DB9
Un
dato a tener muy en cuenta es la
velocidad de transmisión, que es la
cantidad de información enviada por
la línea de transmisión en la
unidad de tiempo. Se mide en Baudios y es
proporcional a los Bits/segundo (bps). Las
velocidades de transmisión
normalizadas para los puertos COM son: 75,
150, 300, 600, 1200, 2400, 4800, 9600, etc.
Baudios.
Otra
cuestión fundamental se refiere a los
niveles de voltaje de la norma:
- Los datos se transmiten con
lógica negativa, es decir, un
voltaje positivo representa 0, mientras
que un voltaje negativo representa 1.
- El 0L se encuentra entre +3 y +15V.
- El 1L se encuentra entre -3 y -15V.
- Los voltajes más usados son
+12V para el 0L y -12V para el 1L.
- Cuando un puerto no está
transmitiendo mantiene el terminal de
transmisión en 1L (-12V).
Circuito integrado MAX232
Este IC es un estándar en la
industria y se emplea como interfaz entre
los niveles TTL y RS232 y requiere
únicamente una fuente de +5V para su
operación. Para generar los niveles
de +12V y -12V necesita 4 capacitores de 1,0
uF. Dispone de dos entradas TTL con salida
RS232, así como dos entradas RS232
con salida TTL (figuras 10.1 y 10.2). Puede
realizar la transferencia de datos a una
velocidad máxima de 120 kbps.
Figura 10.1 Distribución de
terminales y valores de los capacitores
del MAX232
Figura 10.2 Circuito típico de
operación MAX232 (note la
polaridad de los capacitores)
Funciones de mikroC para el
módulo de comunicación RS232
El módulo USART se incluye en los
PICs16F88, 16F628A y 16F877A (algunos PICs,
como el 16F84A, no tienen este
módulo). La biblioteca UART de mikroC
proporciona las herramientas para hacer que
el empleo de este módulo en modo
asincrónico (full-dúplex) sea
tan sencillo como nunca lo había sido
hasta ahora. Esto permite la
comunicación con otros dispositivos a
través del protocolo RS232. En la
tabla 10.2 se pueden ver las funciones
incorporadas con sus características
más sobresalientes.
Tabla 10.2 Funciones para
comunicación RS232 con PIC
Ejemplos de programación de
comunicación RS232 con PIC
Estos ejemplos corresponden al PIC16F88.
El código fuente para los PICs
16F628A y 16F877A se encuentra en las
carpetas correspondientes que
acompañan a este libro.
Ejemplo- USART_01.c:
Lo que escriba por el teclado del
ordenador se visualizará en el
módulo LCD y será enviado
de vuelta al ordenador, por lo que se
visualizará también en el
monitor. Cuando se hayan ingresado 16
caracteres el LCD se borrará y
empezará nuevamente en la primera
fila y primera columna (figuras 10.7.1,
10.7.2 y 10.7.3).
Figura 10.7.1 Comunicación
RS232 con PIC 16F88
//USART_01.c
//Declaración
de las 12 variables necesarias para la
conexión
//del
módulo LCD.
sbit LCD_RS at
RA4_bit;
sbit LCD_EN at
RA6_bit;
sbit LCD_D4 at
RA0_bit;
sbit LCD_D5 at
RA1_bit;
sbit LCD_D6 at
RA2_bit;
sbit LCD_D7 at
RA3_bit;
sbit
LCD_RS_Direction at TRISA4_bit;
sbit
LCD_EN_Direction at TRISA6_bit;
sbit
LCD_D4_Direction at TRISA0_bit;
sbit
LCD_D5_Direction at TRISA1_bit;
sbit
LCD_D6_Direction at TRISA2_bit;
sbit
LCD_D7_Direction at TRISA3_bit;
// Fin de
declaración de variables de
conexión.
char uart_rd,
contador=0;
void main(){
OSCCON=0x60;
//Oscilador interno a 4MHz (TCI=1 us).
while
(OSCCON.IOFS==0); //Esperar
mientras el oscilador está
inestable.
ANSEL=0x00;
//Bits AN6:AN0 como E/S digital.
Lcd_Init();
//Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);
//Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF);
//Apaga el cursor.
UART1_Init(9600);
//Inicializa el USART a 9600 bps.
Delay_ms(100);
//Espera a que el USART se estabilice.
UART1_Write_Text("Hola.");
//Envía este texto a
través del USART.
while (1){
if
(UART1_Data_Ready()){ //Si
se recibe un dato,
uart_rd
= UART1_Read(); //lee el
dato recibido,
Lcd_Chr_CP(uart_rd);
//lo presenta en el LCD,
UART1_Write(uart_rd);
//y lo envía a través
del USART.
contador++;
if(contador==16){
//Detecta el ingreso de 16 caracteres,
contador=0;
//reinicia el contador,
Delay_1sec();
//espera 1 segundo,
Lcd_Cmd(_LCD_CLEAR);
//y borra el LCD.
}
}
}
}
Temas relacionados que también
encontrarás en este libro:
-
Conexión del PIC al ordenador
con el protocolo RS232
-
Otros ejemplos de programación de
RS232
|