# 单片机工作原理:底层逻辑与系统架构 ## 一、底层逻辑
- 单片机的工作始于取指令。程序计数器(PC)指向存储在只读存储器(ROM)中的指令地址。中央处理器(CPU)根据这个地址从ROM中获取指令,并将其加载到指令寄存器(IR)中。例如,在一个简单的控制LED闪烁的程序中,第一条指令的地址由PC指向,然后被CPU读取到IR。这个过程就像是从图书馆的书架(ROM)上根据索引(PC)找到一本书(指令),并把它拿到阅读区(IR)。
- 指令在IR中会被送到指令译码器。译码器会对指令进行解析,确定指令的操作码和操作数地址。比如对于一条加法指令,译码器能够识别出这是一个加法操作,并且找到操作数在随机存取存储器(RAM)中的存储位置。这就好比是把书(指令)打开,读懂其中的内容(译码),知道要做什么(操作码)以及需要的数据在哪里(操作数地址)。
- 根据译码后的信息,CPU通过算术逻辑单元(ALU)等内部组件来执行指令。如果是加法指令,ALU会从RAM中取出操作数进行相加,然后将结果存回RAM指定的位置。在这个过程中,数据通路负责在各个部件之间传输数据。执行完一条指令后,PC会自动指向下一条指令的地址,如此循环,使得程序能够按顺序执行下去。这就如同按照书中的指示(指令),利用工具(ALU)完成任务(执行指令),然后再去看下一步的指示(下一条指令)。
- 单片机有多种中断请求源,包括外部设备和内部事件。外部设备如按键按下、传感器信号变化等可以触发中断请求。内部事件像定时器溢出、串行口接收完成等也会产生中断。例如,当一个按键被按下时,会产生一个电平变化信号,这个信号被送到单片机的中断控制逻辑,作为一个中断请求。
- 当有中断请求时,如果单片机的中断允许寄存器(IER)允许中断,并且没有更高优先级的中断正在处理,单片机就会暂停当前正在执行的程序。此时,程序计数器(PC)和其他关键寄存器的值会被保存到堆栈中。然后,单片机根据中断源的类型跳转到相应的中断服务程序(ISR)入口地址开始执行。这就好像你正在做一件事(执行主程序),突然有更紧急的事情(中断请求)来了,你先把手上的事情放下(暂停主程序),记录下目前的进度(保存寄存器值),然后去处理紧急的事情(执行中断服务程序)。
- 当中断服务程序执行完毕后,单片机从堆栈中恢复之前保存的PC和其他寄存器的值,然后回到原来被中断的程序继续执行。这就好比紧急的事情处理完了,你回到之前放下的事情那里,继续按照之前的进度(恢复寄存器值,返回主程序)完成工作。 ## 二、系统架构
- 单片机的CPU核心包含算术逻辑单元(ALU),它负责执行各种算术和逻辑运算。ALU可以进行加法、减法、乘法、除法等算术运算,以及与、或、非等逻辑运算。例如,在一个数据处理程序中,ALU用于计算传感器采集的数据的平均值或者进行数据的比较等操作。
- 控制单元协调单片机内部各部件的工作。它根据指令译码的结果产生控制信号,控制数据通路、ALU的操作以及寄存器的读写等。例如,控制单元决定何时从ROM中读取指令、何时将数据写入RAM等,确保整个系统有条不紊地工作。
- ROM用于存储程序代码和一些固定不变的数据,如初始化向量、常量等。这些数据在单片机生产过程中或者程序烧写时被写入ROM,在单片机工作过程中不能被修改。例如,启动代码、一些固定的数学函数表等都存储在ROM中,为程序的运行提供基础支持。
- RAM主要用于存储程序运行过程中的变量和中间结果。在程序执行过程中,数据可以随时从RAM中读取和写入。例如,在一个循环计算的程序中,每次循环的中间结果都存储在RAM中,方便后续的运算和处理。
- 数字I/O接口用于连接外部数字设备,如LED、按键、数字传感器等。可以将这些接口配置为输入模式来接收外部设备的数字信号,或者配置为输出模式来向外部设备发送数字信号。例如,将一个I/O接口配置为输出模式后,可以通过控制该接口的电平高低来点亮或熄灭LED。
- 模拟I/O接口主要用于处理模拟信号。它可以将外部模拟信号(如温度传感器的电压信号)转换为数字信号(通过模数转换 - ADC)供单片机处理,也可以将单片机内部的数字信号转换为模拟信号(通过数模转换 - DAC)输出到外部设备。例如,在一个音频播放系统中,DAC用于将数字音频信号转换为模拟音频信号,驱动扬声器发声。