- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV R0, #41H ; 将被加数地址送数据指针R0
MOV R1, #51H ; 将加数地址送数据指针R1
AD1: MOV A, @R0 ADD A,@R1 ; 被加数低字节的内容送入A ;
MOV @R0, A
DEC R0 DEC R1
;
; ;
MOV A, @R0
ADDC A, @R1 MOV @R0, A
结束循环等待, 并读取转换值, 其程序如下:
START: MOV DPTR, #addr ; 0809端口地址送DPTR MOV A, #00H ; 启动0809 MOVX @DPTR, A
LOOP: JNB P1.7, LOOP; 检测P1.7状态, 判是否转换结束
MOVX A, @DPTR; …
汇编语言程序设计,就是采用汇编指令来编写计算机程序。 要对应用中需使用的寄存器、存储单元、 I/O 端口等先要作出具 体安排。在实际编程中,如何正确选择指令、寻址方式和合理使 用工作寄存器,包括数据存储器单元,如何对扩展的 I/O 端口进 行操作等,都是基本的汇编语言程序设计技巧。 程序结构一般采用以下三种基本控制结构,即顺序结构、 分支结构和循环结构来组成,再加上使用广泛的子程序及中断服 务子程序,共有五种基本结构。
1000H 2000H 2100H 2200H ; 清零Cy
START: CLR C
MOV DPTR, #ST1 ;
MOVX A, @DPTR
MOV R2, A MOVX A, @DPTR CLR C
;
; ;
MOV DPTR, #ST2 ;
第 4 章 单片机汇编语言程序设计
SUBB A, R2;
JNC BIG1 ; 若第二个数大, XCH A, R2; BIG0: MOV DPTR, #ST3 MOVX @DPTR, A ; AJMP B BIG1: MOVX A, @DPTR; SJMP BIG0 B: RET
第 4 章 单片机汇编语言程序设计
4.2.1 顺序程序结构
例 1 两个无符号双字节数相加。 设被加数存放于内部RAM的40H(高位字节), 41H(低 位字节), 加数存放于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。
第 4 章 单片机汇编语言程序设计
程序如下:
START: CLR C ; 将Cy
DEL0:
DEL1: DEL2:
MOV R6, #200
MOV R7, #248 NOP DJNZ R7, DEL2 DJNZ R6, DEL1 DJNZ R5, DEL0 RET
第 4 章 单片机汇编语言程序设计 上例程序中采用了多重循环程序 , 即在一个循环体中又包 含了其它的循环程序, 这种方式是实现延时程序的常用方法。 使用多重循环时, 必须注意: (1) 循环嵌套, 必须层次分明, 不允许产生内外层循环交叉。
SUL2: RET
第 4 章 单片机汇编语言程序设计
例 4 比较两个无符号数的大小。
设外部 RAM 的存储单元 ST1和 ST2中存放两个不带符号的二进制 数, 找出其中的大数存入外部 RAM 中的 ST3单元中。
第 4 章 单片机汇编语言程序设计
ORG ST1 ST2 ST3 EQU EQU EQU
分地址单元作为工作单元 , 存放程序执行的中间值或执行结
果, 工作单元清零工作常常放在程序的初始化部分中。 设有50个工作单元, 其首址为外部存储器8000H单元, 则 其工作单元清零程序如下:
第 4 章 单片机汇编语言程序设计 CLEAR: CLR A MOV DPTR, #8000H ; 工作单元首址送指针 MOV R2, #50 ; CLEAR1: MOVX @DPTR, A INC DPTR ;
由累加器 A的内容来动态选择其中的某一个分支转移程序。
第 4 章 单片机汇编语言程序设计 例9 在内部 RAM中从 50H单元开始的连续单元依次存 放了一串字符, 该字符串以回车符为结束标志, 要求测试该字
符串的长度。
第 4 章 单片机汇编语言程序设计 ASCII 码 表
第 4 章 单片机汇编语言程序设计
程序如下: START: MOV R2, #0FFH MOV R0, #4FH ; 数据指针R0
第 4 章 单片机汇编语言程序设计
第4章 汇编语言程序设计
第 4 章 单片机汇编语言程序设计
4.1 单片机程序设计语言概述
所谓程序设计,就是按照给定的任务要求,编写 出完整的计算机程序。要完成同样的任务,使用的方 法或程序并不是唯一的。因此,程序设计的质量将直 接影响到计算机系统的工作效率、运行可靠性。
第 4 章 单片机汇编语言程序设计
4.2.2 分支程序设计
(a) 单分支流程;
(b) 多分支流程
第 4 章 单片机汇编语言程序设计 例 3 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
1 y 1 0
x0 x0 x0
第 4 章 单片机汇编语言程序设计
伪指令语句:主要是为汇编语言服务的,在汇编时没有目标 代码与之对应。 例如:ONE EQU 1 宏指令语句:用以代替汇编语言源程序中重复使用的程序段 的一种语句,由汇编程序在汇编时产生相应的目标代码。
第 4 章 单片机汇编语言程序设计 汇编语言语句的格式 指令语句和伪指令语句的格式是类似的。 指令语句的格式为: 【标号】:助记符(操作码)【操作数】 ;【注释】
第 4 章 单片机汇编语言程序设计
汇编语言(Assembly Language) 指用指令助记符代替机器码的编程语言。汇编语 言程序结构简单,执行速度快,程序易优化,编译后 占用存储空间小,是单片机应用系统开发中最常用的 程序设计语言。汇编语言的缺点是可读性比较差,只 有熟悉单片机的指令系统,并具有一定的程序设计经 验,才能研制出功能复杂的应用程序。
第 4 章 单片机汇编语言程序设计 二、 多重循环
例 7 10 秒延时程序。 延时程序与 MCS - 51 执行指令的时间有关, 如果使用 12 MHz晶振, 一个机器周期为 1 μs, 计算出一条指令以至一个循环所需要的执行时间, 给 出相应的循环次数, 便能达到延时的目的。10 秒延时程序如下: DELAY: MOV R5, #100
伪指令语句的格式:
名字 定义符 参数 ;注释
两种语句都由四个部分组成。其中每一部分称为域也称为字段, 各字段之间用一个空格或字段定界符分隔,常用的字段定界符 有冒号“:” 、逗号“,”和分号“;”。其中方括号括起来 的是可选择部分。
第 4 章 单片机汇编语言程序设计
4.2 80C51汇编语言程序设计
第 4 章 单片机汇编语言程序设计
4.1.1 按照语言的结构及其功能可以分为三种
• 1.机器语言:机器语言是用二进制代码0和1表示指 令和数据的最原始的程序设计语言。 • 2.汇编语言:在汇编语言中,指令用助记符表示, 地址、操作数可用标号、符号地址及字符等形式来描 述。 • 3.高级语言:高级语言是接近于人的自然语言,面3) 循环控制部分: 这部分的作用是修改循环变量和控制变
量, 并判断循环是否结束, 直到符合结束条件时, 跳出循环为止。
(4) 结束部分: 这部分主要是对循环程序的结果进行分析、 处理和存放。
第 4 章 单片机汇编语言程序设计
例 5 工作单元清零。
在应用系统程序设计时 , 有时经常需要将存储器中各部
指令把累加器的 8 位无符号数与 16 位数据指针的内容相加,
并把相加的结果装入程序计数器 PC, 控制程序转向目标地址 去执行。此指令的特点在于 , 转移的目标地址不是在编程或
汇编时预先确定的 , 而是在程序运行过程中动态地确定的。
目标地址是以数据指针 DPTR的内容为起始的 256 字节范围 内的指定地址, 即由 DPTR的内容决定分支转移程序的首地址,
程序如下:
START: CJNE R0, #00H, SUL1; R0中的数与00比较不等转移
MOV R1, #00H; 相等, R1← 0 SJMP SUL2 SUL1: JC NEG ; 两数不等, 若(R0)<0, 转向NEG MOV R1, #01H ; (R0)>0, 则 R1←01H SJMP SUL2 NEG: MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH
第 4 章 单片机汇编语言程序设计 高级语言(High-Level Language)
在汇编语言的基础上用自然语言的语句来编写程序, 例如PL/M-51、C51等,程序可读性强,通用性好,适 用于不熟悉单片机指令系统的的用户。 高级语言编写程序的缺点是实时性不高,结构不紧凑, 编译后占用存储空间比较大,这一点在存储器有限的单 片机应用系统中没有优势。
第 4 章 单片机汇编语言程序设计
机器语言(Machine Language)
直接用机器码编写程序、能够为计算机直接执行 的机器级语言。机器码是一串由二进制代码“0”和“1” 组成的二进制数据,其执行速度快,但是可读性极差。 机器语言一般只在简单的开发装置中使用,程序的设 计、输入、修改和调试都很麻烦。
(2) 外循环可以一层层向内循环进入, 结束时由里往外一
层层退出。
(3) 内循环可以直接转入外循环, 实现一个循环由多个条
件控制的循环结构方式。
第 4 章 单片机汇编语言程序设计
外循环
中循环 内循环
外循环 内循环
外循环 内循环
内循环
(a)嵌套正确
(b)嵌套正确
(c)交叉不正确
多重循环示意图
第 4 章 单片机汇编语言程序设计 例8设某系统的模数转换器是ADC0809, 它的转换结束信 号 EOC连接到8031 的P1.7端, 当 EOC的状态由低变高时, 则