PIC12F615 電平中斷調試注意

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

發佈了12 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章