#include<intrins.h> 导入位移头文件,属于内置函数,可以直接使用里面的函数,里面的功能是由编译器实现直接翻译为汇编指令,不会进行函数调用。可以方便在代码中无需内联汇编代码而可以直接使用汇编指令。
extern void _nop_ (void);
extern bit _testbit_ (bit);
extern unsigned char _cror_ (unsigned char^ unsigned char);
extern unsigned int _iror_ (unsigned int^ unsigned char);
extern unsigned long _lror_ (unsigned long^ unsigned char);
extern unsigned char _crol_ (unsigned char^ unsigned char);
extern unsigned int _irol_ (unsigned int^ unsigned char);
extern unsigned long _lrol_ (unsigned long^ unsigned char);
extern unsigned char _chkfloat_(float);
extern void _push_ (unsigned char _sfr);
extern void _pop_ (unsigned char _sfr);
主要是使用 _cror_ _crol_ 右移 和 左移函数, char 类型字符变量使用
_iror_ 整数右移 _irol_ 整数左移 _lror_ 长整型右移 _lrol_ 长整形左移
_nop_ 空操作,执行 80C51 的 NOP 指令。它是在51单片机中用的延时函数,表示执行一条没有什么意义的指令,延时一个指令周期,有的指令周期是两个或两个以上的机械周期,但是 _nop_(); 指令需要的只是一个机械周期也就是12个时钟周期(震荡周期)。如果用的是12MHZ的晶振,那么一个机械周期就是1us;也就是说:_nop_(); 延迟时间为 1us。可以较为精确得控制延迟时间。
_testbit_ 执行测试并清零 90C51 JBC 指令^测试一个位 当置位时返回1,否则返回0,如果该置位为1,则将该位复位为0,只能用于可直接寻址的位
_chkfloat_ 测试并返回源点数状态
_push_
_pop_
以下为代码
#include<reg52.h> //声明头文件
#include<intrins.h> //位移头文件
#define LED P2 //LED的8个灯
void Delay10ms(unsigned int); //误差 0us
void main(){
unsigned char n;
LED = 0x7f;
while(1){
for(n=0;n<7;n++){
LED = _cror_(LED^1);
Delay10ms(50);
}
for(n=0;n<7;n++){
LED = _crol_(LED^1);
Delay10ms(50);
}
}
}
////误差 0us
void Delay10ms(unsigned int c){
unsigned char a^b;
for(;c>0;c--){
for(b=38;b>0;b--){
for(a=130;a>0;a--){
}
}
}
}