收藏 分销(赏)

单片机原理汇编语言程序设计.pptx

上传人:a199****6536 文档编号:4168926 上传时间:2024-08-09 格式:PPTX 页数:35 大小:1.94MB
下载 相关 举报
单片机原理汇编语言程序设计.pptx_第1页
第1页 / 共35页
单片机原理汇编语言程序设计.pptx_第2页
第2页 / 共35页
单片机原理汇编语言程序设计.pptx_第3页
第3页 / 共35页
单片机原理汇编语言程序设计.pptx_第4页
第4页 / 共35页
单片机原理汇编语言程序设计.pptx_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、1第五章第五章 汇编语言程序言程序设计v1 1 程序程序程序程序设计设计方法方法方法方法v2 2 顺顺序程序序程序序程序序程序v3 3 分支程序分支程序分支程序分支程序v4 4 循循循循环环程序程序程序程序v5 5 子程序子程序子程序子程序v6 6 算算算算术术运算程序运算程序运算程序运算程序2第五章第五章 汇编语言程序言程序设计5-1-2 5-1-2 汇编语言程序言程序设计步步骤一一.分析分析问题。二二.确定算法。确定算法。三三.制定程序流程制定程序流程图:表示程序:表示程序结构和程序功能构和程序功能四四.编制源程序制源程序 1.1.合理分配存合理分配存储器器单元和了解元和了解I/OI/O接

2、口地址。接口地址。2.2.按功能按功能设计程序,程序,明确各程序之明确各程序之间的相互关系。的相互关系。3.3.用注用注释行行说明程序,明程序,便于便于阅读和修改和修改调试和修改。和修改。五五.程序程序调试。开始开始1 YN?3第五章第五章 汇编语言程序言程序设计5 5-1-3-1-3 评价程序价程序质量的量的标准准 (1)(1)程序的程序的执行行时间。(2)(2)程序所占用的内存字程序所占用的内存字节数。数。(3)(3)程序的程序的逻辑性、可性、可读性。性。(4)(4)程序的兼容性、可程序的兼容性、可扩展性。展性。(5)(5)程序的可靠性。程序的可靠性。45-2 5-2 顺序程序序程序 直直

3、线程序又称程序又称简单程序,程序走向只有一条路径。程序,程序走向只有一条路径。例例1 双字双字节变补程序(程序(设数据在数据在R4 R5中)中)双字双字节变补程序程序(设数据在数据在R4R5中中):MOV A,R5;取低字取低字节CPL AADD A,#1;低字低字节变补MOV R5,AMOV A,R4;取高字取高字节CPL AADDC A,#0;高字高字节变补MOV R4,A第五章第五章 汇编语言程序言程序设计5第五章第五章 汇编语言程序言程序设计例例2 2 压缩式式BCDBCD码分解成分解成为单字字节BCDBCD码。MOV R0,#40H;设指针设指针MOV A,R0;取一个字节取一个字节

4、MOV R2,A;暂存暂存ANL A,#0FH;清清0高半字节高半字节INC R0MOV R0,A ;保存数据个位保存数据个位MOV A,R2SWAP A ;十位换到低半字节十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位保存数据十位十十 个个6第五章第五章 汇编语言程序言程序设计 例例5-1 假假设两个双字两个双字节无符号数,分无符号数,分别存放在存放在R1R0和和R3R2中,高字中,高字节在在前,低字前,低字节在后。在后。编程使两数相加,和数存放回程使两数相加,和数存放回R2R1R0中。中。ORG 1000h CLR C MOV A,R0;取被加数低字节至A

5、ADD A,R2;与加数低字节相加 MOV R0,A;存和数低字节 MOV A,Rl;取被加数高字节至A ADDC A,R3;与加数高字节相加 MOV Rl,A;存和数高字节 MOV A,#0 ADDC A,#0;加进位位 MOV R2,A;存和数进位位 SJMP$;原地踏步 END7第五章第五章 汇编语言程序言程序设计5-3 5-3 分支程序分支程序 由条件由条件转移指令构成程序判断框部分,形成程序分支移指令构成程序判断框部分,形成程序分支结构。构。5-3-15-3-1 单重分支程序重分支程序 一个判断决策框,程序有两条出路。两种分支一个判断决策框,程序有两条出路。两种分支结构。构。例例1

6、求求R2中中补码绝对值,正数不,正数不变,负数数变补。MOV A,R2 JNB ACC.7,NEXT ;为正数?正数?CPL A ;负数数变补 INC A MOV R2,ANEXT:SJMP NEXT ;结束束条件满足条件满足?N影响条件影响条件Y处理段处理段8第五章第五章 汇编语言程序言程序设计5-3-2 5-3-2 多重分支程序多重分支程序多次使用条件转移指令,形成两个以上判断框。例例5-75-7 设30H单元存放的是一元二次方程ax2+bx+c=0根的判别式=b2-4ac的值。解:值为有符号数,有三种情况,即大于零、等于零、小于零。9第五章第五章 汇编语言程序言程序设计 编程:程:ORG

7、 1000HSTART:MOV A,30H ;值送值送A JNB ACC.7,YES ;=0转转YES MOV 31H,#0 ;0转转TOW MOV 31H,#1 ;=0有相同实根有相同实根 SJMP FINISHTOW:MOV 31H,#2 ;有两个不同实根有两个不同实根FINISH:SJMP$10第五章第五章 汇编语言程序言程序设计5-3-3 5-3-3 N路分支程序路分支程序 N路分支程序是根据前面程序运行的路分支程序是根据前面程序运行的结果,可以有果,可以有N种种选择,并能,并能转向其向其中任一中任一处理程序。理程序。11第五章第五章 汇编语言程序言程序设计例例5-10 1285-10

8、 128路分支程序。路分支程序。功能:根据功能:根据R3R3的的值(00(00H H7FH)7FH)转到到128128个目的地址。个目的地址。参考程序:JMPl28:MOV A,R3 RL A ;(A)2 MOV DPTR,#PRGTBL ;散转表首址送散转表首址送DPTR JMP A+DPTR ;散转散转PRGTBL:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F ;128个个AJMP指令占指令占256个字节个字节12第五章第五章 汇编语言程序言程序设计例5-11 256路分支程序 功能:根据R3的值转移到256个目的地址;入口条件:(R3)=转移目的地址代号(00H

9、FFH);出口条件:转移到相应分支处理程序入口。解:解:JMP256:MOV A,R3 ;取取N值 MOV DPTR,#PRGTBL ;指向分支地址表首址指向分支地址表首址 CLR C RLC A ;(A)2 JNC LOWl28 ;是前是前128个分支程序,个分支程序,则转移移 INC DPH ;否否则基址加基址加25613第五章第五章 汇编语言程序言程序设计LOWl28:MOV TEMP,A ;暂存A INC A ;指向地址低8位 MOVC A,A+DPTR ;查表,读分支地址低8位 PUSH ACC ;地址低8位入栈 MOV A,TEMP ;恢复A,指向地址高8位 MOVC A,A+DP

10、TR ;查表,读分支地址高8位 PUSH ACC ;地址高8位入栈 RET ;分支地址弹入PC实现转移PRGTBL:DW ROUT00 ;占用512个字节 DW ROUT01 14第五章第五章 汇编语言程序言程序设计例例5-12 大于大于256路分支路分支转移程序移程序 功能:根据入口条件功能:根据入口条件转向向n个分支个分支处理程序理程序 入口条件:入口条件:(R7R6)=转移目的地址代号;移目的地址代号;出口条件:出口条件:转移到相移到相应分支分支处理程序入口。理程序入口。程序散程序散转表中有表中有N N条条LJMPLJMP指令,每条指令,每条LJMPLJMP指令占指令占3 3个字个字节,

11、因此,因此要按入口条件将址代号乘以要按入口条件将址代号乘以3 3,用乘,用乘积的高字的高字节加加DPHDPH,乘乘积的的低字低字节送送A(A(变址寄存器址寄存器)。PRGTBL:LJMP ROUT0 LJMP ROUT1 LJMP ROUT2 15第五章第五章 汇编语言程序言程序设计参考程序:参考程序:JMPN:MOV DPTR,#PRGTBL;DPTR指向表首址指向表首址MOV A,R7 ;取地址代号高取地址代号高8位位MOV B,#3 ;MUL AB ;3ADD A,DPH ;MOV DPH,A ;修改指修改指针高高8位位MOV A,R6 ;取地址代号低取地址代号低8位位MOV B,#3

12、;3MUL AB ;XCH A,B ;交交换乘乘积的高低字的高低字节ADD A,DPH ;乘乘积的高字的高字节加加DPHMOV DPH,AXCH A,B ;乘乘积的低字的低字节送送AJMP A+DPTR ;散散转16第五章第五章 汇编语言程序言程序设计5-45-4 循循环程序程序包含多次重复包含多次重复执行的程序段,循行的程序段,循环结构使程序构使程序紧凑。凑。5-4-15-4-1循循环程序的程序的导出出各个各个环节任任务:一初始化部分一初始化部分循循环准准备工作。工作。如:清如:清结果果单元、元、设指指针、设循循环控制控制变量初量初值等。等。二循二循环体体循循环工作部分:工作部分:需多次重复

13、需多次重复处理的工作。理的工作。循循环控制部分:控制部分:1.修改指修改指针和循和循环控制控制变量。量。2.检测循循环条件:条件:满足循足循环条件,条件,继续循循环,否,否则退出循退出循环。三三.结束部分束部分 处理和保存循理和保存循环结果。果。1)已知循)已知循环次数次数 2)循)循环次数未知次数未知允允许0次循次循环的循的循环结构:在循构:在循环工作之前工作之前检测循循环条件。条件。循环控制循环控制?循环工作循环工作循环结束循环结束循环初始化循环初始化YN17第五章第五章 汇编语言程序言程序设计单重循重循环简单循循环结构:循构:循环体中不套循体中不套循环。例:例:求n个单字节数据的累加,设

14、数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。SUM:MOVR0,#42H;设指指针MOV A,R0MOV R2,A ;循循环计数器数器R2nCLRA ;结果果单元清元清0MOV R3,AADD1:INCR0 ;修改指修改指针 ADDA,R0 ;累加累加 JNC NEXT ;处理理进位位 INCR3 ;有有进位,高字位,高字节加加1NEXT:DJNZ R2,ADD1;循循环控制:数据是否加完?控制:数据是否加完?MOV 40H,A ;循循环结束,保存束,保存结果果 MOV41H,R3 RET18第五章第五章 汇编语言程序言程序设计v循循环控制方法控制方法:计数控制、特

15、征数控制、特征标志控制。志控制。一一.计数控制:数控制:设循循环计数器,控制循数器,控制循环次数。次数。正正计数数和和倒倒计数数两种方式。两种方式。例例:为一一串串7 7位位ASCIIASCII码数数据据的的D D7 7位位加加上上奇奇校校验,设数数据据存存放放在在片片外外RAMRAM的的21012101H H起起始始单元元,数数据据长度在度在21002100H H单元。元。MOV DPTR,#2100HMOVX A,DPTRMOV R2,ANEXT:INC DPTRMOVX A,DPTRORL A,#80HJNB P,PASS;判断是否加校判断是否加校验MOVX DPTR,A;是,是,则加奇

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

17、NCNEXT ;Cy=1,则AB MOVB,A ;保存保存较小小值 SJMP NEXTDONE:SJMP DONE20第五章第五章 汇编语言程序言程序设计5-4-2 5-4-2 多重循多重循环循环体中套循环结构。以双重循环使用较多。例:将内存一串单字节无符号数升序排序。步骤:每次取相邻单元的两数比较,决定是否需要交换数据位置。第一次循环,比较N-1次,取数据表中最大值。第二次循环,比较N-2次,取到次大值。第N-1次循环:比较一次,排序结束。内循环控制内循环控制?循环工作循环工作循环结束循环结束外循环控制外循环控制?内循环初始化内循环初始化开始开始外循环初始化外循环初始化21第五章第五章 汇编

18、语言程序言程序设计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,AUNEX:DJNZ R3,LOOP2;内循内循环结束?束?DJNZ R4,LOOP1;外循外循环结束?束?RETR3R31=0?B(R

19、0)A (R0+1)循环结束循环结束外循环次数外循环次数R4R4R41=0?内循环次数内循环次数R3表首表首TABR0开始开始A BA B?(R0)(R0+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N22第五章第五章 汇编语言程序言程序设计v软件延件延时程序程序 用循用循环程序将指令重复多次程序将指令重复多次执行,行,实现软件延件延时。试计算延算延时程序的程序的执行行时间。源程序源程序指令周期指令周期(M)M)指令指令执行次数行次数DELAY:MOV R6,#64H1 I1:MOV R7,#0FFH 1 I2:DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2延时

20、时间计算:(设时钟延时时间计算:(设时钟f=12MHz)t=(11+1100+2100255+2100+21)M=51.3 ms1100100255100123第五章第五章 汇编语言程序言程序设计5.5.2编写循写循环程序程序应注意的注意的问题 1)循)循环体前体前应注意安排循注意安排循环初始化;初始化;2)内外循)内外循环间不不应相互交叉。相互交叉。24第五章第五章 汇编语言程序言程序设计v5-5 5-5 查表程序表程序例例5-19 一个十六一个十六进制数存放在制数存放在HEX单元的低四位,将其元的低四位,将其转换成成ASCII码并送回并送回HEX单元。元。编程:ORG 0100H HEX

21、EQU 30HHEXASC:MOV A,HEX ANL A,#00001111B ADD A,#3 ;变址调整 MOVC A,A+PC MOV HEX,A ;2字节 RET ;1字节ASCTAB:DB 30H,3lH,32H,33H DB 34H,35H,36H,37H DB 38H,39H,41H,42H DB 43H,44H,45H,46H END 25第五章第五章 汇编语言程序言程序设计v5-6 子程序设计子程序:能完成某项特定功能的独立程序段,可被反复调用。优点:(1)不必重复书写同样的程序,提高编程效率;(2)程序的逻辑结构简单,便于阅读;(3)缩短了源程序和目标程序的长度,节省了程

22、序存储器空间;(4)使程序模块化、通用化,便于交流,共享资源;(5)便于按某种功能调试。26第五章第五章 汇编语言程序言程序设计1.子程序结构一子程序入口用标号作为子程序名。二调用子程序之前设置好堆栈。三用返回指令RET结束子程序,并保证堆栈栈顶为调 用程序的返回地址。四.子程序嵌套须考虑堆栈容量。五.提供足够的调用信息:如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。27第五章第五章 汇编语言程序言程序设计2.参数传递入口参数:调用子程序之前,需要传给子程序的参数。出口参数:子程序送回调用程序的结果参数。(1)子程序无子程序无须传递参数参数28

23、第五章第五章 汇编语言程序言程序设计(2)用累加器和工作寄存器用累加器和工作寄存器传递参数参数例5-24 双字节求补子程序CPLD。解 入口参数:(R7R6)=16位数 出口参数:(R7R6)=求补后的16位数 CPLD:MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 MOV R7,A RET 29第五章第五章 汇编语言程序言程序设计(3)通通过操作数地址操作数地址传递参数参数例例5-25 n字字节求求补子程序。子程序。解解 入口参数:入口参数:(R0)=求求补数低字数低字节指指针,(R7)=n-1 出口参数:出口参数:(R0

24、)=求求补后的高字后的高字节指指针 CPLN:MOV A,R0 CPL A ADD A,#1 MOVR0,A NEXT:INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT RET30第五章第五章 汇编语言程序言程序设计(4)通通过堆堆栈传递参数参数例例5-26 在在HEX单元存放两个十六元存放两个十六进制数,将它制数,将它们分分别转换 成成ASC码并存入并存入ASC和和ASC+1单元。元。解解 由于要由于要进行两次行两次转换,故可,故可调用用查表子程序完成。表子程序完成。主程序:主程序:MAIN:PUSH HEX ;取被取被转换数数 LC

25、ALL HASC ;转子子*PC POP ASC ;ASCLASC MOV A,HEX ;取被取被转换数数 SWAP A ;处理高四位理高四位 PUSH ACC LCALL HASC ;转子程序子程序 POP ASC+1 ;ASCH ASC+1 31第五章第五章 汇编语言程序言程序设计子程序:子程序:HASC:DEC SP DEC SP ;修改SP指向HEX POP ACC ;弹出HEX ANL A,#0FH ;屏蔽高四位 ADD A,#5 ;变址调整 MOVCA,A+PC ;查表 PUSHACC ;结果入栈 (2字节)INCSP ;(1字节)INCSP ;修改SP指向断点位置(1字节)RET

26、 ;(1字节)ASCTAB:DB 0 1 2.7 DB 8 9 A.F 32第五章第五章 汇编语言程序言程序设计3.3.现场保保护推入与弹出的顺序应按“先进后出”,或“后进先出”的顺序,才能保证现场的恢复。例:十翻二子程序的现场保护。BCDCB:PUSH ACC PUSH PSW PUSH DPL ;保护现场 PUSH DPH POP DPH POP DPL POP PSW;恢复现场 POP ACC RET 33第五章第五章 汇编语言程序言程序设计4.4.设置堆置堆栈 调用子程序时,主程序的断点将自动入栈;转子后,现场的保护都要占用堆栈工作单元,尤其多重转子或子 程序嵌套,需要使栈区有一定的深度。由于MCS-51的堆栈是由Sp指针组织的内部RAM区,仅有128个 地址空间,堆栈并非越深越好,深度要恰当。34第五章第五章 汇编语言程序言程序设计5.6.3 子程序的子程序的调用及嵌套用及嵌套1子程序调用2子程序嵌套35第五章第五章 汇编语言程序言程序设计2子程序嵌套子程序嵌套断点入栈断点入栈断点出栈断点出栈

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服