[应用相关] 空指令

[复制链接]
966|11
 楼主| wanglaojii 发表于 2018-5-28 21:17 | 显示全部楼层 |阅读模式
#define  NOP() _nop_()  /* 定义空指令 */
这个空指令怎么用的啊?
laozhongyi 发表于 2018-5-28 21:19 | 显示全部楼层
空指令可以用来延时或者占位等。空指令并不是什么也不做,一般会占用一个时钟周期
Edisons 发表于 2018-5-28 21:25 | 显示全部楼层
可以当很短时间的延时使用
Mozarts 发表于 2018-5-28 21:30 | 显示全部楼层
uchar Read(void) /*读一个字节的数据,并返回该字节值*/   
{   
        
    uchar temp=0;   
        
    uchar temp1=0;   
        
    uchar BitCounter=8;   
        
    Sda=1;   
        
    do{         
        Scl=0;   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        Scl=1;   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        _nop_ ();   
            
        if(Sda) /*如果Sda=1;*/               
            temp=temp|0x01; /*temp的最低位置1*/         
        else               
            temp=temp&0xfe; /*否则temp的最低位清0*/   
            
        if(BitCounter-1)               
        {     
            temp1=temp<<1;              
            temp=temp1;            
        }   
            
        BitCounter--;   
            
    }while(BitCounter);   
        
    return(temp);   
        
}
Listate 发表于 2018-5-28 21:32 | 显示全部楼层
这条指令的时间是确定的,可用作精确延时。
zhouhuanの 发表于 2018-5-28 21:35 | 显示全部楼层
还有一些地方可以用到NOP。
handleMessage 发表于 2018-5-28 21:37 | 显示全部楼层
比如JMP不能再return之前之类的,这是芯片设计的bug。提出的解决方法就是JMP后加一个NOP,这样就保证了,不会发生错误了。
tomyoct 发表于 2018-5-29 09:05 | 显示全部楼层
程序中直接使用_nop_ ()进行延时就好了。适用于需要微弱延时的场合。
小明的同学 发表于 2018-5-29 19:18 | 显示全部楼层

__nop();
小明的同学 发表于 2018-5-29 19:19 | 显示全部楼层


__asm void nop(void)
{
    NOP
}

然后在之后的C代码中调用该函数:

void main()
{
...
nop();
...
}
小明的同学 发表于 2018-5-29 19:20 | 显示全部楼层
另外你不一定非要用这个延时来达到对某个东西延时。你可以去操作其他可以操作的内容,就代替了该寄存器的延时。
mintspring 发表于 2018-5-29 21:51 | 显示全部楼层
看你开发软件里有没有提到这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

220

主题

1411

帖子

1

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