C51单片机C语言中断问题

我想做一个100ms的定时中断程序,下面的是65.3ms的程序。然后想知道中断时间是怎样计算的?(晶振12M)。“czm0605010127”说的我算出来应该是100us... 我想做一个100ms的定时中断程序,下面的是65.3ms的程序。然后想知道中断时间是怎样计算的?(晶振12M)。
“czm0605010127”说的我算出来应该是100us吧??如果我要100ms的定时呢?不可能是(65536-100000)这个吧?应该怎么写呢?
刚接触不是很懂,请多包涵。
展开
 我来答
fattian8321
2010-12-09 · TA获得超过502个赞
知道小有建树答主
回答量:178
采纳率:100%
帮助的人:219万
展开全部
51单片机12M晶振时,定时/计数器的时钟为1uS,所以单个16位的定时/计数器能达到的最大定时时间为:65536*1uS=65.536ms,所以12M晶振的情况下,用单个16位定时器得不到100ms的定时。这时可更换频率较低的晶振或用以下两种软件的方法:
1、定时器累加。用一个计数值来记录定时器的中断次数。比如,设定定时器10ms中断,用一个计数值来记录定时器的中断次数,每中断一次计数加1,这样计数值为10时候,定时器中断10次,即为100ms,然后将计数值清0,重新计数。这个方法会有小小误差,因为操作计数值的时候会占用一点时间,这个时间比较短。
2、2个定时/计数器串联。一个用作定时器,一个用作计数器。定时器中断的时候输出一个脉冲作为计数器的计数脉冲,设定一个计数值,计数满的时候中断。总的定时时间的原理同上。
至于定时/计数器的操作,楼上两位说得很清楚了。
czm0605010127
2010-12-09 · TA获得超过1164个赞
知道小有建树答主
回答量:637
采纳率:96%
帮助的人:42.1万
展开全部
定时器需要设置初值,然后启动定时器后,定时器就会在每一个周期将这个初值加1,直到溢出,就会产生定时中断。
单片机如果是12M的晶振的话,定时器1ms就会加1,不懂得话,可以看看单片机各个周期的关系。
下面就一定时器T0为例,来介绍初值的设置。
TH0=(65536-100)/256;
TL0=(65536-100)%256;
TH0和TL0共同组成16位的定时器,它的初值设置为还差100就会溢出,这样,过了100ms,定时器就会溢出,产生中断。
如何设置定时器工作模式,如何启动定时器和中断,我就不说了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-12-09
展开全部
定时器是当总数达到FFFFH后产生中断吧!那你要让它计数10000,是不是用FFFF(16进制)减去10000(十进制)的数当计数初值啊?TH0=-(10000/256); TL0=-(10000%256)跟FFFF(16进制)减去10000(十进制)的数是一样的。从TH0=-(10000/256); TL0=-(10000%256)开始计数,计数到10000刚好满。跟用FFFF(16进制)减去10000(十进制)的数一样!!!写起来更简单,不用算!!!
看看原码、补码就知道。正数的补码是对应的二进制数,符号位为零,负数的补码是它的绝对值对应的二进制数按位取反再加一,符号位为一。无符号数不考虑符号,那么这个结果就跟用FFFF减去它的绝对值一样。

参考资料: http://zhidao.baidu.com/question/87511070.html

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式