按照郭天祥的單片機學習視頻照著編了個程序,發現程序在執行中斷時,主函數還在運行。程序所設計的就是當P3.2接地時產生中斷,且中斷程序使得p1.0所接的燈亮。但當我做的時候p3.2沒接地時,沒有發生中斷,系統正常運行。用杜邦線將P3.2接地,使得EI0為1,發生中斷,此時杜邦線沒有拔下,發現p1.0所接的燈亮,但是數碼管卻還在循環變動,只是速度較中斷發生前有所減慢。把杜邦線拔掉后,燈滅且數碼光正常運行。按理說中斷程序還在執行時,主函數不應該停止嗎?數碼光不應該停在某個數字不變嗎?求大神解答疑惑,萬分感激。具體代碼如下。并附上相關圖片。
1.插杜邦線前
IMG_20200331_210418.jpg (4.85 MB, 下載次數: 26)
下載附件
2020-3-31 21:07 上傳
2.插杜邦線后(p3.2接地)(問題就在這,為什么數碼光還在移動,主程序還在運行)
IMG_20200331_210431.jpg (4.31 MB, 下載次數: 31)
下載附件
2020-3-31 21:08 上傳
IMG_20200331_210433.jpg (4.57 MB, 下載次數: 31)
下載附件
2020-3-31 21:08 上傳
IMG_20200331_210435.jpg (4.31 MB, 下載次數: 29)
下載附件
2020-3-31 21:08 上傳
3.拔杜邦線后
IMG_20200331_210530.jpg (4.94 MB, 下載次數: 31)
下載附件
2020-3-31 21:08 上傳
4.單片機代碼如下
文本文檔和uv2.rar
(1.34 KB, 下載次數: 3)
2020-3-31 21:15 上傳
點擊文件名下載附件
相關程序
#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;
}
|