单片机教程之第5章 汇编语言程序设计
单片机-第五章 单片机中断系统

(1)CPU正在执行一个同级或高优先级的中断服务程序; (2)正在执行的指令尚未执行完; (3)正在执行中断返回指令RETI或者对寄存器IE、IP进 行读/写的指令。 CPU在执行完上述指令之后,要再执行一条指令,才 能响应中断请求。
二、中断响应过程 从中断请求发生直到被响应,准备去执行中断服务程 序,此过程即中断响应过程。中断响应过程一般包括如下几 个阶段: 1、中断采样并置位 中断采样过程:CPU在每个机器周期S5P2期间顺序对 中断源采样、置中断标志。 2、查询标志 在中断采样后的下一个周期的S6按优先级顺序查 询中断标志。
第5章 MCS-51单片机中断系统
5.1.1中断的概念
单片机系统中,CPU和外部设备之间不断进行信息的传 输。通常CPU和外设之间的信息传送方式有以下几种: 程序控制方式 中断方式 直接存储器存取(DMA)方式
1、 程序控制方式 可以分为以下两种方式。 (1)无条件传送方式 外设始终处于就绪状态,CPU不必查询外设的状 态,直接进行信息传输,称为无条件传送方式。 此种信息传送方式只适用于简单的外设。如开 关和数码段显示器等。
三、中断响应的时间
一般来说,中断的响应时间最短为3个机器周期,最长 为8个机器周期。 一般中断请求标志位查询占1个机器周期。而机器周期 又恰好是指令的最后一个机器周期。执行此指令后,CPU 将响应中断,产生硬件长调用指令。 长调用LCALL指令需要2个机器周期。这样,中断响应 时间为3个机器周期。
是不可寻址的
在同级的几个中断源中同时发生请求时, 内部对同级的各中断源的优先级别有一个规 定的查询顺序: 自然优先级
外部中断请求 INT0 最高 定时/计数器 T0 外部中断请求 INT1 定时/计数器 T1 串行口 UART 最低 定时/计数器 T2
单片机原理及应用教程(C语言版)-第5章 MCS-51单片机的中断系统

5.2.5 中断允许控制
例5-1 假设允许INT0、INT1、T0、T1中断,试 设置IE的值。 (2)汇编语言程序 按字节操作: MOV IE,#8FH 按位操作: SETB EX0 ;允许外部中断0中断 SETB ET0 ;允许定时器/计数器0中断 SETB EX1 ;允许外部中断1中断 SETB ET1 ;开定时器/计数器1中断 SETB EA ;开总中断控制位
IP (B8H)
D7 —
D6 D5 D4 D3 D2 D1 D0 — PT2 PS PT1 PX1 PT0 PX0
PT2:定时器/计数器T2的中断优先级控制位 PT2设置1则T2为高优先级,PT2设置0则T2为 低优先级。 后面各位均是如此,设置1为高优先级,设置0 为低优先级,不再一一赘述。 PS:串行口的中断优先级控制位。 PT1:定时器/计数器1的中断优先级控制位。 PX1:外部中断1的中断优先级控制位。 PT0:定时器/计数器0的中断优先级控制位。 PX0:外部中断0的中断优先级控制位。
5.2.4 中断请求标志
4.定时器/计数器T2中断请求标志
T2CON D7 D6 D5 (C8H) TF2 EXF2 D4 D3 D2 D1 D0
EXF2:定时器/计数器2的外部触发中断请求标志 位。T2以自动重装或外部捕获方式定时、计数,当 T2EX(P1.1)引脚出现负跳变时,TF2由硬件置1, 向CPU请求中断,CPU响应中断后,EXF2不会被硬 件清0,需要在程序中以软件方式清0。
5.2.3 外中断触发方式
TCON格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IT0=1,外中断0为下降沿触发 CPU在每一个机器周期的S5P2期间对P3.2引 脚采样,若上一个机器周期检测为高电平,紧挨着 的下一个机器周期为低电平,则使IE0置1。 IT1:外中断1触发方式控制位。功能同IT0
单片机实用教程_5 89C51单片机汇编语言程序设计

;除以100得百位数
;余数除以10得十位数 ;余数为个位数
5.4.2 分支结构程序设计 程序分支是通过条件转移指令实现的,满足条件 则进行程序转移,不满足条件就顺序执行程序。 分支程序又分为单分支和多分支结构。 通过条件判断实现单分支程序转移的指令有: JZ、JNZ、CJNE、DJNZ等。 以位状态作为条件进行程序分支的指令有: JC、JNC、JB、JNB、JBC等。 完成0, 1, 正, 负以及相等,不等作为条件判断。 多分支程序根据条件判断,分别转移去执行不 同的程序,有散转指令“JMP @A+DPTR” 。
第5章 89C51单片机 汇编语言程序设计
汇编语言进行程序设计是面向过程 设计的典型方法,也是程序设计最基本 的能力体现。本章介绍89C51汇编语言 程序设计的方法和一些实用程序。
5.1 汇编语言语句的类型和组成 5.1.1 汇编语言
汇编语言: 用指令的助记符、符号地址、标号等符 号书写程序的编程语言。 源程序: 用汇编语言编写的程序为汇编语言源程序.
[标号:] 操作码 [目的操作数, 源操作数] [;注释]
其中: 方括号[ ]的部分为可选项, 可有可无, 随指令而异. 字段之间要用分隔符(空格,冒号,逗号,分号)分开.
⑴. 标号
标号位于语句的开始, 代表该语句的地址(符号地址) 标号由1-8个字母和数字组成, 由字母打头, 以冒号结 尾。不能使用指令助记符、寄存器名、伪指令等。 每个语句标号可用可不用。转移指令可以标号作为 指令的目标地址, 汇编中自动计算出转移的偏移量。 标号可以用赋值伪指令来赋值。
ORG 0000H LJMP CMPT ORG 1000H CMPT: MOV A,30H JNB ACC.7,NCH MOV C,ACC .7 CPL A ADD A,#1 MOV ACC.7,C NCH: MOV 31H,A SJMP $ END
单片机原理及应用第五章汇编语言程序设计

开始
1
Y
N
?
第五章 汇编语言程序设计
5-1-3 评价程序质量的标准 (1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
5-2 顺序程序 直线程序又称简单程序,程序走向只有一条路径。 例1 双字节变补程序(设数据在R4 R5中)双字节变补程序(设数据在R4R5中): MOV A,R5 ;取低字节 CPL A ADD A,#1 ;低字节变补 MOV R5,A MOV A,R4 ;取高字节 CPL A ADDC A,#0 ;高字节变补 MOV R4,A
第五章 汇编语言程序设计
循环控制方法:计数控制、特征标志控制。 一.计数控制: 设循环计数器,控制循环次数。正计数和倒计数两种方式。 例:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。 MOV DPTR,#2100H MOVX A,@DPTR MOV R2,A NEXT:INC DPTR MOVX A,@DPTR ORL A,#80H JNB P,PASS ;判断是否加校验 MOVX @DPTR,A;是,则加奇校验 PASS:DJNZ R2,NEXT DONE:SJMP DONE
第五章 汇编语言程序设计
参考程序: JMPN:MOV DPTR,#PRGTBL;DPTR指向表首址 MOV A,R7 ;取地址代号高8位 MOV B,#3 ; MUL AB ;×3 ADD A,DPH ; MOV DPH,A ;修改指针高8位 MOV A,R6 ;取地址代号低8位 MOV B,#3 ;×3 MUL AB ; XCH A,B ;交换乘积的高低字节 ADD A,DPH ;乘积的高字节加DPH MOV DPH,A XCH A,B ;乘积的低字节送A JMP @A+DPTR ;散转
No.5C51程序设计

– 指定存储区的指针
• 指定存储区的指针在指针的声明中经常包含一个 存储类型标识符指向一个确定的存储区。 • 例如: char data *str; int xdata *ptr; long code *tab;
• 指定存储区指针存放时不再像通用指针那样需 要保存存储类型,指向idata、data 、bdata 和pdata存储区的指针只需要一个字节存放, 而code和xdata指针也才需要两字节。从而减 少了指针长度,节省了存储空间。
– 如:sfr16 TL0=0x8A;
– 特殊功能寄存器中特定位的定义
• 在C51中可以利用关键字sbit定义可独立寻址访问 的位变量
• 对一般位变量的定义
– 当位变量位于内部RAM的可位寻址区(20H~2FH 单元)时,可以利用C51编译器提供的bdata存储器 类型进行访问 – 带有bdata类型的变量可以进行字节或位寻址,用 sbit指定bdata变量的相应位后就可以进行位寻址。
– 考虑存储器结构 – 正确使用片内外RAM、特殊功能寄存器 – 正确处理接口芯片收发数据 – 不需要具体组织和分配存储器资源 – 结构模块化,思路与思维相同 – 但要与单片机结构相关联,否则不能正确映射
• C程序:
• C51:
– – – –
自动完成存储单元分配(内定义) 可编制常见接口芯片通用驱动函数 可采用模块化设计应用程序 加快开发速度
var=XBYTE[0x8000]; 头文件内定义的函数 XBYTE[0x8000]=0x21;
P71
– 例如:unchared xdta xram[0x8000]_at_0x1000; //在外部RAM1000H开始定义了一个一维数组
第5章 MCS-51单片机的程序设计

X + 1, X > 0 Y = 0, X = 0 1, X < 0
5.3.4 循环程序
循环程序一般由如下四部分组成: 循环程序一般由如下四部分组成: ①初始化部分:用来设置循环初值,包括预置变量、计数器和数据指针 初始化部分:用来设置循环初值,包括预置变量、 初值,为实现循环做准备。 初值,为实现循环做准备。 ②循环处理部分:要求重复执行的程序段,是程序的主体,称为循环体。 循环处理部分:要求重复执行的程序段,是程序的主体,称为循环体。 循环体既可以是单个指令,也可以是复杂的程序段,通过它可完成对数据 循环体既可以是单个指令,也可以是复杂的程序段, 进行实际处理的任务。 进行实际处理的任务。 ③循环控制部分:控制循环次数,为进行下一次循环而修改计数器和指 循环控制部分:控制循环次数, 针的值,并检查该循环是否已执行了足够的次数。也就是说, 针的值,并检查该循环是否已执行了足够的次数。也就是说,该部分用条 件转移采控制循环次数和判断循环是否结束。 件转移采控制循环次数和判断循环是否结束。 ④循环结束部分:分析和存放结果。 循环结束部分:分析和存放结果。
√ × 机器汇编
√
√
×
√
×
√
×
5.3.1 16位加减法程序 位加减法程序
位二进制数分别存放在R1R0和R3R2中,试求其和, 例5-1:已知两个 位二进制数分别存放在 :已知两个16位二进制数分别存放在 和 中 试求其和, 并将结果存入R1R0中。 中 并将结果存入 汇编语言程序: 汇编语言程序: ORG CLR R1 R3 R1 R0 R2 R0 MOV ADD MOV MOV ADDC MOV SJMP END 0000H C A,R2 A,R0 R0,A A,R3 A,R1 R1,A $
单片机汇编语言程序设计

6.定义空间指令DS
指令格式:
地址
ROM
[标号:]DS <表达式>
2000H
说明:DS伪指令是定义存储区,即从标
2001H 号指定的单元开始保留表达式所代表的
存储单元数。
2002H
【例】
2003H
ORG 2000H
单片机汇编语言程序设计
单片机汇编语言程序设计
1.1 源程序的编辑与汇编
1.源程序的编辑 源程序的编写要依据80C51汇编语言的基本规则,特别要用好常用
的汇编命令(即伪指令),例如: ORG 0040H MOV A,#7FH MOV R1,#44H END
这里的ORG和END是两条伪指令,其作用是告诉汇编程序此汇编源程 序的起止位置。编辑好的源程序应以.ASM扩展名存盘,以备汇编程序调 用。
这里使用的“字符名称”不是标号,不能用“:”来隔分隔符;其 中的“项”可以是一个数值,也可以是一个已经有定义的名字或可以求 值的表达式。该指令的功能是将一个数或特定的汇编符号赋予规定的字 符名称。用EQU指令赋值的字符名称可以用做数据地址、代码地址、位 地址或直接当做一个立即数使用。因此,给字符名称所赋的值可以是8 位二进制数,也可以是16位二进制数。
置循环初值
置循环初值
循环体
N 循环条件? Y
循环条件? Y
N 循环体
(a)先处理后判断方式
(b)先判断后处理方式
4.子程序结构 在汇编语言程序设计时,通过循环程序可以解决连续重复执行同
一程序段的问题,而对于不连续重复执行同一程序段的问题,为避免 重复编制程序,节省程序代码所占的存储空间,可将其编制成独立的 程序即子程序,在需要的位置采用特定的指令调用该子程序,执行后 再返回到调用位置继续执行后序程序指令。子程序调用是实现I/O操 作的重要方法。
C51单片机汇编语言程序设计

C51单片机汇编语言程序设计一、二进制数与十六进制数之间的转换1、数的表达方法为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数后加B十六进制数后加H。
2、二进制数与十六进制数对应表二进制十六进二进制制0000000100100011010001010110011101234567100010011010101111001101 11101111十六进制89ABCDEF3、二进制数转换为十六进制数转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足4位部分用0补齐。
例:将(1010000110110001111)2转化为十六进制数解:把1010000110110001111从右向左每4位分为1组,再写出对应的十六进制数即可。
0101000011011000111150D8F答案:(1010000110110001111)2=(50D8F)16例:将1001101B转化为十六进制数解:把10011110B从右向左每4位分为1组,再写出对应的十六进制数即可。
100111109E答案:10011110B=9EH4、十六进制数转换为二进制数转换方法为:将每1位十六进制数转换为4位二进制数。
例:将(8A)16转化为二进制数解:将每位十六进制数写成4位二进制数即可。
8A10001010答案:(8A)16=(10001010)2例:将6BH转化为二进制数解:将每位十六进制数写成4位二进制数即可。
6B01101011答案:6BH=01101011B二、计算机中常用的基本术语1、位(bit)计算机中最小的数据单位。
由于计算机采用二进制数,所以1位二进制数称作1bit,例如110110B为6bit。
2、字节(Byte,简写为B)8位的二进制数称为一个字节,1B=8bit3、字(Word)和字长两个字节构成一个字,2B=1Word。
字长是指单片机一次能处理的二进制数的位数。
如AT89S51是8位机,就是指它的字长是8位,每次参与运算的二进制数的位数为8位。
单片机课件第五章__汇编语言程序设计

MOV 31H,A ;暂停
开始 取数,A←(30H) A为负数? N Y A←64H
图 例
5-4 4.3
A=0?
N A←X+2 存数,(31H)←A(30H) 结束 A←|X|
程 序 流 程 图
3.多向分支程序设计举例
【例5.4】 根据R0的值转向7个分支程序。
R0<10,转向SUB0; R0<20,转向SUB1;
JMP @A+DPTR ;PC ← A+DPTR TAB: AJMP SUB0 ;转移指令表 AJMP SUB1 AJMP SUB5 AJMP AJMP SUB2 SUB6
开始
K=? K=0 转SUB0 K=1 …… K=6 转SUB1 转SUB6
图5-5 多向分支程序流程图
返回本节
4.2.4 循环程序
5.2.2 顺序程序
5.2.3 分支程序
5.2.4 循环程序
5.2.5 子程序 5.2.6 位操作程序
返回本章首页
5.2.1 汇编语言程序设计步骤
1.分析问题
2.确定算法
3.设计程序流程图 4.分配内存单元 5.编写汇编语言源程序 6.调试程序
返回本节
5.2.2 顺序程序
顺序程序是一种最简单,最基本的程序。
【例5.2】 设X、Y两个小于10的整数分别存于 片内30H、31H单元,试求两数的平方和并将 结果存于32H单元。 解:两数均小于10,可利用乘法指令求平方。 程序流程如图5-2所示。参考程序如下: ORG 2000H
MOV
MOV
A,30H
;取30H单元数据
B,A ;将X送入B寄存器
MUL AB
ONE DATA 30H
零基础学单片机C语言程序设计 第5章 C51的数据结构

5.1 C51的数组
数组是把若干具有相同数据类型的变量按有序的形式组织 起来的集合。其中,数组中的每个变量称为数组元素。数 组属于聚合数据类型。一个数组可以包含多个数组元素, 这些数组元素可以是基本数据类型,也可以是聚合数据类 型。
在C51语言中,按照数组元素所属的基本数据类型,数组 可分为数值数组、字符数组、指针数组、结构数组等。其 中,指针数组将在指针部分再作介绍,结构数组将在结构 部分再作介绍。
1.指向一维数组的指针
2.指向二维数组的指针
3.指向一个由n个元素所组成的数组指针
4.指针和数组的关系
5.2.7 C51的指针数组
指针数组是同一数据类型的指针作为元素构成的数组。指 针数组中的每个数组元素都必须是指针变量。指针数组的 定义格式如下:
类型标识符 *数组名[常量表达式]; 其中,类型标识符是指针数组的类型,“[]”内的常量表
2.指针变量赋值
在C51语言中,变量的首地址是由编译系统自动分配,因此 用户不知道变量在内存中的具体地址。为了获得变量的地 址,C51语言中提供了地址运算符“&”,可以获取变量的 首地址。
&变量名
5.2.3 取址运算符和取值运算符
通过指针变量来访问其所指向的变量,需要首先定义该指
针变量。在程序中使用指针变量时,常有用到与指针变量
定义的一般形式为: 类型说明符 数组名 [常量表达式],……; 2.数组元素表示 数组元素,即数组中的变量,是组成数组的基本单元。在C51中,数组
元素是变量,其标识方法为数组名后跟一个下标。数组元素通常也称 为下标变量。数组元素表示的一般形式为:
数组名[下标]
5.1.2 一维数组
一维数组是指只有一个下标标号的数组。一维数组是一个 由若干同类型变量组成的集合,引用这些变量时可用同一 数组名。一维数组在存放时占用连续的存储单元,最低地 址对应于数组的第一个元素,最高地址对应于最后一个元 素。
第5章 Keil C51-单片机原理与应用及C51程序设计(第4版)-谢维成-清华大学出版社

5.1 Keil C51简介 5.2 Keil uVision4 IDE的使用方法 5.3 Keil C51的调试技巧
3
第5章 Keil C51集成环境的使用
第5章 Keil C51集成环境的使用
一、 Keil µVision IDE界面
窗口标题栏 菜单栏 工具栏
项目管理器窗口 编辑窗口
命令窗口和 输出信息窗口
8
第5章 Keil C51集成环境的使用
(3) 选择好单片机芯片后,单击【确定】按钮,这时弹出如图5.4所 示的Copy Standard 8051 Startup Code to Project Folder and Add File to Project确认框,问是否把启动代码文件拷贝到项目文件夹并添加到项 目中。如果程序用C51语言编写要选择【是】,汇编语言编写选择 【否】,单击后,项目文件就创建好了。
12
第5章 Keil C51集成环境的使用
(4) 弹出如图所示的Add Files to Group 'SourceGroup1' 对话框。在对话框中选择需要添加的程序文件,单击Add按 钮,把所选文件添加到项目文件中。
注意:在该对话框中 文件类型默认为*.C, 如果是汇编程序,需 在文件类型选择框选 择*.a*才看得到,如 果文件添加得不对, 可在项目管理器的 Source Group1下面 选中对应的文件,用 右键菜单中的 Remove File命令把 它移出去。
第5章 Keil C51集成环境的使用
5.2.1 建立项目文件
uVision4采用项目方式管理,一个项目用一个文件夹存放, 建项目时要先建一文件夹,文件夹建好后,启动uVision4, 通过用Project菜单下的New uvision Project命令建立项目文 件,过程如下:
80C51单片机汇编语言程序设计PPT

BRn: …
(2)通过转移指令表实现程序多分支
MOV A, n
RL A
;分支序号值乘以2
MOV DPTR, #BRTAB;转移指令表首址
JMP A+DPTR
BRTAB: AJMP BR0
;转分支程序0
AJMP BR1
;转分支程序1
BR0: … BR1: …
AJMP BR127
;转分支程序127 ;分支程序
;若(CY)=1,表明Ta<T54,转升温处理程序
FH: RET
;若T55≥Ta≥T54,则返回主程序
例:已知:127≥X≥-128,求Y。设X,Y分别存放在外部 RAM 1000H和2000H单元中。
解:(1)分析任务:解方程 (2)算法:控制转移 (3)程序结构:多分支
1
x0
y
1
x0
0
x0
EQU
1000H;
EQU
2000H;
1000H
DPTR, #XAD ;数据X的地址送数据指针DPTR
A,
DPTR; A←取数据X
SAV;
X=0转SAV
ACC.7, NEG; X<0转NEG,否则,X>0
A,
#01H;
SAV;
A,
#0FFH; (0FFH为-1补码)
DPTR, #BUF; 数据Y的地址送数据指针DPTR
DEC R0
DEC R1
MOV A, R0 ADDC A, R1;高字节带进位相加 MOV R0, A ;存高字节相加结果
CLR A ADDC A, #00H;进位送00H位保存 MOV R0, #20H;存放进位的单元地址
MOV R0, A
4.2.2 分支程序结构
单片机汇编语言程序设计

汽车电子系统的复杂度不断提高,单片机在发动机控制、车身控 制等方面的应用越来越广泛,汇编语言在实时性和可靠性方面有
优势。
智能家居领域
智能家居市场快速发展,单片机在家用电器控制、安防系统等方 面的应用逐渐增多,汇编语言在资源受限的环境中有一定优势。
未来展望
绿色环保设计
未来单片机设计将更加注重绿色环保,汇编语言程序设计将更加注 重低功耗、节能减排等方面的优化。
软件工具支持丰富
随着单片机技术的发展,支持汇编语言编程的软件工具也 日益丰富,包括编译器、调试器、仿真器等,提高了编程 效率和可维护性。
网络化与智能化
单片机正朝着网络化、智能化的方向发展,这要求汇编语 言程序设计在实时性、可靠性、安全性等方面有更大的突 破。
应用领域拓展
物联网领域
随着物联网技术的普及,单片机在传感器节点、网关设备等应用 中发挥重要作用,汇编语言在低功耗、低成本设计中具有优势。
单片机汇编语言可以用于实现工业自动化控制系统的底层驱动程序,如电机控制、传感器数据采集等。此外,单片机汇编语 言还可以用于实现生产过程的监控和管理,提高生产效率和产品质量。
05
单片机汇编语言的发展趋势与展 望
技术发展趋势
硬件集成度提高
随着半导体工艺的进步,单片机的集成度越来越高,功能 越来越强大,为汇编语言程序设计提供了更广阔的空间。
算法设计
根据需求设计合适的算法,确保 程序逻辑正确。
流程图绘制
使用流程图表示程序执行过程, 便于理解和优化。
优化与改进
根据测试结果,优化程序性能和 代码质量。
调试与测试
在单片机上运行程序,检查功能 是否正常。
编写代码
根据流程图,使用汇编语言编写 程序。
单片机课件 汇编语言程序设计PPT

4.1 概述
---- 程序头( 即定义变量和等值符号)---SCL BIT P1.2 ;定义SCL位变量 SDA BIT P1.3 ;定义SDA位变量 ByteCon DATA 30H ;定义字节变量
ByteCon ……
ORG nnnn ;CPU复位后,第一指令机器码存 放单元地址,具体值由CPU类型决定。
单片机课件 汇编语言程序设计PPT
4.1 概述
一、汇编语言伪指令 伪指令
汇编程序某些指令在汇编时并不产生目标代码,不 影响程序的执行,不是CPU能执行的指令,只提供一 些汇编控制信息的指令。 常用的伪指令: (1)设置起始地址ORG
格式: ORG nn 1、ORG:表明为后续源程序经汇编后的目标程序安 排存放位置,nn则给出了存放的起始地址值;
可以使人们抓住程序的基本线索,对全局有完整的了解。
4.1 概述
好处: (1)容易发现设计思想上的错误和矛盾,便于找出解 决问题的途径。 (2)便于把较大的程序分成若干个模块,从而分头进 行设计,最后合在一起联调。 5、按所使用计算机的指令系统,依据框图写出汇编语言 程序。 编程的三个原则:尽可能的节省数据存储单元;缩 短程序长度;减少执行时间。
8000H 8096H
4.1 概述
(5)赋值(等值)EQU 格式: 标号 EQU 项或表达式 功能:将语句操作数的值赋于本语句的标号,用EQU 赋过值的标号名可以用作数据地址、代码地址、位地址 或是一个立即数,它可以是8位、也可以是16位。 注意: 1、在同一程序中,用EQU伪指令对标号赋值后,该 标号的值在整个程序中不能再改变;
须是事先未定义过的。
4.1 概述
例4.6 A1 BIT P1.0 A2 BIT 02H
第5章80C51单片机汇编语言程序设计

08.08.2021
最新课件
23
第5章 汇编语言程序设计简介 5.2 汇编语言基本结构
08.08.2021
最新课件
24
5.2.1 顺序程序设计
例 1 两个无符号双字节数相加。 设被加数存放于内部RAM的40H(高位字节), 41H(低位字节), 加数存放于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。
14
(2)等值指令EQU
指令格式: 字符名称 EQU
例: PA8155 EQU 8001H ;即给标号PA8155赋值为8001H
使指令中的字符名称等价于给定的数字或汇编符号。
如果在程序中要多次使用到某一地址,由EQU指令将 其赋值给一个字符名称, 一旦需要对其进行变动, 只要改 变EQU命令后面的数字即可。 注意:由 EQU等值的字符名称必须先赋值后使用, 且在 同一个源程序中, 同一个标号只能赋值一次。
是一个标号, 其地址与前一条伪指令连续 , 即1003H,
1004H地址单元中依次存放 45H, 66H。
08.08.2021
最新课件
17
(4)定义字指令DW
指令格式:
[标号:] DW 16
该指令的功能与DB相似, 区别仅在于从指定地址开 始存放的是指令中的 16 位数据, 而不是字节串。每个 16 位数据要占两个存储单元, 高8 位先存, 低 8 位后存, 这和 MCS -51指令中的16位数据存放顺序是一致的。
单片机推出时,都有相配套的C编译器加以支持。 高级语言编写程序的缺点是实时性不高,结构不 紧凑,编译后占用存储空间比较大,这一点在存 储器有限的单片机应用系统中没有优势。
08.08.2021
最新课件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本章介绍程序设计的基本知识及如何使用汇编 语言来进行基本的程序设计。 语言来进行基本的程序设计。 5.1 概述 按照语言的结构及其功能可以分为三种: 按照语言的结构及其功能可以分为三种:
1.机器语言:用二进制代码表示指令和数据。 .机器语言:用二进制代码表示指令和数据。 2.汇编语言:用助记符表示指令含义,面向机器。 .汇编语言:用助记符表示指令含义,面向机器。 3.高级语言:面向过程且独立于计算机硬件结构之 .高级语言: 目前单片机开发中常用的高级语言是C语言 语言。 外,目前单片机开发中常用的高级语言是 语言。
伪指令
5.DW(Define Word)定义数据字命令 . ( )
从指定的地址开始, 从指定的地址开始,在程序存储器的连续单元中定 双字节)的数据字 义16位(双字节 的数据字。例如: 位 双字节 的数据字。例如: ORG 2000H DW 1246H,7BH,10 , ,
汇编后: 汇编后:
(2000H)=12H ) (2002H)=00H ) (2004H)=00H ) (2001H)=46H ;第1个字 ) 个字 (2003H)=7BH;第2个字 ) ; 个字 (2005H)=0AH; )
例5.10 已知80C51单片机使用的晶震频率是 已知 单片机使用的晶震频率是 6MHz,要求设一一个软件延时程序,延时 ,要求设一一个软件延时程序, 10ms。 。
机器周期是2us,DJNZ指 指 机器周期是 MOV R0,#0AH 令是双周期指令, 令是双周期指令,一个 DL2:MOV R1,#125 DJNZ指令用时 ,需 指令用时4us, 指令用时 DL1:NOP 内重循环 要执行2500次就延时 要执行 次就延时 10ms。80C51是8位机, 位机, 。 是 位机 NOP 一次8微妙 循环125次 循环控制变量最大值是 DJNZ R1,DL1 255,所以要采用双重循 , 环。如果增加一次循环执 DJNZ R0,DL2 行的时间, 行的时间,还可以减少循 环的次数。 环的次数。 只考虑内重循环体的延时,则延时时间为: × 只考虑内重循环体的延时,则延时时间为:8×125us×10=10ms × = 考虑所有指令的延时,延时为: + + × 考虑所有指令的延时,延时为:2+(2+8×125+4)×10= + × = 10062us
养成在程序的适当位置上加上注释的好习惯。 养成在程序的适当位置上加上注释的好习惯。
(6)上机调试,修改完善源程序。 )上机调试,修改完善源程序。
5.2 顺序与循环程序设计
5.2.1顺序程序设计 顺序程序设计
单元的2个 例5.8 将20H单元的 个BCD码拆开并变成 单元的 码拆开并变成 ASCII码存入 码存入21H、22H单元。 单元。 码存入 、 单元 ASCII码0~9为30H~39H。 码 ~ 为 ~ 。 实现过程是,取出20H的低 位(1个BCD 的低4位 实现过程是,取出 的低 个 ),将它放到一个字节中 将它放到一个字节中, 码),将它放到一个字节中,再将其转换为 相应的ASCII码,方法就是再该数值基础上加 相应的 码 上30H,然后将这个数存入 ,然后将这个数存入22H。然后取出 。 20H的高 位,放入一个字节(放到低4位), 的高4位 放入一个字节(放到低 位 的高 将其加上30H,然后将结果放到 将其加上 ,然后将结果放到21H。 。
汇编语言的格式
(2)工作寄存器和特殊功能寄存器: 2 工作寄存器和特殊功能寄存器 工作寄存器和特殊功能寄存器: 可以用代号表示,也可以是位代号。 可以用代号表示,也可以是位代号。 特殊功能寄存器可以用寄存器的地址表示。 特殊功能寄存器可以用寄存器的地址表示。 (3)美元符号“$”: 美元符号“ : 3 美元符号 常在转移指令中使用,表示该指令所在的地址 该指令所在的地址。 常在转移指令中使用,表示该指令所在的地址。 如:SJMP $ 相当于 HERE:SJMP HERE
5.1.2 汇编语言的规范
汇编语言有两种基本类型: 汇编语言有两种基本类型:指令语句和伪 指令语句 (1)指令语句 )
每一条指令语句在汇编时都产生相应的指令 代码(机 是为汇编服务的。在汇编时没有机器代码与 之对应。 之对应。
1. 汇编语言源程序的格式
伪指令
6.BIT 定义位地址指令 .
位地址(Q4 BIT P2.2) 字符名称 BIT 位地址 第一前边字符和后边位地址等价。 第一前边字符和后边位地址等价。
7. DATA定义标号数值伪指令 定义标号数值伪指令
表达式(MN DATA 3000H) 字符名称 DATA 表达式 它于EQU的区别是可以先使用后定义,后边只能是数值。 的区别是可以先使用后定义, 它于 的区别是可以先使用后定义 后边只能是数值。
汇编语言的格式
2.操作码字段:是不能空缺的,是指令或伪指 操作码字段:是不能空缺的, 令的助记符,用来表示指令的操作性质。 令的助记符,用来表示指令的操作性质。 操作数字段: 3.操作数字段:
给出的是参加运算(或其他操作 的数据或数据的地址 给出的是参加运算 或其他操作)的数据或数据的地址。 或其他操作 的数据或数据的地址。 (1)操作数书写型式 1 操作数书写型式 操作数一般为十六进制, 结尾,如果是A~F 操作数一般为十六进制,用“H”结尾,如果是 开头,则为了与字符串区别开需要在操作数前加0。 开头,则为了与字符串区别开需要在操作数前加0 如果为二进制则以“ 结尾。 如果为二进制则以“B”结尾。 如果是十进制则以“ 结尾,也可以省略“ 如果是十进制则以“D”结尾,也可以省略“D”。
ORG 0000H;程序起始地址 ; LJMP MAIN;跳转到主程序 ; ORG 0100H;主程序起始地址 ; MAIN:MOV R0 , #22H;设置 指针指向 指针指向22H ;设置R0指针指向 MOV @R0,#0;将R0指向的地址 ; 指向的地址22H清零 清零 指向的地址 MOV A , 20H;读取要转换的 位ASCII码到 码到A ;读取要转换的2位 码到 XCHD A, @R0 ;将被转换数的低位送到 将被转换数的低位送到22H低位 低位 ORL 22H, #30H;将22H中数变成相应的 中数变成相应的ASCII码 ; 中数变成相应的 码 SWAP A;将A中数高位移到低位 ; 中数高位移到低位 ORL A,#30H;将A中数转换为相应的 ; 中数转换为相应的ASCII码 码 中数转换为相应的 MOV 21H,A;将高位数的 码送入21H ;将高位数的ASCII码送入 码送入 SJMP $;循环等待 ; END 中数据为56H,分析各指令执行后各地址和寄存 设20H中数据为 中数据为 , 器的值
MCS-51的汇编语言的(指令语句)四分段格式如下: 的汇编语言的(指令语句)四分段格式如下: 的汇编语言的
标号字段:操作码字段,操作数字段;注释 标号字段:操作码字段 操作数字段; 操作数字段 START: MOV A,30H;A←(30H) : , ; ( )
规则: 规则: 标号段: 1.标号段:标号字段和操作字码段之间要有冒号 “:”相隔,由1~8个ASCII字符组成,开头必须为 相隔, 字符组成, 相隔 字符组成 字母,标号不能重复, 字母,标号不能重复,不能用汇编语言已经定义的 字符串,可以没有标号。 字符串,可以没有标号。
5.2.2循环程序设计
循环的结构
(1)循环初态 )
设置循环过程中工作单元的初始值。 设置循环过程中工作单元的初始值。
(2)循环体 )
重复执行的程序段。 重复执行的程序段。
(3)循环控制部分 )
用于控制循环的执行和结束, 用于控制循环的执行和结束,判断循环执行的条 件。 常用循环控制指令有DJNZ,CJNE,SJMP等 常用循环控制指令有 等
开始 取出20H的低位 的低位BCD码,放到一个新地址中 取出 的低位 码 转化为相应的ASCII码 码 转化为相应的 将低位BCD码的 码的ASCII码存入 码存入22H 将低位 码的 码存入 取出20H的高位 的高位BCD码,放到一个新地址中 取出 的高位 码 转化为相应的ASCII码 码 转化为相应的 将高位BCD码的 码的ASCII码存入 码存入21H 将高位 码的 码存入 结束
4. 注释字段 注释字段:
以半角分割符“ 以半角分割符“;”开头,表示对前面语句的解释。 开头,表示对前面语句的解释。
2. 汇编语言的伪指令
汇编语言源程序中应有向汇编程序发出的 汇编语言源程序中应有向汇编程序发出的 指示信息,告诉它如何完成汇编工作, 指示信息,告诉它如何完成汇编工作,这 是通过使用伪指令来实现的。 伪指令来实现的 是通过使用伪指令来实现的。 也称为汇编程序控制命令。 也称为汇编程序控制命令。只有在汇编前 的源程序中才有伪指令。 的源程序中才有伪指令。经过汇编得到目 标程序(机器代码) 标程序(机器代码)后,伪指令已无存在 的必要,所以“ 体现在汇编时, 的必要,所以“伪”体现在汇编时,伪指 令没有相应的机器代码产生。 令没有相应的机器代码产生。
3. EQU(Equate)赋值指令 赋值指令
字符名称 EQU 数或汇编符号 定义前边字符与后边数据或符号等价。 定义前边字符与后边数据或符号等价。 OUTPORT EQU P1
4.DB(Define Byte)定义字节命令 . ( )
在程序存储器的连续单元中定义字节数据。 在程序存储器的连续单元中定义字节数据。
设由2个 位 码分别存放在23H、 例5.9 设由 个4位BCD码分别存放在 码分别存放在 、 22H单元和 单元和33H和32H单元中,求他们的和, 单元中, 单元和 和 单元中 求他们的和, 并送入43H、42H单元中(低位在低字节, 单元中( 并送入 、 单元中 低位在低字节, 高位在高字节) 高位在高字节)
CLR C MOV A,22H;取得低位被加数 ; ADD A,32H;低字节相加,不考虑进位位 低字节相加, 低字节相加 DA A;十进制调整 ; MOV 42H,A;保存 ; MOV A,23H;取得高位被加数 ; ADDC A,33H;高字节相加考虑字节的进位 高字节相加考虑字节的进位 DA A;十进制调整 ; MOV 43H,A;保存 ; 设 (23H)=12H, (22H)=34H,(33H)=56H,(32H)=78H, 分析各指令执行后相应寄存器、地址中数值。 分析各指令执行后相应寄存器、地址中数值。