Estou convertendo de ASM para C no hitech.
Estou com problemas para gerar a interupção de mudança de estado no GPIO3.
Segue o fonte !
- Código: Selecionar todos
#include <pic.h>
// Configurar as opcoes de operacao
__CONFIG(HS & WDTDIS & PWRTDIS & BORDIS & MCLRDIS & INTIO);
//funcao de tratamento da Interrupt Service Routines
void interrupt isr() {
/*
CADA INT. TIMER1 A CADA 0,1S
*/
//OK
if (TMR1IF) {
TMR1IF = 0; // LIMPA FLAG DA INT. DE TIMER1
TMR1L = 0x44;
TMR1H = 0x24; // REINICIA TIMER 1 COM 62500
}
if (GPIF) {
GPIF = 0;
GPIO0 = 1;
GPIO1 = 1;
GPIO2 = 1;
}
//OK
if (T0IF) {
T0IF = 0;
TMR0 = 36; //REINICIA TIMER 0
}
}
void main() {
TRISIO = 0b00001000; //GPI02 COMO ENTRADA
//INTCON
GIE = 1; //CHAVE GERAL LIGADA
PEIE = 1; //HABILITADA INT. DE PERIFERICOS
T0IE = 1; //INT. DE TIMER0 HABILITADA
INTE = 0; //INT. DE GPIO2 DESHABILITADA
GPIE = 1; //HABILITADA INT. DE MUDANCA EM GPIO
T0IF = 0; //FLAG DA INT. DE TIMER0
INTF = 0; //FLAG DA INT. DE GPIO2
GPIF = 0; //FLAG DA INT. DE MUDANCA EM GPIO
//OPTION_REG
GPPU = 1; //PULL UP HABILITADO
INTEDG = 0; //0 BORDA DE SUBIDA 1 BORDA DE DESCIDA
T0CS = 0; //TIMER0 INCREMENTADO PELO CLOCK
T0SE = 1;
PSA = 0; //PRESCALER NO TIMER0
PS2 = 0;
PS1 = 0;
PS0 = 1; // 1:4
//CMCON
COUT = 0; //VIN < VOUT
CINV = 0; //SAIDA NAO INVERTIDA
CIS = 0; //VIN- LIGADA NO CIN-
CM2 = 1;
CM1 = 1;
CM0 = 1; //COMPARADOR DESLIGADO
//ADCON0
ADFM = 0; //RESULTADO JUSTIFICADO A DIREITA
VCFG = 0; //TENSAO DE REFERENCIA VDD
CHS0 = 0;
CHS1 = 0;
ADON = 0; //CONVERSOR AD DESLIGADO
//ANSEL
ANS3 = 0;
ANS2 = 0;
ANS1 = 0;
ANS0 = 0; //TODOS OS PINOS COMO IO DIGITAL
//IOC
IOCB5 = 0;
IOCB4 = 0;
IOCB3 = 3;
IOCB2 = 0;
IOCB1 = 0;
IOCB0 = 0;
//HABILITA A INT. DE GPIO3
//WPU
WPU5 = 0;
WPU4 = 0;
WPU2 = 0;
WPU1 = 0;
WPU0 = 0;
//T1CON
TMR1ON = 1;
TMR1CS = 0;
T1SYNC = 0;
T1OSCEN = 0;
T1CKPS0 = 1;
T1CKPS1 = 1;
TMR1GE = 0;
TMR1IE = 1;
//VRCON
VREN = 0;
VR0 = 0;
VR1 = 0;
VR2 = 0;
VR3 = 0;
TMR0 = 36;
while (1) {
}//while
}
Em ASM funciona em C não consigo gerar a interupção.
Agradeço a ajuda de todos!
Abraço