单片机应用课件第5章

上传人:tian****1990 文档编号:74096811 上传时间:2019-01-26 格式:PPT 页数:33 大小:443.31KB
返回 下载 相关 举报
单片机应用课件第5章_第1页
第1页 / 共33页
单片机应用课件第5章_第2页
第2页 / 共33页
单片机应用课件第5章_第3页
第3页 / 共33页
单片机应用课件第5章_第4页
第4页 / 共33页
单片机应用课件第5章_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《单片机应用课件第5章》由会员分享,可在线阅读,更多相关《单片机应用课件第5章(33页珍藏版)》请在金锄头文库上搜索。

1、第五章 汇编语言程序设计,5-1 汇编程序的约定,5-2 程序设计步骤,5-3 直线程序,5-4 分支程序,5-5 循环程序,5-6 子程序,5-1 汇编程序约定,汇编语言程序: 用汇编语言编写的、完成特定功能的指令序列。 汇编程序: 能将汇编语言源程序转换成机器语言目标程序的系统软件。,汇编语言程序到机器语言程序的转换过程称为汇编。 1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。(通常需进行2次) 2.机器汇编:用汇编程序进行汇编。,源程序使用机器汇编要考虑汇编程序的约定,1)按指令格式和语法规则编写程序。 常数的表示: 十进制数:20 十六进制数:87H,0F0H 二进

2、制数:01011001B 字符: H 字符串: “Hello”。 2)使用伪指令提供汇编信息。,汇编的主要任务:,1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST)。,一. 汇编语言指令类型 1.机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。,二汇编控制指令(伪指令) 常用伪指令及其功能:,1. ORG起始地址指令:指明程序和数据块起始地址。 指令地址 机器码 源程序 ORG 2000H 200

3、0H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0 ORG 3000H 3000H 23 DB 23H,100,A 3001H 64 3002H 41,2. DB 定义字节型常数指令。 例:TAB: DB 12H,100,A,5. EQU 等值。为标号或标识符赋值。 X1 EQU 2000H X2 EQU 0FH MAIN: MOV DPTR,#X1 ADD A,#X2,4. DS 定义存储空间指令。 例:ORG 1800H DS 05H+02H,3. DW 定义字型常数指令(高8位在前)。 例: DW 1234H,5678H,12,DB、DW、DS伪指令只

4、对程序存储器使用。,6. DATA 数据地址赋值。 X1 DATA 1020H+2000H EQU定义的字符必须先定义后使用,而DATA伪指令没有这种限制。,8. END 结束汇编指令。 例:START: END,7. BIT 位地址赋值指令。 例: A1 BIT P1.0,5-2 汇编语言程序设计步骤,一.确定方案和计算方法 二.了解应用系统的硬件配置、性能指标。 三.建立系统数学模型,确定控制算法和操作步骤。 四.画程序流程图 表示程序结构和程序功能,五. 编制源程序 1.合理分配存储器单元和了解I/O接口地址。 2.按功能设计程序,明确各程序之间的相互关系。 3.用注释行说明程序,便于阅

5、读和修改调试和修改。,常用程序结构: 直线程序、分支程序、循环程序、子程序,5-3 直线程序 直线程序又称简单程序,程序走向只有一条路径。,双字节变补程序(设数据在R4R5中): MOV A,R5 ;取低字节 CPL A ADD A,#1 ;低字节变补 MOV R5,A MOV A,R4 ;取高字节 CPL A ADDC A,#0 ;高字节变补 MOV R4,A,例5-3-4 压缩式BCD码分解成为单字节BCD码。,MOV R0,#40H ;设指针 MOV A,R0 ;取一个字节 MOV R2,A ;暂存 ANL A,#0FH ;清0高半字节 INC R0 MOV R0,A ;保存数据个位 M

6、OV A,R2 SWAP A ;十位换到低半字节 ANL A,#0FH INC R0 MOV R0,A ;保存数据十位,十 个,5-4 分支程序 由条件转移指令构成程序判断框部分,形成程序分支结构。,5-4-2 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构:,例 求R2中补码绝对值,正数不变,负数变补。 MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束,行李计价: 当G5,M=G3; 当G5,M=G3+(G-5)(5-3),FRT: MOV A,40H ;取行李重量计价单位G M

7、OV R3,A MOV B,#03H ;M=G3 MUL AB MOV R2,A ;暂存3G MOV A,R3 ;取回G CJNE A,#05H,L1;G5 ? SJMP WETC L1:JC WETC ;是,转至WETC SUBB A,#05H ;否则M=3G+2(G-5) RLC A ADD A,R2 WETC:MOV 41H,A ;存结果M RET,5-4-3 多重分支程序 一多次使用条件转移指令,形成两个以上判断框。,例 求符号函数Y=SGN(X) +1 当 X0 SGN(X)= 0 当 X=0 -1 当 X0,SYMB: MOV A,40H ;取X JZ STOR ;X=0,Y=X

8、JB ACC.7,MINUS;X0 MOV A,# 1 ;X0,Y=+1 SJMP STOR MINUS:MOV A,#0FFH;X0,Y= -1 STOR: MOV 41H,A ;保存Y RET,二按分支号转移,如:分支号=0,程序转移到ADDR0处;当分支号=1,程序转移到ADDR1处; 。,(1)用地址表法。设分支号已存入A。 MTJS:MOV DPTR,#TAB ;取表首地址 CLR C ;分支号2 RLC A MOV R2,A MOVC A,A+DPTR;取分支地址低位 PUSH ACC ;入栈保存 MOV A,R2 INC A MOVC A,A+DPTR;取分支地址高位 PUSH

9、ACC ;入栈保存 RET ;分支地址PC,转移 TAB: DW ADDR0 ;分支地址表 DW ADDR1 ADDR0: ;程序段0 ,(2)转移表法。用分支转移指令 JMP A+DPTR。设R7R6=分支号,MTJS:MOV DPTR,#TAB;指向表首地址 MOV A,R7 ;分支号高字节3 MOV B,#03H MUL AB ;乘积不超过1字节 ADD A,DPH MOV DPH,A MOV A,R6 ;分支号低字节3 MOV B,#03H MUL AB XCH A,B ADD A,DPH ;DPHDPH+(R7、R6)3)高字节 MOV DPH,A XCH A,B ;A(R7、R6)

10、3)低字节 JMP A+DPTR ;实现多分支转移 TAB: LJMP ADDR0 ;转移表 LJMP ADDR1 LJMP ADDRN ADDR0: ;程序段0 ,5-5 循环程序 包含多次重复执行的程序段,循环结构使程序紧凑。,5-5-1 循环程序的构成,各个环节任务: 一初始化部分 循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。,二循环体 循环工作部分: 需多次重复处理的工作。 循环控制部分: 1.修改指针和循环控制变量。 2.检测循环条件:满足循环条件,继续循环,否则退出循环。 三.结束部分 处理和保存循环结果。 允许0次循环的循环结构:在循环工作之前检测循环条件。,5-

11、5-2 单重循环 简单循环结构:循环体中不套循环。,例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。,SUM: MOV R0,#42H;设指针 MOV A,R0 MOV R2,A ;循环计数器n CLR A ;结果单元清0 MOV R3,A ADD1:INC R0 ;修改指针 ADD A,R0 ;累加 JNC NEXT ;处理进位 INC R3 ;有进位,高字节加1 NEXT: DJNZ R2,ADD1 ;循环控制:数据是否加完? MOV 40H,A ;循环结束,保存结果 MOV 41H,R3 RET,循环控制方法:计数控制、特征标志控制。

12、,一.计数控制: 设循环计数器,控制循环次数。正计数和倒计数两种方式。 例:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。,MOV DPTR,#2100H MOVX A,DPTR MOV R2,A NEXT:INC DPTR MOVX A,DPTR JNB P,PASS ORL A,#80H MOVX DPTR,A PASS:DJNZ R2,NEXT DONE:SJMP DONE,二.特征控制:设定循环结束标志实现循环控制。,例:找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。,START:M

13、OV DPTR,#LIST ;数表首地址 MOV B,#127 ;预置最小值 NEXT: MOVX A,DPTR ;取数 INC DPTR ;修改指针 CJNE A,#-1,NEXT1;是否为数表结尾? SJMP DONE ;循环结束 NEXT1:CJNE A,B,NEXT2 ;比较 NEXT2:JNC NEXT MOV B,A ;保存较小值 SJMP NEXT DONE: SJMP DONE,习题统计一班考试为100分和不及格人数,成绩单在41H起始单元。,5-5-3 多重循环 循环体中套循环结构。以双重循环使用较多。,例将内存一串单字节无符号数升序排序。 步骤: 每次取相邻单元的两个数比较

14、,决定是否需要交换数据位置。 第一次循环,比较N-1次,取到数据表中最大值。 第二次循环,比较N-2次,取到次大值。 第N-1次循环:比较一次,排序结束。,SORT: MOV A,#N-1 ;N个数据排序 MOV R4,A ;外循环次数 LOOP1: MOV A,R4 MOV R3,A ;内循环次数 MOV R0,#TAB ;设数据指针 LOOP2: MOV A,R0 ;取二数 MOV B,A INC R0 MOV A,R0 CJNE A,B,L1 ;比较 L1: JNC UNEX ;AB,不交换 DEC R0 ;否则交换数据 XCH A ,R0 INC R0 MOV R0,A UNEX: D

15、JNZ R3,LOOP2 ;内循环结束? DJNZ R4,LOOP1 ;外循环结束? RET,软件延时程序。 用循环程序将指令重复多次执行,实现软件延时。,试计算延时程序的执行时间。 源程序 指令周期(M) 指令执行次数,DELAY:MOV R6,#64H 1 I1: MOV R7,#0FFH 1 I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2,延时时间计算:(设时钟f=12MHz) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,5-6 子程序 子程序:能完成某项特定功能的独立程序段,可被反复调用。,5-6-1 子程序设计 一子程序入口用标号作为子程序名。 二调用子程序之前设置好堆栈。 三用返回指令RET结束子程序,并保 证堆栈栈顶为调用程序的返回地址。 四.子程序嵌套须考虑堆栈容量。 五.提供足够的调用信息: 如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,5-6-2 子程序的类型 按子程序与主程序之间传递参数的方式分类。,入口参数:调用子程序之前,需要传给子程序的参数。 出口参数:子程序送回调用

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号