昨天调试电平中断,想实现GP1按下,GP4上的LED灯状态改变。程序按步就班,GP1启用弱上拉,再接按钮到地线。可是接PICKit3上调试时,PCB上的LED灯就是不灭。一直以为是代码的问题,后来才发现,是PICKit3供电不足。接上5V电后就正常了。调试时怕麻烦,GP1可以接个1K~4.7K的电阻上拉也能正常使用。
相关程序代码如下:
unsigned char GPtemp;//电平中断读取用
void DebounceDelay(unsigned char us)
{
while(us--);
}
void InitGPINT(void) //电平变化中断 查看Datasheet 44页
{
nGPPU=0; //必须使能全局 GPPU 位才能使能单独的上拉功能。
CMCON0=0B00000101;
TRISIO1=1;
AN1=0;
WPU1=1; //输入模式中,可设置内部弱上拉
GPtemp=GP1;
IOC1=1; //允许电平变化中断
GPIF=0;
GPIE=1;
}
void interrupt ISR(void) //中断处理函数
{
/*
if(T0IF)//定时间隔5mS
{
T0IF=0;
MS++;
PWMDelay++;
if(MS>=200) //1秒到了。
{
MS=0;
SEC++;
if(SEC>59)
{
SEC=0;
MIN++;
}
}
TMR0=T0Value; //重新赋值,进入下轮循环
}
*/
if(GPIF) //电平中断
{
GPIE=0;
GPtemp=GP1;
DebounceDelay(255); //延时消抖
if(GP1==0)
{
GP4=!GP4;
}
GPIF=0;
GPIE=1;
}
GIE=1; //开启总中断
}
void main(void)
{
InitMCU();
InitSW();
InitGPINT();
InitPWM();
InitAD();
InitT0();
// PEIE=1;
GIE=1;
while(1)
{
LEDBreathe();
}
return;
}