先來個示例。。循環左移。。體現在開發板上是流水燈(從左到右)
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
void delay(int n)
{
while(n--);
}
void main()
{
uchar temp;
temp=0xfe;//1111 1110
delay(51000);
while(1)
{
P1=temp;
temp=_crol_(temp,1);//第一次後temp=1111 1101
<span style="white-space:pre"> </span> delay(51000);
}
}
intrins.h頭文件中有如下函數及其作用
_crol_ 字符循環左移 //將char型變量循環向左(右)移動指定位數後返回
_cror_ 字符循環右移
_irol_ 整數循環左移
_iror_ 整數循環右移
_lrol_ 長整數循環左移
_lror_ 長整數循環右移
_nop_ 空操作 (相當於8051 NOP 指令)
_testbit_測試並清零位 (相當於8051 JBC 指令)//相當於JBC bitvar測試該位變量並跳轉同時清除
原型是
unsigned char _crol_/_cror_ (unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
void _nop_ (void);_nop_產生一個NOP 指令,該函數可用作C 程序的時間比較。C51編譯器在_nop_函數工作期間不產生函數調用,即在程序中直接執行了NOP
指令。
bit _testbit_(bit
x);
_testbit_產生一個JBC
指令,該函數測試一個位,當置位時返回1,否則返回0。如果該位置爲1,則將該位復位爲0。8051 的JBC 指令即用作此目的。_testbit_只能用於可直接尋址的位;在表達式中使用是不允許的。