[技术问题解答] 快速写出“精确”的延时

[复制链接]
1227|1
 楼主| 西门扫雪 发表于 2015-12-17 20:49 | 显示全部楼层 |阅读模式
大家都知道精确延时在很多时候是很需要的,可是对于一直用c来写程序的人很难知道自己写的delay  到底延时多久。

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

              如何呢确定一个1us的延时,大家可以写一个delay;
  1. void  delay_us (unsigned short  n)

  2.             {

  3.                unsigned short  i;

  4.                 for(n;n>0n--)

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



  6.             }

  7.           接下来就是while(1)

  8.         {

  9.              LED = 0;

  10.             delay_us(1);


  11.              LED = 1;

  12.             delay_us(1);


  13.         }
然后用示波器测量出IO口高低电平的时间就好了,不断修改 for(i=0;i<10;i++);中的i<10  ,直到接近1us就好了
aliu_us 发表于 2016-3-25 21:31 | 显示全部楼层
楼主的方法符合楼主的需要,没有批评的意思。
只是偶然让我想起20多年前的事情,博大家一乐。

当时给中科院电工所调试打标机的下位机程序。
他们自己估计费了很大的劲也没弄好,出点钱让学生时代的我弄。
我也弄了好久,前后得有一个多月吧,最后发现最大的问题是上下位机
的通讯不稳定,造成一些稀奇古怪的事情。
原来是最初的人不想计算波特率,拿示波器比照上下位机的波形宽度一样
就当OKAY了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

286

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部