一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2089|回复: 16
收起左侧

[51单片机] 51大家都用的是什么样的延时程序?

[复制链接]
发表于 2016-3-9 10:56 | 显示全部楼层 |阅读模式
平时用的是杜洋老师的
因为一开始就是看他的视频学的
也没接触过别的
最近搜了搜别的
发现很多种
都不一样


来了兴趣
拿出杜洋老师的那个1602程序
没有用DS1302
只是靠延时程序来计时
跑了几个小时下来
一小时大概能跑快1-2秒
这个误差是单片机、晶振的误差?
还是延时程序的误差?

大家都是用的哪种延时程序?
误差怎么样?
发表于 2016-3-9 10:59 | 显示全部楼层
老妖烧写软件里有生成器
 楼主| 发表于 2016-3-9 11:26 | 显示全部楼层
贴个杜洋的
void delay (unsigned int a){ // 1ms延时程序
        unsigned int i;
        while( --a != 0){
                for(i = 0; i < 600; i++);//STC单片机在外部晶振为12MHz时i值上限为600  
        }                                                       //AT89C51单片机在外部晶振为12MHz时i值上限为125
}


再贴个老妖软件生成的:
void Delay1000us()                //@12.000MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 12;
        j = 168;
        do
        {
                while (--j);
        } while (--i);
}

发表于 2016-3-9 11:34 | 显示全部楼层
用延迟时间能准确才怪,用定时器。
 楼主| 发表于 2016-3-9 11:53 | 显示全部楼层
本帖最后由 blueruby 于 2016-3-9 11:54 编辑
40560335 发表于 2016-3-9 11:34
用延迟时间能准确才怪,用定时器。

就是讨论为啥延时不准啊
延时程序一般都是除了点亮LED
第二个基本程序了吧
不准的原因是在
1.单片机本身的制造工艺?
2.外部晶振的精度?(比方说12M实际是11.9xxxxxxxxM)
3.程序算法问题?
想知道的是在1和2一定的情况下
正因为有多种不同的延时程序
哪一种延时程序是相对精准一点的


发表于 2016-3-9 12:01 | 显示全部楼层
要是遇到有中断执行程序的时候,更不准了
发表于 2016-3-9 12:37 | 显示全部楼层
123 原因都有吧, 延时程序顶多在理论上算出一个误差较小的程序,然后还有硬件误差。 最后只能大约准确。
发表于 2016-3-9 12:54 | 显示全部楼层
blueruby 发表于 2016-3-9 11:53
就是讨论为啥延时不准啊
延时程序一般都是除了点亮LED
第二个基本程序了吧

各种原因都有,晶体、包括负载电容,它们都有个重要的指标ppm,还有中断,你开个1ms的中断那延迟就更大了。
发表于 2016-3-9 12:56 | 显示全部楼层
用 宏晶科技 最新的烧写软件吧,里边有代码自动生成功能。
发表于 2016-3-9 13:03 | 显示全部楼层
代码如果写的好,就只有晶振的误差,温度会影响。当然DS1302之类的也是靠晶振来计时的,如果晶振温漂一样,那么误差也一样。不过最主要的DS1302耗电少,可以用电池供电很久而不会丢时间。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-8 18:08 , Processed in 0.067805 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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