找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1808|回复: 3
收起左侧

求51单片机定时不准确原因

[复制链接]
ID:696728 发表于 2020-4-4 08:22 | 显示全部楼层 |阅读模式
本帖最后由 xuelifang 于 2020-4-4 09:47 编辑

#include "timer.h"
sbit LED8 = P1^7;
u8 TH0val = (65536 - 10) / 256;
u8 TL0val = (65536 - 10) % 256;
/*
初始化
*/
void T0Init(void)
{
TMOD &= 0xf0;
TMOD |= 0x01;
TH0 = TH0val;
TL0 = TL0val;
EA = 1;
ET0 = 1;
TR0 = 1;
}
/*
中断服务函数
*/
void T0Interrupt(void) interrupt 1
{
TH0 = TH0val;
TL0 = TL0val;
LED8 = !LED8;
}


回复

使用道具 举报

ID:367369 发表于 2020-4-4 14:03 | 显示全部楼层
就你发的代码看不出问题,不知道你所说的不准是指多大的误差;
引起误差的原因有:
delay();使用过多,
还有你赋值 (65536 - 10) / 256;是想用10us的时间单位对吧?
你晶振用的是12M的吗?如果使用11.05926的晶振就不是10us了
回复

使用道具 举报

ID:201555 发表于 2020-4-4 15:08 | 显示全部楼层
严格说中断程序执行也要有时间,也就是说与系统时钟相关,系统时钟有精度误差和抖动,总之要看你要求的精度是什么等级的。
回复

使用道具 举报

ID:718890 发表于 2020-4-9 14:57 | 显示全部楼层
因为单片机里面的时钟有很大误差,所以用时钟芯片做时间才比较好点,即使用时钟芯片也有误差的,我现在也在做DS1302,发现一天时间快了十多秒,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表