Autor Tema: Problema transmision/recepcion UART (CCS)  (Leído 1569 veces)

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

Desconectado Elzar

  • PIC10
  • *
  • Mensajes: 5
Problema transmision/recepcion UART (CCS)
« en: 11 de Junio de 2014, 11:53:19 »
Hola a todos!!

Veréis os cuento un proyecto que tengo entre manos y luego el problema ver si me podéis ayudar =)

Estoy intentando hacer un proyecto que consiste en que dos PICs (los llamaremos PIC1 y PIC2) se estén comunicando bidireccionalmente, uno de ellos emitirá un mensaje sin parar (PIC1) mientras el otro está escuchando ese mensaje (PIC2), en un momento dado, el PIC2 recibirá el mensaje y pasará a transmitir así que el PIC1 debería pasar a recibir.

Ahora estoy programando el PIC1 que es el que empieza la "conversación" por lo que tendría que estar enviando el mensaje sin parar hasta que el PIC2 le envie su mensaje, en ese momento, PIC1 deberá ir recibiendo los bytes de información hasta que complete un mensaje válido y se muestre este por un LCD y así todo el rato (recibiendo mensajes y mostrándolos por el lcd) hasta que el PIC2 pare de transmitir. Cuando el PIC2 pare de emitir información el PIC1 dejará de recibir y deberá volver a emitir su mensaje continuamente hasta que vuelva a recibir información.

El problema es que empieza emitiendo perfectamente el mensaje pero cuando activo el PIC2, el PIC1 no hace nada y continua enviando por lo que nunca recibo nada y nunca lo muestro por el LCD. He cambiado también el código y he llegado a conseguir que pare de transmitir pero no recibe y tampoco vuelve a transmitir (directamente para).




Os enseño el código a ver si le podeis hechar un vistazo:


Código: [Seleccionar]
#include <16F877.h>
#use delay(clock=4000000)
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG

#use RS232(uart1, BAUD=9600)



unsigned char mensaje[7] = "1234ABC";
unsgned char mensaje_tx[8];


void main(){

 
   unsigned char i=0;

   // Preparamos el mensaje a transmitir añadiendo un sincronismo
   mensaje_tx[0] = 0x02; // Para sincronismo
   mensaje_tx[1] = mensaje[0];
   mensaje_tx[2] = mensaje[1];
   mensaje_tx[3] = mensaje[2];
   mensaje_tx[4] = mensaje[3];
   mensaje_tx[5] = mensaje[4];
   mensaje_tx[6] = mensaje[5];
   mensaje_tx[7] = mensaje[6];

   
   while(1){

       
        while(!kbhit()){ // Mientras no reciba nada transmite el mensaje sin parar
       
            for(i = 0; i<8;i++)
                printf("%c",mensaje_tx[i]);

       }
       
       
            rx_buffer =  getc();
            recibir_datos(); // Funcion que guarda el mensaje_rx (sincroniza y guarda), activa también el flag MENSAJE_VALIDO

            if(MENSAJE_VALIDO){

                 lcd_gotoxy(1,1); // Posiciona el lcd
                 printf(lcd_putc,mensaje_rx); // Mostraríamos por el LCD el mensaje
               
                }
       
   }
 }


MUCHÍSIMAS GRACIAS DE ANTEMANO! =)

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: Problema transmision/recepcion UART (CCS)
« Respuesta #1 en: 31 de Agosto de 2015, 19:29:47 »
hola, para usar la uart te falta esto #use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8) y cambia esto  while(1){ por  while(true){



 

anything