olá pessoal
Eu estou com um problema, sou iniciante e estou tentando resolver o seguinte problema:
- O programa inverte o estado de RD0 a cada 500ms.
- A porta RD1 deve ter seu estado invertido de acordo uma variável global "tempo".
- Quando houver uma interrupção externa em INT1, que é de alta prioridade, RD2 recebe 1 e a variável "tempo" recebe um valor que reverte RD1 a cada 200ms.
- Quando houver uma interrupção externa em INT2, que é de baixa prioridade, RD2 recebe 0 e a variável "tempo" recebe um valor que reverte RD1 a cada 1s.
Segue meu código
unsigned tempo;
short conta = 1;
void interrupt(){
if(TMR0IF_bit){
TMR0IF_bit = 0;
TMR0L = 0x2C;
TMR0H = 0Xcf;
conta++;
if(INT1IF_bit){
INT1IF_bit = 0;
RD2_bit = 1;
tempo = 0;
if ((!tempo)&&(conta == 40)){
RD1_bit = ~RD1_bit;
conta = 0;
}
}
}
}
void interrupt_low(){
if (INT2IF_bit){
INT2IF_bit = 0;
RD2_bit = 0;
tempo = 1;
if ((tempo) && (conta == 200)){
RD1_bit = ~RD1_bit;
}
}
}
void main() {
TRISB = 0xff;
TRISD = 0x00;
PORTB = 0xff;
PORTD = 0xff;
RBPU_bit = 0;
ADCON1 = 0x0f;
IPEN_bit = 1;
GIE_bit = 1;
PEIE_bit = 1;
INT1IE_bit = 1;
INT2IE_bit = 1;
INT1IP_bit = 1;
INT2IP_bit = 0;
TMR0IP_bit = 1;
INTEDG1_bit = 0;
INTEDG2_bit = 0;
T0CON = 0x80;
TMR0IE_bit = 1;
TMR0L = 0x2C;
TMR0H = 0Xcf;
while(1){
RD0_bit = ~RD0_bit;
delay_ms(500);
}
}
Alguém poderia me dar uma ajuda?