////////////////////////////////////// // 循环左移/右移函数 //时 间:2011年8月29 //作 者:简の约 //说 明:用Keil软件调试成功! //备注: // ----- // 可以不用再包含#include <intrins.h>,而是用自己的函数 //版本: // -----2011.08.29.0.1 /////////////////////////////////////// #include <reg52.h> //51系列单片机头文件,用于SFR的声明 #include <intrins.h>//引用_crol_();和_cror_();用到的声明 //函数声明 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 //主函数 void main(void) { unsigned char temp1,temp2;//声明两个变量,用于存放左移函数返回值 unsigned char temp3,temp4;//声明两个变量,用于存放左移函数返回值 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);//最后,停留在此处进行循环 } //////////////////////////////////////// // 循环左移函数 // 调用说明:Loop_Left(Value,num);Value:要循环的变量;num: 循环的次数 // 返 回 值:循环移动后的值 // //////////////////////////////////////// unsigned char Loop_Left(unsigned char Value,unsigned char num)//___0xAC 1010 1100 2 { unsigned char n = 0,temp = 0; n = num % 8;//大于8次,只循环其余数 temp = Value << n; //1010 1100 << 1011 0000 Value = Value >> (8 - n); // >>0000 0010 temp = temp | Value;//合并数据 1011 0010 ___0xB2 return temp;//返回数据 } //////////////////////////////////////// // 循环右移函数 // 调用说明:Loop_Right(Value,num);Value:要循环的变量;num: 循环的次数 // 返 回 值:循环移动后的值 // //////////////////////////////////////// unsigned char Loop_Right(unsigned char Value,unsigned char num)//___0xAC 1010 1100 2 { unsigned char n = 0,temp = 0; n = num % 8;//大于8次,只循环其余数 temp = Value >> n; //1010 1100 >> 0010 1011 Value = Value << (8 - n); //0000 0000 temp = temp | Value;//合并数据:0010 1011 ___0x2B return temp;//返回数据 } //////////////////////////////////////// // 可以自己建立一个函数库,存放自己经常用的函数。 ////////////////////////////////////////