标题: 定时器怎么实现按秒计数,做成时钟计数源?求解!!! [打印本页]

作者: ZZZZZ134679    时间: 2022-12-25 09:38
标题: 定时器怎么实现按秒计数,做成时钟计数源?求解!!!
定时器不就是在中断执行的时候才开始运行吗,那么我进行主程序的时候定时器0不就停止计数,那计数就不准确了


作者: coody_sz    时间: 2022-12-25 14:22
建议楼主找一本单片机课本系统学一学比较好,你问的是很基本的一个知识。
定时器只要启动就会自动运行,跟开不开中断无关。使用自动重装的模式,则定时器精度就跟你的晶振的精度一样。
作者: bg5skf    时间: 2022-12-25 14:26
您理解有误!定时器启动后就开始运行。
作者: wulin    时间: 2022-12-25 14:43
你可以把定时器理解为单片机之外的一个硬件,当操控TRx=1; 定时器x就开始工作,与主程序在干什么没有什么直接关系。如果开了定时器中断,那么定时时间到,TFx = 1通知CPU,CPU放下手头工作做个标记,去执行中断任务,完后回到标记处继续原来的任务。
作者: gb302    时间: 2022-12-25 16:04
主程序只是响应中断,定时器的运行模式确定后,就会循环的运行
作者: 新昌小徐    时间: 2022-12-25 19:05
定时器只要在程序中执行启动就能运行起来,TR0=1;就是使定时器0运行起来的语句。定时器0运行起来的工作内容就是每个机器周期加1。
什么是机器周期呢?51单片机的机器周期是晶振周期的12倍,如晶振频率是12M,那么它的周期是12M分之一,那么机器周期就是1M分之一,一兆就是10的6次方,那么它的周期就是10的负6次方,就是一微秒。
那么定时器开始工作就是每12个晶振振荡加一次数,即每1微秒加1.
当加到最大值的时候,再加1就变成0,然后再向上加。
只有当把对应的定时器中断打开的时候,如ET0=1;就是打开定时器0的中断,那么定时器0的溢出信号才能产生中断,执行此中断服务程序。
你的思维有点混乱,定时器不是在中断的时候才运行,而是只要启动定时器就能运行,一旦启动,就对每个机器周期进行计数。计到最大值后,再加1就会溢出,必须打开中断开关,才能利用溢出信号产生中断。
举个粟子,你的闹钟只要把电池电源开关打开,闹钟就会走,当闹钟走到设定的指针与当前的时钟指针重合时,闹钟不一定会响,只有打开了闹钟开关,才会响起闹钟,提醒你。
你的意思是闹钟响(中断)是使钟表走动的动力?这显示是荒谬的。
作者: Hephaestus    时间: 2022-12-25 19:41
如果进入主程序定时器0就停止计数,那么要定时器有何用?
作者: 大漠落日    时间: 2022-12-28 11:07
你们问的太不专业了,是不是写设计,这种问题自已都没有理解,上课时怎么学习的
作者: 2(┯_┯)    时间: 2023-1-1 18:26
定时器与主函数运行时就开始运行




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1