【大学】单片机课件 汇编语言程序设计PPT.ppt
《【大学】单片机课件 汇编语言程序设计PPT.ppt》由会员分享,可在线阅读,更多相关《【大学】单片机课件 汇编语言程序设计PPT.ppt(228页珍藏版)》请在三一办公上搜索。
1、第四章汇编语言程序设计,4.1 概述,4.2 顺序结构程序,4.3 分支结构程序,4.4 循环结构程序,4.5 子程序结构,4.6 综合程序举例,4.7 本章小节,4.8 思考与练习题,第四章汇编语言程序设计,主要内容:本章从程序结构和实用角度出发,通过典型的应用实例介绍汇编语言程序的基本结构及模块化程序设计,使学生进一步理解和掌握51系列单片机的指令系统,并掌握汇编语言程序设计的基本语言和技巧。要求:1、熟练运用指令系统,掌握循环程序、分支程序和搜索程序的设计方法;2、熟练运用指令系统,掌握基本的运算程序设计方法;,第四章汇编语言程序设计,3、熟练运用指令系统,掌握数制和码制转换程序的设计方
2、法;4、熟练掌握子程序结构,实现模块化程序设计;5、深刻理解软件、硬件的相互作用,不断提高实际问题处理程序编写能力。,4.1 概述,4.1 概述 程序设计:为了解决某一个问题,将所设计应用系统(单片机类型)的指令按一定顺序组合在一起。即用计算机所能接受的语言把解决问题的步骤描述出来。单片机汇编源程序结构与通用微机汇编源程序结构略有不同,原因是:1、一般没有可以直接利用的监控程序,所有程序均要自己编写。,4.1 概述,2、没有像X86汇编语言程序那样,可直接调用系统提供的中断功能(如:BIOS中断、DOS中断)或Windows的API函数完成特定操作,即所有子程序(如键盘监控子程序、显示驱动程序
3、、中断服务程序等)均需要自己编写。汇编语言语句三种基本类型:指令语句、伪指令语句、宏指令语句。,4.1 概述,一、汇编语言伪指令 伪指令 汇编程序某些指令在汇编时并不产生目标代码,不影响程序的执行,不是CPU能执行的指令,只提供一些汇编控制信息的指令。常用的伪指令:(1)设置起始地址ORG 格式:ORG nn 1、ORG:表明为后续源程序经汇编后的目标程序安排存放位置,nn则给出了存放的起始地址值;,4.1 概述,2、ORG总是出现在每段源程序或数据块的开始;3、在一个源程序中,可以多次使用ORG规定不同程序段的起始位置,但定义的地址顺序应从小到大,且不能重叠;4、若不用ORG,则汇编将从00
4、00H单元开始存放目标程序;例4.1ORG 3000H;表示后续的目标程序代码从3000H单元开始存放。MOV A,30H,4.1 概述,(2)定义字节DB 格式:标号:DB字节数据项表 1、标号区段可有可无,项表指中间用逗号分开的字节、数、字符串或用引号括起来的ASC码字符串(一个字符用ASC码表示,就相当于一个字节)。2、功能:把项表的数据存入从标号开始的连续单元中。例4.2ORG 2000HSEG1:DB 35H,78H,4.1 概述,SEG2:DB DAY END则(2000H)=35H,(2001H)=78H,(2002H)=44H,(2003H)=41H,(2004H)=59H 注
5、意:项表中若为数值,其取值范围应为00HFFH,若为字符串,其长度应限制在80个字符内。(3)定义字DW 格式:标号:DW字节数据项表 DW的基本含义与DB相同,不同的是DW定义16位数据,常用来建立地址表。存放时一个字需两个单元,高8位先存放,低8位后存放。,4.1 概述,例4.3 ORG 8000HHETAB:DW 7234H,8AH,10 汇编后:(8000H)=72H,(8001H)=34H,(8002H)=00H,(8003H)=8AH,(8004H)=00H,(8005H)=0AH(4)数据地址赋值DATA 格式为:字符名称 DATA 数据或表达式 把数据地址或代码地址赋予字符名称
6、。常用于定义数据地址,它可以先使用后定义(因为DATA定义的字符名称作为标号登记在符号表中,而EQU没定义),这点与EQU不同。表达式应是可求值的。,4.1 概述,例4.4ORG8000H INDEXJDATA 8096H LJMP INDEXJ END 等价于ORG8000H LJMP 8096H END,4.1 概述,(5)赋值(等值)EQU 格式:标号 EQU 项或表达式 功能:将语句操作数的值赋于本语句的标号,用EQU赋过值的标号名可以用作数据地址、代码地址、位地址或是一个立即数,它可以是8位、也可以是16位。注意:1、在同一程序中,用EQU伪指令对标号赋值后,该标号的值在整个程序中不
7、能再改变;2、用EQU定义的字符须先定义后使用。,4.1 概述,例4.5 ORG8000H AAEQUR6;AA与R6等值MOV A,AA;(R6)的值送入A中(6)位地址符号命令BIT 格式:字符名称 BIT 位地址 功能:给一个可位寻址的位单元起一个名字。用BIT定义过的位单元可用名字使用。注意:名字必须是以字母开头的字母数字串,它必须是事先未定义过的。,4.1 概述,例4.6 A1BITP1.0A2BIT02H(7)源程序结束END 格式:标号:END 表达式 1、标号和表达式是可有可无的。2、END是一个结束标志,在一个程序中只允许出现一个END语句,而且它必须放在整个程序的最后面。(
8、8)定义存储空间DS 格式:标号:DS 表达式 1、由标号指定单元开始,定义一个存储区,以备源程序使用。,4.1 概述,2、存储区内预留的存储单元数由数据或字符表达式的值决定。例4.7 ORG 8000HTEMP:DS 08HDB 30H,8AH即8000H8007H单元保留备用,(8008H)=30H,(8009H)=8AH。二、汇编语言程序设计的基本步骤1、分析问题(调研),确定方案和计算方法 目的:对需要解决的问题进行分析,以求对问题有正确的理解。,4.1 概述,2、了解应用系统的硬件配置、性能指标。3、建立系统数学模型,确定控制算法和操作步骤。4、编制说明要解决问题的程序框图。画程序框
9、图:用各种图形、符号、指向线等来说明程序设计的过程。框图步骤写得越细致,编程时也就越方便。目的:把具有一定功能的各个部分有机地联系起来,可以使人们抓住程序的基本线索,对全局有完整的了解。,4.1 概述,好处:(1)容易发现设计思想上的错误和矛盾,便于找出解决问题的途径。(2)便于把较大的程序分成若干个模块,从而分头进行设计,最后合在一起联调。5、按所使用计算机的指令系统,依据框图写出汇编语言程序。编程的三个原则:尽可能的节省数据存储单元;缩短程序长度;减少执行时间。,4.1 概述,.合理分配存储器单元和了解I/O接口地址。.按功能设计程序,明确各程序之间的相互关系。.用注释行说明程序,便于阅读
10、、调试和修改。6、上机调试程序,直至完成预定功能。MCS-51 程序总体组成MCS-51汇编语言源程序一般由程序头、主程序、完成特定操作的子程序(可能不止一个)及相应功能的中断服务程序等部分组成。结构如下:,4.1 概述,-程序头(即定义变量和等值符号)-SCL BIT P1.2;定义SCL位变量SDA BIT P1.3;定义SDA位变量ByteCon DATA 30H;定义字节变量ByteCon ORG nnnn;CPU复位后,第一指令机器码存放单元地址,具体值由CPU类型决定。例4.8 在51系列中,复位后PC=0000,因此在51系列中,第一条指令存放在ROM的0000H单元中,即nnn
11、n为“0000H”。,4.1 概述,LJMP Main;一般第一条指令是跳转指令,跳到主程序入口地址,其中“Main”是主程序入口地址标号。主程序不能直接存放在复位后PC指向的存储单元,原因是这一区域往往是中断服务程序的入口地址,不能覆盖,否则不能使用相应的中断功能。例4.9 在51系列中,外部中断0的入口地址为 0003H,显然只有0000H、0001H和0002H三个单元,刚好可以存放一条长跳转指令的机器码。,4.1 概述,-主程序-ORG yyyy;其中yyyy就是主程序代码存放区的首地址,如0100H Main:MOV SP,#5FH;初始化有关寄存器,如设置SP、选择工作寄存器组。;
12、初始化中断控制寄存器等;主程序实体,具体指令由程序功能决定 LCALL SUB1;调用子程序1,其中SUB1为子程序名;END,4.1 概述,-子程序结构-ORG zzzz;其中zzzz就是子程序代码存放区的首地址,可以不用ORG指令,直接将子程序存放主程序后。SUB1:PUSH PSW PUSH Acc;通过PUSH指令保护子程序中用到的有关寄存器,如Acc、PSW 等,即保护现场;子程序实体,具体指令由程序功能决定 POP Acc POP PSW;恢复现场RET;子程序最后一条指令,使子程序指令运行结束后,返回主程序断点。,4.1 概述,-中断服务程序结构-ORG kkkk;其中kkkk就
13、是中断程序代码存放区的首地址 PUSH PSW PUSH Acc;通过PUSH指令保护中断服务程序中用到的有关寄存器,如 Acc、PSW等,即保护现场;中断服务程序实体,具体指令由程序功能决定POP AccPOP PSW;恢复现场,4.1 概述,CLR TI;清除中断标志(在51系列中,对于电平触发的外中断INT0和 INT1、串行接收及发送中断 RI、TI等,不自动清除,需要在中断服务结束前,通过CLR指令清除。RETI;中断服务程序最后一条指令,返回主程序断点。为了确保子程序、中断服务程序运行结束后,能够正确返回,从断点处继续执行主程序,必须注意在子程序以及中断服务程序中堆栈操作指令的匹配
14、问题,否则将无法返回。,4.1 概述,例4.10 在上述子程序结构中,假设SUB1子程序入口地址为2000H,即主程序内“LCALL SUB1”指令等效于“LCALL 2000”。假设该指令机器码首地址为1000H,且指令执行前,SP=5FH,则“LCALL 2000”指令执行过程中PC和SP内容如下:(1)PCPC+3,即PC=1003H(即断点地址);(2)SPSP+1,即SP=60H,并把PC低8位压入堆栈,于是(60H)=03;(3)SPSP+1,即SP=61H,并把PC高8位压入堆 栈,于是(61H)=10;,4.1 概述,(4)把 SUB1入口地址装入PC,即 PC=2000H。可
15、见,“LCALL 2000”指令执行后,PC=2000H,已指向子程序SUB1第一条指令所在的存储单元地址;SP=61H。在子程序中 PUSH Acc;执行后,SP=62H,(62H)就是Acc的当前值,假设为XX PUSH PSW;执行后,SP=63H,(63H)就是PSW的当 前值,假设为YY返回前 POP PSW;执行后,PSW(SP),即将(63H)单元,4.1 概述,中原来的PSW返回给PSW;SPSP1,即SP=62HPOP Acc;执行后,ACC(SP),即将(62H)单元中原来的Acc返回给Acc;SPSP1,即SP=61HRET;执行后,PC高8位(SP),即将(61H)单元
16、内容10H传给PC高8位,SPSP1,即SP=60H;PC低8位(SP),即将(60H)单元内容03H传给PC;低8位,SPSP1,即SP=5FH 结果PC=1003H(重新装入主程序断点地址),4.1 概述,汇编语言程序按其结构可分为以下四类:(1)顺序结构;(2)分支结构;(3)循环结构;(4)子程序结构。,4.2 顺序结构程序,4.2 顺序结构程序 最简单的一种结构,又称简单程序。特点:按照程序编写的顺序依次执行,不发生任何分支 或转移。(程序走向只有一条路径。)例4.11 将两个半字节数组合成一个字节数。设内部RAM中40H、41H单元分别存放着8位二进制数,要求将两个单元中的低半字节
17、合并成一个字节后,存入42H单元。40H的低4位作为42H的高4位。,4.2 顺序结构程序,分析:首先要取数送A(传送指令),分离出低4位(逻辑与0FH),用A半字节交换送到高4位,地址加1,取另一个数低4位数(逻辑与0FH),用或合成一个字节。解:START:MOV R1,#40H MOV A,R1 ANL A,#0FH;取第一个半字节 SWAP A;移至高4位,4.2 顺序结构程序,INC R1XCH A,R1;取第二个字节ANL A,#0FH;取第二个半字节ORL A,R1;拼字INC R1MOV R1,A;存放结果RET例4.12 将20H单元的两个BCD码拆开并变成ASC码,存入21
18、H、22H单元。注意:ASC码09为30H39H。分析:,4.2 顺序结构程序,把BCD数除以10,商A余B,刚好把两个BCD码分别移到A、B的低4位,然后再各自与30H相“或”,即变成ASC码。其程序框图如图4-1所示。采用先把20H中低4位BCD码交换出来加以转换、存放,然后再把高4位BCD码交换至低4位加以转换、存放。其程序框图如图4-2所示。,4.2 顺序结构程序,图4-1 BCD码转换为ASCII码方法一流程图解,4.2 顺序结构程序,编程:ORG 2000HMOV A,20HMOV B,#0AH;用0AH作除数DIV ABORL B,#30H;低4位BCD码变成ASC码MOV 22
19、H,B ORL A,#30H;高4位BCD码变成ASC码 MOV 21H,AEND,4.2 顺序结构程序,图4-2 BCD码转换为ASCII码方法二流程图解,4.2 顺序结构程序,编程:ORG 2000HMOV R0,#22HMOV R0,#00H MOV A,20HXCHD A,R0 ORL 22H,#30H SWAP AORL A,#30HMOV 21H,AEND,4.3 分支结构程序,4.3 分支结构程序一、分支程序设计综述分支结构程序:根据程序要求无条件或有条件改变程序执行的顺序,选择程序的流向。特点:程序中含有转移类指令。关键:正确选用转移指令。单重分支程序:一个判断决策框,程序有两
20、条出路。,4.3 分支结构程序,两种分支结构,4.3 分支结构程序,转移指令有3种:1、无条件转移 程序转移方向是设计者事先安排的,与已执行程序的结果无关,使用时只需给出正确的转移目标地址或偏移量即可。(LJMP、AJMP、SJMP)2、条件转移 根据已执行程序对标志位或A或对内部RAM某位的影响结果,决定程序的走向,形成各种分支。(JZ/JNZ、CJNE、DJNZ、位控制转移类指令)在编写有条件转移语句时要特别注意以下两点:(1)在使用条件转移指令形成分支前,一定要安排可供条件转移指令进行判别的条件。,4.3 分支结构程序,例如,若采用“JC rel”指令,在执行此指令前必须使用影响Cy标志
21、的指令;若采用“CJNE A,#data,rel”指令,在执行此指令前必须使用改变A内容的指令,以便为测试做准备。(2)要正确选定所用的转移条件和转移目标地址。3、散转(JMPA+DPTR)它是根据某种已输入的“或”运算的结果,使程序转向各个处理程序中去。操作:把16位DPTR的内容与“或”运算的结果与在A中的8位无符号数相加,形成地址,装入PC,即散转的目的地址。其操作结果不影响A和DPTR。(JMP),4.3 分支结构程序,二、无条件/条件转移程序 分支程序中最常见的一类。其中,条件转移类程序编写较容易出错,编写时需要确定转移条件。例4.13 两个无符号数比较大小。同P59页例4-7 解
22、设外部RAM存储单元ST1和ST2中存放两个不带符号的二进制数,找出其中的大数存入ST3单元中。,4.3 分支结构程序,图4-3 两个无符号数比较大小程序框图,4.3 分支结构程序,解:ORG 8000H ST1 EQU 8040HSTART:CLR C;进位位清0 MOV DPTR,#ST1;读数据指针 MOVX A,DPTR;取第一个数 MOV R2,A;暂存R2 INC DPTR MOVX A,DPTR;取第二个数 SUBB A,R2;两数比较 JNC BIG1;若Cy=0,则转BIG1(第二个数大),4.3 分支结构程序,XCH A,R2;第一个数大 BIG0:INC DPTR MOV
23、X DPTR,A;存大数 RET BIG1:MOVX A,DPTR;第二个数大 SJMP BIG0 END 上面程序中,应用带借位的减法指令SUBB比较两数的大小。在执行指令前,应先把进位位清“0”。执行JNC指令后形成分支,指令中BIG1为标号地址,表示相对偏移量rel。,4.3 分支结构程序,例4.14 设5AH单元中有一变量X,请编写计算下列函数式的程序,结果存入5BH单元。同P61页例4-8.,4.3 分支结构程序,图4-4 例4.6程序流程图,4.3 分支结构程序,解:根据题意首先计算X2(使用乘法)并暂存于R1中,因为X2最大值为225,可只用一个寄存器,然后根据X值的范围,决定Y
24、的值。R0作中间寄存器。编程:ORG 2000H MOV A,5AH MOV B,A MUL AB;AX2 MOV R1,A MOV A,5AH;重新把X装入A CJNE A,#10,L1,4.3 分支结构程序,L1:JC L2;C=1,X10转L2MOV R0,#41;先假设X15 CJNE A,#10H,L3;与16比较 L3:JNC L4;C=0,X15转L4 MOV A,R1 ADD A,#8;10X15,Y=X2+8 MOV R0,A SJMP L4 L2:MOV A,R1CLR CSUBB A,#01;X10,Y=X2-1,4.3 分支结构程序,MOV R0,A L4:MOV 5B
25、H,R0;存结果 SJMP$END 由于本题的具体情况,在判别(A)10和(A)15时采用的是“CJNE”和“JC”以及“CJNE”和“JNC”两条指令相结合的方法。条件分支程序与简单程序的区别在于:分支程序存在两个或两个以上的结果。要根据给定的条件进行判断,以得到某一个结果。这样,就要用到比较命令、测试指令以及无条件/条件转移指令。条件分支程序设计 的技巧,就在于正确而巧妙地使用这些命令。,4.3 分支结构程序,例题:求符号函数的值。已知片内RAM的40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM的41H单元中。1 X0Y=0 X=0-1X0,解:此题有三个条件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 【大学】单片机课件 汇编语言程序设计PPT 单片机 课件 汇编语言 程序设计 PPT
链接地址:https://www.31ppt.com/p-6027377.html