por ze » 12 Jul 2007 13:02
Veja como configurei os registros para interrupççao serial e timer0
TMR1IF=0; //zera flag timer1
TMR1IE=1; //hab. int. timer1
TMR1IP=1; //timer1 = alta prioridade
PEIE=1;
RBIE=RBIF=0;
//------------- interface serial-------
SPBRG=155; //9600,n,8 @ 24MHz
TXEN=1; //hab. transmissão
//BRGH=0; //sel. baud rate baixa 2400bps
BRGH=1; //sel. baud rate alta 9600bps
SYNC=0; //assinc.
SPEN=1; //hab. pinos como int. serial
CREN=1; //recepção contínua
RCIF=0; //flag de recepção
RCIE=1; //hab int serial
RCIP=0; //int recepção prioridade=baixa
//--------------------------------------
IPEN=1; //hab prioridade de int
GIE=1;
Agora veja como as rotinas atuam
#pragma interrupt_level 1 //vou chamar esta rotina em main() e em rtx()
static void interrupt low_priority serial(void)
{
if (RCIE&&RCIF) rtx(); //rtx=minha rotina de int. (serial RCIF TEM que ser zerado)
//só se estiver habilitada a int (RCIE) e receber um dado serial (RCIF)
}
static void interrupt
timer1_int(void)
{
if (TMR1IF&&TMR1IE) // se for int timer1
{
TMR1IF=0; //zera o flag de recepção
....
}
Traduzindo: ao receber algum dado da serial (RCIF=1), o fluxo vai para rtx().
Obs: para a família PIC18F
abraço...[/code]