51系列单片机程序设计
.
4.1 汇编语言程序设计概述
4.1.2 汇编语言伪指令
5、双字节数据赋值伪指令DW 格式:[标号:] DW数据表(双字节) 说明:该伪指令与DB伪指令的不同之处在于DW定义(赋值)
的是双字节数据,而DB定义(赋值)的是单字节数据。高8 位数据安排在低地址单元,低8位数据安排在高地址单元。 6、预留空间定义伪指令DS 格式:[标号:] DS 操作数 说明:该伪指令的作用是通知汇编程序,从指定的地址单元开 始(通常由标号指定首地址),保留由操作数(常数或表达 式)规定的字节空间。
ACALL SUBPRO ;调用子程序
……
;子程序返回,继续执行主程序
;###################################
;子程序入口地址(子程序名称):SUBPRO
;功能:延时子程序(延时时间由R0初值设置)
;入口参数:R0内存放延时计数初值
;出口参数:无
;使用寄存器:R0、R1
;若X>100,故Y=X+1
MOV 40H, A
EXIT: RET
.
4. 2 基本程序结构
4.2.3 循环结构
在程序设计中,遇到一段程序需要多次重复执行的情况, 通常应该采用循环结构程序。 1、循环结构程序组成
循环结构程序由初始化、循环处理、循环控制和循环结束 4部分组成。 (1)初始化部分
初始化部分设置循环处理之前的初始状态,如循环次数、 变量初值、地址指针初值等。 (2)循环处理部分
ORG 0030H MAIN: SETB IT0 ;主程序实际入口,边沿触发设置
SETB EX0
;外部中断0允许
SETB EA
;总中断允许
HERE: AJMP HERE ;等. 待再次进入中断服务程序
4. 2 基本程序结构
4.2.5 中断程序结构
中断服务子程序:
ORG 1200H
EXTR:PUSH PSW ;保护现场
CPL A
;累加器A数据取反
MOV P1,A ;数据输出至P1端口
POP PSW ;恢复现场
RETI
;中断返回
.
4.3 汇编语言程序设计实践
汇编语言程序设计的一般步骤如下: ◇ 建立数学模型 —— 用适用的数学方法描述所需要解决的问题 ◇ 确定算法 —— 将数学模型转化为适合单片机处理(顺序执行
的形式,采用绘制程序流程图等方法表示程序设计的思路和 依据。 ◇ 编写源程序 —— 采用模块化设计方法,合理划分功能模块, 分配存储器和I/O端口(依据硬件电路)等资源,确定各模块 内各程序段的结构,编写源程序文件。 ◇ 汇编及调试 —— 在集成开发环境的支持下,汇编语言源程序 经汇编生成目标程序文件,并通过调试以及对运行结果的分 析,修正源程序中的错误,达到预期的设计目标。
.
4. 2 基本程序结构
4.2.1 顺序结构
例4-1,将内部 RAM 中 20H 单元和 30H 单元的无符号数 相加,存入R0(高位)和R1(低位)中。源程序如下:
MOV A,20H ;取出被加数
ADD A,30H ;两数相加
MOV R1,A ;低位存入R1
CLR A
;
ADDC A,#00H ;取进位标志
循环处理部分又称循环体,是重复执行的数据处理程序段, 它是循环程序的核心部分(功能主体)。
.
4. 2 基本程序结构
4.2.3 循环结构
(3)循环控制部分 控制部分控制循环继续与否。
(4)结束部分
结束部分对循环程序全部执行结束后的结果进行 分析、处理和保存。
循环结构程序一般分为“单重循环”和“多重循 环”两类,循环次数的控制有多种方式,当循环次 数已知时,可采用循环次数计数器控制循环;若循 环次数未知时,可按条件满足与否控制循环。
.
4. 2 基本程序结构
4.2.3 循环结构
2.循环程序设计
在一个循环程序的循环字符串以回车符(0DH)为结束标志,并存放在
内部RAM40H单元开始的连续存储单元之中,编写测试字符
串长度的汇编语言程序。
编程思路 —— 为测试字符串(0DH)的长度,应使用逐个
依据程序分叉的数目,可将分支结构程序细分为 单分支选择结构和多分支选择结构两类。
.
4. 2 基本程序结构
4.2.2 分支结构
1、单分支选择结构
当程序的判断仅有两个出口(分叉),即两者选一时,称为 单分支结构。通常用条件判断指令来选择并确定程序的出口。
例4-3.设内部RAM 40H和41H单元中存放2个8位无符号二进制 数,试编程找出其中的大数存人30H单元中。源程序如下:
单片机原理与接口技术
第四章 MCS-51系列单片机程序设计
2010/5/18
.
4.1 汇编语言程序设计概述
计算机是仿照人的思维方式顺序执行一条条指令来完成特定 任务的机器,计算机程序因此被定义为指令或语句的“有序 集合”,程序设计是指编写计算机程序的过程。
汇编语言是用指令助记符等表示的计算机指令,采用汇编语 言编写的程序被称为汇编语言程序。汇编语言程序具有代码 效率高(编译后的指令代码占用存储空间小)和执行时间短 等优势和特点。
.
4.1 汇编语言程序设计概述
4.1.2 汇编语言伪指令
2、赋值伪指令EQU 格式:字符名称 EQU 操作数
说明:该指令用于字符名称赋值。在同一个源 程序中,任何一个字符名称只能赋值一次。且 一旦赋值之后,整个源程序中该字符的值就固 定不变了。例如: ADPORT EQU 1001H 即给字符名称ADPORT 赋值16进制数1001H。
4.2.3 循环结构 2.循环程序设计
◇ 程序如下: MOV R7,#0FFH ;设长度计数器初值 MOV R0,#3FH ;字符串指针 初值
LOOP:INC R7 INC R0 CJNE @R0,#ODH,LOOP RET
.
4. 2 基本程序结构
4.2.4 子程序结构
主程序
在编写程序过程中,如果遇到在
.
4.1 汇编语言程序设计概述
4.1.2 汇编语言伪指令
3、数据地址赋值伪指令DATA 格式:字符名称 DATA 操作数 说明:DATA伪指令的功能与EQU伪指令相似,不同之
处在于DATA伪指令所定义的字符名称可先使用后定 义(赋值),也可先定义(赋值)后使用。在程序 中它常用来定义(赋值)数据地址。
由于单片机的存储器等资源有限,单片机应用程序中经常需 要面对硬件操作,且对程序执行的时间有较为严格的要求或 限制。因此,汇编语言程序设计是单片机应用系统设计的重 要基础之一。
.
4.1 汇编语言程序设计概述
4.1.1 汇编语言的特点及语句格式
1、汇编语言的特点: 汇编语言的特点归纳如下:
◇ 助记符指令与机器指令一一对应; ◇ 程序代码效率高,占用存储空间小,运行速度快, 汇编语言程序往往是最优化的程序; ◇ 助记符指令(汇编指令)与计算机硬件联系紧密, 要求编程人员对计算机硬件较为熟悉; ◇ 汇编语言程序缺乏通用性,移植性较差。
.
4.1 汇编语言程序设计概述
4.1.2 汇编语言伪指令
7、位地址赋值伪指令BIT 格式:字符名称 BIT 位地址 说明:该伪指令给字符名称赋予位地址(片内RAM和SFR中的
位地址),常用于位操作程序中。例如:
FLAG BIT 20H 即将位地址20H赋予字符名称FLAG。 8、定义汇编结束伪指令END 格式:[标号:]END 说明:汇编结束伪指令END的作用是通知汇编程序,汇编源程
.
4.1 汇编语言程序设计概述
4.1.2 汇编语言伪指令
4、字节数据赋值伪指令DB 格式:[标号:] DB数据表(字节) 说明:该伪指令用于定义(赋值)若干字节数据表
(固定常数),并存放在指定地址单元开始的程序 存储器中。 例如:
ORG 0050H TABLE:DB 99H,88H
即表示在地址0050H(标号TABLE)开始定义(赋 值)两个字节数据(99H,88H)。
.
4. 2 基本程序结构
4.2.5 中断程序结构
例4-7,设89C51单片机外中断0(EX0)下降沿有效,每次进入 中断服务程序,要求将89C51单片机的P1.7~P1.0取反。
主程序如下:
ORG 0000H
STAR:AJMP MAIN ;主程序原始入口
ORG 0003H ;外部中断0中断向量
AJMP EXTR ;跳转到EX0中断服务子程序实际入 口地址
几个程序段中都需要执行某段相
子程序
同程序的情况(功能独立),为
调用
减少编程工作量和节省程序存储 断点
空间,就应该采用子程序结构,
将重复执行的相同程序段编写成
为一个子程序(功能子程序)。
返回
.
4. 2 基本程序结构
4.2.3 子程序结构
MAIN: ……
;进入主程序
MOV R0,#03H ;设置入口参数(延时1)
MOV R0,A ;高位存入R0
RET
.
4. 2 基本程序结构
4.2.2 分支结构
分支结构程序利用条件转移指令,使程序在执行 某一指令后(产生测试条件),根据所规定的条件 满足与否改变其后程序执行的顺序(产生分叉), 即根据判断条件的成立与否来确定程序的走向。分 支结构程序的特征是程序段中有控制转移类指令 (条件转移指令)。
;若X< 10,转LOOP2
CJNE A,#100,LOOP1;与100比较
LOOP1: JNC LOOP3
;若X>100,转LOOP3
MOV 40H,#00H ;因10≤X<100,故Y=0
SJMP EXIT LOOP2: DEC A
;因X<10,故Y=X一1