打印

有关一个精确延时问题

[复制链接]
626|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外设的时钟不一致。

使用特权

评论回复
5
dml19890601| | 2016-1-14 09:15 | 只看该作者
台湾笙泉单片机总代理,杜先生,电话:15295658706   QQ:3166720948

使用特权

评论回复
6
rreedd00| | 2016-1-14 19:27 | 只看该作者
应该是正常情况,你的值没能立刻反应出来罢了。。。。

使用特权

评论回复
7
boy1990| | 2016-2-6 14:37 | 只看该作者
这程序写的有点荣扎了吧。。。

使用特权

评论回复
8
CallReceiver| | 2016-2-6 14:42 | 只看该作者
    __no_operation();这个可以用个循环函数来写进去的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

1521

帖子

3

粉丝