標(biāo)題: 使用單片機(jī)外部中斷遇到了一點(diǎn)問題,上電的時候無法檢測外部中斷低電壓 [打印本頁]

作者: 一生太多遺憾    時間: 2023-7-8 18:50
標(biāo)題: 使用單片機(jī)外部中斷遇到了一點(diǎn)問題,上電的時候無法檢測外部中斷低電壓
各位大佬幫忙看看

使用的外部中斷1;低電平觸發(fā)

想要實現(xiàn)的功能是;1、上電時默認(rèn)進(jìn)入while(1)主程序(每秒閃2次)。
2、中斷程序(每秒閃5次)。
3、如果檢測到外部中斷為低電平“執(zhí)行外部中斷程序”、如果外部中斷為高電平“執(zhí)行while(1)主程序”。注釋;外部中斷源是一個按鍵;當(dāng)按鍵按下是接地觸發(fā)外部中斷。當(dāng)松開按鍵為高電平是回到主程序。
4、上電時如果外部中斷為低電平,則直接進(jìn)入中斷程序。注釋;如果在上電前按下按鍵時。

現(xiàn)在的問題是;第1、和第2,第3步,都是實現(xiàn)了!暗4步,上電時如果外部中斷為低電平,則直接進(jìn)入中斷程序。實現(xiàn)不了”

本人菜雞!謝謝大家!

單片機(jī)代碼如下;
#include <REGX51.H>         //51頭文件
sbit LED = P3^5;          //引腳定義
sbit Key1 = P3^3;         //引腳定義

//*********延時函數(shù)***********
void DELAY_MS(unsigned int a )
{
    unsigned int i;
    while (--a !=0)
    {
     for (i=0; i<=600; i++);
    }
}
//*********主程序************
void main(void)
{
        Key1 = 1;          // key1初始化高電平
        LED=0;                //初始化led

        EA=1;                 //開總中斷
        IT1=0;                //低電平觸發(fā)
        EX1=1;                //外部中斷1允許
      
        while(1)      
        {
        LED=1;                        //LED亮
        DELAY_MS(80);        //延時
        LED=0;                        //LED滅
        DELAY_MS(100);        //延時
        LED=1;                        //LED亮
        DELAY_MS(80);        //延時
        LED=0;                        //LED滅
        DELAY_MS(1680);        //延時
        }
}                                       

void intx(void) interrupt 0        //外部中斷0
{         
        while(1)
        {
                if(Key1==0)                        //Key1低電平檢測
                DELAY_MS(10);                //延時按鍵消抖
                {
                        if(Key1==0)                //再次“Key1”低電平檢測
                        {
                          LED=1;
                          DELAY_MS(60);
                          LED=0;
                          DELAY_MS(60);
                          LED=1;
                          DELAY_MS(40);
                          LED=0;                                                                                                  
                          DELAY_MS(40);
                          LED=1;
                          DELAY_MS(30);
                          LED=0;
                          DELAY_MS(30);
                          LED=1;
                          DELAY_MS(20);
                          LED=0;
                          DELAY_MS(520);                 
                        }      
                        else
                        {
                          DELAY_MS(10);
                          return;                //返回主程序
                        }
                }
        }
}

作者: LaoYuTou    時間: 2023-7-9 08:29
確定實現(xiàn)了前3?初始化的是外部中斷1,用的是外部中斷0?
作者: csmyldl    時間: 2023-7-9 08:47
進(jìn)入中斷后,在中斷處理程序中要關(guān)閉外部中斷允許,否則會一直發(fā)生中斷(因為中斷程序執(zhí)行時間較長,包含了延時程序)
作者: 一生太多遺憾    時間: 2023-7-9 10:31
LaoYuTou 發(fā)表于 2023-7-9 08:29
確定實現(xiàn)了前3?初始化的是外部中斷1,用的是外部中斷0?

實現(xiàn)了,把void intx(void) interrupt 1        //外部中斷
作者: 一生太多遺憾    時間: 2023-7-9 10:32
LaoYuTou 發(fā)表于 2023-7-9 08:29
確定實現(xiàn)了前3?初始化的是外部中斷1,用的是外部中斷0?

第四步實現(xiàn)步了
作者: 一生太多遺憾    時間: 2023-7-9 20:11
已解決。謝謝各位大佬!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1