logo microc
    microC®
Líder en la programación de microcontroladores PIC
©2009-2012
Síguenos en    
logo facebook
Inicio La empresa. Contáctanos  | Cómo comprar nuestros productos  | Ofertas | Recursos | Mapa del sitio |

Comunicación RS232 con PIC y ordenador

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).
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.
max232

Figura 10.1 Distribución de terminales y valores de los capacitores del MAX232

polarizacion 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.
funciones para rs232

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).

comunicacion rs232 con
                                    pic

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



Si esta información te ha sido útil
entonces considera la posibilidad
de hacer una contribución para microC.
Tu apoyo es muy importante para seguir adelante.
Muchas gracias.






Copyright © microC
Quito-Ecuador