打印
[AVR单片机]

定时时间为什么不准咧??

[复制链接]
1321|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huhaomcu|  楼主 | 2014-1-8 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想用Timer0定时1s,可定时时间总是不准确,不知什么原因,希望大家帮忙看看!!
用的是TIMER0比较匹配,这是我的定时计算式:定时器时钟为1Mhz/64,指令周期为1/(1MHZ/64)=0.064ms,0.064*125*125=1000ms
#define FOSC 1000000UL
int cnt;

int main(void)
{
    DDRD = 0x03;
    PORTD = 0x00;

    ATmega88P_Timer0_Init();
    SREG |= 0x80;
    while(1);
}

void ATmega88P_Timer0_Init()
{
    TCCR0A = 0x02;
    TCCR0B = 0x03;
    TIMSK0 = 0x02;
    OCR0A = 124;
}

ISR(TIMER0_COMPA_vect)
{
    cnt++;
    if(cnt >= 124)
    {
        cnt = 0;
        PORTD ^= 0x03;
    }
}

相关帖子

沙发
airwill| | 2014-1-8 18:02 | 只看该作者
是什么时钟源, 如果是内部 RC 振荡器的话, 本身就由误差的. 不准是正常的.

使用特权

评论回复
板凳
huangxz| | 2014-1-9 11:22 | 只看该作者
计算方法没有问题,有多不准啊,

使用特权

评论回复
地板
huhaomcu|  楼主 | 2014-1-9 11:59 | 只看该作者
airwill 发表于 2014-1-8 18:02
是什么时钟源, 如果是内部 RC 振荡器的话, 本身就由误差的. 不准是正常的.

用的是它默认的时钟,ATmega88P,也就是1MHZ的时钟,但它定的是1000ms,但却只有800ms,应该是程序有问题!

使用特权

评论回复
5
huhaomcu|  楼主 | 2014-1-9 11:59 | 只看该作者
huangxz 发表于 2014-1-9 11:22
计算方法没有问题,有多不准啊,

用的是它默认的时钟,ATmega88P,也就是1MHZ的时钟,但它定的是1000ms,但却只有800ms,应该是程序有问题!

使用特权

评论回复
6
huangxz| | 2014-1-9 19:03 | 只看该作者
huhaomcu 发表于 2014-1-9 11:59
用的是它默认的时钟,ATmega88P,也就是1MHZ的时钟,但它定的是1000ms,但却只有800ms,应该是程序有问题 ...

建议楼主先排除晶振问题,用外部的,首先要保证源是正确的,再来分析别的。

使用特权

评论回复
7
qin552011373| | 2014-1-11 22:19 | 只看该作者
楼主的供电电压是多少的?如果用的是内部晶振,电压不同的话,频率不一样的,datasheet有详细写,楼主可以看看的

使用特权

评论回复
8
huhaomcu|  楼主 | 2014-1-12 14:39 | 只看该作者
qin552011373 发表于 2014-1-11 22:19
楼主的供电电压是多少的?如果用的是内部晶振,电压不同的话,频率不一样的,datasheet有详细写,楼主可以 ...

我用的Protues仿真的,串口通信也是用的如此1MHz,能正常通信!我觉得还是我定时器那部分设置有问题!!

使用特权

评论回复
9
qin552011373| | 2014-1-12 22:14 | 只看该作者
huhaomcu 发表于 2014-1-12 14:39
我用的Protues仿真的,串口通信也是用的如此1MHz,能正常通信!我觉得还是我定时器那部分设置有问题!! ...

用实物吧,仿真不准确

使用特权

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

本版积分规则

189

主题

508

帖子

3

粉丝