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