求单片机实验的外部中断实验的程序

求单片机实验的外部中断实验的程序,第1张

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

uchar cnt,times

void delay()

{

uchar i

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

TR0=1

for(i=0i<timesi++)

{

while(TF0==0)

TH0=(65536-50000)/256

TL0=(65536-50000)%256

TF0=0

}

TR0=0

}

void ext0() interrupt 0

{

uchar i,j

P1=0xfe

times=8

for(i=0i<5i++)

{

for(j=0j<8j++)

{

P1=_crol_(P1,1)

delay()

}

}

}

void ext1() interrupt 2

{

uchar i,j

P1=0x7f

times=12

for(i=0i<3i++)

{

for(j=0j<8j++)

{

P1=_cror_(P1,1)

delay()

}

}

}

main()

{

EX0=1

EX1=1

IT0=0

IT1=1

PX0=0

PX1=1

while(1)

}

请问你这个触发中断是一个按键?你触发的方式是长时间按下还是瞬间按下?我觉得你应该是长时间按下的。回到正题,你这个中断服务函数里只有一句代码,那么中断服务函数执行的速度会很快的,所以如果你只按了一下的话那么看起来就感觉没有执行一样,更重要的是你这个中断服务函数里没有对按键进行消抖,同时也没有关闭中断,这就可能会引起,当你瞬间按下中断按钮后,其实中断被执行了多次,而当你长时间按下中断按钮后,那么程序会不停的在main和中断服务函数之间快速不停的切换,这就导致了main函数断断续续的运行,看起来就像是main运行变慢了,其实是因为程序需要不停的进入中断服务函数,所以看起来就像运行变慢一样。

改进建议:在中断服务函数里加入按键消抖的语句,或是直接进入中断后关闭中断,处理完后再开启。而且如果想明显的看到效果的话请在中断服务函数里加一些延时语句。

允许高一级的中断产生。中断实验主程序中第一条指令的作用是STI,它用来允许高一级的中断产生。中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与CPU芯片内外部硬件电路产生的电信号相对应。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11159312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存