51单片机定时器问题,定时不精准,差不多30s就有一秒的误差,

11.0592Mhz的晶振,定时器T0,初值TH0=(65536-46080)/256;TL0=(65536-46080)%256;帮忙解决一下,应该不是初值的问题吧, 差不多每30s就要快出来1s,不知道该如何让解决!

65536-46080=19456个机器周期。
你使用11.0592M,如果单片机是12T的话,那就是每秒有11059200/12=921600个周期
19456/921600=0.0211111秒
再加上你在中断函数中到TH0,TL0赋值的操作,包括,跳转,关键数据入栈,TH0,TL0赋值等的时间。
换句话说,你一次中断大概是0.021120秒
接下来,你就自己算吧追问

那个19456/921600是什么意思?而且我定时器出现的问题是比标准时间快!

追答

19456/921600表示,从你设置完TH0与TL0后到再次T0中断发生的时间。
你的中断程序是怎么写的,我不知道,但我想你总要以这个中断的间隔时间作为标准吧,那你的计算出的标准时间是多少呢。

追问

19456是我对定时器设置的初值啊!

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-09
你这个 设置是 50 mS, 就是 20 次为 1 秒, 要精确计时 定时器中断 用最高优先级,
程序 或者 晶振 有问题 一般 用定时器中断 误差 很小的 24 小时也不会 差 1 S的。追问

谢谢,问题解决了,不是程序的问题!

第2个回答  2012-11-08
e

关于51单片机控制蜂鸣器发声时长的。
如果定时器在设计万年历的其它功能时被占用,那你就延时吧,延时30s。 个人不建议延时,因为延时,单片机就只延时了。如果用DS1302芯片就好了,单纯的用单片机做个万年历是很吃力的,而且有时间误差累积!

51单片机倒计时30s,proteus仿真一直出错
程序看来没打问题,30秒?temp=30;估计是一些元件属于不能仿真的(不是仿真模型)关键是你没交代出了什么错!!

基于单片机的数字时钟设计开题报告
\/\/我这里有一个定时的闹钟,你把蜂鸣器的中断改为LED就行了,可以通过P2^0--P2^3实现秒表的显示和以及调时调分和调节闹钟以及闹钟的开关,有问题可以给我留言QQ834589429 include<reg52.h> \/\/包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 code unsigned char tab[]= {0x3f,...

51单片机四路抢答器毕业论文 只要四路
选手答题计 时抢答自锁,灯光指示、暂停复位、电子音乐报声;抢答规 定时限 0-30 秒可调; 面板上设有组号与计时窗口, 显示清晰, 同步显示,互不干扰集抢答器、数显倒计时器于一机; 可设 定抢答、答题两种倒计时时间;抢答器具有锁存与显示功能。

交通灯的单片机设计
那还不自己好好做啊,这个作出来很有用啊,这个既不需要扩展口,真的很简单啊,好好做吧,给你个图看看吧,基本上就是这个电路就行了啊 程序也很简单,用定时器就好了啊,中断也用的到,加油啦,支持你,Myfriends!!!(这个图中用了8个LED,做交通灯再加上4个就行了,口也够)...

单片机交通灯程序
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1 MOV TH1,#00H ;T1计数器清零 MOV TL1,#00H SETB TR1 ;启动T1计时器 SETB EX1 ;允许INT1中断 SETB IT1 ;选择边沿触发方式 MOV DPTR ,#0003H MOV A, #80H ;给8255赋初值,8255工作于方式0 MOVX @DPTR, A AGAIN: JB ...

汇编程序单片机交通灯程序仿真不出效果?
初始化定时器 MOV TL0,#0B0H MOV TH0,#3CH SETB EA ;;;开定时中断与紧急中断 SETB ET0 SETB TR0 SETB EX0 SETB IT0 ;;;设置中断程控方式 MOV DPTR,#TAB ;;;数值首地址放入DPTR中 MOV 40H,#40 ;;;东南西北通行时间设置 ...

相似回答