昨天調試電平中斷,想實現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;
}