一、今日学习目标今天正式进入嵌入式底层学习。主要学习二进制与 bit 概念位操作Bit Operation位掩码Mask寄存器Register的基本概念CPU 如何通过寄存器控制硬件C语言位操作和嵌入式编程的联系二、核心知识总结1. 计算机底层只有 0 和 1计算机硬件本质上通过电平状态工作高电平 → 1低电平 → 0一个 bitbinary digit表示一个二进制位。例如101101108个bitbit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 1 0 1 1 0 1 1 0重要最右边永远是 bit0。三、为什么嵌入式需要位操作普通软件更多关注int a100;嵌入式需要控制硬件例如一个8位寄存器bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 LED MOTOR FAN KEY UART ...每一个 bit 可能对应一个硬件功能。所以位操作就是精准控制硬件开关。四、四种核心位操作1. 与运算 AND符号规则111 其他0用途清除某一位例如清除 bit3REG ~(13);过程13 00001000 取反 11110111与原数据xxxx xxxx 11110111 ↓ bit3变0 其他保持2. 或运算 OR符号|规则有1就是1。用途设置某一位例如设置 bit5REG | (15);过程15 00100000效果bit5变1。3. 异或 XOR符号^规则相同为0不同为1。用途翻转某一位。例如REG ^ (13);如果bit30→1 1→04. 移位操作左移例如15表示00000001 ↓ 00100000也就是2^532常用于生成位掩码。右移例如00010000 4 00000001五、三个必须背熟的寄存器公式设置某位REG | (1n);含义第n位置1其他位保持。清除某位REG ~(1n);含义第n位置0其他位保持。翻转某位REG ^ (1n);含义第n位取反。六、寄存器概念今天最大的概念寄存器不是普通变量。普通变量int a;存储RAM寄存器实际上是特殊地址 硬件功能例如GPIO输出寄存器地址 0x40020014CPU写这个地址↓硬件动作发生。所以寄存器是 CPU 和硬件交流的窗口。七、今天练习中的主要错误总结错误1bit编号混乱错误认为00000100是 bit3。实际上00000100 bit2正确00000001 bit0 00000010 bit1 00000100 bit2 00001000 bit3错误2混淆 | 和 错误REG0x20;问题会覆盖整个寄存器。例如原10101100执行00100000其他控制位全部丢失。正确REG | (15);只修改 bit5。错误3清零写法错误错误REG (13);实际效果只保留bit3。正确REG ~(13);八、今天掌握程度评价当前水平已掌握✅ 二进制基础✅ bit概念✅ AND/OR/XOR✅ 左移右移✅ 位掩码思想✅ 寄存器基本作用需要加强⚠️ bit编号熟练度⚠️(1n)快速反应⚠️ 清零、设置、读取三种操作区分九、今日代码核心// 设置bit5 REG | (15); // 清除bit5 REG ~(15); // 翻转bit5 REG ^ (15); // 判断bit5 if(REG (15)) { // bit5为1 }今日一句话总结嵌入式的本质是通过 C 语言操作寄存器再通过寄存器控制硬件位操作就是连接软件和硬件的桥梁。以下是可以入门的练习题一、基础概念题C语言 位操作1.将十进制数字转换为二进制132.下面哪个表示 bit3A.00001000B.00000100C.000100003.计算1010 1100结果4.计算1010 | 0101结果5.计算1010 ^ 1100结果二、寄存器操作题6.现在REG 0b00000000;要求打开 bit4。写出 C 代码7.现在REG 0b11111111;要求关闭 bit2。写出 C 代码8.假设bit0 LED bit1 BUZZER初始REG00000000执行REG | (10); REG | (11);最终REG?9.计算REG10101010执行REG ^ (13);结果10.解释为什么下面代码在嵌入式中可能危险REG 0x01;三、综合考试题Day1小测试1.设置寄存器 bit62.清除寄存器 bit73.读取 bit3 状态写判断代码。4.一个寄存器bit0 LED bit1 FAN bit2 MOTOR要求打开LED打开MOTOR关闭FAN写代码。5.解释为什么REG | (15);比REG 0x20;安全Day1练习答案与解析一、基础题答案1.13转换二进制答案1101原因13841 11012.bit3答案A00001000位编号bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 0 0 0 0 1 0 0 03.逐位111 010 100 000结果10004.1010 | 0101规则有1就是1。结果11115.1010 ^ 1100不同为11010 1100 ---- 0110答案0110二、寄存器操作答案6.打开 bit4答案REG | (14);原因14 00010000将bit4置1。7.关闭 bit2答案REG ~(12);原因12 00000100取反11111011AND后bit2变0。8.执行REG | (10); REG | (11);第一次00000001第二次00000011答案00000011LED和BUZZER同时打开。9.原10101010bit300001000异或10101010 00001000 --------- 10100010答案1010001010.错误REG0x01;原因这是整体覆盖。例如原10101100执行00000001结果其他控制位全部丢失。嵌入式通常需要REG | (1n);只修改目标位。三、考试题答案1.设置bit6REG | (16);2.清除bit7REG ~(17);3.读取bit3if(REG (13)) { }因为如果bit3为1结果非0。4.答案REG | (10); // LED打开 REG | (12); // MOTOR打开 REG ~(11); // FAN关闭5.答案因为REG | (15);属于读-修改-写(Read Modify Write)只改变bit5其他位保持。而REG0x20;直接覆盖整个寄存器。Day1错误记录你的个人复盘今天你的主要错误问题原因bit3判断错误bit编号不熟清零写错混淆 和 ~设置多个bit失败没有意识到异或计算错误bit位置定位不稳定明天复习重点熟练10 11 12 ... 17熟练| ~ ^