片机原理与应用技术第5节汇编语言程序的基本结构.ppt
《片机原理与应用技术第5节汇编语言程序的基本结构.ppt》由会员分享,可在线阅读,更多相关《片机原理与应用技术第5节汇编语言程序的基本结构.ppt(46页珍藏版)》请在三一办公上搜索。
1、3.5 汇编语言程序的基本结构,汇编语言源程序设计通常采用结构化设计方法,任何复杂的程序都可分解为:顺序结构部分分支结构部分循环结构部分子程序部分,3.5.1 顺序程序设计,【例】【功能】求变量X()的平方。【入口参数】X值存放在片内RAM的30H单元【出口参数】X2值存放在片内RAM的31H单元 程序框图如图3.10所示。ORG1000HSTART:MOVDPTR,#2000H MOV A,30H MOVC A,A+DPTR MOV 31H,A SJMP$ORG2000HTABLE:DB00,01,04,09,16,25 END 特点:从第一条指令开始顺序执行,直到最后一条指令,图3.10
2、顺序程序流程图,3.5.2 分支程序设计,分支:根据某种标志改变程序执行的顺序。一般分为单分支、多分支。分支流程图如图3.11所示。,(a)单分支(b)多分支图3.11 分支程序流程图,3.5.2 分支程序设计,1.单分支【例】【功能】某装置有自动/手动控制按键,按键状态由P1.0口输入;高电平为自动控制,低电平为手动控制【入口参数】P1.0CY:JB P1.0,AUTOHC:LJMP CYAUTO:LJMP CY,3.5.2 分支程序设计,2.多分支包括一般多分支和散转多分支。1)一般多分支【例】【功能】x、y均为8位二进制数,求解:【入口参数】(R0)=x。【出口参数】(R1)=y。,3.
3、5.2 分支程序设计,START:CJNER0,#00H,SUL1;判断R0是否为0,为0转SUL1MOV R1,#00HSJMPSUL2SUL1:JC NEG;小于0转NEGMOVR1,#01HSJMPSUL2NEG:MOV R1,#0FFHSUL2:RET,3.5.2 分支程序设计,2)散转多分支程序 根据某种输入或运算的结果转向各个处理程序称为散转多分支,即散转程序。(1)利用转移指令表实现转移 将转移到不同程序的转移指令列成表格,判断条件后查表,执行表中的转移指令。【例】【功能】某菜单有9项。根据输入数码转去执行相应的子程序。即输入“1”,执行子程序1;输入“2”,执行子程序2;依次类
4、推。,3.5.2 分支程序设计,【分析】用直接转移指令组成一个转移表,然后把菜单号读入累加器(A),转移表首地址放入DPTR中,利用JMP A+DPTR实现散转。【入口参数】(R3)=存输入键盘码19。【出口参数】转移到相应的子程序入口。ORG 0030HKEY_JMP:MOV DPTR,#TAB1;子程序入口首地址送DPTR MOV A,R3;把键盘输入缓冲区内容送累加器(A)DEC A;由于输入数码为19,因此需减1 MOV B,#03H,3.5.2 分支程序设计,MUL AB;由于长跳转指令LJMP占用3B,;各子程序入口地址相距3B JMP A+DPTR;根据输入码,执行相应的子程序
5、ORG 2000H;程序入口地址表TAB1:LJMP NO1 LJMP NO2 LJMP NO3 LJMP NO4 LJMP NO5 LJMP NO6 LJMP NO7 LJMP NO8 LJMP NO9 END,3.5.2 分支程序设计,(2)利用转向地址表实现转移 这种方法将转移地址列成表格,将表格的内容作为转移的目标地址。【例】【功能】根据R3(0n)的内容转向对应的程序;处理程序的入口符号地址分别为PR0PRn(n256)【分析】将PR0 PRn入口地址列在表格中,每一项占两个单元;PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn在表中的偏移地址;从偏移地址2n和2n+1
6、两个单元分别取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP A+DPTR指令(A先清零)即转移到PRn入口执行。,3.5.2 分支程序设计,【入口参数】(R3)=0n 转移。【出口参数】转移到相应的子程序入口。PR0EQU0110HPR1EQU0220HPR2EQU0330HORG0030HKEY_JMP:MOVDPTR,#TAB MOVA,R3ADDA,R3;(A)(R3)*2JNCNADDINCDPH;(R3*2)256,3.5.2 分支程序设计,NADD:MOV R3,A MOVC A,A+DPTR XCHA,R3;转移地址高8位 INCA MOVCA,A+DPTR MOV
7、DPL,A;转移地址低8位 MOVDPH,R3 CLRA JMPA+DPTR TAB:DW PR0,PR1,PR2,PRn PR0:处理程序0 PR1:处理程序1 PRn:处理程序n END,3.5.2 分支程序设计,(3)利用地址偏移量表实现散转 这种方法将转移目标地址与表首地址差列表,作为转移目标地址。【例】【功能】有5个按键 0,1,2,3,4,根据按下的键转向不同的处理程序,分别为PR0,PR1,PR2,PR3,PR4。【分析】汇编时,利用了伪指令的数学计算功能,标首地址加上处理程序与标首地址差转到处理程序。【入口参数】(B)=转向程序号(键盘编码)。【出口参数】转移到相应的子程序入口
8、。,3.5.2 分支程序设计,ORG0030HKEY_JMP:MOVA,BMOVDPTR,#TABMOVCA,A+DPTRJMPA+DPTR TAB:DBPR0-TABDBPR1-TABDBPR2-TABDBPR3-TABDBPR4-TAB PR0:处理程序0 PR1:处理程序1 PR2:处理程序2 PR3:处理程序3 PR4:处理程序4END,3.5.3 循环程序设计,需要重复执行某一程序时可使用循环程序结构。循环程序分为先循环后判断和先判断后循环两种循环体方式。循环程序一般包含以下4部分。(1)设置循环初值:设置用于循环过程工作寄存器单元的初值。(2)循环体:循环程序功能部分。(3)循环记
9、录:记录循环过程,监控循环完成情况,为循环判断准备。(4)循环控制:判断循环完成情况,满足条件作相应的处理。不满足继续执行。,3.5.3 循环程序设计,图3.12 循环程序流程图,3.5.3 循环程序设计,【例】【功能】n个单字节数相加,和为双字节,存放在(R3、R4)中。【入口参数】单字节数Xi存放在从40H开始的RAM单元中,n放在R2中。(R2作为控制变量,R0作为变址单元)【出口参数】和存放在(R3、R4)中。ADD1:MOV R3,#00H MOV R4,#00H MOV R2,#n MOV R0,#40H LOOP:MOV A,R4;取部分和低位 ADD A,R0;与Xi相加 MO
10、V R4,A INC R0;地址加1 CLR A ADDC A,R3;低位字节向高位字节进位 MOV R3,A DJNZ R2,LOOP;未加完继续重复,3.5.3 循环程序设计,【例】【功能】设计一个延时10ms的程序。【分析】延时程序的延时主要与所用晶振和延时程序中的循环次数 有关。已知AT89C51单片机使用的晶振为12MHz,则可知一个机器周期为1。【入口参数】(R0)=毫秒数,(R1)=1ms延时预定值。【出口参数】定时到,退出程序。ORG2000H 指令机器周期数1MOV R0,#0AH;毫秒数R0 12DL2:MOV R1,#MT;1ms延时值R1 13DL1:NOP 14NOP
11、 15DJNZ R1,DL1;1ms延时循环 26DJNZ R0,DL2;10ms延时循环 2,3.5.3 循环程序设计,该延时程序是一个双重循环程序,内循环1ms延时的预定值MT需计算:(1+1+2)1MT=1000()MT=250=0FAH用0FAH代替程序中的MT,则该程序执行后,能实现10ms的延时。若考虑第1、2、6行延时参数配置指令的时间因素,则该段延时程序的精确延时时间计算式为:11+(1+2)110+(1+1+2)125010=10.031ms,3.5.4 子程序设计,按功能分为中断子程序和功能子程序。调用子程序时要注意:(1)中断子程序调用由单片机自身产生,执行RETI指令
12、返回;功能子程序调用由主程序执行LCALL或ACALL 指令产生,执行RET指令返回。(2)在子程序中,应包含有现场保护和现场恢复两部分。(3)主程序和子程序约定好交换数据的地址单元或存储 器,其为主、子程序共有部分。(4)子程序可以对另外的子程序调用,称为子程序嵌套。,3.5.4 子程序设计,1.运算类子程序【例】【功能】多字节无符号数的加法。【分析】多字节运算一般是按从低字节到高字节的顺序依次执行的。【入口参数】DATA1=被加数的低位地址。DATA2=加数的低位地址。N字节相加。【出口参数】DATA2=和数低位地址。,3.5.4 子程序设计,MADD:MOV R0,#DATA1;置被加数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 原理 应用技术 汇编语言 程序 基本 结构

链接地址:https://www.31ppt.com/p-5997858.html