嵌入式系统复习(基于51单片机的汇编)

嵌入式系统复习(基于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”
  • 除法:

      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使用
    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值