Páginas

domingo, 20 de maio de 2012

Comunicação UART via Hardware (microcontroladores PIC)

Biblioteca de manipulação da UART interna dos microcontroladores PIC 16f627, 628, 876 e 877.

_________________________________________________________

/*                                UART.C
 Biblioteca de manipulação para comunicação serial UART

 Comando para inicialização do modulo de comunicação:      uart_unicializa ( (UxBRG), 1);
 Comando para envio de dados:                                            uart_transmite();
 Comando para recepção de dados:                                      uart_recebe();

 Calculo de UART BAUD RATE GENERATOR (BRG):
 UxBRG =         Fosc/2
                  ____________ -1
                  16 * Baud Rate

*/

char usart_rx, usart_tx, txreg, rcreg, spbrg;



struct rcsta_reg
 {
   int rx9d : 1;
   int oerr : 1;
   int ferr : 1;
   int aden : 1;
   int cren : 1;
   int sren : 1;
   int rx9  : 1;
   int spen : 1;
 } rcsta;

struct txsta_reg
 {
   int tx9d : 1;
   int trmt : 1;
   int brgh : 1;
   int xxx  : 1;
   int sync : 1;
   int txen : 1;
   int tx9  : 1;
   int csrc : 1;
 } txsta;

#locate rcsta = 0x18
#locate txreg = 0x19
#locate rxreg = 0x1a
#locate txsta = 0x98
#locate spbrg = 0x99
#byte r_pir1  = 0x0c
#bit flag_rc  = r_pir1.5

void uart_inicializa (int vel, boolean brgh )
{
 txsta.brgh = brgh;
 spbrg  = vel;

 #if __device__ == 627
  input (pin_b1);
  input (pin_b2);
 #endif;
 #if __device__ == 628
  input (pin_b1);
  input (pin_b2);
 #endif;
 #if __device__ == 876
  input (pin_c7);
  input (pin_c6);
 #endif;
 #if __device__ == 877
  input (pin_c7);
  input (pin_c6);
 #endif;

 txsta.sync = 0;
 rcsta.spen = 1;
 txsta.tx9  = 0;
 txsta.txen = 1;
 rcsta.cren = 1;
}

void uart_transmite (char dado)
{
 while (!txsta.trmt);
 txreg = dado;
}

char uart_recebe (void)
{
 while (!flag_rc);
 return rxreg;
}

Nenhum comentário:

Postar um comentário