单片机原理与接口技术:从核心概念到实战应用的期末通关指南
1. 单片机基础概念速通
第一次接触单片机的同学可能会被这个名词吓到,其实它就像一台微型电脑。我当年在实验室第一次看到AT89S51芯片时,完全没想到这个小黑块能控制整个机器人系统。单片机就是把CPU、存储器、I/O接口都集成在一块芯片上的微型计算机系统,专业术语叫"单片微型计算机"。
以常用的AT89S51为例,它的内部结构就像一个小型城市:
- CPU是市长,负责决策和运算
- 4KB Flash存储器是图书馆,存放程序指令
- 128B RAM是临时记事本,存放运行时的数据
- 4个I/O口是城市的四个城门,负责与外界通信
这里有个容易混淆的概念:很多同学分不清程序存储器和数据存储器。程序存储器(Flash)相当于教科书,掉电后内容不会丢失;数据存储器(RAM)相当于草稿纸,断电后内容就消失了。考试常考它们的地址范围:
- 片内程序存储器:0000H~0FFFH
- 片内RAM:00H~7FH(其中20H~2FH是位寻址区)
2. 单片机内部结构精讲
2.1 核心功能模块拆解
AT89S51的内部结构就像精密的瑞士手表,每个部件都有特定功能。最常考的是P3口的第二功能,这个一定要记牢:
- P3.0 (RXD):串行输入口
- P3.1 (TXD):串行输出口
- P3.2 (INT0):外部中断0
- P3.3 (INT1):外部中断1
- P3.4 (T0):定时器/计数器0
- P3.5 (T1):定时器/计数器1
- P3.6 (WR):外部数据存储器写信号
- P3.7 (RD):外部数据存储器读信号
我在项目中最常用的是定时器功能。比如用6MHz晶振时,机器周期=12/6MHz=2μs。这个参数在计算定时器初值时非常关键。举个例子,要定时4ms:
初值 = 65536 - 4000μs/2μs = 65536 - 2000 = F830H所以TH0=F8H,TL0=30H。这个计算过程考试必考,务必掌握。
2.2 关键寄存器详解
程序状态字寄存器PSW就像单片机的体检报告,每位都反映CPU的状态:
- CY:进位标志(加减运算时有用)
- AC:辅助进位标志(BCD码运算时用)
- F0:用户标志位(程序员自定义)
- RS1、RS0:工作寄存器区选择
- OV:溢出标志
- P:奇偶校验位
另一个重点是堆栈指针SP。当执行PUSH指令时,SP先加1再存入数据;POP指令则是先取出数据,SP再减1。这个顺序千万不能记反,我在调试程序时就曾因此浪费了半天时间。
3. 指令系统与编程实战
3.1 寻址方式对比
8051有7种寻址方式,最容易混淆的是间接寻址。MOV @R0,A是合法的,但MOV @R6,A就会报错,因为间接寻址只能用R0或R1。考试常出这类判断题,要特别注意。
查表指令是编程中的利器,两种形式区别要清楚:
- MOVC A,@A+PC:以PC为基址,适合查找紧跟在程序后面的表格
- MOVC A,@A+DPTR:以DPTR为基址,适合查找任意位置的表格
3.2 经典编程案例
求和程序是必考题,下面这个例子演示了如何求n个单字节数的和:
ORG 0100H ADD1: MOV R2, #n ; 计数器 MOV R3, #0 ; 和高位 MOV R4, #0 ; 和低位 MOV R0, #50H ; 数据起始地址 LOOP: MOV A, R4 ADD A, @R0 ; 加法运算 MOV R4, A INC R0 ; 指向下一个数 CLR A ADDC A, R3 ; 处理进位 MOV R3, A DJNZ R2, LOOP ; 循环控制 END清空外部RAM的程序也很典型:
ORG 0100H MAIN: MOV A, #0 ; 要写入的值 MOV R0, #0FFH ; 循环次数(4000H~40FFH) MOV DPTR,#4000H ; 起始地址 LOOP: MOVX @DPTR, A ; 写入外部RAM INC DPTR ; 地址加1 DJNZ R0, LOOP ; 循环控制 END4. 中断系统深度解析
4.1 中断机制详解
中断就像上课时的紧急电话,单片机会暂停当前程序去处理突发事件。AT89S51有5个中断源,它们的入口地址必须牢记:
- 外部中断0:0003H
- 定时器0:000BH
- 外部中断1:0013H
- 定时器1:001BH
- 串行口:0023H
配置中断需要设置三个寄存器:
- TCON:控制定时器和外部中断
- SCON:控制串行口中断
- IE:中断使能控制
4.2 定时器中断实例
下面这个产生500ms定时的程序很有代表性。由于方式1的16位计数器最大只能计65536个脉冲(约131ms),所以采用100ms中断5次的方法:
ORG 0000H AJMP MAIN ORG 000BH ; T0中断入口 AJMP INT_0 ORG 0100H MAIN: MOV SP, #60H MOV B, #5 ; 循环次数 MOV TMOD, #01H ; T0方式1 MOV TL0, #0B0H ; 100ms初值 MOV TH0, #3CH SETB TR0 ; 启动T0 SETB ET0 ; 允许T0中断 SETB EA ; 开总中断 SJMP $ ; 等待中断 INT_0:MOV TL0, #0B0H ; 重装初值 MOV TH0, #3CH DJNZ B, LOOP ; 判断是否满5次 CLR TR0 ; 停止计时 LOOP: RETI ; 中断返回 END5. 显示与输入接口技术
5.1 LED显示控制
LED数码管有共阴和共阳两种类型,它们的字形码正好相反。以显示数字"2"为例:
- 共阳极:A、B、D、E、G段亮,对应二进制01011011(5BH)
- 共阴极:取反即为A0H
动态显示是考试重点,原理是利用人眼视觉暂留,快速轮流点亮各个数码管。关键点是:
- 同一时间只有一个数码管被点亮
- 刷新频率要大于50Hz
- 需要驱动电路提供足够电流
5.2 键盘接口设计
按键消抖是必考知识点。机械按键在按下时会产生5-10ms的抖动,解决方法有:
- 硬件消抖:用RS触发器或滤波电容
- 软件消抖:检测到按键后延时10ms再次检测
软件消抖的典型代码结构:
if(KEY==0) // 检测按键 { delay(10); // 延时10ms if(KEY==0) // 再次检测 { // 处理按键 while(!KEY); // 等待释放 } }6. 串行通信实战
6.1 串口配置要点
串行口的核心是SCON寄存器,其中REN位是关键:
- REN=1:允许接收
- REN=0:禁止接收
多机通信是难点,要点如下:
- 从机初始设置SM2=1,只响应地址帧
- 主机发送地址帧(第9位=1)
- 匹配地址的从机设置SM2=0,准备接收数据
- 主机发送数据帧(第9位=0)
- 只有SM2=0的从机能接收数据
6.2 多机通信示例
假设主机要与地址为01H的从机通信:
- 主机发送:0x01(第9位=1)
- 所有从机比较地址,01H从机设置SM2=0
- 主机发送数据(第9位=0)
- 只有01H从机接收数据
通信完成后,主机可以发送广播地址(如0xFF)将所有从机重置为SM2=1状态。
7. 存储器扩展技术
7.1 并行扩展要点
P0口是地址/数据复用总线,必须用锁存器(如74LS373)分离信号。扩展时重点注意:
- 74LS138用作地址译码器,产生片选信号
- PSEN连接程序存储器
- RD/WR连接数据存储器
考试常考地址线计算。例如用4片8KB存储器组成32KB系统:
- 每片需要13根地址线(A0-A12)
- 剩余的高位地址线(A13-A15)接译码器
7.2 I/O扩展方法
82C55是常用的并行接口芯片,有三种工作方式:
- 方式0:基本输入/输出
- 方式1:选通输入/输出
- 方式2:双向总线
方式0是最简单的无条件传输方式,适合LED显示等简单外设。配置步骤:
- 设置控制字(如0x80表示所有端口为输出)
- 通过端口地址读写数据
8. 期末备考策略
8.1 重点知识梳理
根据多年出题规律,高频考点包括:
- 定时器初值计算(必考计算题)
- 中断优先级设置(简答题)
- 指令寻址方式判断(选择题)
- 程序存储器扩展(画图题)
- 串行通信流程(简答题)
建议重点复习第2、4、6章,这些章节占分比重通常超过60%。
8.2 真题演练技巧
遇到编程题时,建议按以下步骤:
- 分析题目要求,确定使用哪些功能模块
- 画出程序流程图
- 写出关键指令(如定时器设置、中断初始化)
- 检查寄存器使用是否冲突
对于存储器扩展类题目,要注意:
- 地址线连接是否正确
- 片选信号生成逻辑
- 控制信号(RD/WR/PSEN)的连接
最后三天复习时,建议每天做一套往年真题,保持手感。遇到不懂的问题,可以重点查阅相关章节的示例程序。
