1你的程序并不能实现显0~9,1357,0246,亮灯和响铃是可以。
2用P11按键是可以实现暂停和继续的,并不需要中断。不是什么事都需要中断,好像离开中断就什么也不能做了
3你想暂停,是随时暂停,还是什么时候暂停
你的外部中断应该是属于下降沿触发,当有一个下降沿到来时外部中断请求标志IE0或IE1(外部中断0或外部中断1请求中断标志,下面简称为IEx)就会置1,当进入中断程序后IEx由硬件归零。也就是说单片机当检测到IEx为1的时候就会进入到外部中断程序。\x0d\现在来分析一下为什么你的程序会执行两次中断。\x0d\当单片机外部中断引脚第一次接收到一个下降沿时,IEx被置1,进入中断程序,随即IEx被硬件清零。然而由于你用杜邦线接触P32口存在抖动(你感觉不到),外部中断引脚再次接受到一个下降沿,IEx又被置1,单片机又要响应中断,但此时由于上一个中断程序未执行完,单片机将等待外部中断程序执行完(你可以理解为有两个中断事件,但这两个事件优先级相同,所有按顺序响应)。在这个过程中,你的接触仍然会产生很多下降沿,但因为IEx只有响应了中断事件后才会清零,因此IEx一直为1。当第一次的中断程序执行结束后,单片机检测到IEx又是1,马上又再次进入中断。因为你的接触时间远远小于你的中断程序执行时间,因此在第二次执行中断程序前已不存在下降沿,所以进入第二次中断程序后,IEx就被清零了,这样执行完第二次中断程序后就不会再次进入中断了。\x0d\说了那么多希望你能明白吧。不明白可以翻查相关单片机外部中断相关资料。
再次重新启动。
用C语言实现的,先要定义好定时器的初值,不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期,机器周期=12/n(n指晶振频率),假设你要定时的时间为M,那么定时的初值为:M/机器周期=初值;
TH0=(65536-初值)%256;
TL0=(65536-初值)/256;
将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值,例如用12M晶振做1ms定时计算如下:
机器周期=12/1210^6=1us(微秒)
定时初值=(110^-3)/(110^-6)=1000;
所以:TH0=(65536-1000)%256;
TL0=(65536-1000)/256;
将65536-1000=64536化为16进制为:0xFC18,TH0=0xFC,TL0=0X18;
定好初值后要延迟一秒就定一个延时参数,这里使用1000就行了(定时为1ms)中断程序为:timer0() interrupt 1 // 1ms延时(120MHz)
你的问题是没理解中断的含义。
中断,字面上意思就是(当有更紧急的事情出现的时候)终止现在手头上的事情去忙更紧急的事情。在程序里,就相当于当某个条件成立时,停止正在运行的代码(手头上的事情),去执行另一段代码(更紧急的事情),只是这个过程是硬件自动完成的,而不是像你平时调用函数那样显式的去调用它。
你的程序里用到了定时器0(自己去看定时器的工作原理),那你只要将定时器0初始化,并且在函数void exter() interrupt 1里写下你希望当定时器0中断的时候执行的代码就行了。当你启动定时器0的时候,它有点像后台运行的一个程序,当它归0的时候,就会置相应的中断标志为1,而CPU会不时的检测这些中断标志位,当发现某个标志位为1的时候,表明有中断请求,CPU会自动转到相应的中断服务程序中去。
1,cpu运行,和定时器是并行进行的
2,cpu在工作中,得到了定时中断,那么它停止手头的工作去中断请求中服务,完成服务,返回原来的断点位置继续工作,
3,如果在中断服务中,定时器不关,那么在cpu执行服务时,定时器是工作的一般建议关掉,执行完再打开
你主函数中除了初始化的语句外,其它的处理部分都放在WHILE(1)的循环中啊,然后 外部中断中设置一个标志位,举例说明,比如。下面例子,是外中断一次,P0取反一次,你如果还想有其它数据处理,可以把语句写在WHILE(1)中。中断执行后,判断FLAG,然后会自动回到主函数中。
void main(void)
{
flag=0;
EA=1; //开放总中断
EX0=1; //允许使用外中断
IT0=1; //负跳变来触发外中断
P0=0xff;
while(1)
{
if(flag)
{
可以在此添加语句。
}
可以在此添加语句。 }
}
void it0(void) interrupt 0 using 0
{
P0=~P0; //每产生一次中断请求,P0取反一次。
flag=1;
}
以上就是关于请问51单片机如何用一个独立按键控制程序的暂停和继续全部的内容,包括:请问51单片机如何用一个独立按键控制程序的暂停和继续、51单片机外部中断子程序为什么会执行两次、51单片机定时器中断程序怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)