51单片机的外部中断0实验(P2.3引脚)

我做51单片机外部中断的实验除了问题程序如下:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcha... 我做51单片机外部中断的实验除了问题
程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit d1=P3^0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar num;
void delay(uint);
void main()
{
EA=1;
EX0=1;
P1=0xaa;
while(1)
{
for(num=0;num<10;num++)
{
d1=1;
P0=table[num];
delay(1000);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void exter0() interrupt 0
{
d1=0;
}
其中P1接8位数码管的位选,P0接8位数码管的段选
P3.0口接一个led指示灯,看是否中断
当我把外部中断0接GND时,数码管上的数字依旧跳变,并没有停止,只是跳动的频率比没加中断时慢了而已。
不知道是哪里出了问题
展开
 我来答
hychyc_2008
2010-09-22 · TA获得超过9741个赞
知道大有可为答主
回答量:1099
采纳率:100%
帮助的人:685万
展开全部
答:

先看看你的中断程序:
void exter0() interrupt 0
{
d1=0;
}
也就是叫d1置零而已。执行完这句就跳出中断了,继续执行主函数。

那么你叫中断一直低电平,是不是就一直触发中断呀?是的。

你认为只要一直触发中断,是不是就应该永远执行中断函数,而不干别的了?

当程序从中断函数跳出时如果又来了中断,单片机会在跳出中断后执行一条指令才进入中断的! 也就是执行RETI这句汇编指令后,接着又执行一条语句,才进入中断函数。跳出后又执行一条语句....依此类推

所以你的程序就是这样的情况。你看到的就是跳动的频率变满了。
xrg0228
2010-09-22 · TA获得超过1184个赞
知道小有建树答主
回答量:1215
采纳率:100%
帮助的人:643万
展开全部
中断对你的显示没有关系,把延时再加长点到一秒,你就能看到效果了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式