Página 1 de 1

Timers serial e timer 1 juntos

MensagemEnviado: 16 Mar 2007 17:07
por Doth
Ola pessoal.
Estou com algumas duvidas com o timer da serial e a interrupçao 1, olhem como estou fazendo.


void timer_int(void) interrupt 1
{
TR0=0;
TH0= TEMPO_H;
TL0= TEMPO_L;
if (conta_registro ++ ==5){
conta_registro=0;
pv=1;
}
if (conta_timer ++ == carga)
flag_timer = 1; // se contador chegou a 5000 ms flag vira um

TR0=1;
}
//---------------------------------------------------------------------------------------
void prog_timer(void)
{
T2MOD=0X01; \\ nem eu sei pq coloquei isso :oops:
TH0= TEMPO_H;
TL0= TEMPO_L;
ET0=1;
EA=1;
TR0=1;
conta_timer=0;
conta_registro=0;
flag_timer = 0;
//pv=1;
}
//------------------------------------------------------------------------------

void serial_init()
{
SCON = 0x50; // BaudRate = 9600 bps
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = 0x0FD;
TR1 = 1;
// activate serial interrupt
IE |= 0xD0;
RI = TI = 0;

}


O meu problema tem sido que as vezes depois de um tempo parado o programa não responde mais, e as vezes a interrupção do timer aciona muito mais cedo.

Desde ja obrigado.

\\Ricardo Doth

Re: Timers serial e timer 1 juntos

MensagemEnviado: 16 Mar 2007 20:14
por Maurício
Doth escreveu:Ola pessoal.
Estou com algumas duvidas com o timer da serial e a interrupçao 1, olhem como estou fazendo.


void timer_int(void) interrupt 1
{
TR0=0;
TH0= TEMPO_H;
TL0= TEMPO_L;
if (conta_registro ++ ==5){
conta_registro=0;
pv=1;
}
Talvez, o seu problema esteja aqui. Vc não zera essa variável conta_timer, não ?
if (conta_timer ++ == carga)
flag_timer = 1; // se contador chegou a 5000 ms flag vira um

TR0=1;
}
//---------------------------------------------------------------------------------------
void prog_timer(void)
{
T2MOD=0X01; Essa Instrução pode ser eliminada.
TH0= TEMPO_H;
TL0= TEMPO_L;
ET0=1;
EA=1;
TR0=1;
conta_timer=0;
conta_registro=0;
flag_timer = 0;
//pv=1;
}
//------------------------------------------------------------------------------

void serial_init()
{
SCON = 0x50; // BaudRate = 9600 bps
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = 0x0FD; Aqui não seria 0xFD??? Ou será 0x0F?
TR1 = 1;
// activate serial interrupt
IE |= 0xD0;
RI = TI = 0;

}


O meu problema tem sido que as vezes depois de um tempo parado o programa não responde mais, e as vezes a interrupção do timer aciona muito mais cedo.

Desde ja obrigado.

\\Ricardo Doth


Nesse tópico tem as configurações do TIMER1 para gerar baud-rates e tb para tratar a serial através de interrupção:

http://asm51.eng.br/phpBB/viewtopic.php?t=1932

Diz pra nós aí, o que é que vc quer que o seu programa faça.

[]'s

RETI.

MensagemEnviado: 28 Mar 2007 19:39
por jeanfernandes
Eu confesso que nao consegui usar o T1 + Serial.....
o T1 como interrupcao nem fu....

Pq. nao usar o timer 0 ?