Autor Tema: MikroC PIC18F87J10 problemas con UART  (Leído 2758 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MagMX

  • PIC10
  • *
  • Mensajes: 2
MikroC PIC18F87J10 problemas con UART
« en: 20 de Agosto de 2008, 03:27:23 »
Hola a todos.

Desde hace algunos días estoy tratando de hacer trabajar el módulo EUSART de dos pic18F87J10 para hacer comunicación serial asíncrona entre ellos como parte de un proyecto.

Estoy programando en MikroC v7.0.0.3; no logro que funcione el código más básico que puedo imaginar para comunicar los PICs en un enlace simplex (PIC1 es transmisor, PIC2 es receptor). El transmisor envía siempre el mismo caracter, independientemente de lo que se intente enviar.

¿Ha pasado alguien por un caso similar?

Esperaré un tiempito a ver si aparecen algunas respuestas antes de abrumarlos con código, mientras seguiré leyendo las hojas de datos y erratas.

Saludos!
!MagMX

Desconectado MagMX

  • PIC10
  • *
  • Mensajes: 2
Re: MikroC PIC18F87J10 problemas con UART
« Respuesta #1 en: 20 de Agosto de 2008, 19:17:58 »
Estimados programadores y programadoras,

les dejo aquí los códigos, a ver si alguien descubre porqué no me funcionan las cosas. Cualquier comentario, sugerencia, link, regaño o crítica constructiva, será recibido con gusto y analizado con atención.

//USART1 TX

void main()
{
  char data;

  OSCTUNE.PLLEN=1; //Activo PLL
  TRISC=0b10000000; //PORTC.F7 es RX (no usado en TX), PORTC.F6 es TX

  Usart_Init1(9600); //BaudRate 9600 (@40MHz con BRGH y BRG16 en alto = error de 0.06%)
  BAUDCON1.BRG16=1;
  TXSTA1.BRGH=1;
//  PIE1.TX1IE=1; //Enable TX interrupt
//  TXSTA1.TRMT = 1;  //TRMT is suppossed to be a Read (not writable) bit... set for debugging...
 
  while (1) {
   Usart_Write1(0x00);
   Usart_Write1('a');
   Usart_Write1 ('m');
   Usart_Write1 (0XFF);
  }
}


Aquí el código del receptor:


//USART1   RX

void main()
{
 char data=0xFF;

 TRISC=0b10000000;  //Config. EUSART RX y TX
 TRISD=0x00;
 Usart_Init1(9600);  //Baudrate 9.6K, 8bits
 BAUDCON1.BRG16=1;
 TXSTA1.BRGH=1;
 PIE1.RC1IE=1; //Activo interrupciones de recepción RX
// PIE1.TX1IE=0; //Disables TX interruptions

 while (1) {

      while (!Usart_Data_Ready1()) {}  //Espero hasta que los datos son recibidos

      data = Usart_Read1();  //guardo el byte recibido en la variable data
      PIR1.RCIF = 0;   //Limpio la interrupción
      PORTD=data;  // Despliego el byte recibido en PORTD
  }
}


¿Alguna idea de que es lo que pasa?

Gracias por su cooperación  :g)

!MagMX
!MagMX