PIC12F1822 で PORTA3 にて状態変化割り込みを考えています。LVP=1にして MCLR=0にする。更にINTCON=0x88; にしてPORTA3に入れたスイッチを押すことで点滅パターンを変化させようと考えています。下記のプログラムを入れるとINTERRUPTにはとぶようですが、L4(); と K4();を繰り返してi=2の状態にとびません。何故でしょうか。MikroCで同じような物を作っても同じ状態です。お答え下さい。インターネットに出ていました貴殿のプログラムを拝借しています。
/*******************************************
12F1822 LED Pikapika
author air_variable 1.0 20110214
MPLAB 8.50 / Hitech PICC Pro Lite mode v9.70
*******************************************/
#include htc.h;
#include delay.h;
#pragma jis
#define MHz 000000
#define _XTAL_FREQ 4MHz
__CONFIG(
FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF
& CPD_OFF & BOREN_ON & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF
);
__CONFIG(
WRT_OFF & PLLEN_OFF & STVREN_ON & LVP_OFF
);
char i;
char b;
void L1(){RA0=1;}
void L2(){RA1=1;}
void L3(){RA2=1;}
void L4(){RA5=1;}
void L5(){RA4=1;}
void K0(){PORTA=0B00000000;}
void K1(){RA0=0;}
void K2(){RA1=0;}
void K3(){RA2=0;}
void K4(){RA5=0;}
void K5(){RA4=0;}
void D100(){DelayMs(100);}
void D50(){DelayMs(50);}
void D20(){DelayMs(20);}
//------------------main
void main(){
OPTION_REG = 0B00000000;
WPUA = 0B00001000;
PORTA = 0B00001000;
TRISA = 0B00001000;
CM1CON0 = 0;
ANSELA = 0;
OSCCON = 0B01101010;
IOCAN = 0x08;
INTCON= 0x88;
i=1;
while(1){
switch(i){
case 1:
while(1){
L1();L2();L3();L4();L5();D100();
K0();D100();
if(i!=1)break;
}
// (中略)
default:
INTCON= 0x00;
D50();
i=0;K0();
INTCON= 0x88;
asm (sleep);
}
}
}
interrupt func(){
IOCIE = 0;
i++;
D50();
L4();D100();
K4();D100();
IOCIE = 1;
//INTCON= 0x88;
}
PIC12F1822