200 likes | 377 Views
第4章 80C51 汇编语言程序设计. 本章的主要内容. 程序设计语言和伪指令; MCS-51 单片机汇编语言程序设计的步骤 延时程序的使用方法 查表程序设计 数制转换的原理. 4.1.1 程序设计语言. 机器语言 汇编语言 C8051 语言. 4.1.2 伪指令. ORG 操作数; 符号名称 EQU 操作数; 字符名称 DATA 操作数; 【 标号: 】 DB 数据表; 【 标号: 】 DW 数据表; 字符名称 bit 位地址; P10 bit P1.0.
E N D
第4章 80C51汇编语言程序设计
本章的主要内容 • 程序设计语言和伪指令; • MCS-51单片机汇编语言程序设计的步骤 • 延时程序的使用方法 • 查表程序设计 • 数制转换的原理
4.1.1 程序设计语言 • 机器语言 • 汇编语言 • C8051语言
4.1.2 伪指令 • ORG 操作数; • 符号名称 EQU 操作数; • 字符名称 DATA 操作数; • 【标号:】 DB 数据表; • 【标号:】 DW 数据表; • 字符名称 bit 位地址; P10 bit P1.0
4.1.3 简单汇编语言程序设计(67) 虽然单片机的每—条指令能使计算机完成一种特定的操作。但要完成某一特定的任务还需要将这些指令按工作要求有序组合为一段完整的程序。程序实际上是一系列计算机指令的有序集合。我们把利用计算机的指令系统来合理地编写出解决某个问题的程序的过程,称之为程序设计。
关于流程图符号: 开始、结束----圆角矩形 工作任务----矩形 判断分支----菱形 程序流向---- 程序连接---- 结束 开始 编制程序的步骤 1.任务分析(硬件、软件系统分析) 2.确定算法和工作步骤; 3.程序总体设计和流程图绘制
4. 分配内存,确定程序与数据区存放地址; 5. 编写源程序; 6. 调试、修改,最终确定程序。
方法技巧 • 模块化设计(显示、打 印、输入、发送) • 2. 尽量采用循环及子程序结构(节省内存)
汇编语言的规范 • 汇编语言源程序由以下两种指令构成 • 汇编语句(指令语句) • 伪指令(指示性语句) • 汇编语句的格式: • 标号: 操作码 操作数 ;注释 • 3. 数据表示形式: • 二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识)
4.2.1 三种程序的结构 (1)分支结构或者选择结构 (2)循环结构 (3)查表程序
4.2.2 三个应用举例 (1)延时程序 (2)十六进制—ASCII的转换 (3)两字节的乘法
(1)延时程序 • 题目:单片机采用12M晶振,试编写0.1s延时程序 • ORG 0100H • MOV R2,#200 • LOOP:MOV R3,#250 • DJNZ R3,$ (2周期) • DJNZ R2,LOOP • RET 请思考: 机器周期是多少? 请思考: 如何计算总的延时时间?
例2: 50ms延时子程序。设晶振频率为12MHz, 则机器周期为1us。 DEL: MOV R7,#200 ;1MC DEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC 延时时间:t=1+200[(1+1+2*123)+2]+2 ≈50000us=50ms
(2)代码转换类程序设计 • 十六进制数与ASCII的转换 • 十六进制整数转换成单字节BCD码整数
* 单字节十六进制数转换成双字节ASCII码 表4-1 十六进制数与ASCII码之间的关系
例1:待转换的单字节十六进制数在寄存器R2中。高四位的例1:待转换的单字节十六进制数在寄存器R2中。高四位的 ASCII码存在A中,低四位的ASCII码存在B中。 ORG 0100H MOV A,R2 MOV B,A ;暂存待转换的单字节十六进制数 LCALL MS1 XCH A,B ;存放低四位的ASCII码 SWAP A ;准备转换高四位 LCALL MS1 SJMP $ MS1: ANL A,#0FH CJNE A, #0AH, N1 SJMP DAYU N1: JNC DAYU ADD A ,#30H SJMP DIWEI DAYU: ADD A ,#37H ;将累加器低四位转换成 ASCII DIWEI DIWEI: RET
例2:查找无符号数据块中最大值(P104) 请思考: 用另外一种方法? • ORG 1000H • MOV R2,#0AH ;共计十个数 • CLR A • LP: SUBB A,@R1 • JNC NEXT • MOV A,@R1 ;第二个数大 • SJMP NEXT1 • NEXT: ADD A,@R1 ;原数最大,恢复 • NEXT1: INC R1 • DJNZ R2,LP • END
(3) 查表程序设计 • MOVC A,@A+DPTR • MOVC A,@A+PC 举例:查表求ASCII码 已知:R0低四位有一个十六进制数(0~F)。 将查表找出的相应ASCII码并送回R0中。
请思考: 为什么? ORG 0100H MOV A,R0 ANL A,#0FH ;屏蔽高4位 ADD A,#03H MOVC A,@A+PC ;查表 MOV R0,A ;存结果 SJMP $ ASCTAB: DB '0','1','2','3','4','5','6','7' DB '8','9','A','B','C','D','E','F'
4.2 子程序设计时注意事项 1. 给子程序赋一个名字。实际为入口地址代号。 2. 要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。 (寄存器、存储器、堆栈方式) 3. 保护与恢复现场: 保护现场:压栈指令PUSH 恢复现场:弹出指令POP 4. 子程序可以嵌套