发新帖我要提问
12
返回列表
打印

单片机准确定时程序,精度仅仅取决于晶振稳定性

[复制链接]
楼主: wangkj
手机看帖
扫描二维码
随时随地手机跟帖
21
古道热肠| | 2008-11-28 17:06 | 只看该作者 回帖奖励 |倒序浏览

哈哈,这里面不光不准,还有BUG

如果TimerCounter = 65535时,很可能会出错,想想PC机的INT 1CH中断的容错机制应该不难理解.

使用特权

评论回复
22
dslyj123| | 2008-11-28 17:07 | 只看该作者

计时

只要缩短计时间就可以.

使用特权

评论回复
23
wangkj|  楼主 | 2008-11-28 17:56 | 只看该作者

我说的精确非1us的。

使用特权

评论回复
24
ljm810010| | 2008-11-28 19:33 | 只看该作者

我来个精准1秒的示范吧

P1.0口每 1.000000 秒取反一次,仿真时每次运行到断点的时刻,时间值的小数部分不变
PS:用汇编处理会方便点

#include <reg51.h>
unsigned char Count;

void T0_Int()interrupt 1
{
  if (--Count == 0)
  {
    unsigned char Fix;
    Fix = 20 - TL0;    //获取延时值
    if (Fix & 1) Fix--;//修正奇偶
    Fix >>= 1;         //计算补偿量
    while(--Fix);      //时间补偿
    TL0 += 0xc1;       //重装0xbdc1 = 65536-16960
    TH0  = 0xbd;
    P1  ^= 0x01;       //精准时刻输出
    Count = 16;        //1秒 = 15*65536 + 1*16960 
  }
}

void main(void)
{
  unsigned int i;
  Count = 16;
  TMOD = 1;
  TR0  = 1;
  PT0  = 1;
  ET0  = 1;
  EA   = 1;
  while(1)
  {
   i=i * Count;      //用乘法产生多种指令周期
  }
}

使用特权

评论回复
25
wangkj|  楼主 | 2008-11-28 22:32 | 只看该作者

脑筋转不过湾来。

看明白的说说,这样行不行?
俺的程序确实只能ms级别有保证,(累计误差自动消除)。
如果ls的us级管用,那真是高手啦。
当然,这个程序也使用于arm。

使用特权

评论回复
26
csq463276932| | 2011-7-22 10:59 | 只看该作者
:)

使用特权

评论回复
27
delin17| | 2011-7-22 12:26 | 只看该作者
auto-reload. 都要教虑一个问题,当你开始的时候,可能计数计到0xFFFE了。第一个延时节拍就不精确了。

使用特权

评论回复
28
t.jm| | 2011-7-22 13:33 | 只看该作者
我们讨论的精确定时是指不考虑晶振的误差,运用正确程序,使两个时刻之间CPU运行过的机器周期为我们需的预期值,从而达到设计要求.我认为只要过了入门级的人,都能轻易运用定时器达到精确定时.出个题目:要求利用定时中断 ...
ljm810010 发表于 2008-11-28 15:16

在中断里输出方波,关键还要在中断里用空操作对齐中断开销。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则