C8051第2章幻灯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 51单片机的指令系统与汇编程序 2.1 51单片机的指令与指令系统 每个单片机的CPU都有自己的指令系统,由指令组成的程序称为指令程序, 单片机可以在指令程序的控制下,实现预定的各种动作。 单片机能够执行的指令为二进制或是十六进制表示机器码,这些机器码不 易记忆,。
用助记符编制的指令程序,再增加一些汇编器识别的命令,这样的程序称 为汇编程序。汇编器可以将这样的程序转换成CPU执行的机器码程序。
[标号:] 操作码 [操作数] [;注释和空格分 开。操作码与操作数之间用空格分开。操作数与注释之间用分号分开。为 使4部分之间分隔的空格数一致,可以使用Tab键分隔。双操作数之间用逗 号分隔。 标号由8个或8个以下的字符构成,第一个字符必须是字符。标号是符号地 址,表示所在行程序的地址。
;立即数data送直接地址(3字节,2周期)
;16位常数送数据指针 (3字节,2周期)
; 直接地址数据送A(2字节,1周期) ;A中的数送直接地址(2字节,1周期) ;直接地址送寄存器Rn (2字节,1周期) ;直接地址送间接地址 (2字节,2周期) ;直接地址1送直接地址2(3字节,2周期)
3. 间接地址
6. 外数据区寻址
MOVX A,@Ri
;Ri指定的外部RAM地址(8位地址)中的数据送A
MOVX A,@DPTR ;DPTR指定的外部RAM地址(16位地址)中的数据送A MOVX @Ri,A ;A送Ri指定的外部RAM地址(8位地址)
MOVX @DPTR,A ;A送DPTR指定的外部RAM地址(16位地址)
格式:字符名称 BIT 位地址
例如,A1 BIT P1.0 ;用字符A1替代P1.0
2.4.2 汇编器
汇编程序需要汇编器汇编才能得到单片机可以运行的机器指令程序,支持 51单片机的汇编器以Keil公司的A51使用最多,下面介绍。
汇编源文件经过A51汇编器编译生成目标文件(.OBJ)和列表文件(.LST)。
若操作数为常数,则称为立即寻址,而常数操作数称为立即数,为与地址 区别,在立即数前加“#”(若为地址,没有“#”)。例如:
MOV A,#12H ;将十六进制数12传送到累加器A
(4)寄存器间接寻址
将寄存器R0和R1中的内容、或是数据指针寄存器DPTR中的内容作为操作 数的地址称为间接寻址。该寻址方式不能访问特殊功能寄存器。 书写间接寻址指令时,需要在寄存器R0和R1前加符号“@”。 例如:MOV A,@R0 ;将R0中的内容作为地址,寻找操作数 寄存器间接寻址的范围: ⑴ 51单片机RAM的前128字节,52单片机RAM的256字节。 ⑵ 外部数据存储器的前256字节,但必须使用MOVX指令。 ⑶ 使用数据指针寄存器DPTR,可以在外部64KBRAM中寻址。例如,
MOVC A,@A+DPTR ;
将0211中的数1FH送到累加器A。
(6)相对寻址
以程序计数器PC中的数加指令给出的偏移量后形成地址的方式称为相对寻 址。这里偏移量是有符号8位数,范围是-128~+127,相对寻址只在相对转 移指令中用到。
相对转移指令的所在地址为源地址,转移后的地址称为目标地址,因此有
MOV DPTR,#1234H ;将立即数1234H传送到数据指针寄存器DPTR中
MOV R0,#70H ;将代表地址的立即数传送到R0
(5)变址寻址
以程序计数器PC或是数据指针寄存器DPTR中的内容作为基本地址,然后再 加上保存在累加器A中的地址偏移量形成的操作数的地址称为变址寻址(有 些书称为索引寻址),也就是以DPTR+A或是PC+A的值作为操作数的地址。 该寻址方式可访问程序存储器的内容。 例如,如果外部程序存储器地址0211H中的数为1FH,累加器A中的数为11H, DPTR中的数为0200H,则程序
目标文件可由链接/定位器BL51创建生成库文件,也可以与库文件链接并定 位生成绝对目标文件 (.ABS)和存储器影射文件(.M51)。 绝对目标文件由OH51转换成标准的十六进制(HEX)文件,以供Keil软件 中仿真器仿真,也可以直接写入单片机程序存贮器中使单片机运行。 (1)目标文件 目标文件就是单片机机器码语言,是汇编器经过两次扫描形成的。 第一次扫描汇编器建立建立符号表并定位指令位置。第二次扫描汇编器将 助记符转换成操作码,并对操作数求值后输出目标文件。由于目标文件是 二进制文件,因此不能用文本编辑器查看。
其中: ;分号是记录开始标志,Intel HEX文件的每一行都是以分号“;”开头。 ll 是记录长度,用来表示该记录的数据字节数。 aaaa 是装入地址,是该记录中第一个数据字节的16位地址值,是该记录在 FLASH中的起始绝对地址。
tt 记录类型,00表示数据记录,01表示文件结束(EOF)。
(3)存储器影射文件
该文件记录了链接/定位器LX51输出的一些信息。主要有:
每个页面包含页顺序号,日期和链接/定位器版本。 链接/定位器的的启动命令行。
输入文件模块名。
存储器影射图,包括起始和终止地址、容量、分类、定位类型与段名。 符号表,包括存储类型、定位地址与文本符号名。
程序容量。
警告与错误信息。
将EQU后面的文字或数字指定给EQU前面的符号。
格式:字符名称 EQU 被代替的文字与符号 例如,AA EQU R1 A10 EQU 10 ;符号AA与文字R1等值 ;符号A10与数字10等值
(4)DATA
将数据地址或代码地址赋予规定的字符名称。
格式:字符名称 DATA 表达式 该伪指令常用来定义单片机内部数据空间。 (5)DB 从指定的地址单元开始,定义多个8位内存单元的值。 格式:[标号:] DB 8位二进制数 (6)DW 从指定的地址单元开始,定义多个16位内存单元的值。 格式:[标号:] DW 16位二进制表
(7)DS 从指定的地址单元开始,保留多个字节地址空间。 格式:[标号:] DS 字节数 例如,ORG 2000H DS AH ;从程序存储器地址2000H开始,放置如下程序 ;从2000H开始,保留10个字节存储空间 ;从200AH开始,放置数字25H,26H,27H
DB 25H,26H,27H (8)BIT 将位地址赋予符号名称。
2.2寻址方式
寻找操作数的地址称为寻址。寻址方式确定了数据的来源与目的地,对于不同的指令, 操作数的来源与目的不同。
(1)寄存器寻址 寄存器寻址就是将通用寄存器R0~R7的内容作为操作数,这时操作码的低3位用于指 定寄存器。 例如;MOV A,R0 ;将寄存器R0中的8位数据送到累加器A 51单片机有4个寄存器组(地址00H~1FH),每次只能激活其中1组,由状态寄存器中 的RS1和RS2位选择。 有些指令中隐含寄存器,因此也属于寄存器寻址范围。 例如,INC A ;将累加器A中的数据加1 (2)直接寻址
目标地址=源地址+转移指令的字节数+偏移量 就是说转移指令执行完毕后的PC值加偏移量就是目标地址。
例如若SJMP指令地址保存在2000H和2001H,对于两字节转移指令:SJMP 3EH
则转移目标地址为:2002H+3EH=2040H 该种寻址模式的优点是程序源代码与存储位置无关,缺点是跳转范围有限。
MOV A,@Ri
MOV @Ri,A MOV dircet,@Ri
;间接地址送A(1字节,1周期)
;A送间接地址(1字节,1周期) ;间接地址送直接地址(2字节,2周期)
4. 寄存器寻址
MOV A,Rn MOV Rn,A MOV dircet,Rn 5. 变址寻址 MOVC A,@A+DPTR ;由((A)+(DPTR))寻址的程序地址的内容送A(3字 节,1周期) MOVC A,@A+PC 2周期) ;由((A)+(PC));寻址的程序地址的内容送A(1字节, ;寄存器送A(1字节,1周期) ;A送寄存器(1字节,1周期) ;寄存器送直接地址(2字节,2周期)
(4)十六进制文件格式
写入单片机存储器的文件一般是Intel HEX文件格式(.HEX),由二进制-十 六进制文件转换程序OH51生成。一个Intel HEX文件的一行称为一个记录, 是由16进制字符组成,两个字符表示一个字节的值,Intel HEX文件通常由若 干个记录组成,每个记录的格式如下: ;ll aaaa tt dd … dd cc
操作数中的立即数可以是二进制(数字后加B),也可以是十六进制(数 字后加H)
2. 常用汇编器指令
汇编器指令又称为伪指令,这些指令用于控制汇编过程或是对符号、标号等赋值。 汇编完成后,程序中不包含伪指令。
(1)ORG ORG设定其后程序的起始地址。 格式:ORG 地址 例如,ORG 0000H AJMP MAIN (2)END END是汇编语言程序结束标志。 (3)EQU伪命令 ; ;如下程序从绝对地址0000H开始
指令中直接给出操作数地址就是直接寻址,直接寻址可以访问51单片机的内部RAM (00~7FH)与特殊功能寄存器(80H~FFH)。
例如: MOV 90H,A ;将累加器A中的内容送到端口P1。还可以写作MOV P1,A。 MOV A,3AH ;将3AH地址的内容传送到累加器A,记作:A←(3AH)
(3)立即寻址
(2)列表文件 列表文件也是在汇编器生成的,该文件是文本文件,可以用各种文本编辑 器查看,文件中包含: 程序列表:包括每一行指令的定位、操作码,行号和助记符,
符号列表:包括符号名、符号类型取值和属性。
在符号表中,B(Bit)表示位存储类型;C(Code)表示代码存储类型;D (Data)数据存储类型;I(IData)表示间接数据存储类型。ADDR表示符 号是地址;NUMB表示符号是数值;SEG表示符号是字段。跟随地址后的 字母A表示绝对地址或是不可以重定位地址;跟随地址后的字母R表示地址 是可重定位的。
7. 堆栈 PUSH dircet PUSH A POP dircet POP A 8 数据交换 XCH A,Rn XCH A,dircet XCH A,@Ri ;交换A和寄存器Rn中的内容 ;交换A和直接地址中的内容 ;交换A和间接地址中的内容 ;直接地址中的数据送堆栈,堆栈指针SP加1 ;A中的数据送堆栈,堆栈指针SP加1 ;堆栈中的数据送到直接地址,堆栈指针SP减1 ;堆栈中的数据送到A,堆栈指针SP减1
2.3 51单片机指令
关于指令符号一些约定:
Rn:寄存器R0~R7 direct:8位直接地址,可寻址RAM和特殊寄存器
@Ri:通过R0和R1间接寻址RAM
#data:8位立即数(常数) #data16:16位立即数(常数) addr16:用在LCALL和LJMP指令中的16位目的地址,寻址范围64K addr11:用在ACALL和AJMP指令中的11位目的地址,寻址范围2K rel:使用在SJMP指令中的有符号8位偏移地址(-128~+127) bit:RAM和特殊寄存器中的位地址 DEPT:数据指针,可作为16位的地址寄存器 (X):X中的内容 ((X)):X寻址单元中的内容
@:间接寻址寄存器或基址寄存器前缀
1. 立即寻址
MOV A,#data
MOV Rn,#data MOV @Ri,#data
;立即数data送A (2字节,1周期)
;立即数data送寄存器 (2字节,2周期) ;立即数data送间接地址(2字节,1周期)
MOV dircet,#data
MOV DPTR,#data16 2. 直接寻址 MOV A,direct MOV dircet,A MOV Rn,dircet MOV @Ri,dircet MOV dircet1,dircet2
XCHD A,@Ri
;交换A和间接地址中的低4位
2.3.2 算术运算指令 2.3.3 逻辑运算指令 2.3.4控制转移指令 2.3.5位操作指令
2.4 汇编语言程序设计 2.4.1 汇编语言简介 1. 汇编语言程序格式 汇编语言是用单片机指令助记符、标号和伪指令等组成的程序,替代单片 机执行的二进制机器语言,方便了程序设计, (1)程序格式 汇编程序由标号、操作码、操作数和注释4部分组成,一般格式为:
相关文档
最新文档