找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2693|回复: 5
打印 上一主题 下一主题
收起左侧

这个单片机程序delayms处延时时间为啥是5x50ms

[复制链接]
跳转到指定楼层
楼主
ID:595380 发表于 2020-10-15 20:57 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前两位59s循环,在delayms处为什么延时5x50ms?

16027665322945117623004583252803.jpg (660.94 KB, 下载次数: 111)

16027665322945117623004583252803.jpg

16027665694567552653980595665865.jpg (842.39 KB, 下载次数: 98)

16027665694567552653980595665865.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:414556 发表于 2020-10-15 23:00 | 只看该作者
看定义自程序是MS,参数是几就是几MS。

前两位59s循环是在定时器完成的,你的书写得很明白。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:595380 发表于 2020-10-16 07:33 来自手机 | 只看该作者
amandv 发表于 2020-10-15 23:00
看定义自程序是MS,参数是几就是几MS。

前两位59s循环是在定时器完成的,你的书写得很明白。

不是5x50ms,是5ms,前面理解错了,谢谢。那这个消影时间为什么是5ms而不是其他的数呢?
回复

使用道具 举报

地板
ID:213173 发表于 2020-10-16 14:02 | 只看该作者
楼主理解错误,delay(5);不是消影时间,是维持当前显示状态的时间。书中消隐代码也是错的,达不到消隐目的。正确写法如下:
void display(uchar shi, uchar ge)
{
        P0=0x00;                        //送段消隐
        dula=1;                                //段码锁存
        dula=0;       
        P0=0xfe;                        //送位码
        wela=0;                                //位码锁存
        wela=1;
        P0=table[shi];                //送十位段码
        dula=1;                                //段码锁存
        dula=0;       
        delay(5);                        //延时5ms,维持当前显示状态
       
        P0=0x00;                        //送段消隐
        dula=1;                                //段码锁存
        dula=0;       
        P0=0xfd;                        //送位码
        wela=1;                                //位码锁存
        wela=0;
        P0=table[ge];                //送个位段码
        dula=1;                                //位码锁存
        dula=0;       
        delay(5);                        //延时5ms,维持当前显示状态
}
回复

使用道具 举报

5#
ID:595380 发表于 2020-10-17 08:04 | 只看该作者
wulin 发表于 2020-10-16 14:02
楼主理解错误,delay(5);不是消影时间,是维持当前显示状态的时间。书中消隐代码也是错的,达不到消隐目的 ...

知道了,谢谢你
回复

使用道具 举报

6#
ID:390416 发表于 2021-3-27 09:22 | 只看该作者
1、假设在同一个硬件上做测试,单片机CPU指令周期是一致的。那么 变量i、K,存放在data跟存放在XDATA,读写速度能一样?精确计算有意义吗?
2、假设都存放在data,延迟1ms只需要char类型的变量即可完成,但是,延迟100ms必须16位变量,那么执行时间还能照着公式去套算?
3、假设上述条件都一样,计算好的延迟时间是1ms并且误差1%,打开中断之后,延迟时间变成了5毫秒了。误差500%了,精确计算有意义吗?
4、假设上述条件不影响延迟时间,那么,编译器呢?谁敢说编译器不同的优化等级不影响delay的延迟时间?
5、还有硬件不同的情况,就需要重新计算了。比如晶振频率不同,CPU内核速度不同,STC8H单片机就比STC15快了很多了比89系列快了十几倍了。

所以,不要去精确的计算delay 延迟了多少时间,毕竟单片机的运行情况有很多变数。学会提高CPU的代码执行效率,是很有必要的!
“什么是单片机?咱玩的就是时间!”
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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