导图社区 单片机基本框架
单片机从硬件到具体软件的学习思维导图。
编辑于2020-09-15 21:00:40单片机
1. 单片机结构
1. 内部结构
cpu,ROM,RAM,定时/计数器,串/并行i/O口,震荡/定时电路
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组,由psw00/01/10/11选择
通用寄存器R0~R7(特指选中的寄存器组里8个单元)
R0,R1作间接寄存器使用
堆栈区(初始sp指07H)
3. 特殊功能寄存器(共21个,高128字节.80H~FFH)
A累加器:自带全零标志Z,A=0时,Z=1(用于JZ)
B,用于乘除法
PSW
4. 时钟和复位电路
外部震荡:信号同步
内部震荡
(时钟)震荡周期:1/f(osc)
状态周期:2*震荡周期
机器周期:12*震荡周期:12/f(osc)
指令周期:(1~4)*机器周期
复位
上电
开关
5. 引脚
2. 指令系统
常用符号
Rn(0~7) Ri(0/1) dir(8位直接字节地址,片内RAM和SFR) #data:二进制B,16进制H,十进制(空白) $:是出现的当前指令的首地址
寻址方式
立即寻址
源操作数前有#都是
直接寻址
直接给出地址(内部数据存储器)
直接使用特殊寄存器的名字,如p0(80H)
寄存器寻址
B在乘除法时寄存器寻址(mul A B),其他为直接寻址
A既可寄存器寻址又可直接寻址,直接时写ACC(push ACC)
寄存器间接寻址 (寄存器里是数据的地址)
R0,R1(内部RAM),(mov A,@Ri)
内部mov
DPTR(外部RAM),(movx A,@DPTR)
外部movx
若外部用Ri,地址低8位在Ri,高8位P2口
变址寻址(ROM)
DPTR+PC+A=操作数地址
只读不写,且目的操作数只能是A(mov A,@A+DPTR/PC)
pc指下一个即将运行的指令
pc不能人为赋值
采用movc(查表)
相对寻址
pc+偏移量=转移的目标地址
rel(8位有符号数)的范围:80H~7FH
位寻址(片内RAM中20H~2FH)
传送和交换指令
传送
外部RAM,只能是A,movx
程序ROM,只能是A,只读不写,读到A里
堆栈操作(内部RAM) (字节操作,直接寻址)
入栈:sp先+1,在把值给新的sp指的地址
出栈:把数据弹出后,sp再减1
复位后SP=07H
内部RAM,只有00H~7FH,不能越界
后进先出
交换
XCH,和其他交换一个字节
XCHD,交换低半字节(低4位)
SWAP,自己高4位和低4位交换
必须有一个操作数是A
算数运算和逻辑运算
对PSW的影响
C(进/借位标志):乘除后,C=0
A
F
RS1,RS2
OV
乘积大于255/除法中B为0时,OV=1
P:A中1的个数为奇时,C=1
指令
ADD,ADDC(借位加)
SUBB(借位减,没SUB)
ANL:逻辑与
ORL:逻辑或
XRL:逻辑异或
自加:INC
自减:DEC
对标志位不影响
十进制调整指令(DA A)
只能作用在A里
对A的专门指令
CLR A(清零) CPL A(按位取反) RL A(左环移1位) RLC A(代进位左环移1) RR A RRC A
乘法:MUL AB(高8位在B,低8位在A)
除法:DIV AB(余数在B,商在A)
控制转移
无条件
长转移
LJMP addr16(标号)
短转移
AJMP addr11(标号) (距离不能超过2kb)
间接转移
JMP @A+DPTR
相对转移
SJMP rel
rel=(目的地址-pc)补
条件
JZ,JNZ
减1不为0,DJNZ (减1,结果回送,再判是否为0)
CJNE A,dir,rel(3字节,pc+rel)
影响C,不影响A和dir的值
绝对转移
调用
调用结束为RET
长调用:LCALL(PC=AS+3)
短调用:ACALL(PC=AS+2)
16位,高5位必须一致,即距离不超过2kb
子程序返回指令RET
中断返回指令RETI
空操作指令
NOP:PC=PC+1,只消耗一个机器周期时间
位操作
对象:C,RAM中20H~2FH字节的地址,SFR中11个
子主题
mov
mov C,bit(不能同时是位)
CLR清零
CPL位取反
SETB(位置1)
3. 程序设计
伪指令
org(定义起始地址)
字节定义:DB
字定义:BW
高位低地址,低位高地址(顺序排列)
保留字节:DS(留空位)
等值指令(EQU)
位定义:标号 BIT 位地址
子程序
ACALL和LCALL
程序分类
顺序
分支
循环
子程序
4. 输入输出接口P0~P3
接口
p0口
输入输出口
扩展时,作为低8位地址/数据总线,时分复用
读入时,对其写1
输出接上上拉电阻
p1口
输入输出口
p2口
输入输出口
扩展时,作为高8位地址总线
p3口
输入输出口
第二功能(大部分)
p3.0为RXD,p3.1为TXD,(串口输入R输出T)
p3.2外中断0,p3.3外中断1
p3.4定时器0,p3.5定时器1
p3.6外部拓展写,p3.7外部拓展读
5. 中断系统
中断类型
外0
定0
外1
定1
串行口
IE(中断控制)
总开关EA
EA,,,ES,ET1,EX1,ET0,EX0
TCON(中断标志位及中断方式选择)
TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0
IT为外触方式,1为下降沿,0为低电平
TF为定时器溢出标志位
IP(优先级别控制器)
自然顺序:外0>定0>外1>定1>串行口
PS,PT1,PX1,PT0,PX0
四个阶段
中断请求
人工
中断响应
机器
中断服务
人工
中断返回
RETI
中断编程
流程注意
EA,和小开关
外部中断触发方式选择
预置IP优先级
保护现场
6. 定时/计算器
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
7. 串行通信
波特率
每秒传送数据的位数
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-初值)))
8. 总线与系统扩展