导图社区 单片机基本框架
想要学习单片机,你需要学习哪些知识呢?本思维导图一一为你介绍,包含MCS89c51的结构、C51语言、单片机应用系统的设计与开发、中断系统、定时/计数器、串行口、接口技术等一系列知识点,为你学习单片机指明方向!
编辑于2021-05-09 17:50:12单片机
1. 单片机结构
1. 内部结构
8位CPU,ROM(程序存储器),RAM(数据存储器128B),定时/计数器(16位), 串/并行i/O口,中断系统,特殊功能寄存器(26个)
2. 存储器
片内ROM(程序)4kb:0000H~0FFFH
片外ROM拓展(64kb):0000H~FFFFH
EA=1时,片内,EA=0时,片外,
ROM几个特殊地址
0000H,复位操作后程序入口
0003H,外中断0程序入口
000BH,定时器0程序入口
0013H,外中断1程序入口
001BH,定时器1程序入口
0023H,串口中断程序入口
片内数据(RAM低128字节)128B:00H~7FH
00H~1FH(32单元):寄存器区
4组,由PSW的RS1、RS0切换选择当前的工作寄存器区00/01/10/11
通用寄存器R0~R7(特指选中的寄存器组里8个单元)
R0,R1作间接寄存器使用 地址为20H~2FH可进行位寻址或字节寻址
堆栈区(初始sp指07H) 堆栈功能保护断点和现场保护
3. 特殊功能寄存器(共26个,高128字节.80H~FFH)
A累加器:AUL单元的输入数据源之一和CPU的数据中转站 自带全零标志Z,A=0时,Z=1(用于JZ)
B,用于乘除法
PSW Cy进位标志位 Cy=1/0进位或借位 Ac辅助进位标志位Ac=1/0BCD码运算当D3向D4产生进位或借位 F0用户使用的标志位,通过指令置1或清0控制程序的流向 RS1和RS04组工作寄存器选择控制位
4. 时钟和复位电路
外部震荡:信号同步
内部震荡
(时钟)震荡周期:T(osc)=1/f(osc) 单片机时钟控制信号的基本时间单位
状态周期:2*震荡周期
机器周期:12*震荡周期:T(cy)=12/f(osc)
指令周期:(1~4)*机器周期 单字节和双字节一般为单机器周期和双机器周期
复位
上电复位 RST引脚上的高电平必须大于复位所要求的高电平时间
人工按键复位 按键复位通过RST端经两个电阻对电源VCC接通分压产生的高电平实现
2. 指令系统
寻址方式
立即寻址
指令操作码后紧跟一字节或两字节操作数,用#表示
直接寻址
指令中直接给出操作数所在的存储单元的地址
直接使用特殊寄存器的名字,如P0(80H)
寄存器寻址
B在乘除法时寄存器寻址(mul A B),其他为直接寻址
A既可寄存器寻址又可直接寻址,直接时写ACC(push ACC)
寄存器间接寻址 (寄存器内容里是数据的地址)
R0,R1(内部RAM),(mov A,@Ri)
内部MOV
DPTR(外部RAM),(movx A,@DPTR)
外部MOAX
若外部用Ri,地址低8位在Ri,高8位P2口
变址寻址(ROM)
基址地址寄存器+变址寄存器间接寻址
只读不写,只能访问程序存储器(64B)
pc指下一个即将运行的指令
pc不能人为赋值
相对寻址(相对转移指令)
源地址+偏移量=转移的目标地址
rel(8位有符号数)的范围:80H~7FH
位寻址(片内RAM中20H~2FH) 操作8位二进制数
传送指令
外部RAM,只能是A,movx
程序ROM,只能是A,只读不写,读到A里
堆栈操作(内部RAM) (字节操作,直接寻址)
入栈:SP先+1,在把值给新的SP指的地址
出栈:把数据弹出后,sp再减1
复位后SP=07H
内部RAM,只有00H~7FH,不能越界
后进先出
算数运算和逻辑运算
对PSW的影响
Cy(进/借位标志):乘除后,C=0
Ac(辅助进位标志位):BCD码运算调整,当D3位向D4位产生进位或错位 Ac=1/0
F0(用户使用标志位):指令使它置1或清0
RS1,RS0(4组工作寄存器区选择控制位1和位0)
OV(溢出标志位)
执行算术指令使,结果溢出OV=1
P(奇偶标志位):A中1的个数为奇时,P=1;A中1的个数为偶时,P=0
运算符
& 按位逻辑与
|按位逻辑或
^按位异或
~按位取反
<<按位左移 高位丢弃,低位补0
>>按位右移 高位补0,低位丢弃
x++ ++x
x-- --x
&& 逻辑与(双目运算符)
||逻辑或(双目运算符)
!逻辑非(单目运算符)
C51语言的分支与循环程序结构
控制语句
if(表达式){语句}
else{}
switch(表达式){ case 常量表达式1:{语句1;}break;
while(表达式){} do{}while(表达式) for(表达式1;表达式2;表达式3){}
while(1) for(;;) do{}while(1)
数组
一维数组 类型说明符 数组名【元素个数】
二维数组或多维数组 类型说明符 数组名【行数】【列数】
字符数组 char 数组名称【数组元素】={字符串}
指针 数据类型*指针变量
函数
标准库函数
无参函数 无参数输入也不返回结果给调用函数
有参函数 提供实际的输入参数
空操作指令
NOP:PC=PC+1,只消耗一个机器周期时间
宏定义和文件包含
宏定义
预处理指令 #define 宏替换名 宏替换体
文件包含 #include<文件名>
库函数
3. I/O口
接口
P0口
准双向I/O口 输入输出口
扩展时,作为低8位地址/数据总线,时分复用
读入时,对其写1
输出需接上上拉电阻,可驱动8个LS型TTL负载
P1口
可驱动4个LS型TTL负载 准双向I/O口 输入输出口
P2口
可驱动4个LS型TTL负载 准双向I/O口 输入输出口
扩展时,作为高8位地址总线
P3口
可驱动4个LS型TTL负载 准双向I/O口 输入输出口
第二功能(大部分)
P3.0为RXD,P3.1为TXD,(串口输入R输出T)
P3.2外中断0,P3.3外中断1
P3.4定时器0,P3.5定时器1
P3.6外部拓展写,P3.7外部拓展读
4. 中断系统
中断类型
外部中断0
定时器/计数器T0
外部中断1
定时器/计数器T1
串行口中断
IE(中断允许寄存器)
总开关EA
EA,,,ES,ET1,EX1,ET0,EX0
TCON(中断标志位及中断方式选择)
TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0
IT为外触方式,1为跳沿触发,0为低电平
TF为定时器/定时器的溢出中断请求标志位
IP(中断优先级别控制器)
自然顺序:外部中断0>定时器/计数器T0>外部中断1>定时器/计数器T1>串行口中断
PS,PT1,PX1,PT0,PX0
四个阶段
中断请求
人工
中断响应
CPU
中断服务
人工
中断返回
RETI
中断编程
EA和interrupt的中断号选择
外部中断触发方式选择
预置IP优先级
保护现场using和工作寄存器区的选择
5. 定时/计算器
TMOD(定时器工作方式寄存器)
GATE,C/T,M1,M0,GATE,C/T,M1,M0
C/T:(1/0):C计算,T定时 GATE一般取0 M1M0:工作方式选择
整体赋值,不能位操作
工作方式
方式0
13位
方式1
16位
方式2
8位(还有高8位装初值) 非一次性
方式3(仅定0)
一次性
TL0(定时/计算),TH0(定时)
初值的计算
计数
2^n-初值=要计的次数
定时
(2^n-初值)*机器周期=要定的时间,(机器周期=12/fosc)
初值装入
0(13位)
初值高8位入TH0,低5位补零齐入TL0
1(16位)
初值高8位入TH0,低8位入TL0
2(8位)
初值一共8位,同时入TH0和TL0
6. 串行通信
波特率
串行口每秒发送数据的位数
TI发送前清0,发送结束后软件自动置1
RI接收前清0,接收结束后软件自动置1
SCON(串行控制器)
SM0,SM1,SM2,REN,TB8,RB8,TI,RI
SM1,SM0方式选择 REN接收允许位 TI,RI:发送/接收中断标志位
PCON(只用到最高位SMOD倍增控制位)
SMOD:0不加倍,1波特率加倍
不能位操作,整体赋值
工作方式
方式0(8位)
RXD,可发送可接收
TXD输出波特率固定为fosc/12
方式1(10位)
RXD,仅接收
TXD输出波特率可变,波特率=(2^SMOD/32)*(fosc/(12*(256-初值)))
方式2(11位)
RXD,仅接收
TXD输出波特率固定为(2^SMOD/64)*fosc
方式3(11位)
RXD,仅接收
TXD输出波特率可变,波特率=(2^SMOD/32)*(fosc/(12*(256-初值)))
7. 总线与系统扩展
I2C总线是一个双向的两线连续总线,提供集成电路(ICs)之间的通信线路。
特征
1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL
2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器
3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏
4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s
5、连接到相同总线的IC 数量只受到总线的最大电容400pF 限制
数据有效
在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,S DA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变
起始停止
SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件
SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件
起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态 ,在停止条件的某段时间后总线被认为再次处于空闲状态
子主题
如果产生重复起始条件而不产生停止条件,总线会一直处于忙的状态,此时的起始条件(S)和重复起始条件(Sr) 在功能上是一样
数据传送的应答
|2C总线在传送每一字节数据后都须有应答信号A,在第9个时钟位上出现,与应答信号对应的时钟信号由主机产生。这时发方须在这一时钟钟位上使SDA线处于高电平状态,以便收方在这一位送出低电平应答信号A
子主题
当主机接收来自从机的数据时,接收到最后一个数据字节后,必须给从机发送一个非应答信号使从机释放数据总线,以便主机发送一个终止信号,从而结束数据的传送
8. A/D和D/A转换器
D/A转换器原理
将数字信号转换成模拟信号的电路叫做数/模转换电路
A/D转换器原理
将模拟信号转换成数字信号的电路叫做模/数转换电路
D/A转换器
倒T形
流入每个2R电阻的电流从高位到低位按2的整数倍倍减 I3= V(REF)/2R I2= V(REF)/4R I1= V(REF)/8R I0= V(REF)/16 R
4位权电流
Di=1时,开关Si接运放的反相端; Di=0时, 开关Si接地
A/D转换器
并联比较型
逐次逼近型
双积分型
性能
分辨率
分辨输入模拟量最小变化程度
转换时间或转换速率
完成一次转换所需的时间
转换精度
实际与理想转换器在量化值上的差值
引脚
A/D
①IN0~IN7-8路模拟信号输入端
②D0~D7-转换完毕的8位数字量输出端
③C、B、A与ALE-C、B、A端控制8路模拟输入通道的切换,与单片机的3条地址线相连。C、B、A= 000~111分别对应IN0~IN7通道地址。各路模拟输入通道之间的切换由改变加到C、B、A上的地址编码来实现。ALE为ADC0809接收C、B、A编码时的锁存控制信号
④OE、START、CLK-OE为转换结果输出允许端:START为启动信号输入端; CLK为时钟信号输入端
D/A
①DI7~DI0--8位数字信号输入端,接收单片机发来的数字量。
②ILE、CS(非)、WR1(非)当ILE=1,CS(非)=0, WR1(非)=0时,即M1=1,第一级的8位输入寄存器被选中,待转换数字信号被所存到第一级8位输入寄存器中
③XFER(非)、WR2(非)一当XFER(非)=0, WR2(非)=0时, 第一级的8位输入寄存器中待转换的数字进入第二级的8位DAC寄存器
④IouT1- -D/A转换器电流输出1端,输入数字量全为1时,IouT1最大,输入数字量全为0时,IouT1最小
⑤IouT2 -D/A转换器电流输出2端,IouT2+ IouT1=常数
⑥Rfb-I-V转换时的外部反馈信号输入端,内部已有反馈电阻Rfb,根据需要也可外接反馈电阻