导图社区 微机原理与接口技术
微机原理与接口技术知识点总结。主要内容包括:第0章 计算机基础知识,第1章 微机技术概述,第2章 8051微控制器硬件结构,第3章 8051指令系统与汇编程序设计,第4章 8051的C语言与程序设计,第5章 中断系统,第6章 定时器/计数器等。导图主要基于浙江大学王晓萍老师的课程。适用于电子、通信、自动化等专业的学生。
编辑于2025-10-08 20:12:10微机原理与接口技术知识点总结。主要内容包括:第0章 计算机基础知识,第1章 微机技术概述,第2章 8051微控制器硬件结构,第3章 8051指令系统与汇编程序设计,第4章 8051的C语言与程序设计,第5章 中断系统,第6章 定时器/计数器等。导图主要基于浙江大学王晓萍老师的课程。适用于电子、通信、自动化等专业的学生。
模拟电子技术(模拟电路)知识点总结,内容主要来源于上海交通大学郑益慧教授的课程。包括前五章的内容,涵盖常用半导体器件、常用放大电路、多级放大电路、放大电路频响等。教材:《模拟电子技术基础(第五版)》高等教育出版社,童诗白等主编。适用于电子、通信、电气等专业的学生。
通信原理知识点总结,包括确知信号、随机过程、信道、模拟调制系统、数字基带传输系统、数字带通传输系统、模拟信号的数字传输(信源编码)等。适用于通信、电子信息等专业的学生。 从确知信号到随机过程,深入解析数字与模拟传输系统关键点:1调制技术对比线性调制与非线性调制的本质差异,角度调制的抗噪声优势2数字传输核心码间串扰对误码率的影响,基带与带通系统设计要点3模拟信号数字化抽样、量化、编码三步骤,重点掌握A律13折线PCM规则涵盖信道特性、功率谱分析等基础理论。
社区模板帮助中心,点此进入>>
微机原理与接口技术知识点总结。主要内容包括:第0章 计算机基础知识,第1章 微机技术概述,第2章 8051微控制器硬件结构,第3章 8051指令系统与汇编程序设计,第4章 8051的C语言与程序设计,第5章 中断系统,第6章 定时器/计数器等。导图主要基于浙江大学王晓萍老师的课程。适用于电子、通信、自动化等专业的学生。
模拟电子技术(模拟电路)知识点总结,内容主要来源于上海交通大学郑益慧教授的课程。包括前五章的内容,涵盖常用半导体器件、常用放大电路、多级放大电路、放大电路频响等。教材:《模拟电子技术基础(第五版)》高等教育出版社,童诗白等主编。适用于电子、通信、电气等专业的学生。
通信原理知识点总结,包括确知信号、随机过程、信道、模拟调制系统、数字基带传输系统、数字带通传输系统、模拟信号的数字传输(信源编码)等。适用于通信、电子信息等专业的学生。 从确知信号到随机过程,深入解析数字与模拟传输系统关键点:1调制技术对比线性调制与非线性调制的本质差异,角度调制的抗噪声优势2数字传输核心码间串扰对误码率的影响,基带与带通系统设计要点3模拟信号数字化抽样、量化、编码三步骤,重点掌握A律13折线PCM规则涵盖信道特性、功率谱分析等基础理论。
微机原理与接口技术
第0章 计算机基础知识
1. 数制与编码
1.1. 数制与转换
二进制电路实现
晶体管的导通与截止
脉冲的低电平和高电平
继电器的通和断
逻辑定义
负逻辑:如RS-232C
-12V称为1
+12V称为0
正逻辑
数制转换
常用
FFH → 255D
3FFH → 1023D
FFFFH → 65535D
微机计算单位
1K=1024D=400H
1M=1KX1K=1048576D=100000H
1G=1MX1M=1048576D=100000H
LCD显示器分辨率如640x480,1024×768,1280×1024等, 均是16的倍数,方便寻址和运算
1.2. 微机中数的表示
无符号数
对于字长是8位的微机,8位二进制D7~D0均为数值位
数值范围:00H—FFH(0-255D)
即8位二进制数从全0到全1,有256种状态
带符号数
数值的最高位为符号位
1负
0正
如:8位二进制数最高位D7
D7=0正数
D7=1负数
原码反码补码
换算关系
8位带符号数表示范围
注意补码的-128
“0”的表示
1.3. 二进制编码
BCD码:用四位二进制数表示十进制的0~9
常考!
常用英文
MSB:Most Significant Bit,最高加权位,二进制最左边
LSB:Least Significant Bit,最低有效位,二进制最右边
Nibble:Nibble at,四位二进制数
Parity Bit:奇偶校验位
ASCII码:7位二进制代码,共有128种状态,代表128种字符
2. 微机基本组成电路
2.1. 常用逻辑电路
与门、或门、非门
异或门、与非门、或非门
2.2. 触发器
R-S触发器
R:复位信号输入端
S:置位信号输入端
一般为与非门组成,即约束条件SR=1
D触发器
即:数据触发器
典型D触发器
常用D触发器
省略S端
2.3. 寄存器
1. 缓冲寄存器(Buffer)
用于暂存数据
如:由4个D触发器组成的4位并行缓冲寄存器
2. 移位寄存器(Shifting Register)
锁存功能:暂存数据
移位功能:将存储的数据逐位向左或向右移动,串→并,并→串
如:串行输入→并行输出的4位移位寄存器
3. 计数器(Counter)
累计时钟脉冲,对输入的CLK加1或减1
溢出
最大计数值
4. 三态门
简介
计算机的信息传输采用总线形式
为了防止信息相互干扰,凡要挂到总线上的寄存器、存储器等,都应具有三态功能
三类总线
数据总线
地址总线
控制总线
分类
E=0时,输出高阻态,此时对总线状态不起作用
分时访问:任一时刻只能一个器件占用总线,而其它器件都应为高阻态
寄存器的输出通过三态门与数据总线相连接
(寄存器+三态门)构成三态缓冲寄存器,通常作为微控制器的输入接口
2.4. 综合应用举例
输入有三态,实现CPU分时访问
输出有锁存,实现输出数据的保持
3. 存储器概述
3.1. 常用术语解析
位(bit):binary digit 的缩写,一位二进制数
字节(Byte):一个字节就是相邻的8位二进制数,即D7 D6 D5 D4 D3 D2 D1 D0
字(word): 16位二进制数 。2个字节,在16位微处理器或微型计算机中使用。而8位微控制器只能直接处理和传送字节数据
双字: 32位二进制数称为双字
字长:数据线位数,也即CPU能够直接处理的数据位数
3.2. 存储器分类
程序存储器ROM
也称为只读存储器(Read Only Memory)
分类
PROM (Programmable ROM):可编程ROM
OTPROM (One Time Programmable Read Only Memory):一次可编程ROM
EPROM(Erasable Programmable Read Only Memory) ;可擦除可编程ROM
EEPROM (Electrically Erasable Programmable Read Only Memory): 可电擦除ROM
FLASH memory:快擦写存储器、或Flash存储器、或“闪存”,也是一种EEPROM,但其读/写速度要快得多
无需写入器,方便芯片擦除和程序写入
实现了微控制器的在系统编程调试功能
数据存储器RAM
也称随机存取器(Read Access Memory)
分类
DRAM(Dynamic RAM):动态随机存取存储器
需要刷新电路
用于RAM量非常大的计算机系统中,如大型计算机
SRAM(Static RAM):静态随机存取存储器
集成度低,生产成本高
最常用
3.3. 存储器结构与寻址
组成结构
由存贮矩阵(大量缓冲寄存器)、地址译码器、三态双向缓冲器、读写控制等组成
引脚包括数据线、地址线、控制线和电源线等
存储单元和地址
存储器中一个缓冲寄存器为一个存储单元
对于8位微控制器,其CPU是8位,即字长是8位,因此通常选用8位存储器,一个存储单元存放8位二进制信息,即一个字节信息
存储单元的个数为该存储器的容量
给每个存储单元一个唯一的固定编号,称为存储单元的地址
对于具有n根地址线的存储芯片,有2n个存储单元;具有n根地址线的微控制器,其寻址空间为2n个存储单元
存储器芯片的地址线位数目决定其容量;微控制器的地址线数量决定其寻址能力
3.4. 存储器主要指标
速度
指读或写一条信息所需的时间
一般存取时间为ns级
容量
指一片存储器包含的存储单元数量
容量的表示:存储单元数×数据线位数(每个单元的位数)
如6264芯片容量为: 8K×8b/片=64Kb/片=8KB/片
8192个存储单元,每个单元有8位
B:Byte;b:bit
第1章 微机技术概述
1. 微型计算机概述
1.1. 两大分支
通用微型计算机(general computer)
嵌入式计算机(embedded computer)
1.2. 通用微型计算机
发展历程
1946年
美国宾夕法尼亚大学研制了第一台电子计算机ENIAC
奠基人
英国科学家艾兰· 图灵
美籍匈牙利科学家冯· 诺依曼
冯·诺依曼的计算机体系结构
1. 计算机的运算应采用二进制
2. 采用“存储程序”的思想
3. 计算机的硬件组成
运算器、控制器、存储器、输入设备和输出设备
组成
硬件
中央处理器CPU (Central Processing Unit ):执行程序以及对信息进行运算处理
运算器
控制器
寄存器
存储器( Memory):用于存储程序、数据和文件等
ROM
RAM
输入输出(I/O)接口:用于连接多种外部设备,如显示器、键盘、鼠标、打印机等
软件
操作系统
实用程序
发展
目前微型计算机产品更新换代的周期,通常只有0.5-1年
2. 微控制器概述
2.1. 微处理器(Micro Processor,MP或µP)
也称为中央处理器(CPU,Central Processing Unit)
2.2. 嵌入式系统(Embedded System)
也称为单片微型计算机(SCMP,Single Chip Micro-Computer)
特点
嵌入性
专用性
计算机
两种常用的嵌入式系统
8位微控制器
32位微处理器
如linux、wince、μsDOS等
32位ARM微处理器是目前世界上应用最多的32位嵌入式系统
2.3. 微控制器(Microcontroller Unit,MCU)
组成结构
发展历程
第一阶段:单芯片化探索阶段
典型产品MCS-51单片机系列
第二阶段:功能拓展阶段
多种外围电路与接口电路
第三阶段:全面发展阶段
高速、低功耗、强运算
功能全面的片上系统(SOC)
应用
通信设备、电子玩具、家用办公用品、掌上电脑都配有1-2个微控制器
汽车和较为复杂的工业控制系统,可能有数百个微控制器在同时工作
3. 微控制器的体系结构
3.1. 微控制器的存储结构
哈佛(Harvard)结构
程序存储器、数据存储器分开
微控制器常用
普林斯顿(Princeton)结构
即:冯 · 诺依曼结构
程序存储器和数据存储器在同一个寻址空间中
通用微型计算机常用
3.2. CISC和RISC处理器
复杂指令集计算机 (Complex Instruction Set Computer, CISC)
用最少的指令来完成所需的计算、控制任务,即尽量简化软件
优点:一条指令往往可以完成一串动作,编程效率较高
缺点:对工艺要求高
精简指令集计算机 (Reduced Instruction Set Computer, RISC)
尽可能简化指令系统,提高程序运行速度
优点:CPU硬件结构简单、布局紧凑
缺点:编程效率较低,并且一般需要较大的内存空间
近期应用较多
4. 微控制器的典型结构
4.1. 典型微控制器的组成
4.2. CPU系统
CPU
时钟系统
复位电路
能满足上电复位、信号控制复位的最简化电路
总线控制逻辑
内部总线控制用以实现片内各单元电路的协调操作
外部总线控制用于微控制器外围扩展时的操作管理
4.3. CPU外围电路
程序存储器ROM
数据存储器RAM
输入输出接口I/O (Input/Output interface)
微控制器的I/O接口大都有复用功能
特殊功能寄存器SFR (Special Function Register)
管理与控制微控制器内部各功能部件运行的寄存器
4.4. 其他功能单元
基本功能单元
包括定时器/计数器、中断系统、串行通信接口等
CPU系统 + CPU外围单元 + 基本功能单元 → 微控制器基核
外围扩展单元
如满足数据采集要求而扩展的模数转换器ADC,满足伺服驱动控制的脉冲宽度调制(PWM)电路和满足程序可靠运行的监视定时器WDT等
微控制器基核 + 外围扩展单元 → 多种型号、多种功能的微控制器
内部总线
数据总线DB(Data Bus)
双向,用于传送数据,实现CPU与存贮器、I/O接口、各功能模块之间的信息交换,其方向取决于是读操作还是写操作
地址总线AB(Address Bus)
单向,由CPU发出地址信息,用来访问存贮器和I/O接口
控制总线CB(Control Bus)
单向,传送控制或时序信号,通常有多条控制信号
5. 微控制器性能及发展趋势
5.1. 性能指标
1. CPU主频
CPU内核工作的时钟频率(CPU Clock Speed),反映了CPU的运行速度
通常用单位时间执行指令数(如MIPS,百万条指令每秒)来表示CPU的运行速度
2. CPU字长
指CPU一次能并行处理的二进制位数,也是内部数据总线的位数
3. 位处理器
反映微控制器的位处理能力
4. 指令系统
反映CPU能够识别的指令编码和数量
5. 存储容量
反映ROM、RAM的片内容量
6. I/O端口
主要是指片内并行接口的数量,以及端口的特性
7. 基本功能模块
8. 外围功能单元
5.2. 发展趋势
I/O接口性能增强
1. I/O接口的串行扩展
如I2C总线、SPI串行接口和1-Wire总线
2. I/O端口的电路结构扩展
电路结构形式
多样化,可编程,满足端口引脚与外部设备的适应性连接
电气特性分类
推挽方式、开漏输出、弱上拉
3. 功能I/O接口的增加
如集成常用传感器接口、连接工业对象的电气接口
性能多样化
1. 低功耗
待机、掉电等多种低功耗运行方式
提高了产品的可靠性和抗干扰能力
2. 工作电压范围宽
常用3.3-5.5V,也有1.8-6V等
有利于微控制器长时间在省电模式下工作,降低功耗
3. 高性能化
由复杂指令系统(CISC)向精简指令系统(RISC)发展
4. 小体积、低价格
5. 混合信号集成化
6. ISP及基于ISP的开发环境
第2章 8051微控制器硬件结构
1. 8051微控制器的结构
1.1. 组成结构
8051微控制器
把微机基本功能部件集成在一个芯片上
习惯上可统称MCS-51微控制器、8051微控制器或51微控制器
8051微控制器组成结构
1. 中央处理器CPU
2. 只读存储器 ROM
3. 随机存取存储器RAM
4. 并行 I/O口
5. 中断系统
6. 定时器/计数器
7. 串行口
8. 特殊功能寄存器SFR(Special Funtion Register)
8051微控制器内部结构
1.2. 功能特点
1. 8位CPU:是微控制器的核心,包括运算器和控制器两大部分,主要完成运算和控制功能。
2. RAM
内部RAM:典型8051 MCU有256B的RAM,地址为00-FFH;
外部RAM:可以通过数据总线和地址总线扩展外部RAM,最大扩展容量为64KB,地址范围为0000H-FFFFH。(较少扩展)
3. ROM
内部ROM:8KB的ROM,地址范围为0000H-1FFFH。(增强型8051 MCU的内部ROM已达64KB)
外部ROM:当内部ROM容量不够时,8051 MCU可以进行外部扩展,最多可以外扩64KB ROM,地址范围为0000H-FFFFH。(很少扩展)
4. 特殊寄存器SFR:用于管理、控制和监视内部功能部件的寄存器。分布在地址为80H~FFH的专用RAM区。
5. 并行I/O口:4个8位I/O口:P0、P1、P2、P3,具有第二功能。
6. 中断系统:具有5个中断源,2个中断优先权。
7. 定时器/计数器:有2个16位的定时器/计数器,具有4种工作方式。
8. 串行接口:1个全双工的串行口,用于微控制器与具有串行接口的外设进行异步串行通信,也可以扩展I/O接口
9. 布尔处理器:具有较强的位寻址、位处理能力。
10. 时钟电路:产生微控制器工作所需要的时钟脉冲。
(需要外接晶体振荡器和微调电容)
11. 指令系统:有5大功能,111条指令。为复杂指令系统(CISC)。
1.3. 引脚与功能
封装形式
1. 40脚DIP封装形式
2. PLCC封装形式
8051微控制器的引脚
1. 电源、地(2条)
VCC
GND
2. 时钟电路
XTAL1
片内振荡电路反相放大器的输入端
XTAL2
片内振荡电路反相放大器的输出端
输出频率为晶振频率的时钟信号
除连接晶振外,还要连接两个起振电容
3. 控制引脚
ALE(Address Latch Enable,P30)
地址锁存允许信号输出端
有效时输出一个高脉冲
实现P0口的8位数据线和低8位地址线的分时复用和隔离
在访问外部存储器时,指示数据线还是地址线,目前少用
PSEN(Program Store Enable,P29)
外部ROM选通信号输出端
低电平有效(上划线)
EA(External Access Enable,P31)
内部、外部ROM选择信号输入端
低电平有效
目前无需外扩,故很少用
RST(Reset,P9)
复位信号输入端
高电平有效
4. I/O引脚(P0、P1、P2、P3):32条I/O口线
P0口(P0.7-P0.0)
第一功能:普通I/O口
需外接上拉电阻
第二功能:分时复用的8位数据线和低8位地址线
P1口(P1.7-P1.0)
单一功能8位准双向I/O口
带内部上拉电阻
P2口(P2.7-P2.0)
第一功能:普通I/O口
第二功能:高8位地址线
P3口(P3.7-P3.0)
第一功能:普通I/O口
第二功能
2. 微控制器的工作原理
2.1. CPU的结构与组成
CPU的组成结构
控制器
1. 指令部件
程序计数器PC (Program Counter)
16位的ROM指针,用于存放下一条取指指令的地址,寻址范围为64K
指令寄存器IR (Instruction Register)
存放当前指令的操作码,等待译码
指令译码器ID (Instruction Decode)
对当前指令操作码进行解析,并通过控制电路产生执行该指令需要的控制信号,完成指令规定的操作
2. 时序部件
时钟电路
分频器
3. 操作控制部件
为指令译码器的输出信号配上节拍电位和节拍脉冲,形成执行指令需要的操作控制序列信号
运算器
1. 算术逻辑单元ALU (Arithmetic Logic Unit)
完成算术运算及与、或 、非、异或等逻辑操作
2. 位处理器(布尔处理器)
能直接对位(bit)进行操作
也称其为位累加器
3. 暂存寄存器
用于运算数据的暂时存放,该寄存器不能访问
4. 程序状态寄存器PSW
5. 累加器Acc
6. BCD码运算调整电路等
2.2. 微控制器的工作过程
程序与指令
用户编写的程序要预先存放在ROM中,微控制器的工作过程就是从ROM中逐条取出指令并执行的过程
程序:是完成一个特定功能的一系列指令集
指令:是微控制器指挥各功能部件工作的指示和命令
操作码:指明指令的功能(即做什么操作)
操作数:指明指令执行的数据或数据存放的地址(即操作对象)
指令样例
指令执行过程
指令执行图解
指令执行示例
3. 存储器配置与地址空间
3.1. 存储器配置
存储器的两种基本结构形式
冯·诺依曼(Von Neumann)结构
哈佛(Harvard)结构
8051存储器结构图
采用哈佛结构,ROM和RAM分开寻址
3.2. 程序存储器ROM
ROM空间配置
内部8K
外部64K
ROM中的6个特殊单元
1个复位入口和5个中断入口
3.3. 数据存储器RAM
RAM空间配置
内部RAM:00H~FFH(256B)
外部RAM:0000H~FFFFH(64KB)
内部RAM配置
工作寄存器区
选择四组工作寄存器区的哪一组作为R0~R7,由PSW寄存器中的两位RS1、RS0来确定
位寻址区
既可进行字节寻址,又可进行位寻址
可以使用位操作指令,如CLR,SETB等
用户RAM区
用户RAM
通常作为数据缓冲区和堆栈区
数据缓冲区
用来存放各种用户数据,如AD转换结果
堆栈区
堆栈是一种具有特殊用途的存储区域,其作用是用于暂存数据和地址
在子程序和中断服务程序中,用于保护断点和保护现场
8051微控制器的堆栈区必须开辟在内部通用RAM中
外部数据存储器
4. 特殊功能寄存器SFR
4.1. SFR简介
特殊功能寄存器SFR(Special Function Register),也称专用寄存器
用于管理和控制MCU内部硬件功能模块(如定时器/计数器、串行口、中断系统等)的寄存器,用来存放功能模块的控制命令、状态或数据
8051
8051有21个SFR
除程序计数器PC指针和R0~R7工作寄存器外,其余所有定义的寄存器都属SFR
4.2. SFR定义与分布
位寻址:8个bit都可以按位操作
4.3. SFR的位寻址空间
4.4. 程序计数器PC
也称为程序指针或PC指针
不占用SFR地址空间,是不可寻址的,在程序中不能直接访问
4.5. 特殊功能寄存器介绍
1. 累加器A
算术、逻辑类操作
A的字节地址是E0H,可位寻址
2. B寄存器
一般用于乘除指令中
B的字节地址是F0H,位地址为 F0H~F7H
3. 程序状态字PSW (Program Status Word)
存放程序状态信息,表征指令执行后的状态
状态位: 根据指令执行结果,由硬件置位或清0
C
进位标志
高位(D7)发生进位或借位则被置1(即C=1),否则被清0(C=0)
AC
辅助进位标志
若低4位向高4位发生进位或借位则AC=1,否则AC=0
在十进制调整指令DA A中要用到
OV
溢出标志
用于带符号数
OV=1:溢出,表示运算结果超出了A所能表示的带符号数的范围
(-128~+127,即8位带符号数的范围)
对于乘法MUL,当A、B两个乘数的积超过255时OV置位;否则,OV=0
对于除法DIV,若除数为0时,OV=1;否则,OV=0
如
87+121>+128
P
奇偶标志
表示指令操作之后,累加器A中1的个数的奇偶性
若A中“1”的个数(二进制)为奇数个,则P=1
控制位: 根据使用需要,由指令设定
工作寄存器组选择位
RS1
RS0
软件标志位(用户自定义)
F1
F0
4. 堆栈指针SP (Stack Pointer)
堆栈
堆栈有二种形式,一是向上(向高地址)生成,二是向下(向低地址)生成
8051 MCU的堆栈为满顶法向上生成的软件堆栈
“先进后出”“后进先出”
最后进栈的数据最先被弹出
存放堆栈栈顶地址的一个8位寄存器
进栈时栈顶向高地址生长,SP的内容增加;出栈时栈顶向下回落,SP的内容减少。所以SP总是指向堆栈的栈顶
堆栈操作指令
进栈指令:PUSH direct ( direct 范围: 00H-FFH)
出栈指令:POP direct
要保证堆栈有一定的深度,要避免堆栈溢出
5. 数据指针DPTR (Data Pointer)
16位的SFR,是外部RAM(地址范围0000H-FFFFH)的地址指针
高8位为DPH表示,低8位用DPL
6. P0-P3端口寄存器
分别是I/O端口P0~P3的锁存器,可以位寻址
对于端口即引脚的操作实际上是对这些寄存器的操作
7. 其它特殊功能寄存器
SBUF、IP、IE、TMOD、TCON、SCON、PCON等
4.6. 内部RAM和SFR的寻址方式
RAM
00H-7FH
直接寻址和寄存器间接寻址
80H-FFH
寄存器间接寻址
同为80H-FFH的特殊功能寄存器(SFR)
直接寻址
采用不同的寻址方式,解决2个存储空间的地址重叠问题,避免存储单元访问的冲突
5. IO端口结构与特点
5.1. P0-P3端口内部结构
准双向I/O口结构
读引脚时,如果端口锁存器状态为0,则T2导通,引脚被钳位在“0”状态,导致无法得到端口引脚的高电平状态
锁存器影响输入,故称准双向
5.2. P0-P3端口功能
P0端口(P0.7~P0.0)
P1端口(P1.7~P1.0)
P2端口(P2.7~P2.0)
P3端口(P3.7~P3.0)
5.3. P0-P3端口的结构特点和应用特性
准双向I/O口特性
在输入时,必须先向锁存器输出1,使得输出驱动电路中的T2处于截止状态,即将端口设置为输入方式
I/O口的应用特性
P0口在用作第一功能时,要外接上拉电阻; P1~P3口内部有上拉电阻
驱动能力:由于CMOS电路的输入驱动电流极微,因此通常不必考虑MCU I/O端口的驱动能力。只有在I/O端口作功率驱动,如驱动LED、可控硅、继电器时,才考虑I/O口的驱动能力
6. 时钟与复位
6.1. 时钟电路与时序
时钟电路
C1、C2必须相等,一般取30pf左右
时钟频率=外接晶振频率
时序:CPU和功能模块工作时,各控制信号之间的时间顺序关系
工作周期
1. 时钟周期T0
也称为振荡周期,是外接晶振频率的倒数
若振荡源频率为fosc ,则振荡周期为T0=1/ fosc ;一个振荡周期定义为一个节拍P
外接晶振频率的高低,决定了CPU执行速度的快慢
但振荡频率太高,会引入高频辐射
2. 状态周期S
时钟周期的两倍S =2T=2/ fosc
3. 机器周期TM
一个机器周期由6个状态周期(S1-S6)即12个时钟周期组成
4. 指令周期
执行一条指令所需要的时间
指令周期由1-4个机器周期组成
6.2. 复位与复位电路
复位电路
上电复位(冷启动)
系统上电对C充电时,在RST引脚上产生高电平进行复位
RST端的高电平需维持10ms以上
按键复位(热启动)
工作过程中(已上电)出现不正常情况时,按RST
RST端的高电平只要≥2个机器周期
复位状态
(PC)=0000H;
(SP)=07H;
(PSW)=00H;
P0~P3端口的锁存器为FFH,端口引脚全为1,处于可输入状态;
除上述SFR外,其余特殊功能寄存器SFR均为0;
7. 微控制器的工作方式
7.1. 低功耗工作方式
低功耗方式的控制
8051 MCU 有两种低功耗方式:休闲方式(IDle)和掉电方式(Power Down)
通过电源控制寄存器PCON中的 IDL位和PD位进行设置
休闲方式
内部时钟电路正常工作,CPU停止工作
进入:如执行“ORL PCON, 01H”,或运算置1
退出:复位或中断可退出休闲方式
掉电方式
内部时钟电路不工作,内部所有功能单元停止工作
进入:如执行“ORL PCON, #02H”
退出:唯一方法是复位MCU
各种工作方式能耗比较
7.2. 程序执行方式
即运行方式,复位后就进入,MCU从ROM的0000H单元开始逐条取指令执行程序
7.3. 复位方式
复位是微控制器的初始化操作,复位时微控制器不工作,复位后MCU中各SFR的内容恢复到初始值,CPU重新开始运行程序,进入程序执行方式
8. 8051微控制器的技术发展
8.1. 内部资源扩展
扩展原则
基核不变性原则
指令系统不变
总线不变
内部资源扩展
速度扩展
时钟频率扩展
总线速度扩展
CPU外围扩展
ROM扩展
RAM扩展
I/O端口扩展
开漏输出
开漏模式下,多个端口可以进行线“与”
推挽输出
改变外接电阻,就可输出不同的驱动电流
推挽模式用于需要输出较大驱动电流的情况
弱上拉输出
驱动能力弱,仅表示电平状态
基本功能单元扩展
中断系统、定时器/计数器和串行口的扩展等
8.2. 内部资源删减
主要体现在并行总线的删减
8.3. 增强型8051微控制器
NXP公司
灵活配置和灵活编程
ADI公司
内部ADC结构,有SAR型和Sigma-Delta型两种
Silicon Labs公司
指令执行时间为1或2个系统时钟周期
引入大量外设和功能单元
第3章 8051指令系统与汇编程序设计
1. 概述
1.1. 指令系统概述
指令分类
按指令的长度(字节数)分类
单字节指令49条
1字节机器码,指令的操作数隐含在操作码中
如INC Rn和MOV A, Rn 的机器码分别为00001xxx和11001xxx,其中xxx可表示的000-111,分别代表R0~R7,实际上各有8条指令
双字节指令46条
机器码有2个字节
第1字节为操作码,第2字节为操作数
如MOV A, #data; 机器码:74H, data
三字节指令16条
机器码有3个字节
第1字节为操作码,第2、3字节为操作数
如MOV DPTR,#data16;机器码:90H, #data的高8位, #data的低8位
根据指令的执行时间(速度)分
单机器周期指令:64条
双机器周期指令:45条
四机器周期指令:2条
根据指令功能划分
数据传送类指令:29条
算术运算类指令:24条
逻辑运算类指令:24条
控制转移类指令:17条
位操作类指令: 17条
指令格式
指令的表示方式称为指令格式
标号:该指令的符号地址。标号的第一个字符必须是字母,其余可以是符号或数字(程序跳转时用)
助记符:表述指令的功能
指令代码
符号约定
寄存器
Rn(n=0~7) :当前选中的工作寄存器组的R0~R7,它的片内RAM地址由PSW中的RS1,RS0确定。
Ri(i=0,1):当前选中的工作寄存器组中可作为地址指针的两个工作寄存器R0,R1。
立即数
#data:8位立即数,即指令中给出的8位常数。
#data16:16位立即数,即指令中给出的16位常数。
地址
direct:8位片内RAM单元(包括SFR)的直接地址。
addr16:16位目的地址。用于LCALL和LJMP指令中,目的地址在64k字节的ROM空间。
addr11:11位目的地址。用于ACALL和AJMP指令中,目的地址必须与下一条指令的第一字节在同一个2k字节的ROM空间之内。(已很少使用)
bit:片内RAM和SFR的直接寻址的位地址。
其他
rel:8位带符号的偏移字节。用于SJMP和所有的条件转移指令中。偏移量以下一条指令第一字节地址(当前PC值)为基址,地址偏移量范围在-128~+127。(即偏移量的补码形式表示)
@:间接寻址方式,表示间址寄存器的符号。
/:位操作指令中。表示对该位先求反再参与操作,不影响该位原始值。
(x):表示x中内容。如(30H),表示内部RAM 30H中的内容。
((x)):表示以x中的内容为地址寻址。如((30H)),表示内部RAM 30H单元中的值为内部RAM的地址,该地址单元中的内容。
←:指令操作流程,将箭头右边的内容送到箭头左边的单元中。
1.2. 寻址方式
1. 立即寻址
操作数以立即数的形式在指令中直接给出
数字前加“#”符号,即表示为立即数
立即寻址的寻址空间为ROM(即操作数存放在ROM中)
2. 直接寻址
指令中给出的操作数是实际操作数的存储地址
即存放实际操作数的内部RAM的单元地址或SFR的地址
注意同为MOV但操作码不一样
直接寻址的寻址空间
内部RAM的低128个字节单元(00H-7FH)
特殊功能寄存器区
对SFR,只能使用直接寻址进行访问
3. 寄存器寻址
寄存器的内容是操作数
INC:自增1
寄存器寻址的寻址空间
R0~R7、 A
4. 间址寻址:寄存器间接寻址
操作数的地址存放在寄存器中,即寄存器的内容是操作数所在的内存地址。用于间接寻址的寄存器有Ri(i=0或1)、DPTR,要在寄存器前加@
把DPTR指向的送过去
DPTR是16位的
R0/R1是8位的
寄存器间接寻址的寻址空间
内部RAM: 00H - FFH;(@R0, @R1)
外部RAM: 0000H - FFFFH; (@R0, @R1, @DPTR)
5. 变址寻址:基址寄存器加变址寄存器寻址
以DPTR或PC作基址寄存器,A作变址寄存器(存放8位无符号数),两者相加形成的16位程序存储器地址,作为操作数所在地址
前两条是程序存储器读指令(也称查表指令)
后一条是无条件散转指令
变址寻址的寻址空间
程序存储器
6. 相对寻址
用于程序控制,利用指令修改PC指针内容实现转移
指令中给出的操作数为程序转移的偏移量(用rel表示)
以PC的当前值(执行这条指令时的PC)加上偏移量,所得结果即为转移的目的地址
相对寻址的寻址空间
程序存储器
7. 位寻址
对位寻址空间的各位直接进行操作
位寻址的寻址空间
8051 MCU中的位地址空间(通用内部RAM20H~2FH对应的00H~7FH的128bit,SFR中的可位寻址的83bit,共211bit。)
位寻址(对于位)与直接寻址(对于字节)的地址形式完全相同,通过操作码来区分
建议在指令中使用位符号名称,以增加程序的可读性
8. 总结:寻址方式和寻址空间
2. 基本指令
2.1. 数据传送类指令
1. 内部RAM数据传送指令(16条) (助记符:MOV (MOVe ) )
(1) 以累加器A为目的操作数的指令(4条)
加括号:把内容送入A中
功能:A的赋值指令
(2) 以直接地址为目的操作数的指令(5条)
功能:内存单元赋值
(3) 以寄存器Rn为目的操作数的指令(3条)
注意源操作数没有Ri
功能:工作寄存器赋值
(4) 以间接地址为目的操作数的指令(3条)
功能:把源操作数送到以Ri的内容为地址的RAM中,给Ri间接寻址的内存单元赋值
(5) 16位立即数传送指令(1条)
功能:将一个16位的立即数送入DPTR,其中高8位送入DPH,低8位送入DPL
2. 外部RAM访问指令 (4条) (助记符:MOVX(MOVe eXternal RAM))
读指令
写指令
功能:对外部RAM进行读或写操作,采用寄存器间接寻址方式
3. 查表指令(2条) (助记符:MOVC(MOVe Code))
(1) 远程查表指令
功能:将DPTR的内容与A的内容相加后形成一个ROM单元地址,将该ROM单元的内容送至A,DPTR内容不变
可以查找存放在64KROM中任何地址的数据表格,因此称为远程查表指令;但要占用DPTR
(2) 近程查表指令
当前PC值,应为该指令所在地址加1
功能:将A和当前PC值相加,形成要寻址的ROM单元地址,将该ROM单元中的内容送到A
只能查找该指令后256字节范围内的数据表格
4. 堆栈操作指令(2条)
功能
PUSH:先修改SP指针,再将内部RAM direct单元的内容压入堆栈
POP:将堆栈栈顶的内容弹出,送到内部RAM direct单元,再修改SP指针
5. 数据交换指令(5条)
字节交换
半字节交换
功能:把累加器A中的内容与源操作数所指出的数据相互交换
6. 举例
外部寄存器,需用累加器A
2.2. 算术运算类指令
1. 不带进位加法指令(4条) 助记符ADD(Addition)
功能:将源操作数(Rn、direct、@Ri或立即数)和目的操作数(在A中)相加后,结果存放到A中
2. 带进位加法指令(4条) 助记符ADDC(Addition with Carry)
功能:把源操作数、A和当前Cy的值相加,结果保存到A。主要用于多字节加法中
3. 带借位减法指令(4条) 助记符SUBB(Subtract with Carry)
功能:将A中的值减去源操作数指定的值,以及借位位Cy,结果存放在A中
应先对Cy进行清0
4. 加1指令(5条) 助记符INC(Increment)
功能:将指令中的操作数加1
5. 减1指令(4条) 助记符DEC(Decrement)
功能:指令中的操作数减1。若原操作数为#00H,则减1后为#0FFH
6. 乘法指令(1条) 助记符MUL(Multiply)
功能:将A和B中两个无符号8位二进制数相乘,所得的16位积的低8位存于A中,高8位存于B中
如果乘积大于255时,即高位B不为0时,OV置位;否则OV置0。C总是清0
7. 除法指令(1条) 助记符DIV(Divide)
功能:将A的内容除以B的内容,结果中的商保存于A,余数保存于B,并将C和OV置0
当除数(B)=0时,结果不定,则OV置1。C总是清0
8. 十进制调整指令(1条) 助记符DA(Decimal Adjustment)
功能:对两个压缩BCD码(一个字节存放2位BCD码)数相加的结果进行十进制调整
9. 举例
2.3. 逻辑操作类指令
1. 逻辑与操作指令(6条) 助记符ANL(AND Logic)
功能:将目的操作数和源操作数按“位”相“与”,结果存放到目的操作数单元中
2. 逻辑或操作指令(6条) 助记符ORL(OR Logic)
功能:将目的操作数和源操作数按“位”相“或”,结果存放到目的操作数单元中
3. 逻辑异或操作指令(6条) 助记符XRL(Exclusive-OR Logic)
将目的操作数和源操作数按“位”相“异或”,结果存放到目的操作数单元中
4. 累加器清0和取反指令(2条)
清0指令助记符CLR(Clear)
功能:累加器A的内容清0(字节清0)
取反指令助记符CPL(Complement)
功能:对累加器A的内容逐位取反,结果仍存在A中
5. 循环移位指令(4条)
6. 举例
2.4. 控制转移类指令
1. 无条件转移指令(4条)
2. 条件转移指令(8条)
(1) 判零转移指令
(2) 数值比较转移指令
助记符: CJNE(Compare and Jump if Not Equal)
功能:对指定的两操作数进行比较,即(操作数1)-(操作数2),比较结果仅影响标志位C,2个操作数的值不变
比较不等:程序转移
比较相等:程序继续进行
(3) 循环转移指令
助记符:DJNZ(Decrement and Jump if Not equal Zero)
功能:Rn或direct的内容减1,判别其内容是否为0
不为0:跳转到目标地址,继续执行循环程序
为0:结束循环程序段,程序往下执行
3. 子程序调用和返回指令(4条)
(1) 长调用指令 助记符LCALL(Long Subroutine Call)
助记符LCALL(Long Subroutine Call)
(2) 绝对调用指令 助记符ACALL(Absolute Subroutine Call)
助记符ACALL(Absolute Subroutine Call)
(3) 子程序返回指令 助记符RET(Return from Subroutine)
助记符RET(Return from Subroutine)
子程序的最后一条一定是RET指令
(4) 中断程序返回指令 助记符RETI(Return from Interrupt Subroutine)
助记符RETI(Return from Interrupt Subroutine)
除具有RET的功能外,还可以恢复中断逻辑
4. 空操作指令:助记符NOP(No Operation)
常用于软件延时
5. 举例
2.5. 位操作类指令
1. 位数据传送指令(2条)
功能:实现位累加器(C)和其它位地址之间的数据传递
2. 位状态设置指令(6条)
位清零指令:将C或指定位清零 助记符:CLR(Clear)
位置1指令:将C或指定位置1 助记符:SETB(Set Bit)
位取反指令:将C或指定位取反 助记符:CPL(Complement)
3. 位逻辑运算指令(4条)
位与指令
指定的位地址中的值本身并不发生变化
位或指令
4. 位转移指令(5条)
5. 举例
3. 各种指令的应用
3.1. 查表指令的应用
1. 近程查表指令
基址寄存器PC是下条指令首地址,即执行完查表指令后的PC,称为当前PC;PC值不可改变
变址寄存器A是下条指令到常数表格中被访问字节的偏移量,范围是 0-255
只能查找本指令后256B范围内的数据表格,故称为近程查表
2. 远程查表指令
基址寄存器DPTR是常数,指向数据表格的首地址
DPTR的范围是0000H-0FFFFH
变址寄存器A为表格首址到被访问数据的地址偏移量
A的范围是0-255
3. 举例
3.2. 堆栈操作指令的应用
堆栈指令的使用
堆栈指令PUSH和POP常用于子程序、中断服务程序中的现场保护与恢复,且要成对使用
举例
3.3. 十进制调整指令的应用
在实际应用中,通常要进行BCD码加法运算。但由于计算机只能进行二进制运算,BCD码相加时会出现错误的结果
十进制调整指令
DA A
功能:对两个压缩BCD码(一个字节存放2位BCD码)数相加的结果进行十进制调整
举例
AC
辅助进位标志
若低4位向高4位发生进位或借位则AC=1,否则AC=0
在十进制调整指令DA A中要用到
注意
必须用在加法指令后;对其它指令无效
只能对累加器A 的BCD加法结果进行十进制修正,对其他寄存器无效
DA A 指令对C只能置位,不能清0
3.4. 逻辑指令与字节状态操作
逻辑“与”操作的位屏蔽
“ANL”操作常用来屏蔽字节中的某些位
要保留的位用1去“与”(X和1相与为X),要清除的位用0去“与”(X和0相与为0)
例:若(A)=68H,执行ANL A,#0FH指令后,(A)=08H,实现了 高4位清0,低4位保留
逻辑“或”操作的置位
“ORL”操作常用来对字节中的某些位置位
要保留的位用0去“或”(X和0相或为X),置1的位用1去“或”(X和1相或为1)
逻辑“异或”操作的求反
“XRL”操作常用来对字节中的某些位求反
要保留的位用0去“异或” (X和0相异或为X),要求反的位用1去异或(X和1相异或为1)
3.5. 转移指令的应用
相对转移指令中偏移量的确定
SJMP:相对PC当前值跳过一个偏移量rel,转移到目的地址执行程序
rel=目的地址-(转移指令所在地址+转移指令字节数)
rel是一个带符号数的8位二进制补码数,其范围为(-128)-(+127)
散转指令的应用
散转指令是一条无条件转移指令,JMP @A+DPTR可代替众多的判别跳转指令,具有散转功能
运用比较指令实现分支转移
数值比较转移指令(4条)
两操作数相比较,如果不相等,则程序跳转一个偏移量到目的地址执行程序
4. 汇编语言
4.1. 编程语言及汇编语言编程风格
编程语言
机器语言
汇编语言
高级语言
编程语言的特点
汇编程序设计时,应关注以下几点
注释
标号的使用
子程序的使用
堆栈的使用
主程序和子程序之间可能相互影响
用于寄存器、SFR以及内存数据的保护和恢复
伪指令的使用
如赋值、定义字节、定义字等
4.2. 汇编程序设计中的伪指令
1. 起始汇编 ORG(Origin)
格式: ORG nn
功能:给出程序存放的起始地址
注意:所规定的地址必须从小到大,且不可重叠
2. 赋值 EQU(Equal)
格式:字符名称 EQU 数据或表达式
功能:把数据或表达式赋值给字符名称
例:
注意:只能定义一次;需要先定义后使用
3. 定义字节 DB(Define Byte)
格式:标号: DB 字节常数或字符串
8位
功能:将常数或字符串存入从标号开始的连续存储单元中
4. 定义字 DW(Define Word)
格式:标号: DW 字或字串
2*8位
功能:把字或字串存入由标号开始的连续存储单元中,且把字的高字节数存入低地址单元,低字节数存入高地址单元
5. 位地址赋值 BIT
格式:字符名称 BIT 位地址
功能:用于给字符名称赋予位地址
6. 结束汇编 END
格式:END
功能:表示程序的结束
程序的结尾必须要有END语句,而且只能有一条
7. 定义存储器空间 DS(Define Storage)
格式:标号: DS nn
功能:通知汇编程序,在目标代码中,从标号地址开始,保留出nn个存储单元
对于8051微控制器,DB、DW、DS等伪指令是应用于ROM,而不能用于RAM。
8. 伪指令应用举例
4.3. 汇编与调试过程
汇编程序的编辑
用编辑软件完成源程序的编写,扩展名为.ASM
汇编程序的汇编
汇编语言程序的设计过程
汇编程序的调试过程
模拟仿真调试:将目标程序文件在模拟调试软件环境中,模拟程序运行状态的调试。难以对外围电路进行调试
实时目标仿真调试:通过串行口将汇编好的目标程序文件传送到实时在线仿真器中,实时仿真器通过仿真头与目标系统相连。仿真器为目标系统提供了一个可单步、可设断点运行、可修改、可观察运行状态
脱机运行:经实时目标仿真调试通过的系统程序,通过程序写入器写入到目标系统的ROM中,进行脱机试运行
5. 汇编程序设计
5.1. 汇编语言程序设计概述
评价程序质量的标准
执行时间、长度
逻辑性、可读性
兼容性、可扩展性
可靠性
采用汇编语言的优点
直接调用硬件资源
占用内存和CPU少
汇编语言程序设计的步骤
模块划分
模块功能分析
子程序功能和资源确定
子程序编写调试
总程序构建
5.2. 程序设计的结构化
顺序结构
分支结构
单分支结构
位条件转移指令,如:JC、JNC、JB、JNB和JBC等
条件转移指令,如:JZ、JNZ、DJNZ等
多分支结构
散转指令: JMP @A+DPTR
根据A的内容选择对应的分支程序,可达256个分支
比较转移指令:如 CJNE 指令4条
比较两个数的大小,必然存在大于、等于、小于三种情况,因此可实现三个程序分支
循环结构
由初始化、循环体、循环控制和结束四部分组成
循环控制的实现方法
计数循环结构:循环次数已知(初始化中已设定其初值),由循环次数决定循环体的执行次数。常用DJNZ的2条指令进行控制
条件循环结构:常用比较转移指令或条件转移指令
5.3. 基本程序设计
6. 子程序设计
6.1. 子程序设计概述
优点
调用和嵌套
子程序调用
CALL指令自动将断点地址压入堆栈保护,然后将子程序入口地址送PC,实现子程序的调用
子程序返回时,RET指令将使堆栈顶部的断点地址弹出到PC
子程序嵌套
子程序调用其它子程序
编写要点
子程序的第1条指令必须有标号,该标号代表子程序的名称,也是子程序调用指令的符号地址
子程序必须能够正确地传递参数
注意保护现场和恢复现场
6.2. 子程序的参数传递
1. 寄存器法
将入口参数和出口参数存放在约定的寄存器中
MCU的寄存器个数有限,该方法适用于传递较少的参数信息
2. 约定存储单元法
把入口参数和出口参数都放在事先约定好的内存单元中
该方法要用一定数量的存储单元,会增加编程中对变量定义的难度
6.3. 数据保护与恢复
1. 堆栈保护
子程序首先将需要保护的数据依次压入堆栈保存, 返回指令前, 反序弹出堆栈以恢复现场
2. 切换工作寄存器组保护
通过修改RS1、RS0,使主程序与子程序使用不同组别的工作寄存器
3. 内存保护
子程序首先将需要保护的内容,保存到空闲的寄存器或内存单元暂存,返回指令前,从保存处取出以恢复现场
4. 举例
6.4. 子程序设计举例
延时程序
第4章 8051的C语言与程序设计
1. C51的特点
1.1. 结构特点
函数
main
1.2. C51与标准C
相同点
语法规定、程序结构及设计方法
不同点
数据类型
变量存储模式
指针
函数
标准输入输出函数
执行标准输入输出函数之前必须对串行口进行初始化
预处理命令
reg51.h
1.3. 优缺点
优点
易读易编写
缺点
MCU 硬件资源的分配和使用无法清晰知晓,如堆栈区域的设置等
1.4. 编译器
Keil uVision
2. C51基础
2.1. 数据类型
扩展数据类型
1. bit
功能:用于声明一个位变量,其寻址空间在通用RAM中,位地址为00-7FH的位空间
例: bit flag=0 ; //声明一个位变量flag,并初始化为0;
限制
1)一个位不能被声明为一个指针,例: bit *ptr; //非法
2)不能用一个bit类型的数组,例:bit NumArray[5]; //非法
2. sbit
功能:和bit相似,但其所声明的位变量是位于SFR区的可位寻址空间
注意
声明sbit数据类型变量时,“=”表示sbit变量的地址;
声明bit数据类型变量时,“=”表示bit变量的初始值。
3. sfr
功能:用于定义与SFR相关的字节变量
注意:“=”后是80H~FFH之间的常数,即该SFR的地址,不能是表达式
4. sfr16
功能:和sfr相似,用于定义16位的SFR变量
注意:要求低字节和高字节连续存储,在变量定义中出现的是低字节地址
2.2. 存储器类型与存储模式
存储器类型
程序存储器
code
只读ROM:存放程序代码(Code),8051 MCU的最大空间是64KB
内部数据存储器
data
低128B的内部直接寻址RAM空间,寻址范围为00H-7FH,存取速度最快
idata
全部256B的内部间接寻址RAM空间,寻址范围00H-FFH,访问速度比直接寻址慢
bdata
可位寻址的16B内部存储区(20H-2FH),位地址范围为00H-7FH,声明可位寻址的数据类型
外部数据存储器
xdata
通过MOVX @DPTR访问
pdata
通过MOVX @Ri访问
注意:访问内部RAM速度快,应该把频繁使用的变量放置在内部RAM中
存储模式
变量定义格式:数据类型 [存储器类型] 变量名
Small模式: 缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,适用于小程序
Compact模式:缺省变量均位于外部RAM区的一页(256Bytes) 。优点是空间较Small宽裕,速度较Small慢、较large要快
Large模式:缺省变量可放在64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢
存储器类型定义的几个注意点
1. data区空间小。只有频繁用到或对运算速度要求很高的变量才放在data区,比如for循环中的计数值。
2. data区内最好放局部变量。因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数时就释放,由别的函数的局部变量覆盖),可以提高内存利用率。
3. 程序中使用的位标志变量可以定义到bdata中,从而降低内存占用空间。
4. 不频繁用到和对运算速度要求不高的变量应放到xdata区。
5. 如果想节省data空间,编译器应选择large模式,使得未定义存储器类型的变量全部定义到xdata区。最好对所有变量都指定存储器类型。
2.3. 数组与指针
数组
一维数组
格式:数据类型 [存储器类型] 数组名 [常量表达式];
二维数组
格式:数据类型 [存储器类型] 数组名 [常量表达式1] [常量表达式2];
指针
通用指针
格式:数据类型 * [指针变量存储器类型] 指针标识符
数据类型:该指针所指向的变量的数据类型。
指针变量存储器类型:是指针变量本身的存储器类型,可缺省。
特殊指针
格式:数据类型 变量存储器类型 * [指针变量存储器类型] 指针标识符
特殊指针包含了变量存储器类型
特殊指针只能访问其规定的存储空间
通用指针和特殊指针对比
数据类型、速度
通用指针可以用来访问所有类型的变量,即可以不用考虑变量存储在哪个存储空间,使用方便,但执行速度比特殊指针慢
特殊指针比通用指针效率高、速度快
存放所需字节
通用指针的存放需要3个字节,第1个字节用来表示指针所指向变量的存储器类型,第2个字节是指针的高字节,第3字节是指针的低字节
特殊指针指向idata、data、bdata和pdata空间时,只需1个字节保存;指向code和xdata空间时,需要2个字节保存
指针应用
定义内部RAM和外部RAM各一个指针,运用指针取数据赋值
2.4. 函数
定义函数
中断函数
定义:[void] 中断函数名()interrupt 中断号 [using n]
中断号:取值范围为0~31
using n:用于指定中断函数使用的工作寄存器组,n=0-3分别表示选择第0-3组。可缺省,表示中断函数与调用函数采用相同的工作寄存器组
库函数
本征函数
定义在intrins.h头文件中
非本征函数
包括6类重要的库函数
stdio.h流输入/输出函数缺省为通过8051的串口读写数据,因此在使用stdio.h库中的函数之前,应先对串行口进行初始化
2.5. 预处理命令
宏定义
#define 标识符 常量表达式
带参数的宏定义,其形参一定要带括号
文件包含
#include <文件名>:常用于包含C51编译器提供的标准头文件
#include “文件名”:常用于包含用户自己编写的头文件
条件编译
3. C51的流程控制
3.1. 顺序结构
3.2. 选择结构
if
swich case
3.3. 循环结构
while
do-while
for
4. C51程序设计方法
4.1. 注释
4.2. define
4.3. 命名规则
常量:全部大写
变量:小写字母开头,多个单词下划线,其他单词首字母大写
函数:多个单词首字母大写
4.4. 程序结构
主程序必须是无限循环程序,可用while(1)、do while(1)或for语句实现
5. 模块化程序设计与举例
5.1. 在函数前面添加extern修饰符,表明此函数是一个外部接口函数,可以被主函数和其它模块调用
6. KEIL C51环境及调试举例
第5章 中断系统
1. 中断系统概述
中断概念
硬件改变CPU程序运行方向
名词集释
主程序(调用程序):原来运行的程序
中断服务程序:中断之后执行的处理程序
断点:主程序被中断的位置
中断源:引起中断的原因或能发出中断申请的来源
中断请求:中断源要求服务的请求
中断服务程序的调用过程是计算机系统硬件自动完成的(调用无法预知)
中断作用
分时操作
协调快速CPU与慢速外设互相配合
实时处理
故障处理
电源掉电、通信故障等
中断源
外部设备
输入/输出设备,如打印机、按键等
内部设备
定时器、串行口
故障源
掉电故障、硬件故障、运算错误、程序运行故障等
控制对象
如电压、温度等检测量超过上下限时,继电器、开关
中断系统的功能
中断的允许和禁止
中断响应和返回
保护断点
保护现场
恢复现场
回复断点
中断优先级与中断嵌套
2. 8051微控制器的中断系统
中断源
外部中断
INT0 和 INT1两个外部中断源
低电平触发、下降沿触发
定时中断
T0、T1溢出中断
串行口中断
当串行口发送完一个字节数据或接收到一个字节数据时,产生中断请求
中断入口
TX 和 RX 是串行口中断的发送中断请求和接收中断请求,这两个请求共用一个中断源
中断的控制
1. 定时器/计数器控制寄存器 TCON(Timer Control)
可位寻址的SFR
2. 串行口控制寄存器 SCON(Serial Control)
可位寻址
串行口的中断标志 RI 和 TI
中断标志的清除
T0、T1中断标志
中断方式:TF0、TF1一直保持到CPU响应中断,并由硬件自动清0
查询方式:需软件清0
外部中断标志
下降沿触发:IE0、IE1一直保持到CPU响应中断,并由硬件自动清除
低电平触发:只有当中断引脚变为高电平时,才会消除
串行口中断标志
中断方式/查询方式都必须通过软件清除
3. 中断允许控制寄存器 IE(Interrupt Enable)
可位寻址的 SFR
4. 中断优先级寄存器 IP(Interrupt Priority)
可位寻址
3. 中断处理过程
自主操作过程
中断请求的自动查询
中断响应时的自主操作
中断返回时的自主操作
中断响应条件
中断响应过程
中断响应时间
最短为 3 个机器周期,最长为 8 个机器周期
响应中断与调用子程序的异同
相同点
中断当前,转去执行
由硬件自动把断点地址压入堆栈
不同点
中断请求随机,子程序调用由程序设计决定
响应中断后,转去执行存放在相应中断入口地址处的中断服务程序;子程序的地址由程序设计决定
中断响应受控,响应时间可变;子程序响应时间固定
中断服务程序的返回指令是RETI,子程序的返回指令是RET
4. 中断程序设计
中断初始化
CPU中断控制位
中断源的中断控制位
中断源的优先级别
外部中断请求的触发方式
相关中断源的初始化(如定时计数器/串行口)
汇编中断服务程序设计
C51的中断函数和处理
用 C51 编写中断函数时,编译器会自动利用堆栈保护和恢复ACC,B,DPH,DPL,PSW。无需汇编程序一样
编写中断函数注意点
中断函数不能有形参
不能有返回值,返回值类型必须为void
任何函数均不能调用中断函数
若中断函数中调用函数,则该函数必须使用和该中断函数相同的寄存器组
对于不使用的中断,为提高系统的可靠性,应编写一个空的中断函数
void exter0_ISR() interrupt 0 { }
中断程序设计举例
5. IO端口扩展外部中断源
第6章 定时器/计数器
1. 定时器计数器概述
1.1. 原理
加法计数器
减法计数器
1.2. 功能
定时
软件定时:通过执行一段程序(如延时程序)实现定时,需消耗CPU时间资源
硬件定时:通过定时计数器实现,无需消耗CPU时间资源
计数
利用定时器/计数器对外部脉冲计数和统计
1.3. 应用
2. 定时器计数器基础
2.1. 定时器计数器的结构与控制
结构
2个可编程的16位定时/计数器T0和T1,加法计数器
组成结构
6个SFR、内部总线、2个引脚
控制
方式寄存器TMOD
89H,不可位寻址
C/T:功能选择位
0定时,1计数
GATE:门控位
与INTi信号相结合,可以实现外部脉冲高电平宽度的测量
M1、M0:工作方式(0~3)选择位
控制寄存器TCON
88H,可位寻址
TF0、TF1:T0、T1溢出标志位也称为中断标志位
TR0、TR1: T0、T1的运行(启停)控制位
C/T=0:定时模式
首先设置T0、T1寄存器的计数初值
再启动定时器工作(闭合K1)
当计数器不断加1到溢出时,中断标志TFi置位,表示定时器溢出
C/T=1:计数模式
设置T0、T1寄存器的计数初值为0
再启动定时器工作(闭合K1)
计数器累计外部脉冲,可以实现外部脉冲频率的测量
计数模式对外部脉冲的要求
每个机器周期采样一次引脚状态,检测下降沿
高/低电平宽度均应大于一个机器周期TM
故外部脉冲的最高频率1/(2TM)=系统晶振频率1/24
2.2. 定时器计数器工作方式
共4种,用TMOD的M1、M0进行选择
方式1
THi和TLi构成16位的加1计数器
最大计数值为2^16=65536
方式2
TLi配置成一个独立工作的8位加1计数器,THi为重装载初值寄存器
最大计数值为2^8=256
当TLi产生溢出时,一方面使溢出标志TFi置1,同时把THi中的8位数据重新装入TLi中,方式2不存在定时误差
2.3. 初始化
初始化步骤
1. 确定工作方式,即给TMOD赋值
2. 预置定时初值或计数初值
3. 中断设置(给IE赋值),允许或禁止定时计数器的中断
4. 启动定时计数器,令TCON中的TR0或TR1为1
定时/计数初值的确定
计数初值=最大计数值M的补码
设晶振频率为12MHz,则机器周期为1us
方式1:M=65536
方式2:M=256
计算
2.4. 计数器的飞读
相位误差
读高8位寄存器时,恰逢低8位寄存器溢出
读取的低8位寄存器的值就会出现粗大计数误差
飞读
先读取THi值,再读TLi值,然后再重新读取一遍THi
若两次THi值相同,表示读取的结果正确
若不相同,则再重复上述过程
程序
2.5. 定时的实现方法
软件定时
只有几个机器周期:若干NOP指令
较长的定时:延时子程序
定时器定时
定时器方式2(8位):<256个机器周期
定时器方式1(16位):256~65536
更长时间:硬件定时+软件定时
不同定时时间
3. 实际应用
3.1. 定时方式的应用
3.2. 计数方式的应用
3.3. 脉冲宽度的测量
3.4. 扩展外部中断
3.5. 实时时钟的设计
第7章 串行总线与通信技术
1. 通信概述
1.1. 总线与通信
1.2. 通信协议与校验方式
2. UART
2.1. UART的组成结构
2.2. UART的工作方式
2.3. UART的波特率
2.4. UART的应用
3. RS232/RS485通信技术与应用
4. I²C总线
4.1. I²C总线概述
4.2. I²C总线的操作
4.3. I²C总线的软件模拟技术
5. SPI串行接口
6. 1-Wire总线
6.1. 1-Wire总线概述
6.2. 1-Wire总线的操作方式
6.3. 1-Wire总线应用实例
第8章 人机接口技术
1. 键盘基础知识
2. 键盘接口
2.1. 独立式键盘接口技术
2.2. 矩阵式键盘接口技术
2.3. 段码式LED接口技术
2.4. 点阵式LED接口技术
3. LCD模块
3.1. 液晶显示原理与LCD模块
3.2. LCD控制器ST7920
3.3. ST7920控制的12864LCD模块
3.4. LCD程序设计
第9章 模拟接口技术
1. 模拟输入输出通道
1.1. 模拟输入通道基本结构
1.2. 模拟输出通道基本结构
1.3. A/D转换器及其特性
1.4. D/A转换器及其特性
2. A/D转换器与接口技术
2.1. 并行A/D转换器
2.2. 串行A/D转换器
2.3. 其他A/D转换器
2.4. A/D转换器的应用
3. D/A转换器及接口技术
3.1. 并行D/A转换器
3.2. 串行D/A转换器
3.3. DA转换器的应用
第10章 数字接口技术
1. 数字信号调理技术
2. 脉冲信号
2.1. 脉冲信号接口形式
2.2. 脉冲信号测量技术
3. 驱动技术
3.1. 功率驱动技术
3.2. 步进电机驱动技术
3.3. 直流电机驱动技术
3.4. 闭环系统的PID控制