首页 单片机原理及智能仪表技术课件第4章

单片机原理及智能仪表技术课件第4章

举报
开通vip

单片机原理及智能仪表技术课件第4章4MCS-51单片机汇编语言程序设计1、程序设计2、汇编语言程序设计3、汇编语言程序设计的特点4、单片机常用的程序设计语言—机器语言、汇编语言与高级语言;4.1概述(1)机器语言:即二进制语言,是单片机能够识别和执行的最原始的语言。不易懂,难记忆,易出错。(2)汇编语言:利用指令助记符来描述的程序设计语言。是面向机器硬件的语言,要求程序设计者对单片机具有很好的“软、硬结合”的功底。程序可以高效率利用计算机资源,目标程序占用内存少,执行速度快,适合于自动测控系统反应快速、结构紧凑的要求。(3)高级语言:面向过程的通用...

单片机原理及智能仪表技术课件第4章
4MCS-51单片机汇编语言程序设计1、程序设计2、汇编语言程序设计3、汇编语言程序设计的特点4、单片机常用的程序设计语言—机器语言、汇编语言与高级语言;4.1概述(1)机器语言:即二进制语言,是单片机能够识别和执行的最原始的语言。不易懂,难记忆,易出错。(2)汇编语言:利用指令助记符来描述的程序设计语言。是面向机器硬件的语言,要求程序设计者对单片机具有很好的“软、硬结合”的功底。程序可以高效率利用计算机资源,目标程序占用内存少,执行速度快,适合于自动测控系统反应快速、结构紧凑的要求。(3)高级语言:面向过程的通用语言。如C51。程序容易掌握,通用性好,但编译程序系统开销大,目标程序占用内存多,且执行时间比较长,多用于科学计算、工业设计、企业管理。画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,条件判断,决定程序的流向。指向线:流程线,表示程序执行的流向。圆圈:连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示。5、汇编语言程序设计步骤5、汇编语言程序设计步骤NNNYYY三重循环延时流程图伪指令是放在汇编语言源程序中用于指示汇编程序如何对源程序进行汇编的指令,它不同于指令系统中的指令,指令系统中的指令在汇编程序汇编时能够产生相应的指令代码,而伪指令在汇编程序汇编时不会产生代码,只是对汇编过程进行相应的控制和说明。伪指令通常在汇编语言源程序中用于定义数据、分配存储空间、控制程序的输入输出等。4.2常用的伪指令⒈定位伪指令ORG指令格式为:ORG地址(十六进制表示)这条伪指令放于一段源程序或数据的前面,汇编时用于指明程序或数据从程序存储空间什么位置开始存放。ORG伪指令后的地址是程序或数据的起始地址。ORG1000HSTART:MOVA,#12H含义:通知汇编程序,从START开始的程序段,从程序存储器的1000H单元开始存放。⒉结束汇编伪指令END格式:END<表达式>该指令放于程序最后位置,用于指明汇编语言源程序的结束位置,当汇编程序汇编到END伪指令时,汇编结束。END后面的指令,汇编程序都不予处理。一个源程序只能有一个END命令,否则就有一部分指令不能被汇编。⒊赋值伪指令EQU指令格式为:字符名称xEQU赋值项n该伪指令的功能是将指令中的值赋项赋予EQU前面的字符名称。项可以是常数、地址标号或表达式。以后可以通过使用该字符名称使用相应的项。用EQU语句给一个字符名称赋值以后,在整个源程序中该字符的值是固定的,不能更改。【例3-22】TAB1EQU1000H TAB2EQU2000H汇编后TAB1、TAB2分别等于1000H、2000H。程序后面使用1000H、2000H的地方就可以用符号TAB1、TAB2替换。4.定义字节伪指令DB 指令格式为:<标号:>DB<表达式>含义:DB伪指令用于定义字节数据,可以定义一个字节,也可定义多个字节,字义多个字节时,两两之间用逗号间隔,定义的多个字节在存储器中是连续存放的。定义的字节可以是一般常数,也可以为字符,还可以是字符串,字符和字符串以引号括起来,字符数据在存储器中以ASCII码形式存放。在定义时前面可以带标号,定义的标号在程序中是起始单元的地址。例如ORG2000HTABLE:DB73H,04,100,32,-2,“AB”表示字节串数据存入由TABLE标号为起始地址的连续存储器单元中。即从2000H存储单元开始依次连续存放数据为:73H,04H,64H,20H,FEH,41H,42H。若不采用ORG伪指令专门 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 数据区的起始地址,则数据区的起始地址即根据DB命令前一条指令的地址确定。这时DB所定义的数据字节的起始地址为DB命令前一条指令的地址加上该指令的字节数。 5.定义字伪指令DW指令格式为:<标号:>DW<表达式>含义:这条指令与DB相似,但用于定义字数据。把字或字串值存入由标号开始的连续存储单元中,且把字的高字节数存入低地址单元,低字节数存入高地址单元。按顺序连续存放。DW100H,3456H,814表示按顺序存入01H,00H,34H,56H,03H,2EH注:DB和DW定义的数表,数的个数不得超过80个。若数据的数目较多时,可以使用多个定义命令。一般以DB来定义数据,以DW来定义地址。6.预留存储区伪指令DS指令格式为:<标号:>DS<表达式>含义:通知汇编程序,在目标代码中,以标号为首地址保留表达式值的若干存储单元以备源程序使用。汇编时,对这些单元不赋值。例如:BASE:DS100H通知汇编程序,从标号BASE开始,保留100H个存储单元,以备源程序另用。注意,对于80C51单片微机,DB、DW、DS等伪指令只能应用于程序存储器,而不能对数据存储器使用。ORG3000HTAB1:DB12H,34H DS4H DB'5'汇编后,存储单元中的分配情况如右:12H34H--------35H3000H3001H3002H3003H3004H3005H3006H7.位定义伪指令BIT 命令格式为:<字符名称>BIT<位地址>含义:给字符名称赋予位地址。其中,位地址可以是绝对地址,也可以是符号地址。例:ABCBITP3.1把P3.1位地址赋值给ABC,在后面的编程中,ABC即可作为位地址P3.1使用。例1.伪指令应用ORG8100HBUFFERDS10HDB“AB”DW100H,1ACH,-814说明:①从8100H至810FH为缓冲区空间②(8110H)=41H(‘A’)(8111H)=42H(‘B’)③8112H单元起存放01H、00H、01H、ACH、FCH、D2H4.3汇编程序的基本设计顺序程序设计分支程序设计循环程序设计查表程序设计子程序设计顺序程序是最简单、最基本的程序。特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条。4.3.1顺序程序设计 特点:程序执行流程中必然包含有条件判断,符合条件要求和不符合条件要求分别有不同的处理路径。在程序设计时,往往借助程序框图(判断框)来指明程序的走向。一般情况下,每个分支均需单独一段程序,在程序的起始地址赋予一个地址标号,以便当条件满足时转向指定地址单元去执行,条件不满足时仍顺序往下执行。4.3.2分支程序设计⒈单分支结构程序仅有两个出口,两者选一。有3种典型形式。⒉多分支选择结构多分支结构:程序的判别部分有两个以上的出口流向。通常有两种形式。80C51设有两条多分支选择指令:散转指令JMP@A+DPTR散转指令由数据指针DPTR决定多分支转移程序的首地址,由累加器A中内容动态地选择对应的分支程序,可从多达256个分支中选一。比较指令CJNEA,direct,rel比较两个数的大小,必然存在大于、等于、小于3种情况,这时就需从3个分支中选一。另外,还可以使用查地址表的办法、查转移指令表的办法或通过堆栈来实现多分支程序转移。1、循环:强制CPU重复多次地执行一串指令的基本程序结构。2、循环的优点3、循环程序的组成4、循环程序设计应注意的问题5、循环程序的结构先处理后控制、先控制后处理单重循环、多重循环4.3.3循环程序设计 (1)循环初始化在进入循环程序体之前所必要的准备工作:需给用于循环过程的工作单元设置初值,如循环控制计数初值的设置、地址指针的起始地址的设置、为变量预置初值等,有些情况下还要进行现场保护。(2)循环体循环结构程序的核心部分,完成实际的处理工作,是需反复循环执行的部分。(3)循环控制实现方法主要有循环计数控制法和条件控制法。◆循环次数不确定的情况:满足条件就结束循环。采用条件控制法。◆循环次数己知的情况:采用计数控制法。(4)结束部分对循环程序执行的结果进行 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 、处理和存放。有些情况下需恢复现场。4.3.4子程序设计一、子程序的调用与返回子程序主程序子程序设计的优点主程序调用子程序的过程子程序的入口地址及程序调用过程主程序的断点地址及子程序的返回过程中断服务程序图4–6子程序调用与返回过程示意图二、现场保护与恢复在子程序执行过程中常常要用到单片机的一些通用单元,如工作寄存器R0~R7、累加器A、数据指针DPTR,以及有关标志和状态等。而这些单元中的内容在调用结束后的主程序中仍有用,所以需要进行保护,称为现场保护。在执行完子程序,返回继续执行主程序前恢复其原内容,称为现场恢复。保护与恢复的方法有以下两种:在主程序中实现;在子程序中实现。1、在主程序中实现示例如下:PUSHPSW;保护现场PUSHACC;PUSHB;MOVPSW,#10H;换当前工作寄存器组LCALLaddr16;子程序调用POPB;恢复现场POPACC;POPPSW;……其特点是结构灵活。2、在子程序中实现示例如下:SUB1:PUSHPSW;保护现场PUSHACC;PUSHB;……MOVPSW,#10H;换当前工作寄存器组……POPB;恢复现场POPACC;POPPSW;RET其特点是程序规范、清晰。注意:无论哪种方法保护与恢复的顺序要对应。三、参数传递由于子程序是主程序的一部分,所以,在程序的执行时必然要发生数据上的联系。在调用子程序时,主程序应通过某种方式把有关参数(即子程序的入口参数)传给子程序,当子程序执行完毕后,又需要通过某种方式把有关参数(即子程序的出口参数)传给主程序。在80C51单片机中,传递参数的方法有四种:图4–1汇编过程示意图程序设计举例1运算程序【例3-24】多字节无符号数加法。设从片内RAM30H单元和40H单元有两个16字节数,把它们相加,结果放于30H单元开始的位置处(设结果不溢出)。处理过程:用R0作指针指向30H单元,用R1作指针指向40H单元,用R2为循环变量,初值为16,在循环体中用ADDC指令把R0指针指向的单元与R1指针指向的单元相加,加得的结果放回R0指向的单元,改变R0、R1指针指向下一个单元,循环16次,在第一次循环前应先将CY清零。开始#30R0#40HR1#16R2@R0+@R1@R0R0+1R0R1+1R1R2-1R2R2=0?结束否是程序:ORG1000HMOVR0,#30HMOVR1,#40HMOVR2,#16CLRCLOOP:MOVA,@R0ADDCA,@R1MOV@R0,AINCR0INCR1DJNZR2,LOOPEND【例3-26】两字节无符号数乘法。设被乘数的高字节放在R7中,低字节放于R6中;乘数的高字节放于R5中,低字节放于R4中。乘得的积有4个字节,按由低字节到高字节的次序存于片内RAM中以ADDR为首址的区域中。由于MCS-51单片机只有一条单字节无符号数乘法指令MUL,而且要求参加运算的两个字节须放于累加器A和B寄存器中,而乘得的结果高字节放于B寄存器中,低字节放于累加器A中。因而两字节乘法须用四次乘法指令来实现,即R6R4、R7R4、R6R5和R7R5,设R6R4的结果为B1A1,R7R4结果为B2A1,R6R5的结果为B3A3,R7R5的结果为B4A4,乘得的结果须按下面的关系加起来。R7R6R5R4B1A1B2A2B3A3B4A4C2C1C4C3+即乘积的最低字节C1只由A1这部分得到,乘积的第二字节C2由B1、A2和A3相加得到,乘积的第三字节C3由B2、B3、A4以及C2部分的进位相加得到,乘积的第四字节C4由B4和低字节的进位相加得到。由于在计算机内部不能同时实现多个数相加,因而我们用累加的方法来计算C2、C3和C4部分,用R3寄存器来累加C2部分,用R2寄存器来累加C3部分,用R1寄存器来累加C4部分,另外用R0作指针来依次存放C1、C2、C3、C4入存储器。程序如下:ORG0100HMOVR0,#ADDRMUL1:MOVA,R6MOVB,R4MULAB;R6R4MOV@R0,A;结果的低字节直接存入积的第一字节单元MOVR3,B;结果的高字节存入R3中暂存起来MUL2:MOVA,R7MOVB,R4MULAB;R7R4ADDA,R3;结果的低字节与R3相加后,再存入R3中MOVR3,AMOVA,B;结果的高字节加上进位位后存入R2中暂存起来ADDCA,#00MOVR2,AMUL3:MOVA,R6MOVB,R5MULAB;R6R5,结果的低字节与R3相加存入积的第二字节单元ADDA,R3INCR0MOV@R0,AMOVA,R2ADDCA,B;结果的高字节加R2再加进位位后,再存入R2中MOVR2,AMOVA,#00ADDCA,#00;相加的进位位存入R1中MOVR1,AMUL4:MOVA,R7MOVB,R5MULAB;R7R5,结果的低字节与R2相加存入积的第三字节单元ADDA,R2INCR0MOV@R0,AMOVA,BADDCA,R1;结果的高字节加R1再加进位位后存入积的第四字节单元INCR0MOV@R0,AEND【例3-27】多字节求补运算。设在片内RAM30H单元开始有一个8字节数据,对该数据求补,结果放回原位置。在MCS-51系统中没有求补指令,只有通过取反未位加1得到。而当未位加1时,可能向高字节产生进位。因而在处理时,最低字节采用取反加1,其余字节采用取反加进位,通过循环来实现。程序:ORG0100HMOVR2,#08HMOVR0,#30HMOVA,@R0CPLAADDA,#01MOV@R0,ADECR2LOOP:INCR0MOVA,@R0CPLAADDCA,#00MOV@R0,ADJNZR2,LOOPEND3.5.2数据的拼拆和转换。【例3-28】设在30H和31H单元中各有一个8位数据:(30H)=x7x6x5x4x3x2x1x0(31H)=y7y6y5y4y3y2y1y0现在要从30H单元中取出低5位,并从31H单元中取出低3位完成拼装,拼装结果送40H单元保存,并且规定:(40H)=y2y1y0x4x3x2x1x0利用逻辑指令ANL、ORL、RL等来完成数据的拼拆,处理过程:将30H单元的内容高3位屏蔽;31H单元内容的高5位屏蔽,高低四位交换,左移一位;然后与30H单元的内容相或,拼装后放到40H单元。程序如下:ORG0100HMOVA,30HANLA,#00011111BMOV30H,AMOVA,31HANLA,#00000111BSWAPARLAORLA,30HMOV40H,AEND【例3-29】设片内RAM的20H单元的内容为:(20H)=x7x6x5x4x3x2x1x0把该单元内容反序后放回20H单元,即为:(20H)=x0x1x2x3x4x5x6x7可以通过先把原内容带进位位右移一位,低位移入CF中,然后左移一位,CF中的内容移入,通过8次处理即可,由于8次过程相同,可以通过循环完成,移位过程当中必须通过累加器来处理。设20H单元原来的内容先通过R3暂存,结果先通过R4暂存,R2作循环变量。程序如下:ORG0200HMOVR3,20HMOVR4,#0MOVR2,#8LOOP:MOVA,R3RRCAMOVR3,AMOVA,R4RLCAMOVR4,ADJNZR2,LOOPMOV20H,R4END另外,由于片内RAM的20H单元在位寻址区,这一问题还可以通过位处理方式来实现。【例3-30】一位十六进制数转换成ASC1I码。一位十六进制数有十六个符号0~9、A、B、C、D、E、F。其中,0~9的ASCII码为30H~39H,A~F的ASCII码为41H~46H,转换时,只要判断十六进制数是在0~9之间还是在A~F之间,如在0~9之间,加30H,如在A~F之间,加37H,就可得到ASCII码。设十六进制数放于R2中,转换的结果放于R2中。程序如下:ORG0200HMOVA,R2CLRCSUBBA,#0AH;减去0AH,判断在0~9之间,还是在A~F之间MOVA,R2JCADD30;如在0~9之间,直接加30HADDA,#07H;如在A~F之间,先加07H,再加30HADD30:ADDA,#30HMOVR2,AEND例:以查表方法把累加器A中的十六进制数转换为ASCII码,并送回累加器中。程序如下:指令地址源程序ORG2000H2000HBA:INCA2001MOVCA,@A+PC2002RET2003DB30H2004DB31H2005DB32H……2011DB45H2012DB46H小结:1、对有规律可循的运算:(1)找规律写算法,编程序;(2)利用查表指令编程序。2、对无规律可循的:只能利用查表指令编程序,别无它法。【例3-31】一位十六进制数转换8段式数码管显示码。一位十六进制数0~9、A、B、C、D、E、F的8段式数码管的共阴极显示码为3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H、77H、7CH、39H、5EH、79H、71H。由于数与显示码没有规律,不能通过运算得到,只能通过查表方式得到。设数放在R2中,查得的显示码也放于R2中,用MOVCA,@A+DPTR查表。程序如下:ORG0200HCONVERT:MOVDPTR,#TAB;DPTR指向表首址MOVA,R2;转换的数放于AMOVCA,@A+DPTR;查表指令转换MOVR2,ARETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,67H,77H,7CH,39H,5EH,79H,71H;共阴极显示码表在这个例子中,编码是一个字节,只通过一次查表指令就可实现转换,如编码是两个字节,则需要用两次查表指令才能查得编码,第一次取得低位,第二次取得高位。【例3-32】在一温度控制系统中,温度0~100C每一个温度值都已经通过温度传感器测得一个两字节的标准电压值。现在R2中给出一个0~100C的温度值,取得它的标准电压值放于R3、R4中,低字节放在R3中,高字节放在R4中。通过用MOVCA,@A+DPTR查表,两个字节分两次取得,由DPTR指向表首,由放于R2中的温度值得到所查的电压值相对于表首位置的位移量放于累加器A中,由于每一个电压值为两个字节,位移量须用R2中的温度值乘以2得到。第一次取得低字节,第二次位移量加1后查表取得高字节,分别放于R3、R4中。程序如下:ORG0300HCHECK:MOVDPTR,#TAB;指向表首MOVA,R2;温度值送ARLA;乘2得位移量MOVR1,A;位移量暂存于R1中MOVCA,@A+DPTRMOVR3,A;第一次查得内容送R3MOVA,R1;取出暂存的位移量送AINCA;指向高字节MOVCA,@A+DPTRMOVR4,A;第二次查得内容送R4RETTAB:DW0056H,0059H,0067H,0076H……;电压值表0℃1℃2℃3℃……程序:ORG1000HSQU:MOVDPTR,#3000H;确定表首地址(基地址)MOVA,20H;取X(变量:偏移量)MOVCA,@A+DPTR;查表求Y=X2MOV21H,A;保存Y(结果)RET;子程序结束…;其它程序段ORG3000H;常数表格首地址TAB:DB00,01,04,09,…,225END方法1:例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM21H单元。指令地址源程序ORG1000H;程序起始地址1000HSQU:MOVA,20H;取X1002HADDA,#3;修正偏移量1004HMOVCA,@A+PC;查表求Y=X2(PC=1005H)1005HMOV21H,A;存结果1007HRET;子程序结束1008HTAB:DB00,01,04…;平方表100BHDB09,…,225方法2:例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM21H单元。远程和近程查表指令比较:特点:1、MOVCA,@A+DPTR指令可访问整个ROM的64KB空间,表格可放在ROM的任何位置,与MOVC指令无必然的关系。2、MOVCA,@A+PC优点:不改变PC的状态,根据A的内容取表格常数。缺点:(1)表格只能存放在查表指令以下的256个单元内。(2)当表格首地址与本指令间有其它指令时,须用调整偏移量,调整量为下一条指令的起始地址到表格首址之间的字节数。假定:按下按钮,相应的接口信号为低电平(P1.1=0)时:若程序使P1.3=1,即KA=1时,则电机启动。例:电机的简单起停控制。其框图如下页图a所示。(1)分析:简单的电机起动停止控制,其控制的示意图及I/O分配如图b所示。输入信号:启动按钮SB1、停止按钮SB2;输出信号:继电器KA。启动停止SB1SB2ORG1000HSTR:MOVP1,#00000110BWT1:JBP1.1,WT1;启动?SETBP1.3;电机启WT2:JBP1.2,WT2;停止?CLRP1.3;电机停SJMPWT1END(2)按照上述控制思路,流程图如右图所示。常用程序结构:顺序结构、分支结构、循环结构(1)顺序程序:直线程序或简单程序单重分支(2)分支程序多次使用条件转移指令多重分支地址表法按分支号转移转移指令表法通过堆栈操作(3)循环程序:构成:初始化、循环体、控制变量的修改、循环次数的控制。延时;记数控制控制特征标志控制
本文档为【单片机原理及智能仪表技术课件第4章】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥20.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
正方体
暂无简介~
格式:ppt
大小:609KB
软件:PowerPoint
页数:51
分类:
上传时间:2022-05-11
浏览量:41