XC8 MPLAB环境下基于8位变量逐位取值执行对应任务的代码咨询
XC8环境下8位变量逐位处理实现方案
以下提供两种常用遍历顺序的实现代码,可根据实际位处理顺序需求选用:
方案1:从最高位(bit7)到最低位(bit0)遍历
对应示例值0b10100100的处理顺序为:1→0→1→0→0→1→0→0,会保留temp原始值
#include <xc.h> #include <stdint.h> // 任务1实现,按需修改逻辑 void task1(void) { // 此处写位为1时的执行逻辑 } // 任务2实现,按需修改逻辑 void task2(void) { // 此处写位为0时的执行逻辑 } void process_temp(void) { uint8_t temp = 0b10100100; uint8_t loop_cnt; // 从第7位遍历到第0位 for(loop_cnt = 7; loop_cnt >= 0; loop_cnt--) { if(temp & (1 << loop_cnt)) { task1(); } else { task2(); } } }
方案2:从最低位(bit0)到最高位(bit7)遍历
对应示例值0b10100100的处理顺序为:0→0→1→0→0→1→0→1,代码执行效率更高,适合资源紧张的PIC芯片场景
void process_temp_lsb_first(void) { uint8_t temp = 0b10100100; uint8_t loop_cnt = 8; while(loop_cnt--) { if(temp & 0x01) { task1(); } else { task2(); } temp >>= 1; } }
注意事项
- XC8原生支持
0b前缀的二进制字面量写法,无需额外配置 - 若处理逻辑较短,可直接将代码写在判断分支内,无需单独封装函数
- 若需要保留temp的原始值,选择方案1即可;不需要保留原始值的场景优先选方案2,生成的汇编体积更小、运行速度更快
内容的提问来源于stack exchange,提问作者Hamed724
相关产品推荐
相关产品推荐

