1、让中断参与进来计数是为了更加的准确,如果对时间要求不是很严格的话,可以让单片机执行一些重复的语句(例如int i = 40000; while(i--;)以消耗时间,但具体消耗了多少时间要进入软件调试才能得知。
2、进入中断的时间由TH0,TL0的值来决定(也就是定时器的初值),举个例子:当你所有的定时器设置正确,初值为TH0 = 0XFC;TL0 = 0X18;,这样就是1ms进入一次中断,每次进入中断后,中断函数的静态变量i就自加一次(也就是相当于进入了多少次中断),当i = 1000时(也就是相当于进入了1000次中断了),1ms进入一次,进入了1000次,是不是就等于1ms*1000=1s?
3、如果进入中断时间不对(也就是触发TF0的时间不对),请确认定时器初值是否设置正确(也就是TH0与TL0的值是否正确)。
4、TMOD=TMOD|0x01;这句语句的意思是 TMOD的前7位不变,最后一位置1(如果是设置定时器0的工作模式1的话TMOD应如下设置:TMOD = TMOD & 0XF0;TMOD = TMOD | 0X01;)这样就不会影响到TMOD的高4位(也就是设置定时器1的那4位)。
5、假如不给TH0/TL0重新赋值的话,那么将会导致TH0/TL0溢出,表现出来的结果就是定时时间不准确;举个例子:假如TH0 = 0XFC;TL0 = 0X18;当定时时间到了1ms之后,立马给TH0/TL0重新赋值,这样定时器下一次进入中断的时间又会变成1ms进入一次,如果不重新赋值,那么进入中断的时间不能确定(也就是定时时间不确定)。
6、以下为个人看法:
(1)能将不懂的事情问出来是好事,就怕不懂又不问。
(2)视频教程不能只看一遍就过了,多看几次,直到彻底理解为止,不然视频中总有遗漏的地方,
(3)我不是大神,我只是一个正在学习51单片机的人,所以,以上观点我不敢保证一定没问题。如有发现不对的地方请不吝赐教。 |