3040|14

466

帖子

0

TA的资源

版主

楼主
 

快速写出“精确”的延时 [复制链接]

 
               大家都知道精确延时在很多时候是很需要的,可是对于一直用c来写程序的人很难知道自己写的delay  到底延时多久。

              举个例子吧,例如i2c的延时,有时需要delay 4个us,那我只需要写出一个delay为1us的 然后再循环几次就差不多了。虽然循环会来带误差,只要循环次数少些,也不会太大的。

              如何呢确定一个1us的延时,大家可以写一个delay;

             void  delay_us (unsigned short  n)

            {

               unsigned short  i;

                for(n;n>0n--)

                  for(i=0;i<10;i++);



            }

          接下来就是while(1)

        {

             LED = 0;

            delay_us(1);


             LED = 1;

            delay_us(1);


        }

      然后用示波器测量出IO口高低电平的时间就好了,不断修改 for(i=0;i<10;i++);中的i<10  ,直到接近1us就好了



此帖出自51单片机论坛

最新回复

也是一个大概的延时,我倒是没有用示波器看过。  详情 回复 发表于 2015-8-18 15:32
点赞 关注(1)
 

回复
举报

4008

帖子

0

TA的资源

版主

推荐
 
六楼的是,
另外,这样的程序在不同型号的51上由于指令周期不一样,程序兼容性无法保证.
此帖出自51单片机论坛
 
 
 

回复

565

帖子

513

TA的资源

裸片初长成(中级)

沙发
 
又学一招儿,谢谢楼主
此帖出自51单片机论坛
 
 
 

回复

1297

帖子

2

TA的资源

纯净的硅(中级)

板凳
 
对定好的设计挺好用的,不过有时为了能准一些,来回调整调整时间也不少。还有us多和少的误差也不一样
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

4
 
这个和晶体的频率相关,为什么不做成一个自动计算的函数,而需要自己不断去改程序代码。在avrgcc中,_delay_ms()函数就是这样的,使用方便,不用每次都是调整延时的参数。
此帖出自51单片机论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

5
 
用示波器抓的话,得有一个触发源,你这么设置?设置为上升沿出发吗?
此帖出自51单片机论坛

点评

你看待上升沿或者下降沿都行啊  详情 回复 发表于 2015-8-18 15:07
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

6
 
用高级语言写循环延迟,是实在没有办法时的办法,因为:
①.中断响应的时机和次数难以控制,无疑这是影响时间精度的要素,如关中断执行延迟则势必使系统的实时性大打折扣;
②.实际延迟时间和编译器及所设置的优化级别有关,编译器重装或遇更新时可能会使执行代码发生变化;
③.程序维护(如修改或升级)时若身边没有可供动作确认目标机,则新产生出的代码不放心。
所以,最好还是用定时器。
此帖出自51单片机论坛

点评

恩,你说的这个相对复杂的情况下了,上面基本是真对新手的。  详情 回复 发表于 2015-8-18 09:36
 
 
 

回复

466

帖子

0

TA的资源

版主

7
 
仙猫 发表于 2015-8-18 09:28
用高级语言写循环延迟,是实在没有办法时的办法,因为:
①.中断响应的时机和次数难以控制,无疑这是影响 ...

恩,你说的这个相对复杂的情况下了,上面基本是真对新手的。
此帖出自51单片机论坛
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

8
 
我记得有个叫单片机精灵的小工具也可以写出“精确”的延时。只不过和你的不太一样哈。
此帖出自51单片机论坛

点评

以前用过啊,好像有些情况不准啊  详情 回复 发表于 2015-8-18 15:08
 
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

9
 
用汇编应该会更精确,将汇编嵌进来就可以了,要么用定时器吧
此帖出自51单片机论坛

点评

就是在不会汇编的情况下用的啊  详情 回复 发表于 2015-8-18 15:08
 
 
 

回复

2165

帖子

8

TA的资源

五彩晶圆(初级)

10
 
学习下。有处代码少了个分号。
此帖出自51单片机论坛
 
个人签名坐而言不如起而行
 
 

回复

466

帖子

0

TA的资源

版主

12
 
sbjy3814 发表于 2015-8-18 09:23
用示波器抓的话,得有一个触发源,你这么设置?设置为上升沿出发吗?

你看待上升沿或者下降沿都行啊
此帖出自51单片机论坛
 
 
 

回复

466

帖子

0

TA的资源

版主

13
 
huaiqiao 发表于 2015-8-18 10:08
我记得有个叫单片机精灵的小工具也可以写出“精确”的延时。只不过和你的不太一样哈。

以前用过啊,好像有些情况不准啊
此帖出自51单片机论坛

点评

也是一个大概的延时,我倒是没有用示波器看过。  详情 回复 发表于 2015-8-18 15:32
 
 
 

回复

466

帖子

0

TA的资源

版主

14
 
247153481 发表于 2015-8-18 11:12
用汇编应该会更精确,将汇编嵌进来就可以了,要么用定时器吧

就是在不会汇编的情况下用的啊
此帖出自51单片机论坛
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

15
 
weizhongc 发表于 2015-8-18 15:08
以前用过啊,好像有些情况不准啊

也是一个大概的延时,我倒是没有用示波器看过。
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表