//////////////////////////////////////
// 循環(huán)左移/右移函數(shù)
//時 間:2011年8月29
//作 者:簡の約
//說 明:用Keil軟件調試成功!
//備注:
// -----
// 可以不用再包含#include <intrins.h>,而是用自己的函數(shù)
//版本:
// -----2011.08.29.0.1
///////////////////////////////////////
#include <reg52.h> //51系列單片機頭文件,用于SFR的聲明
#include <intrins.h>//引用_crol_();和_cror_();用到的聲明
//函數(shù)聲明
unsigned char Loop_Left(unsigned char Value,unsigned char num); //___0xAC 1010 1100 2
unsigned char Loop_Right(unsigned char Value,unsigned char num);//___0xAC 1010 1100 2
//主函數(shù)
void main(void)
{
unsigned char temp1,temp2;//聲明兩個變量,用于存放左移函數(shù)返回值
unsigned char temp3,temp4;//聲明兩個變量,用于存放左移函數(shù)返回值
temp1 = Loop_Left(0xAC,2); //return: 0xB2
temp2 = _crol_(0xAC,2); //return: 0xB2
temp3 = Loop_Right(0xAC,2);//return: 0x2B
temp4 = _cror_(0xAC,2); //return:0x2B
while(1);//最后,停留在此處進行循環(huán)
}
////////////////////////////////////////
// 循環(huán)左移函數(shù)
// 調用說明:Loop_Left(Value,num);Value:要循環(huán)的變量;num: 循環(huán)的次數(shù)
// 返 回 值:循環(huán)移動后的值
//
////////////////////////////////////////
unsigned char Loop_Left(unsigned char Value,unsigned char num)//___0xAC 1010 1100 2
{
unsigned char n = 0,temp = 0;
n = num % 8;//大于8次,只循環(huán)其余數(shù)
temp = Value << n; //1010 1100 << 1011 0000
Value = Value >> (8 - n); // >>0000 0010
temp = temp | Value;//合并數(shù)據 1011 0010 ___0xB2
return temp;//返回數(shù)據
}
////////////////////////////////////////
// 循環(huán)右移函數(shù)
// 調用說明:Loop_Right(Value,num);Value:要循環(huán)的變量;num: 循環(huán)的次數(shù)
// 返 回 值:循環(huán)移動后的值
//
////////////////////////////////////////
unsigned char Loop_Right(unsigned char Value,unsigned char num)//___0xAC 1010 1100 2
{
unsigned char n = 0,temp = 0;
n = num % 8;//大于8次,只循環(huán)其余數(shù)
temp = Value >> n; //1010 1100 >> 0010 1011
Value = Value << (8 - n); //0000 0000
temp = temp | Value;//合并數(shù)據:0010 1011 ___0x2B
return temp;//返回數(shù)據
}
////////////////////////////////////////
// 可以自己建立一個函數(shù)庫,存放自己經常用的函數(shù)。
////////////////////////////////////////