久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2945|回復: 8
打印 上一主題 下一主題
收起左側

按郭天祥視頻寫的單片機程序,在執行中斷時,主函數沒有停止運行,數碼管還在動

[復制鏈接]
跳轉到指定樓層
樓主
按照郭天祥的單片機學習視頻照著編了個程序,發現程序在執行中斷時,主函數還在運行。程序所設計的就是當P3.2接地時產生中斷,且中斷程序使得p1.0所接的燈亮。但當我做的時候p3.2沒接地時,沒有發生中斷,系統正常運行。用杜邦線將P3.2接地,使得EI0為1,發生中斷,此時杜邦線沒有拔下,發現p1.0所接的燈亮,但是數碼管卻還在循環變動,只是速度較中斷發生前有所減慢。把杜邦線拔掉后,燈滅且數碼光正常運行。按理說中斷程序還在執行時,主函數不應該停止嗎?數碼光不應該停在某個數字不變嗎?求大神解答疑惑,萬分感激。具體代碼如下。并附上相關圖片。
1.插杜邦線前

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


3.拔杜邦線后



4.單片機代碼如下

文本文檔和uv2.rar (1.34 KB, 下載次數: 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;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2020-3-31 22:53 | 只看該作者
把while(1)刪除或拔電就可以不跑了

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:201555 發表于 2020-4-1 07:00 | 只看該作者
中斷發生,執行中斷程序,執行完返回到主程序,接著執行中斷發生點后的程序。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:718222 發表于 2020-4-3 11:36 | 只看該作者
man1234567 發表于 2020-3-31 22:53
把while(1)刪除或拔電就可以不跑了

我也知道啊
回復

使用道具 舉報

5#
ID:718222 發表于 2020-4-3 11:36 | 只看該作者
www12www 發表于 2020-4-1 07:00
中斷發生,執行中斷程序,執行完返回到主程序,接著執行中斷發生點后的程序。

是 原理是這樣 可我的程序執行時 沒按這個原理運行 不知道哪里出現問題了
回復

使用道具 舉報

6#
ID:704561 發表于 2020-4-3 22:09 | 只看該作者
但是數碼管卻還在循環變動,只是速度較中斷發生前有所減慢.
應該是在反復的進出中斷.你的中斷函數里面就一條語句.執行完就退出了.
進入中斷并不是你一直按下去就一直中斷.一般只是下降沿觸發中斷.
另外,你可以在中斷里加一個延時函數效果會明顯一些.

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:718222 發表于 2020-4-5 13:19 | 只看該作者
silvanesw 發表于 2020-4-3 22:09
但是數碼管卻還在循環變動,只是速度較中斷發生前有所減慢.
應該是在反復的進出中斷.你的中斷函數里面就一 ...

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

使用道具 舉報

8#
ID:798201 發表于 2021-1-10 13:13 | 只看該作者
本帖最后由 zwf33 于 2021-1-10 18:26 編輯

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

你的程序是下降沿觸發的,中斷點亮d1又回到了斷點位置執行主程序

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


#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
                    };       //數碼管編碼表

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

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


//********************打開位選********************//
    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)         //延時子程序
{
    uint x,y;
    for(x=z; x>0; x--)
    {
        for(y=110; y>0; y--);
    }
}

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

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


評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

9#
ID:474802 發表于 2021-1-10 15:09 | 只看該作者
哈哈,還記得剛剛工作的時候,眼里總是盯著低電平高電平,看時序圖只看高低,然而很多芯片使用的時候都是邊沿觸發的,整半天才明白。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品小视频 | 91免费福利视频 | 精品亚洲一区二区三区 | 九九视频这里只有精品 | 免费看一级片 | 夜夜操夜夜操 | 欧洲亚洲一区 | 欧美日韩成人一区二区三区 | 成年人视频在线播放 | 欧美美女一区二区 | www黄色com| 日韩欧美一区二区三区久久婷婷 | 深夜福利在线播放 | 中文在线字幕免费观 | 欧美日韩在线一区二区 | 日韩一级在线 | 日韩在线视频免费 | 精品一二三 | 久久草视频 | 久久精品欧美一区二区 | 亚洲综合日韩 | 日产久久视频 | 成人免费毛片男人用品 | 中国av在线播放 | 欧美福利在线 | 亚洲激情在线播放 | 欧美人与性动交α欧美精品 | 亚洲天堂一区二区三区 | 日韩精品在线观看视频 | 国产福利在线 | 少妇性bbb搡bbb爽爽爽欧美 | 国产成人免费在线观看 | 欧美日韩性 | 日韩中文在线观看 | 欧美亚洲在线观看 | 欧美日韩国产在线播放 | 午夜精品久久 | 91麻豆精品视频 | 亚洲精选一区 | 亚洲香蕉视频 | 日韩a视频 |