有关一个精确延时问题

[复制链接]
1204|7
 楼主| qiangweii 发表于 2016-1-13 21:17 | 显示全部楼层 |阅读模式
void Sent0_0(void)
{
          PD_ODR_bit.ODR2=0;   

         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();

         PD_ODR_bit.ODR2=1;

     
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();        
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
         __no_operation();
}

void main()
{
     SCLK_Config();
     IO_init();
     Sent0_0();
     Sent0_0();
     Sent0_0();
     Sent0_0();
     Sent0_0();
     Sent0_0();
     Sent0_0();
}

我想问的是:为什么同样的延时函数,像上面那样叠加起来用,在示波器上看到的波形(注:不是看负脉宽,负脉宽没问题)——正脉宽有些不一样。比如调用第一个延时:6.60us,第二个是:6.60us,第三个是6.5us,第四个是6.2us。为什么会这样?
zhouhuanの 发表于 2016-1-13 21:18 | 显示全部楼层
可能函数返回的时候所占用的机器周期不一样吧;
linyancn 发表于 2016-1-13 21:46 | 显示全部楼层
是不是开了优化?
sl3340 发表于 2016-1-14 09:10 | 显示全部楼层
个人觉得很正常,当你往IO外设的寄存器写值的时候这个值并不会立刻反映出来,因为内核的时钟和IO外设的时钟不一致。
dml19890601 发表于 2016-1-14 09:15 | 显示全部楼层
台湾笙泉单片机总代理,杜先生,电话:15295658706   QQ:3166720948
rreedd00 发表于 2016-1-14 19:27 来自手机 | 显示全部楼层
应该是正常情况,你的值没能立刻反应出来罢了。。。。
boy1990 发表于 2016-2-6 14:37 来自手机 | 显示全部楼层
这程序写的有点荣扎了吧。。。
CallReceiver 发表于 2016-2-6 14:42 来自手机 | 显示全部楼层
    __no_operation();这个可以用个循环函数来写进去的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

1521

帖子

3

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