serial Keil

Ola amigos,
Alguem tem um programa bem básico em linguagem C que use a interrupção serial
Alguem tem um programa bem básico em linguagem C que use a interrupção serial
Fórum sobre desenvolvimento de sistemas embarcados: Hardware e Software, Tecnologias: Eletrônica digital e analógica, Microcontroladoras, Microprocessadores, Sistemas *NIX (Linux, BSD), Software embarcado Baremetal. Sem fins lucrativos.
http://asm51.com.br/phpbb/
/************************************************/
/* void interrupt void IntSerial( ) */
/************************************************/
extern unsigned char byte_rx ;
void serial (void) interrupt SERIAL using BANK_2
{
if ( RI )
{
byte_rx = SBUF ;
/// trata byte recebido aqui
RI = 0 ;
}
}
/*************************************************************************
FUNCAO: int_serial() Interrupção
PARAMETROS: NENHUM
RETORNO: NENHUM
DESCRICAO: Transmitir e receber dados pela serial, a recepção é
armazenada em buffer.
**************************************************************************/
void int_serial(void) interrupt 4
{
static int ind;
if (TI) // Se tem byte para ser enviado em txbuf
{
TI = 0; // Zero o flag TI
SBUF = txbuf; // Movo o byte de txbuf para o SBUF
ES = 0; // Desabilito a interrupção serial
while(!TI) // Espero o byte ser transmitido
WatchdogReset();
TI = 0; // Zero o flag TI
ES = 1; // Habilito a interrupção serial
}
if (RI) // Se chegou dado pela serial
{
RI = 0; // Zero o flag RI
if(SBUF == ESC)
{
FlagEsc = 1;
}
else
{
Buf[ind] = SBUF; // copio o dado em SBUF para o buffer
TI = 1;
if(Buf[ind] == '\r' || ind == MAX_BUF_CMD) // se byte recebido igual a \r ou ind = MAX_BUF_CMD
{
sizebuf = strlen(Buf)-1; // Pego o tamanho do Buffer menos 1, o \r
WatchdogReset();
FlagRx = 1; // Seto o flag de recepção
ind = -1; // Zero o ind para da próxima vez escrever
} // no inicio do Buffer
ind++; // incremento o indice "ind"
}
}
}