2021-05-09

中断系统和延时程序有关吗?

我是一个初学者,刚学C51中断系统,想问问为啥我编写了一个程序,进入中断系统后,执行完程序就不返回主程序了。P2口 是控制led灯的。
这是程序

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define OUT2 P2
sbit K3=P3^2;
sbit K4=P3^3;
uchar m;
uchar n;
uchar k;
uchar lsd[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void delay(uint i)	// 延时函数
{
uint j;
while(i--)
{
for(j=0;j<125;j++)
{;}
}
}

void hhll() 
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
PX0=0;
PX1=0;
}

void main() //主函数
{
hhll();
while(1)
{k=0;
for(k=0;k<8;k++)
{
OUT2=lsd[k];
delay(500);
}
}
}

void int0() interrupt 0 using 3//外部中断0的中断函数
{
if(K3==0)
{delay(5);
for(m=5;m>0;m--)
{
OUT2=0xf0;
delay(500);
OUT2=0x0f;
delay(500);
} 
}
}

void int1() interrupt 2 using 3	 //外部中断1的中断函数
{
if(K4==0)
{delay(5);
for(n=5;n>0;n--)
{
OUT2=0x00;
delay(500);
OUT2=0xff;
delay(500);
}
}
}

之后我看书,把延时程序换成这样,又能够退出中断系统返回主程序了。

void delay(uint i)
{
uint j;
for(;i>0;i--)
for(j=0;j<333;j++)  //晶振为12MHz,j的选择与晶振频率有关
{;}
}

想问问是为啥。中断返回和延时程序有关吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值