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 PIC a PIC - Ejemplo
Comunicación entre dos PICs:
Comunicación entre dos microcontroladores PIC16F628A usando el módulo UART-Software del compilador mikroC.
Consta de dos proyectos, uno para cada PIC:
1. El proyecto PIC a PIC LCD es utilizado para recibir datos y presentarlos en un LCD 2x16.
2. El proyecto PIC a PIC se utiliza para enviar datos.

Código en lenguaje C (mikroC).-
Primer código fuente:
//PIC_a_PIC_LCD.c
//Microcontrolador: PIC16F628A
//Oscilador: Interno-4MHz
//Este programa se almacena en uno de los dos microcontroladores (U2) y recibe continuamente un
//dato (la letra 'r') cada 300 ms por el pin de recepción RB6(12). El pin de transmisión es
//RB7(13). El dato recibido se va presentando en el LCD.
//Comunicación PIC a PIC usando la biblioteca UART por Software (Software UART).
//La velocidad de transmisión de 600 Baudios fue seleccionada experimentalmente por un
//procedimiento de ensayo y error. El pin RB0(6) se enciende por 1 segundo en el caso de
//intentar establecer una velocidad de transmisión muy alta o muy baja.

//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 error, byte_read;
void main(){
CMCON=0x07;                 //Pines RA<3:0> como E/S digital.
PORTB=0x00;
TRISB0_bit=0;
Lcd_Init();                 //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);        //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF);   //Apaga el cursor.
error = Soft_UART_Init(&PORTB, 6, 7, 600, 0); //Inicializa el módulo UART-Software a 600 Baudios.
  if (error >0){
    RB0_bit=1;
    Delay_ms(1000);
    RB0_bit=0;
    while(1);              //Detiene el programa en caso de error.
  }
  Delay_ms(100);
  while(1) {
    byte_read = Soft_UART_Read(&error); //Recibe un dato y lo guarda en byte_read.
    if (!error)            //Si no hay error.
      Lcd_Chr_CP(byte_read); //Envía el dato recibido hacia el LCD.
      Delay_ms(200);
  }
}

Segundo código fuente:
//PIC_a_PIC.c
//Microcontrolador: PIC16F628A
//Oscilador: Interno-4MHz
//Este programa se almacena en uno de los dos microcontroladores (U1) y transmite continuamente un
//dato (la letra 'r') cada 300 ms por el pin de transmisión RB6(12). El pin de recepción es
//RB7(13).
//Comunicación PIC a PIC usando la biblioteca UART por Software (Software UART).
//La velocidad de transmisión de 600 Baudios fue seleccionada experimentalmente por un
//procedimiento de ensayo y error. El pin RB0(6) se enciende por 1 segundo en el caso de
//intentar establecer una velocidad de transmisión muy alta o muy baja.

char error;
void main(){
CMCON=0x07;                 //Pines RA<3:0> como E/S digital.
PORTB=0x00;
TRISB0_bit=0;
error = Soft_UART_Init(&PORTB, 7, 6, 600, 0); //Inicializa el módulo UART-Software a 600 Baudios.
  if (error >0){
    RB0_bit=1;
    Delay_ms(1000);
    RB0_bit=0;
    while(1);              //Detiene el programa en caso de error.
  }
  Delay_ms(100);
  while (1){
   Soft_UART_Write('r');  //Envía el carácter 'r' cada 300 ms.
   Delay_ms(300);
  }
}



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.




Esquema eléctrico:
esquema electrico

Copyright © microC
Quito-Ecuador