找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1508|回复: 4
收起左侧

这个单片机延时是怎么算的?求解答

[复制链接]
ID:305703 发表于 2018-5-6 10:17 | 显示全部楼层 |阅读模式
void delay(unsigned int i)        //1ms基准延时程序
{
   unsigned char j;
   while(i--)
   {
         for(j=0;j<115;j++)         
         {
          ;
         }
   }
}
为什么是1ms的延时程序呢 单片机为STC51

回复

使用道具 举报

ID:1 发表于 2018-5-6 14:52 | 显示全部楼层
你可以用这个方法来确定延时时间:http://www.51hei.com/bbs/dpj-4711-1.html
回复

使用道具 举报

ID:155507 发表于 2018-5-6 14:46 | 显示全部楼层
如果你想直接知道答案,那么我告诉你,12MHz晶振:
void delayms(unsigned int t)
{
    unsigned int i,j;
    for(i=t;i>0;i--)
        for(j=123;j>0;j--);
}
能精确到1ms。
如果是11.0592MHz晶振,只需把上面的“j=123”改为“j=114”,都是调试过的,没问题。
然后你要想知道是怎么调试的,很简单,打开uv2编程软件,在最上边的工具栏里边有个“Debug”,点击后出现下拉菜单,选择第一个“start/stop Debug Session”,然后在最右边有一个Watch栏,有两个项目,一个是“Register”,一个是“value”,然后在“Register”栏下边的“Sys”里边有个“sec”,你只要单击“Step over”运行程序并观察“sec”的值就能调试出你程序的执行时间了。
注意,一定要先选择晶振频率,不然会默认24MHz。
希望我的回答能帮助到你。

评分

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

查看全部评分

回复

使用道具 举报

ID:287575 发表于 2018-5-6 13:36 | 显示全部楼层
你用keil把它编译完后,找到对应的汇编程序,把运行的指令的机器周期全部加起来,就知道延时多长时间了。精密计算要包含调用和返回指令

评分

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

查看全部评分

回复

使用道具 举报

ID:323339 发表于 2018-5-6 11:51 | 显示全部楼层
把一个空语句执行大概115次,时间差不多是1ms,这得看你一次执行时间是多少

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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