2025-11-08 06:29:36
单片机通过I2C总线识别设备是靠线电平变化和时序配合的。比如当SCL从高变低时单片机知道设备在发送数据,SDA线拉高代表发送1,拉低代表发送0。程序识别则是单片机把代码存进存储器,执行时按顺序读取指令比如"MOV R0,R1"或"OUT port,bit"。这些指令对应硬件操作,比如控制LED亮灭。
为什么这样设计呢?I2C协议规定设备必须响应特定地址(比如0x50),单片机发送地址帧后设备才会回应。数据手册显示标准I2C传输周期约500微秒,包含起始位、地址位、数据位和停止位。程序存储器分为代码区(存放指令)和数据区(存放变量),比如ATmega328P的 flash有32KB,指令执行时从代码区逐条读取。当程序遇到"JMP +10"指令,单片机硬件会自动跳转到偏移量10的位置继续执行。这种软硬件分工让单片机能同时处理总线通信和程序指令,比如当读取温度传感器数据时,程序里的"read_temp"函数会调用I2C的start、write、read、stop四个步骤,每个步骤对应硬件的特定时序操作。
本题链接: