找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2363|回復(fù): 8
收起左側(cè)

單片機(jī)外部中斷結(jié)束后,程序運(yùn)行錯(cuò)誤

[復(fù)制鏈接]
ID:325524 發(fā)表于 2018-5-8 21:56 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
unsigned char a;
void main()
{
    a=0xf0;
    EA=1;
    EX0=1;
    IT0=0;
    while(1)
    {
        P1=a;
    }
}
void int0() interrupt 0
{
    a=0x0f;
}
外部中斷的低電平撤銷后,P1的值變不回來(lái),請(qǐng)問(wèn)這是怎么回事,需要怎么改?

回復(fù)

使用道具 舉報(bào)

ID:229959 發(fā)表于 2018-5-8 23:01 | 顯示全部樓層
單片機(jī)保持最后的狀態(tài),所以a還是等于0x0f,
while(1)
{if(IT0!=0)
   {a=0xf0;}
   P1=a;
}
你試試,我也是剛學(xué)的

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:325524 發(fā)表于 2018-5-9 08:17 來(lái)自觸屏版 | 顯示全部樓層
zhongbo1991 發(fā)表于 2018-5-8 23:01
單片機(jī)保持最后的狀態(tài),所以a還是等于0x0f,
while(1)
{if(IT0!=0)

很感謝,但還是回不來(lái)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-5-9 09:04 | 顯示全部樓層
void int0() interrupt 0
{
    a=~a;
}
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2018-5-9 09:12 | 顯示全部樓層
你的程序沒(méi)有問(wèn)題:外部中斷0發(fā)生后,P1口的值變化了的。
我已經(jīng)在我的板子上試驗(yàn)通過(guò)了。說(shuō)明中斷沒(méi)有問(wèn)題。

變不回來(lái),因?yàn)槟愕某绦驔](méi)有讓它變回來(lái)啊。
要變?cè)瓉?lái)的值,你的主循環(huán)中,就要有設(shè)置語(yǔ)句才行。
可能你理解中斷的執(zhí)行有誤解:中斷發(fā)生后,回到原來(lái)程序發(fā)生中斷時(shí)的位置,不是讓程序從頭再來(lái)一次!
按你的程序,只能是回到主循環(huán)內(nèi),你的a就是初值是之前定義的,當(dāng)然就執(zhí)行不到了。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:297166 發(fā)表于 2018-5-11 01:39 | 顯示全部樓層
IT0=0,你的意思是按下按鍵P1=0x0f,松開按鍵P1=0xf0?
這回試試行不行······
#include<reg52.h>
unsigned char a;
void main()
{
    EA=1;
    EX0=1;
    IT0=0;
    while(1)
    {
        a=0xf0;
        P1=a;
    }
}
void int0() interrupt 0
{
    a=0x0f;
    P1=a;
}
有一個(gè)疑問(wèn),這里IT0=0,不是低電平一直中斷嗎,P1的值怎么會(huì)改變(當(dāng)一直中斷的時(shí)候)?是在給高電平后中斷結(jié)束,P1才被重新賦值的吧
所以你的P1一直是中斷語(yǔ)句中賦予的值,其實(shí)中斷中重復(fù)了那么多次賦值,僅僅是賦值給a而已,和P1沒(méi)有關(guān)系的

評(píng)分

參與人數(shù) 1黑幣 +90 收起 理由
admin + 90 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:325524 發(fā)表于 2018-5-11 18:22 | 顯示全部樓層
wulin 發(fā)表于 2018-5-9 09:04
void int0() interrupt 0
{
    a=~a;

十分感謝,謝謝
回復(fù)

使用道具 舉報(bào)

ID:325524 發(fā)表于 2018-5-11 18:23 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2018-5-9 09:12
你的程序沒(méi)有問(wèn)題:外部中斷0發(fā)生后,P1口的值變化了的。
我已經(jīng)在我的板子上試驗(yàn)通過(guò)了。說(shuō)明中斷沒(méi)有問(wèn) ...

謝謝大佬解答
回復(fù)

使用道具 舉報(bào)

ID:325524 發(fā)表于 2018-5-11 18:25 | 顯示全部樓層
blossom99 發(fā)表于 2018-5-11 01:39
IT0=0,你的意思是按下按鍵P1=0x0f,松開按鍵P1=0xf0?
這回試試行不行······
#include

我是用一根線將3.2接到gnd了,然后把線拔掉,理論上要退出中斷啊,這個(gè)程序是a的賦值把我搞暈了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表