大佬们,新手请教一个关于中断的问题

睡不醒的糯米团子 2022-10-15 23:54:22

为什么在执行中断后,数码管显示的数会停留在最后一个数,而不是返回主程序 

#include <REGX51.H>

//-----定义全局变量
unsigned char DisplayData[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
	0x88,0x83,0xc6,0xa1,0x86,0x8e};             //共阳数码管显示0---f

//延时函数
void delay(unsigned int i)
{
	unsigned int j;
	for(;i>0;i--)
	for(j=0;j<125;j++)
	{;}//空函数
}

//主函数
void main( )
{
	unsigned char i;
	while(1)
	{
		EA=1;          //总中断允许
		EX0=1;         //允许外部中断0中断
		EX1=1;         //允许外部中断1中断
		IT0=1;         //选择外部中断0为跳沿触发方式
		IT1=1;         //选择外部中断1为跳沿触发方式
		PX0=0;
		PX1=0;
		for(i=0;i<17;i++)
		{
			P0=DisplayData[i];
			delay(800);
		}
	}
}

//中断函数
void int0_isr(void) interrupt 0 using 0//外部中断0的中断服务函数
{
	unsigned char i;
	for(i=0;i<10;i++)
	{
		PX1=1;
		P0=DisplayData[i];
		delay(800);
	}
}

void int1_isr(void) interrupt 2 using 1//外部中断1的中断服务函数
{
	unsigned char i;
	for(i=10;i<16;i++)
	{
		PX0=1;
		P0=DisplayData[i];
		delay(800);
	}
}














 

...全文
149 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
不忘初心2022 2023-01-31
  • 打赏
  • 举报
回复

中断里面不要加延时,另外开个定时器去计时

yishumei 2022-10-18
  • 打赏
  • 举报
回复

怎么进入的外部中断0和1?按键吗?

  • 举报
回复
@yishumei 对,用的按键,跳沿触发方式,芯片是AT89C51
yishumei 2022-10-21
  • 举报
回复
@睡不醒的糯米团子 程序中有没有消除按键抖动?没有的话,可能是中断太多导致堆栈溢出,程序就死机了

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧