《单片机原理及应用》第五章汇编语言程序设计

上传人:宝路 文档编号:52850556 上传时间:2018-08-26 格式:PPT 页数:35 大小:2.62MB
返回 下载 相关 举报
《单片机原理及应用》第五章汇编语言程序设计_第1页
第1页 / 共35页
《单片机原理及应用》第五章汇编语言程序设计_第2页
第2页 / 共35页
《单片机原理及应用》第五章汇编语言程序设计_第3页
第3页 / 共35页
《单片机原理及应用》第五章汇编语言程序设计_第4页
第4页 / 共35页
《单片机原理及应用》第五章汇编语言程序设计_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《《单片机原理及应用》第五章汇编语言程序设计》由会员分享,可在线阅读,更多相关《《单片机原理及应用》第五章汇编语言程序设计(35页珍藏版)》请在金锄头文库上搜索。

1、第五章 汇编 语言程序设计,1 程序设计方法 2 顺序程序 3 分支程序 4 循环程序 5 子程序 6 算术运算程序,第五章 汇编语言程序设计,5-1-2 汇编语言程序设计步骤 一.分析问题。 二.确定算法。 三.制定程序流程图:表示程序结构和程序功能 四.编制源程序1. 合理分配存储器单元和了解I/O接口地址。2. 按功能设计程序,明确各程序之间的相互关系。3. 用注释行说明程序,便于阅读和修改调试和修改。 五.程序调试。,第五章 汇编语言程序设计,5-1-3 评价程序质量的标准(1)程序的执行时间。(2)程序所占用的内存字节数。(3)程序的逻辑性、可读性。(4)程序的兼容性、可扩展性。(5

2、)程序的可靠性。,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,第五章 汇编语言程序设计,第五章 汇编语言程序设计,例2 压缩式BCD码分解成为单字节BCD码。,MOV R0,#40H ;设指针 MOV A,R0 ;取一个字节 MOV R2,A ;暂存 ANL A,#0FH ;清0高半字节 INC R0 MOV R

3、0,A ;保存数据个位 MOV A,R2 SWAP A ;十位换到低半字节 ANL A,#0FH INC R0 MOV R0,A ;保存数据十位,十 个,第五章 汇编语言程序设计,例5-1 假设两个双字节无符号数,分别存放在R1R0和R3R2中,高字节在前,低字节在后。编程使两数相加,和数存放回R2R1R0中。ORG 1000hCLR CMOV A,R0 ;取被加数低字节至AADD A,R2 ;与加数低字节相加MOV R0,A ;存和数低字节MOV A,Rl ;取被加数高字节至AADDC A,R3 ;与加数高字节相加MOV Rl,A ;存和数高字节MOV A,#0 ADDC A,#0 ;加进位

4、位MOV R2,A ;存和数进位位SJMP $ ;原地踏步END,第五章 汇编语言程序设计,5-3 分支程序由条件转移指令构成程序判断框部分,形成程序分支结构。 5-3-1 单重分支程序一个判断决策框,程序有两条出路。两种分支结构。 例1 求R2中补码绝对值,正数不变,负数变补。MOV A,R2JNB ACC.7,NEXT ;为正数?CPL A ;负数变补INC AMOV R2,ANEXT: SJMP NEXT ;结束,第五章 汇编语言程序设计,5-3-2 多重分支程序 多次使用条件转移指令,形成两个以上判断框。 例5-7 设30H单元存放的是一元二次方程ax2+bx+c=0根的判别式=b2-

5、4ac的值。 解:值为有符号数,有三种情况,即大于零、等于零、小于零。,第五章 汇编语言程序设计,编程:ORG 1000H START: MOV A,30H ;值送AJNB ACC.7,YES ;=0转YES MOV 31H,#0 ;0转TOWMOV 31H,#1 ;=0有相同实根SJMP FINISH TOW: MOV 31H,#2 ;有两个不同实根 FINISH:SJMP $,第五章 汇编语言程序设计,5-3-3 N路分支程序N路分支程序是根据前面程序运行的结果,可以有N种选择,并能转向其中任一处理程序。,第五章 汇编语言程序设计,例5-10 128路分支程序。 功能:根据R3的值(00H

6、7FH)转到128个目的地址。 参考程序:JMPl28: MOV A,R3RL A ;(A)2MOV DPTR,#PRGTBL ;散转表首址送DPTRJMP A+DPTR ;散转 PRGTBL:AJMP ROUT00AJMP ROUT01 AJMP ROUT7F ;128个AJMP指令占256个字节,第五章 汇编语言程序设计,例5-11 256路分支程序 功能:根据R3的值转移到256个目的地址; 入口条件:(R3)=转移目的地址代号(00HFFH); 出口条件:转移到相应分支处理程序入口。 解: JMP256: MOV A,R3 ;取N值MOV DPTR,#PRGTBL ;指向分支地址表首址

7、CLR C RLC A ;(A)2JNC LOWl28 ;是前128个分支程序,则转移INC DPH ;否则基址加256,第五章 汇编语言程序设计,LOWl28: MOV TEMP,A ;暂存AINC A ;指向地址低8位MOVC A,A+DPTR ;查表,读分支地址低8位PUSH ACC ;地址低8位入栈MOV A,TEMP ;恢复A,指向地址高8位MOVC A,A+DPTR ;查表,读分支地址高8位PUSH ACC ;地址高8位入栈 RET ;分支地址弹入PC实现转移 PRGTBL: DW ROUT00 ;占用512个字节DW ROUT01,第五章 汇编语言程序设计,例5-12 大于256

8、路分支转移程序 功能:根据入口条件转向n个分支处理程序入口条件:(R7R6)=转移目的地址代号;出口条件:转移到相应分支处理程序入口。程序散转表中有N条LJMP指令,每条LJMP指令占3个字节,因此要按入口条件将址代号乘以3,用乘积的高字节加DPH,乘积的低字节送A(变址寄存器)。 PRGTBL:LJMP ROUT0LJMP ROUT1LJMP ROUT2,第五章 汇编语言程序设计,参考程序: JMPN:MOV DPTR,#PRGTBL;DPTR指向表首址 MOV A,R7 ;取地址代号高8位 MOV B,#3 ; MUL AB ;3 ADD A,DPH ; MOV DPH,A ;修改指针高8

9、位 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 ;散转,第五章 汇编语言程序设计,5-4 循环程序 包含多次重复执行的程序段,循环结构使程序紧凑。 5-4-1 循环程序的导出 各个环节任务:一初始化部分循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。二循环体循环工作部分:需多次重复处理的工作。循环控制部分:1.修改指针和循环控制变量。2.检测循环条件:满足循环条件,继续循环,否则退出循环。

10、三.结束部分 处理和保存循环结果。1)已知循环次数 2)循环次数未知允许0次循环的循环结构:在循环工作之前检测循环条件。,第五章 汇编语言程序设计,单重循环 简单循环结构:循环体中不套循环。 例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。 SUM:MOV R0,#42H;设指针MOV A,R0MOV R2,A ;循环计数器R2nCLR A ;结果单元清0MOV R3,A ADD1:INC R0 ;修改指针ADD A,R0 ;累加JNC NEXT ;处理进位INC R3 ;有进位,高字节加1 NEXT: DJNZ R2,ADD1 ;循环控制

11、:数据是否加完?MOV 40H,A ;循环结束,保存结果MOV 41H,R3RET,第五章 汇编语言程序设计,循环控制方法:计数控制、特征标志控制。 一.计数控制:设循环计数器,控制循环次数。正计数和倒计数两种方式。 例:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。MOV DPTR,#2100HMOVX A,DPTRMOV R2,A NEXT:INC DPTRMOVX A,DPTRORL A,#80HJNB P,PASS ;判断是否加校验MOVX DPTR,A;是,则加奇校验 PASS:DJNZ R2,NEXT DONE:

12、SJMP DONE,第五章 汇编语言程序设计,二.特征控制: 设定循环结束标志实现循环控制。 例:找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。 START:MOV DPTR,#LIST ;数表首地址MOV B,#127 ;预置最小值 NEXT: MOVX A,DPTR ;取数INC DPTR ;修改指针CJNE A,#0FFH,NEXT1;是否为数表结尾?SJMP DONE ;循环结束 NEXT1:CJNE A,B,NEXT2 ;比较 NEXT2:JNC NEXT ;Cy=1,则ABMOV B,A ;保存较小值SJMP NEXT DONE: SJMP DON

13、E,第五章 汇编语言程序设计,5-4-2 多重循环循环体中套循环结构。以双重循环使用较多。例:将内存一串单字节无符号数升序排序。 步骤: 每次取相邻单元的两个数比较, 决定是否需要交换数据位置。 第一次循环,比较N-1次,取数据表中最大值。 第二次循环,比较N-2次,取到次大值。 第N-1次循环:比较一次,排序结束。,第五章 汇编语言程序设计,SORT: MOV A,#N-1 ;N个数据排序MOV R4,A ;外循环次数 LOOP1:MOV A,R4MOV R3,A ;内循环次数MOV R0,#TAB ;设数据指针 LOOP2:MOV A,R0 ;取二数MOV B,AINC R0MOV A,R

14、0CJNE A,B,L1 ;比较 L1: JNC UNEX ;AB,不交换DEC R0 ;否则交换数据XCH A ,R0INC R0MOV R0,A UNEX: DJNZ R3,LOOP2 ;内循环结束?DJNZ R4,LOOP1 ;外循环结束?RET,第五章 汇编语言程序设计,软件延时程序 用循环程序将指令重复多次执行,实现软件延时。试计算延时程序的执行时间。源程序 指令周期(M) 指令执行次数 DELAY:MOV R6,#64H 1I1: MOV R7,#0FFH 1I2: DJNZ R7,I2 2DJNZ R6,I1 2RET 2,延时时间计算:(设时钟f=12MHz) t=(11+11

15、00+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,第五章 汇编语言程序设计,5.5.2编写循环程序应注意的问题 1)循环体前应注意安排循环初始化;2)内外循环间不应相互交叉。,第五章 汇编语言程序设计,5-5 查表程序 例5-19 一个十六进制数存放在HEX单元的低四位,将其转换成ASCII码并送回HEX单元。 编程: ORG 0100HHEX EQU 30H HEXASC: MOV A, HEX ANL A ,#00001111BADD A, #3 ;变址调整MOVC A, A+PCMOV HEX,A ;2字节RET ;1字节 ASCTAB: DB 30H,3lH,32H,33HDB 34H,35H,36H,37HDB 38H,39H,41H,42HDB 43H,44H,45H,46HEND,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

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