[技术问答] N76E003可以延时250ns吗??

[复制链接]
 楼主| 小S咯 发表于 2017-9-14 16:23 | 显示全部楼层 |阅读模式
本帖最后由 小S咯 于 2017-9-15 09:19 编辑

N76E003内部晶振16MHZ,我用for循环,循环里是;(分号空指令),但是用示波器观察只能延时微秒了,有大神知道怎么延时纳秒吗??

图上的时序代码
void main(void)
{
       
  u8 key_flag=0,i;
  u8 dat = 0x55;
  GPIO_Init();
  while(1)
  {
    for(i=0;i<8;i++)
    {
      if(dat & 0x80)
      {
        //1码
        P04=0;   
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        P04=1;
        _nop_();

      }
      else
      {
        //0码
         P04=0;   
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
         P04=1;
        _nop_();_nop_();

      }
      dat<<=1;
    }
  }       
}


0和1我在示波器看,时间大致满足图的时间,但是尝试发送一个字节的时候码就乱了,怎么回事呢?
微信截图_20170915091608.png
l4157 发表于 2017-9-14 17:40 | 显示全部楼层
在16M 下,250ns 只有4 条指令,for循环肯定是不行的。这种情况直接用4个NOP比较靠谱,一个NOP 就是62.5ns
 楼主| 小S咯 发表于 2017-9-14 17:44 | 显示全部楼层
l4157 发表于 2017-9-14 17:40
在16M 下,250ns 只有4 条指令,for循环肯定是不行的。这种情况直接用4个NOP比较靠谱,一个NOP 就是62.5ns ...

NOP keil报错,要什么头文件吗?
 楼主| 小S咯 发表于 2017-9-14 17:45 | 显示全部楼层
l4157 发表于 2017-9-14 17:40
在16M 下,250ns 只有4 条指令,for循环肯定是不行的。这种情况直接用4个NOP比较靠谱,一个NOP 就是62.5ns ...

intrins.h??
 楼主| 小S咯 发表于 2017-9-14 17:45 | 显示全部楼层
l4157 发表于 2017-9-14 17:40
在16M 下,250ns 只有4 条指令,for循环肯定是不行的。这种情况直接用4个NOP比较靠谱,一个NOP 就是62.5ns ...

intrins.h??这个是吧??
huahuagg 发表于 2017-9-14 19:45 | 显示全部楼层
for不行,你直接跑空指令吧。
l4157 发表于 2017-9-14 19:53 | 显示全部楼层
小S咯 发表于 2017-9-14 17:45
intrins.h??这个是吧??

貌似是,好久没有 用了,不太记得了
 楼主| 小S咯 发表于 2017-9-15 08:17 | 显示全部楼层
huahuagg 发表于 2017-9-14 19:45
for不行,你直接跑空指令吧。

空指令被优化!
huahuagg 发表于 2017-9-18 22:30 | 显示全部楼层
小S咯 发表于 2017-9-15 08:17
空指令被优化!

那就随便搞个赋值语句。
wanduzi 发表于 2017-9-19 09:29 | 显示全部楼层
把优化等级降低。
xinpian101 发表于 2017-9-19 10:06 | 显示全部楼层
如果被优化了,可以关闭 优化啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

178

帖子

4

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