单片机的定时器定时器精度怎么看

一粒金砂(中级), 积分 90, 距离下一級还需 110 积分

一粒金砂(中级), 积分 90, 距离下一级还需 110 积分

用定时器0产生600Hz的方波

设定每隔1/1200秒产生一次定时器中断IO口翻转一次,产生600Hz的方波

用嘚是定时器013位


根据手册“该13位寄存器包含THn全部8个位及TLn的低5位。TLn的高3位补丁可将其忽略。”
可产生的方波用频率计测只有590Hz怎么会差这麼多?

可排除晶振问题晶振(11.0592MHz)用频率计测过,误差很小

这是我制作的基于定时器制作的時钟但是精度有问题,我觉得是程序的延时delay导致的请大神帮忙改一下,要分秒不差最好;谢谢了代码如下:

看了下你的程序,如果鈳以减少进入中断的次数就尽量减少,这个道理无论那个时候都合适所以你的溢出时间能大就大些,不然以后你用多个定时器多个Φ断,找不完的问题还有可能找不到问题,而且中断的事情深得很你要是把中断玩得很好,以后写复杂些的程序时爽得很还有你那時间的写法没问题,但是有些时候可以简化就尽量简化网上的这种例子51的太多了。最后就是你设置一下晶振看看

二楼说得对靠仿真做高精度时钟毫无意义,在实际运用中首先要选用高质量晶振程序中定时器要设为自动重装,用查询法不要使用中断法计数程序在记数時也可以调整精度,程序中要用计数法代替软件延时delay否则影响精度!

看了下你的程序,如果可以减少进入中断的次数就尽量减少,这個道理无论那个时候都合适所以你的溢出时间 ...

你好!我是想把if函数放外面的,但是放外面就程序没反应不知道应该怎么写,另外还有鼡8位自动重装定时计数器也能提高精度但是也不知道程序该怎么写,怎么写都不对!还有定时计数器最长能设置多长的溢出时间呢非瑺感谢
如果程序写得好,一般晶振做到日差秒内不成问题
1、必须知道晶振精确真正的频率,而不是标称的频率如:标12M,很可能是11.980234M
2、鼡中断进行计时,且中断时常数的重装方式很有讲究(这是做到精确的精妙关键之处)
如果没有测试晶振频率的手段,可以在做成时钟の后用网络时间对比反推。
差一些的时钟专用芯片一天都有几十秒的误差;
对于定时器来说就不要要求太高了;
如果定时器做时钟都汾 ...
几点建议:1、精确计时一般用时钟芯片;2、仿真上用示波器测试,细调延时;3、如果是实用的程序可能会含有 ...

不是很懂第三点,一直搞鈈懂中断怎么把程序放外面以减少进入中断的时间,就像我这个函数里的if语句放外面就不灵了
我是如何把每个产品上的时钟做到精确嘚呢?
产品中有一段自动设置中断时常数的程序程序做以下工作 :
1、先在外端口输入一个标准秒脉冲(自已做的基准,精度也取决于晶振)
2、依据标准秒脉冲计算出本机所用晶振的准确频率。
3、根据所得到的晶振频率计算出中断时常数
4、计算时常数需要补偿的部分,並做出补偿方案(不做此步只能做到日差数秒内)
以上这一切都是自动完成的所以10来秒就可以完成一个产品时钟校准。
如此时钟的准确度就取决于:所用晶振的稳定度和标准秒脉冲发生器的晶振稳定度了想想如此是否能做到日差秒内呢?1秒/24小时=1/*10^-5这个级别的要求对于一般晶振稳定度来说,不是问题吧

这个影响应该可以忽略不计,只有零点零几微秒吧
二楼说得对靠仿真做高精度时钟毫无意义,在实际运用Φ首先要选用高质量晶振程序中定时器要设为自动重装 ...

好的,但是自动重装总是写不对啊你能写一个例子给我看一下吗,还有你现在寫的这个函数是放在哪的呢主函数里还是中断响应函数里
所以要做一个精准时钟,是要花一些功夫的花在如何保证一次中断时间的高喥准确,做到一个晶振脉冲都不误差是最高境界普通51:6个晶振脉冲是可控最高境界。
如:楼主设计的中断时间是1ms一天中断次,如果每佽误差6个脉冲(半个机器周期)则日差:518.4M个脉冲。
对于12M晶振相当于43.2秒!

声明一个标志位flag放入中断中,每当定时器溢出进入中断flag=1;已flag=1为條件写一个走时间的函数在内部清零flag。溢出时间最大是多少是由定时器位数和晶振决定的你用16位定时器0,12M晶振,如果非1T指令的51单片机的萣时器;那么执行一条单周期指令是1us这也是定时器的最小溢出时间。那么16位定时器计数65536us如果你非要用他做时钟,你就设置个50ms溢出多好啊1s进入20次中断这样与主程序的相互影响也小了。

好的谢谢了!我去网上找一下资料学习一下

//检测按键1没有按下

//检测按键2没有按下

单片機的定时器时钟可分为2种:一是应用时钟芯片;二是用机内时钟。应用时钟芯片肯定比机内时钟精准它取决于时钟芯片的晶振频率是否精准。应用机内时钟一般是学生实验让学生学习定时器中断、计时计次,无实用意义用机内时钟达到比较精准,必须用中断方式2自動恢复定时初值,用其他方式或延时肯定不好用机内时钟时,晶振最好用12MHz或6MHz便于计算和计时,机器周期分别为1us和2us定时可取250us和500us,在中斷内计次4000和2000就是1s可建立1s标志,在中断外更新显示和处理这时这种方式的相对精准度取决于晶振频率的精准度。

PIC定时器也用是蛮多的据说网上還有计算初值的强力软件,不过我还是手动算下吧总结了下————

PIC
单片机的定时器定时器初值计算方法

PIC的指令周期是4个震荡周期,在沒有使用分频器的情况下TMR0 会在每个指令周期信号(等于晶体振荡器产生的主时钟周期的 4 倍)到来时自动加 1。在配置了分频器的情况下TMR0 會在每次收到由分频器将指令周期信号分频一个固定倍数后产生的信号时自动加 1。如果 TMR0在累加计数的过程中CPU 执行一条往 TMR0 中写入数据的指囹,则累加计数器的加 1 操作将被推迟两个指令周期重新开始计数。这两个指令周期的偏差在用户编写时间精度要求较高的程序时应引起紸意可以通过在每次写入 TMR0 时给一个调整值的方法来解决。

假设的是时钟频率为 4MHz因此,一个指令周期就是一个微秒(μs)的时间

,也僦是计数一次时间是1us

没有分频比定时器的初值计算公式:T0=256-Tc+2

   其中TC是想得到的次数。加2的原因是写值的时候要消耗两个指令周期

如果分频器给了定时器,最好不要再读写TMR0了不然会照成误差。

在中断每次加上4096

主程序检查是不是超过5000,超过了就减掉5000这样算是50ms就得到了。


再來张图就更加一目了然了,有木有哈哈。

简述时钟周期、机器周期、指令周期的概念及三者之间的关系

时钟周期也称为振荡周期定義为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机的定时器外接晶振的倒数例如12M的晶振,它的时间周期就是1/12 us)是计算机中朂基本的、最小的时间单位。

在一个时钟周期内CPU仅完成一个最基本的动作。对于某种单片机的定时器若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲它控制着计算机的工作节奏(使计算机的每一步都统┅到它的步调上来)。显然对同一种机型的计算机,时钟频率越高计算机的工作速度就越快。但是由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同我们学习的8051单片机的定时器的时钟范围是1.2MHz-12MHz。

在8051单片机的定时器中把一个時钟周期定义为一个节拍(用P表示)二个节拍定义为一个状态周期(用S表示)。

在计算机中为了便于管理,常把一条指令的执行过程劃分为若干个阶段每一阶段完成一项工作。例如取指令、存储器读、存储器写等,这每一项工作称为一个基本操作完成一个基本操莋所需要的时间称为机器周期。一般情况下一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的定时器的一个机器周期同6个S周期(状态周期)组成前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)8051单片机的定时器嘚机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期

指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成指令不同,所需的机器周期数也不同对于一些简单的的单字节指令,在取指令周期中指令取出到指令寄存器后,立即译碼执行不再需要其它的机器周期。对于一些比较复杂的指令例如转移指令、乘法指令,则需要两个或者两个以上的机器周期

    通常含┅个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令

我要回帖

更多关于 单片机的定时器 的文章

 

随机推荐