void main()
{
resettimea();
resetint0();
resetint1();
temp=0x7f;
while(1)
{
if(flag1!=1)
printsmg(qw,bw,sw,gw);
else
flag1=~flag1;
if(time0==20)
{
time0=0;
P2=temp;
temp=_cror_(temp,1);
}
}
void exter0() interrupt 0
{
P0=dusmg[10];
led0=0;
P0=0xc7;
led0=1;
P0=dusmg[10];
led1=0;
P0=0xc0;
led1=1;
P0=dusmg[10];
led2=0;
P0=0xc1;
led2=1;
P0=dusmg[10];
led3=0;
P0=0x86;
led3=1;
flag1=1;
}
void timer0() interrupt 1
{
time0++;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
}
void exter1() interrupt 2
{
P0=dusmg[10];
led0=0;
P0=dusmg[10];
led0=1;
P0=dusmg[10];
led1=0;
P0=dusmg[4];
led1=1;
P0=dusmg[10];
led2=0;
P0=dusmg[0];
led2=1;
P0=dusmg[10];
led3=0;
P0=0xc1;
led3=1;
flag1=1;
}
这是主函数和两个中断响应函数。在实际运行中,当中断0按下时,保持住数码管显示,主程序里的LED闪烁停止运行。当中断1按下时,保持住数码管的同时,LED继续闪烁。这是什么原因?全部程序太多了。不让发,就发这几个。
关于单片机中断时两个中断出现的不同情况
答案:2 悬赏:70 手机版
解决时间 2021-04-08 00:26
- 提问者网友:聂風
- 2021-04-07 20:18
最佳答案
- 五星知识达人网友:猎心人
- 2021-04-07 20:33
嗯!这个是中断优先级的问题!优先级是这样排列的外部中断0是最高的,以此是定时器0,外部中断1,定时器1,串口中断!
你按下中断0的时候,因为她的中断优先级是最高的,所以他执行的时候,其他的中断是不能执行的。所以只有显示,没有闪烁。
你按下中断1的时候,因为定时器0的优先级是比他搞的,那么这样的话就会使得你中断1执行的时候中断0也是可以执行的!现象是既有显示还有闪烁!
你按下中断0的时候,因为她的中断优先级是最高的,所以他执行的时候,其他的中断是不能执行的。所以只有显示,没有闪烁。
你按下中断1的时候,因为定时器0的优先级是比他搞的,那么这样的话就会使得你中断1执行的时候中断0也是可以执行的!现象是既有显示还有闪烁!
全部回答
- 1楼网友:英雄的欲望
- 2021-04-07 21:04
如上楼上所说的。pic 的八位单片机只有一个中断入口(16位和32位的单片机就有多个)。
也就只能在程序里只能有一个中断子函数。如果开了两个或更多的中断,那就把两个中断的处理都放在这一个中断子函数中。中断子函数的最先判断中断标志位是那个被置位了,然后再根据你自己定的优先级来处理各个中断操作。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯