欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 按郭天祥視頻寫的單片機(jī)程序,在執(zhí)行中斷時(shí),主函數(shù)沒有停止運(yùn)行,數(shù)碼管還在動(dòng) [打印本頁]

作者: 小小學(xué)習(xí)蔡    時(shí)間: 2020-3-31 21:16
標(biāo)題: 按郭天祥視頻寫的單片機(jī)程序,在執(zhí)行中斷時(shí),主函數(shù)沒有停止運(yùn)行,數(shù)碼管還在動(dòng)
按照郭天祥的單片機(jī)學(xué)習(xí)視頻照著編了個(gè)程序,發(fā)現(xiàn)程序在執(zhí)行中斷時(shí),主函數(shù)還在運(yùn)行。程序所設(shè)計(jì)的就是當(dāng)P3.2接地時(shí)產(chǎn)生中斷,且中斷程序使得p1.0所接的燈亮。但當(dāng)我做的時(shí)候p3.2沒接地時(shí),沒有發(fā)生中斷,系統(tǒng)正常運(yùn)行。用杜邦線將P3.2接地,使得EI0為1,發(fā)生中斷,此時(shí)杜邦線沒有拔下,發(fā)現(xiàn)p1.0所接的燈亮,但是數(shù)碼管卻還在循環(huán)變動(dòng),只是速度較中斷發(fā)生前有所減慢。把杜邦線拔掉后,燈滅且數(shù)碼光正常運(yùn)行。按理說中斷程序還在執(zhí)行時(shí),主函數(shù)不應(yīng)該停止嗎?數(shù)碼光不應(yīng)該停在某個(gè)數(shù)字不變嗎?求大神解答疑惑,萬分感激。具體代碼如下。并附上相關(guān)圖片。
1.插杜邦線前

2.插杜邦線后(p3.2接地)(問題就在這,為什么數(shù)碼光還在移動(dòng),主程序還在運(yùn)行)


3.拔杜邦線后



4.單片機(jī)代碼如下

文本文檔和uv2.rar (1.34 KB, 下載次數(shù): 3)

#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit D0=P1^0;
#define uchar unsigned char
#define uint unsigned int
uchar num;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void Delay(uint);
void main(void)
{

        EA=1;
        EX0=1;
        wela=1;
        P0=0x00;
        wela=0;
        while(1)
                {        
                        for(num=0;num<16;++num)
                                {
               D0=1;
                                        dula=1;
                                        P0=table[num];
                                        dula=0;
                                        Delay(1000);
                                }               
                        
                }        

}
void Delay(uint i)
{
        uchar j;
        for(i;i>0;i--)
                {
                for(j=1000;j>0;j--)
                        {

                        }
      }
}
void exter0(void) interrupt 0
{
        D0=0;
}

作者: man1234567    時(shí)間: 2020-3-31 22:53
把while(1)刪除或拔電就可以不跑了
作者: www12www    時(shí)間: 2020-4-1 07:00
中斷發(fā)生,執(zhí)行中斷程序,執(zhí)行完返回到主程序,接著執(zhí)行中斷發(fā)生點(diǎn)后的程序。
作者: 小小學(xué)習(xí)蔡    時(shí)間: 2020-4-3 11:36
man1234567 發(fā)表于 2020-3-31 22:53
把while(1)刪除或拔電就可以不跑了

我也知道啊
作者: 小小學(xué)習(xí)蔡    時(shí)間: 2020-4-3 11:36
www12www 發(fā)表于 2020-4-1 07:00
中斷發(fā)生,執(zhí)行中斷程序,執(zhí)行完返回到主程序,接著執(zhí)行中斷發(fā)生點(diǎn)后的程序。

是 原理是這樣 可我的程序執(zhí)行時(shí) 沒按這個(gè)原理運(yùn)行 不知道哪里出現(xiàn)問題了
作者: silvanesw    時(shí)間: 2020-4-3 22:09
但是數(shù)碼管卻還在循環(huán)變動(dòng),只是速度較中斷發(fā)生前有所減慢.
應(yīng)該是在反復(fù)的進(jìn)出中斷.你的中斷函數(shù)里面就一條語句.執(zhí)行完就退出了.
進(jìn)入中斷并不是你一直按下去就一直中斷.一般只是下降沿觸發(fā)中斷.
另外,你可以在中斷里加一個(gè)延時(shí)函數(shù)效果會(huì)明顯一些.
作者: 小小學(xué)習(xí)蔡    時(shí)間: 2020-4-5 13:19
silvanesw 發(fā)表于 2020-4-3 22:09
但是數(shù)碼管卻還在循環(huán)變動(dòng),只是速度較中斷發(fā)生前有所減慢.
應(yīng)該是在反復(fù)的進(jìn)出中斷.你的中斷函數(shù)里面就一 ...

感謝 這樣就解決了 厲害啊 我的大神

作者: zwf33    時(shí)間: 2021-1-10 13:13
本帖最后由 zwf33 于 2021-1-10 18:26 編輯

51外部中斷有兩種方式
低電平觸發(fā) IT0=0  (檢測(cè)到引腳為低電平就觸發(fā) )  
下降沿觸發(fā)IT0=1     (測(cè)到引腳從高到低下降時(shí)就觸發(fā))

你的程序是下降沿觸發(fā)的,中斷點(diǎn)亮d1又回到了斷點(diǎn)位置執(zhí)行主程序

增加IT0=0,中斷程再加延時(shí)delay(200),P3.2一直保持低電平,數(shù)碼管就不走了


#include <REGX52.H>
typedef unsigned char uchar;
typedef unsigned int  uint;
sbit wela=P2^7;
sbit dula=P2^6;
void delay(uint z);
sbit d1=P1^0;
uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
                    };       //數(shù)碼管編碼表

uchar num;                                      //定義num數(shù)據(jù)類型
void main()

{
//********************外部中斷0,電平觸發(fā)中斷********************//
    EA=1;                                                                                                      //打開總中斷
    EX0=1;                                                                                                        //開外部中斷0
    IT0=0;                                                                                                        //電平觸發(fā)
//********************外部中斷0,電平觸發(fā)中斷********************//


//********************打開位選********************//
    wela=1;
    P0=0xc0;
    wela=0;
//********************打開位選********************//
    while(1)
    {
        d1=1;
        for(num=0; num<16; num++)                //unmp賦初值,判斷自加
        {
            dula=1;                //打開段選
            P0=table[num];                        //table等于自加后的num值
            dula=0;
            delay(50);
        }
    }
}

void delay(uint z)         //延時(shí)子程序
{
    uint x,y;
    for(x=z; x>0; x--)
    {
        for(y=110; y>0; y--);
    }
}

//********************中斷程序********************//
void  exter0() interrupt 0            //中斷函數(shù)不用聲明
{

        d1=0;
        delay(200);                                   
}
//********************中斷程序********************//



作者: MNwcy    時(shí)間: 2021-1-10 15:09
哈哈,還記得剛剛工作的時(shí)候,眼里總是盯著低電平高電平,看時(shí)序圖只看高低,然而很多芯片使用的時(shí)候都是邊沿觸發(fā)的,整半天才明白。




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