diff --git a/include/public.h b/include/public.h index 79ccbea..395bbd3 100644 --- a/include/public.h +++ b/include/public.h @@ -17,5 +17,7 @@ extern char __xdata receice_password[RESET_PASSWORD_LENGTH]; void delay_10us(u16 ten_us); void delay_ms(u16 ms); u8 auto_reset(u8 rec_data); +u8 rotate_left(u8 value, u8 shift); +u8 rotate_right(u8 value, u8 shift); #endif diff --git a/src/public.c b/src/public.c index 1a0f08d..e7e731a 100644 --- a/src/public.c +++ b/src/public.c @@ -50,4 +50,36 @@ u8 auto_reset(u8 rec_data) ISP_CONTR = 0x60; //软件复位并切换到系统ISP监控程序区开始执行程序 return 0; +} + +/******************************************************************************* +* 函 数 名 : rotate_left +* 函数功能 : 循环左移位 +* 输 入 : 待移位数值value,移位位数shift +* 输 出 : 移位后的数值 +*******************************************************************************/ +u8 rotate_left(u8 value, u8 shift) { + // 保存最高位 + u8 high_bit = value & 0x80; + // 执行左移操作 + value <<= shift; + // 将最高位循环到最低位 + value |= high_bit >> (8 - shift); + return value; +} + +/******************************************************************************* +* 函 数 名 : rotate_right +* 函数功能 : 循环右移位 +* 输 入 : 待移位数值value,移位位数shift +* 输 出 : 移位后的数值 +*******************************************************************************/ +u8 rotate_right(u8 value, u8 shift) { + // 保存最低位 + u8 low_bit = value & 0x01; + // 执行右移操作 + value >>= shift; + // 将最低位循环到最高位 + value |= low_bit << (8 - shift); + return value; } \ No newline at end of file