- Código: Selecionar todos
//Definicoes de Entrada
#define TIME_DELAY 8500
#define BT_INC PORTC.B4
#define BT_DEC PORTC.B3
#define BT_START PORTC.B2
#define BT_MPROG PORTC.B1
#define BT_SEL PORTC.B0
int varsaida;
void inint();
void interrupt();
void main() {
// INICIALiZaNDO O PIC
ADCON0 = 0; // Desabilita Entradas analógicas
CMCON = 0x07; // Desabilita comparadores.
inint(); //Preparando a configuração das interrupções.
PORTB = 0xFF;
TRISB = 0xff;
while (1)
{
if (varsaida ==1) PORTB.B1 =1 ;
else PORTB.B1 =0;
}
}
void inint() // configura interrupcao por TIMER1 a cada 10ms. Ele faz uma checagem no botão.
{
// ANTES DE HABILITAR A INTERRUPÇAO OS REGISTRADORES DE FLAG E
// INTCON = INTERRUPT CONTROL REGISTER.
// Registador que habilita quem chamara a interrupcao.
INTCON.GIE = 1; // HABILITA INTERRUPCAO GERAL
INTCON.PEIE =1; // HABILITA INTERRUPCAO PELOS PERIFERICOS. "TIMER1" É UM PERIFERICO.
PIE1.TMR1IE = 1; // TMR1IE = 1. Habilita interrupção pelo OVERFLOW DO Timer1.
T1CON.T1CKPS1 = 0; // T1CKPS1 = "0" ; T1CKPS0 = "0"; DIV / 1 Pode ser dividio por 1 2 4 ou 8. Verificar no datasheet
T1CON.T1CKPS0 = 0;
T1CON.TMR1CS = 0; // "0" Clock interno, modo TIMER (FOSC/4)
TMR1H = 0x8A; // MSB => 35536 = 10ms. = 0x8AD0 => 65536- ( tempodesejado / ( 1/(Fosc/4) ) ).
TMR1L = 0xD0; // LSB => Tempo para cristal de 12MHZ 65536 - ( 10ms / ( 1 / (12Mhz/4) ) ) .
// P1R1 = Interrupt Service Routine.
PIR1.TMR1IF = 0; // Zera flag do Overflow do TIMER1. TEM QUE ZERAR.
T1CON.TMR1ON = 1; // TMR1ON = 1 LIGA O TIMER.
}
// No mikroc todas as rotinas para atendimento da interrupção é chamada dentro da
// funcao itnerrupt. Basta consultar o help ; D para entender.
void interrupt()
{
if(PIR1.TMR1IF == 1) // SE HOUVE INTERRUPCAO do timer 1 faça: .
{
PIR1.TMR1IF = 0; //TMR1IF = 0 Zera o FLAG de Overflow do Timer1.
// Recarrega valores
TMR1H = 0x8A; // MSB 35536 = 10ms. = 0x8AD0 => 65536 - ( tempodesejado / ( 1/(Fosc/4) ) ).
TMR1L = 0xD0; // LSB => 65536 - ( 10ms / ( 1 / (12Mhz/4) ) ) .
if (varsaida == 1) varsaida =0;
else varsaida = 1;
}
}
Bom a interrupção não esta atuando na saída B1 como eu quero.... Preciso de ajuda pra resolver esse programa