Timers serial e timer 1 juntos

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Timers serial e timer 1 juntos

Mensagempor Doth » 16 Mar 2007 17:07

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
Doth
Byte
 
Mensagens: 116
Registrado em: 12 Out 2006 17:35

Re: Timers serial e timer 1 juntos

Mensagempor Maurício » 16 Mar 2007 20:14

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.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor jeanfernandes » 28 Mar 2007 19:39

Eu confesso que nao consegui usar o T1 + Serial.....
o T1 como interrupcao nem fu....

Pq. nao usar o timer 0 ?
Jean P. Fernandes - Eng. Eletrônico - (83) 2102-2116 - APEL - www.apel.com.br - Campina Grande - PB
jeanfernandes
Word
 
Mensagens: 539
Registrado em: 11 Out 2006 15:36
Localização: Campina Grande - PB


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x