51单片机定时器模式1定时1us为什么用了好几秒啊
答案:2 悬赏:30 手机版
解决时间 2021-01-25 17:04
- 提问者网友:佞臣
- 2021-01-25 11:09
51单片机定时器模式1定时1us为什么用了好几秒啊
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-01-25 11:46
你的程序只有这几行吗看那没有ET1=1,开定时器中断没有啊。
定时到了,是不能中断的。
其实,这么设置没有什么意义的,因为,执行完TR1=1,这条指令,就开始计时了,只要1个机器周期就定时到。执行完TR1=1,定时就到了。但是还没有执行EA=1;就不能中断,还得等到ET1=1以后,才能中断。其实,早就定时到了,但没有执行ET1=1是不能中断。
单片机响应中断后,转去执行中断服务子程序,这需要更多的机器周期,远远超过1个机器周期,因此,你的设置是无理的。
而你的程序就没有ET1=1,所以,不可能中断的。
等了好几秒.........为什么啊看就应该等啊。
定时到了,是不能中断的。
其实,这么设置没有什么意义的,因为,执行完TR1=1,这条指令,就开始计时了,只要1个机器周期就定时到。执行完TR1=1,定时就到了。但是还没有执行EA=1;就不能中断,还得等到ET1=1以后,才能中断。其实,早就定时到了,但没有执行ET1=1是不能中断。
单片机响应中断后,转去执行中断服务子程序,这需要更多的机器周期,远远超过1个机器周期,因此,你的设置是无理的。
而你的程序就没有ET1=1,所以,不可能中断的。
等了好几秒.........为什么啊看就应该等啊。
全部回答
- 1楼网友:野味小生
- 2021-01-25 12:47
方案1:51的定时器定时时间不长,为了解决这一问题,可以设置一全局变量(假设你用c编程序)作计数器,等到定时中断发生时中断函数给这一全局变量加一,在主程序中判断这一变量的大小,从而推算出定时时间。譬如说,定时器设置成0.5秒中断一次,中断时给变量t加一,那么当t等于16时,就是8秒了。这种方案的缺点是必须在中断函数中加入给变量加一的额外语句,使得定时出现误差,但是也能通过减少定时器的定时时间来补偿,不过计算较麻烦,而且不便于精确定时。
方案2:使用低频的晶振或低频外部震荡。有些型号的单片机支持0至12mhz的震荡频率,只要频率足够低绝对能够在定时器最大定时时间内产生出想要的脉冲。这种方案是以牺牲单片机的运行速度为前提的,不过要是做一些简单控制的话,倒是一种不错的选择。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯