文章目录
嵌入式系统复习(基于51单片机的汇编)
计算机的五大组成内容包括:控制器(CU)、运算器(ALU)、存储器(Memory)、输入设备(Input)和输出设备(Output)
第二章-第四章:典型的嵌入式系统
一、哈佛雨冯诺依曼体系的比较
-
哈佛
- 具有独立的数据总线和程序总线
- 可以同时读取数据和写入数据
- 允许执行一条指令的同时获取下一条指令
-
冯诺依曼
- 共享一条通用总线(数据总线和程序总线在同一条总线上公用)
二、大端模式、小端模式
小端:数据低字节存储在存储器的低地址
大端:低字节存储在高地址
三、存储器
- 程序存储器(ROM)
- 一次可编程存储器
- PROM
- 不可编程只读存储器
- MROM(一旦写入后任何人无法改变)
- 可擦除
- EPROM(光造擦除)
- EEPROM(电擦除)
- 一次可编程存储器
- 读写存储器/随机存储器(RAM)(直接存储的)可访问任意位置的数据
- 动态RAM(以电荷i形式存储)触发器
- 静态RAM(以电压形式存储)MOS管和电容
- 步进电机的旋转方向
四、通信协议
-
iic
- 半双工、同步、双向
- 两条总线 (CLK SDA)
-
SPI
- 同步 双向 全双工
- 四线
-
UART
- 异步串行传输方式
-
1线接口
- 半双工、异步通信
- 支持单主多从
- 一条总线DQ
-
USB总线
-
一对多 最多127
-
串行总线 有线的高速串行总线
-
使用包格式传输数据
-
有不同的标准实现主机控制接口
- 开放主机控制接口 OHCI
- 通用主机控制接口 UHCI
-
abc型 A:连主 B连从 C都连
-
控制(发送命令) 批量(发送数据块) 同步 中断(轮询技术,周期性查找USB设备是否需要发送数据)四总不同类型数据传输
-
-
IEEE 1394
- 不需要主设备
- 两对差分数据传输线
- TPA+接TPB+ -接-
-
红外接口 IRDA
- 半双工 无线 串行
- 点对点 点对多
第五章:51单片机的特性
51的特点
- 5个中断源(2个外部中断、2个定时器中断和1个串口中断)
- 中断两个优先级
- 每个中断分配8字节代码空间
- 8位CPU 具有布尔处理能力
- 内建晶振电路 自己提供时钟源
- 32个通用IO口 分为四组 每组8个
- 两个16位的定时器单元
- 1个UART通信口
- 可存储4K字节的程序存储器
- 128字节的数据存储器(分为内部和为外部数据存储器)
- 128字节专用功能寄存器空间
- 16位的地址总线
存储器组织-程序空间
通过EA引脚来决定程序运行空间
- EA=1 从片内运行到oFFFF (4K)的空间 然后从片外扩展的存储器开始运行1OOOH开始
- EA=0 直接从片外扩展的存储器开始运行 类似于FLASH
数组存储器
- 分为内部数据存储器和128字节的SFR
- SFR不能作为通用的数据存储器使用 只能作为专用功能存储器
- 内部数据存储器地址范围 OOH-7FH 128字节的大小
- 采用16位的数据指针保持要访问的外部数据存储器的地址 刚好(64KB)
- 外部数据存储器使用控制信号RD 和 WR信号线控制读写
- 内部数据存储器的低32字节组成乐 4组 8个寄存器 RO-R7(通用寄存器)
- 接下来的16字节为位寻址区,16字节共128位的地址可寻
- 16的字节地址和128位的位地址共享存储空间(如图)
特殊专用功能存储器 SFR
- 128字节
- 包括 锁存器 状态与控制位 定时器控制位 计数值寄存器 CPU寄存器 堆栈指针 累加器A等等
- 有些寄存器要按字节地址进行访问 有些可以细化到按位(0H和8H结尾的都可以)
CPU寄存器-累加器A(地址为EOH)
程序状态寄存器 PSW (地址为DOH)
反映了累加器的操作状态和控制通用寄存器块的选择(如图)
比较重要的位:通俗解释如下:
- CY位: 进行8位的加法或减法时,最高位需要借位或进位,置为一
- AC位: 加法时位三向位四进位 置为一
- RS0 RS1位 选择通用寄存器的地址空间
程序计数器 PC:记下将要执行程序指令的位置
堆栈指针 SP
存储当前堆栈位置,初始值是O7H
通用寄存器 RO-R7
- 四组 但是同时只有一组能够使用
- 由PSW中的 RSO 和RS1位选择用哪一组
- 上电后默认选择第0组寄存器
51单片机的执行速度
- 指令的执行包括取值、译码及执行活动
- 每个机器周期包括6个状态 S1-S6
- 每个状态包含两个时钟周期
- 一个指令一搬包含1-4个机器周期去执行
- 单周期需要12个时钟周期
端口(用的是SFR寄存器)
-
51单片机包含32个IO线 分为四组端口 每个端口有8个IO线
-
每个IO线都有输出驱动和输入缓冲
-
P0端口
- 双向,并且用于访问外部存储器的低8位地址/数据复用总线
- 每个引脚有一个D锁存器
- 做输入时需要外加上拉电阻
-
P1端口
- 做输入时,需要先向端口锁存器写入1
- 上电初始值为0FFH
-
P2端口
- 用于访问外部存储器的高8位地址
- 访问外部存储器时,不能再作为通用IO口进行使用
- 上电初始值位OFFH
-
P3端口
- 双向端口,可进行复用
- 实现复用功能时,P3 SFR的相应位需要设置为1
定时器
- 51单片机中有两个可编程的定时器/计数器
- 可以选择作为定时器还是计数器来使用
- 作为定时器时:有四种工作模式可以选择
- 00 13位定时器/计数器
- 01 16位定时器/计数器
- 10 8位自动重载计时器
- 11 仅适合TO,分成两个8位定时器/计数器
8051串行口
-
串行口有四种工作模式,波特率有的固定,有的由片内的定时器/计数器产生
-
接受发送数据均可触发中断
-
有两个独立的缓冲器SBUF 发送只能写入、接收只能读出 俩个公用一个字节地址 99H
-
串行口控制寄存器SCON(地址为98H)
- TI发送中断标志位 TI=1时申请中断 必须软件清0
- REN 允许串行接受位
- RI接收中断标志位,接受到第8位数据由硬件置1
- 四种波特率的确定
- 首先SMOD为 串行口的特殊功能寄存器PCON的最高位
- 方式1 波特率=2^SMOD/32*定时器1的溢出率(定时器1可通过编程来确定)
- 方式2 波特率=2^SMOD/64*振荡器频率
- 方式三的比特率确定方式和方式1相同
中断系统
- 首先进行中断使能 IE字节 地址为(A8H)
- 通过TCON寄存器来确定中断方式
- 设置IP位 来进行中断优先级的确定(总共两位优先级)
- 同一个优先级中,有另一个辅助优先结构
-
中断阻止的条件
第六章:51单片机程序编写
寻址指令
立即寻址
move A,#1200H ;相当于把1200值直接给A
直接寻址:直接寻址的可寻址空间只能是内部RAM(00H-7FH)128个字节
move A,40H ;相当于直接去40H这个字节的地址里去找数据赋值给A
寄存器寻址是把操作数存放在指定的寄存器中;
M0V A,R1;该指令的功能是将R1中的数据传送到累加器A中,源操作数和目标操作效都采用了寄存器寻址
间接寻址:(间接寻址可以访问外部存储器RAM)
-
对内部数据存储器RAM进行寄存器间接寻址时,可使用R0或R1作为数据指针;
-
若对外部数据存储器RAM进行寄存器间接寻址时,可使用R0、R1和DPTR作为数据指针,为了区别于寄存器寻址,当寄存器作为间接寻址时,在其前面冠以符号@
范例如下
MOV A,@R0
基址加变址寻址(索引寻址):
- 在这种寻址方式中,把数据指针DPTR和程序计数器PC作为基
址寄存器,把累加器A作为变址寄存器,由一个基址寄存器的内容加
上变址寄存器的内容之和作为操作数地址
有以下三种:
MOVC A,@A+DPTR
MOVC A, @A+PC
JMP @A+DPTR
助记符“MOVC”表示访问的存储器为程序存储器。这两条指令常用于访问程序中的数据表格
堆栈指令:
PUSH direct
POP direct
累加器A与外部数据存储器传送指今:
- 这组指令的功能是累加器A和外部RAM存储器或I/O的数据相互传送
查表指令:
MOVC A,@A+PC
这条指令以PC作基址寄存器,A的内容作为无符号整数
和PC的内容(下一条指令的起始地址)相加后得到一个16位的
地址,由该地址指出的程序存储单元的内容送到累加器A
字节交换指令:
XCH A,Rn
XCH A,direct
XCH A,@Rn
这组指令的功能是将累加器A的内容和源操作数的内容相互交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等方式
半字节交换指令:XCHD
- 累加器的低4位与内部RAM低4位交换。
- SWAP A (累加器的低4位与累加器的高4位交换)
8051处理器不能在两个通用寄存器之间传送数据
能互相传数据一些的有如下:
算术操作类指令
- 算术执行的结果将使进位©,辅助进位
(AC),溢出(OV)3种标志置位或复位,但是加1
和减1指令不影响这些标志
加法指令:
ADD A,Rn
- 如果位7有进位输出,则置“1”进位标志C,否则清“0”C;
- 如果位3有进位输出,置“1”辅助进位标志AC,否则清“0”AC;
- 如果位6有进位输出而位7没有进位,或者位7有进位输出而位6没有,则置位溢出标志位OV,否则清“0”OV。
带进位加法指令:
ADDC A,Rn ;
除了加Rn后还会将CY位也加进去
增量指令:
INC A;
INC DPTR 是16位数加1指令。
指令首先对低8位指针DPL的内容执行加1的操作,当产生溢出,就对DPH的内容进行加1操作,并不影响标志
十进制调整指令
DA A
带进位减法指令:
SUBB A,Rn
-
这组带进位减法指令是从累加器中减去指定的变量和进位标志,结果存在累加器中。
-
如果位7需借位则置位C,否则清“0”C;
-
如果位3需借位则置位AC,否则清“0”AC;
-
如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置位溢出标志位OV,否则清“0”OV
-
减量指令:
DEC A
-
乘除法指令
MUL AB
- 功能是把累加器A和寄存器B中的无符号8位整数相乘,
其16位积的低位字节在累加器A中,高位字节在B中。 - 如果积大于255,则置位溢出标志位OV,否则清
“0”OV。进位标志位总是清“0”
- 功能是把累加器A和寄存器B中的无符号8位整数相乘,
-
除法:
DIV AB
- 该指令的功能是把累加器A中8位无符号整数除以B中的8位无符号整数,商(为整数)存放在累加器A中,余数在寄存器B中,清“0”C和溢出标志位OV。
- 如果B中的内容为“0”(除数为0),则结果A,B中的内容不定,并置位溢出标志位OV
逻辑运算命令:
- CLR A 清零A 但是不影响标志位
- CPL A 取反A 不影响标志位
- RR A 这条指令的功能是累加器A的8位向右循环移位,A.0移入A.7
- RRC A 这条指令的功能是将累加器A的内容和进位标志位一起向右环移一位,A.0移入进位位C,C移入A.7,不影响其它标志
- RL A 左移
- RLC A 带进位左移
- ANL A,Rn 逻辑与操作
- ORL A,Rn 逻辑或操作
- XRL A,Rn 逻辑异或操作
控制转移类指令(重要)
-
无条件转移指令
AJMP addr11
-
相对转移指令
SJMP rel
-
长跳转指令
LJMP addr16
-
间接跳转指令
JMP @A+DPTR 这条指令的功能是把累加器中8位无符号数与数据指针 DPTR的16位数相加,结果作为下条指令地址送入PC(相当于直接跳到A+DPTR的地址去执行),不改 变累加器和数据指针DPTR的内容,也不影响标志。
-
条件转移指令
JZ rel ;如果累加器为零则执行转移 JNZ rel ;如果累加器不为零则执行转移
-
比较不相等转移指令
CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,r 这组指令的功能是比较前面两个操作数的大小,如果它们的值不相等则转移,通过把指令最后一个字节的有符号的相对偏移量加到PC上,计算出转向地址。
-
减1不为0转移指令
DJNZ Rn,rel ;n=0-7 DJNZ direct,r 先减一 如果结果不为零则转移
调用子程序指令
- 短调用指令:ACALL addr1 ;这是2K字节范围内的调用子程序的指令
- 长调用指令:LCALL addr1
位操作指令(重要)
-
数据位传送指令
MOV C,bit MOV bit,C 这组指令的功能是把由源操作数指出的位 变量送到目的操作数指定的单元中去。 其中一个操作数必须为进位标志C,另一个 可以是任何直接寻址位
-
位变量修改指令
CLR C ;清C CLR bit ;清bit SETB C ;置位C (相当于变成1) SETB bit ;置位bit位 CPL C ;C求反 CPL bit ;bit位求
-
位变量逻辑指令
ANL C,bi ANL C,/bit 操作数上的 “/”表示用寻址位的逻辑非作源值,但不影响 源位本身值,也不影响别的标志。 ORL C,bit ORL C,/bit 这组指令的功能是:如果源位的布尔值为1,则置进位标 志位,否则进位标志保持不变。操作数上的 “/”表示用寻址 位的逻辑非作源值
-
条件转移类指令
JC rel ;如果进位位为1则转移 JNC rel ;如果进位值为0则转移 JB bit,rel ;如果寻址位为1则转移 (相当于此句前面如果有进行寻址操作则转移) JNB bit,rel ;如果寻址位为o则转移 JBC bit,rel ;如果直接寻址位为1则转移并清“0” (相当于MOV A,direct)
伪指令
-
伪指令与指令的概念不同,指令指示计算机完成某
种操作,在汇编过程中要生成可执行的目标代码。 -
而伪指令则不同,它并不生成可执行的目标代码,
只是对汇编过程进行某种控制或提供某些汇编信息。 -
定位伪指令ORG
功能:规定程序块或数据块存放的起始位置。 ORG 8000H START: MOV A,020 规定这条指令从地址8000H单元开始存放,并且标号START的值就为这个地址8000H
-
定义字节数据伪指令DB
格式:[标号]DB 字节数据表 其中字节数据表可以是一个或 多个字节数据、字符串、或表达式。 它表示将字节数据表中的数据按从 左到右的顺序依次存放在指定的存 储单元中,一个数据占用一个字节 存储单元 ORG 2000H TAB:DB 2B,30H,2*4
-
定义空间伪指令DS
格式;[标号:]DS 表达式 这条伪指令用来定义从指定的地址开始,需要保留 多少个存储单元作为备用的空间,并均填充零值
-
符号定义伪指令EQU或=
-
汇编结束伪指令END
-
位地址符号定义伪指令BIT
该伪指令的功能是将位地址赋给所定义的符号名 ST BIT P2.0 将P2.0的位地址赋给符号名ST,在其后的编程中可以用 ST代替P2.0使用