您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > [单片机原理及接口技术][课件][第04章]
第4章MCS-51单片机程序设计杨海马上海理工大学光电学院4.1.1汇编语言格式程序是为计算某一算式或完成某一工作的若干指令的有序集合。通常,计算机的配置不同,设计程序时所采用的语言也不相同.程序设计语言的分类可分为:机器语言、汇编语言、高级语言。(1)机器语言直接用二进制代码表示的指令系统称为机器语言系统,简称机器语言。特点:计算机可直接识别、执行。缺点:不易看懂,不便记忆,易出错,难修改。(2)汇编语言用助记符表示指令系统的语言称为汇编语言或符号语言。4.1.1汇编语言格式特点:1.助记符与机器指令一一对应,所编程序效率高、占用存储空间小,运行速度快,可出最优化程序。2.面向机器,编程比高级语言困难。使用汇编语言,必须熟悉计算机的系统结构、指令系统、寻址方式等功能,要求设计者具有“软硬结合”的功底,是学习单片机的基本功。3.汇编语言能直接管理和控制硬件设备。可直接访问存储器、输入与输出接口及扩展的各种芯片,亦可直接处理中断。缺点:通用性差,只面向一台具体的机器。4.1.1汇编语言格式汇编:把汇编语言中出现的字母、数字和符号转换成二进制代码的过程称为汇编。(3)高级语言参照数学语言设计、近似与人们日常用语的语言。特点:直观、易学、通用性强,是面向问题或面向过程的语言。4.1.1汇编语言格式2.汇编语言详析汇编语句有三种类型:指令语句,伪指令语句和宏指令语句。指令语句格式:【标号(名字)】:助记符(操作码)【操作数】;【注释】伪指令格式:名字定义符参数;注释标号域:用来说明指令的地址。操作码域:操作数域:常数,末尾需加“H”、“B”表明进制,不加表示10进制;若以A、B、C、D、E、F开头的16进制数,前面必须添“0”引导说明,如0F0H。注释域:由“;”引导。4.1.2伪指令语句伪指令:汇编程序控制译码指令。“伪”体现在汇编时不产生机器指令代码,不影响程序的执行,仅指明在汇编时执行一些特殊的操作。1.ORG<表达式>功能:专门规定数据区的起始地址。由后面表达式定,可以用绝对地址,也可用浮动地址。2.END功能:汇编结束伪指令3.标号EQU表达式功能:把表达式赋予标号。LOOPEQU2002H4.标号DL表达式功能:说明标号等于表达式。COUNTDL3000HEQU和DL区别:可用DL在同一源程序中给同一标号赋予不同的值;EQU定义的标号在整个源程序中不能更改。4.1.2伪指令语句5.标号DB<表达式或表达式表>功能:将表达式或表达式所表示的数据或数据串存入从标号开始的连续单元中。ORG2000H例如:TABLEDB73H,04,100,-2,“ABC”6.标号DW<表达式或表达式表>功能:将表达式或表达式所表示的数据或数据串存入从标号开始的连续单元中,且把字节的高字节存入低地址单元,低字节存入高地址单元。7.标号DS表达式功能:在目标代码中,以标号为首地址保留表达式值的若干存储单元以备源程序用。BASEDS100HDB/DW/DS只能用于程序存储器中。8.字符名称BIT位地址功能:把位赋予字符名称。ABCBITP3.14.1.3例子P104例1.分析程序执行后,定义的存储器中的值与地址之间的对应关系。ORG8100HBUFFERDS10H;DW“AB”DW100H,1ACH,-814说明:(1)从8100H至810FH为缓冲区空间(2)(8110H)=41H(’A’)(8111H)=42H(’B’)(3)8112H单元起存放01H、00H、01H、ACH、FCH、D2H4.280C51汇编语言程序设计程序设计流程:(1)针对提出问题进行分析,找出合理的计算方法及适当的数据结构,确定解题步骤。方案(2)根据算法画出程序流程图。流程图(3)进行结构化汇编语言设计,分配应用中使用的寄存器、存储单元、I/O口。汇编(4)调试程序调试结构化程序设计中,主要包括五种结构:顺序结构、分支结构、循环结构、子程序、中断服务子程序。特点:使得程序结构简单清晰,易读写,调试方便、生成周期短、可靠性高。4.2.1顺序结构程序设计顺序结构程序设计定义:按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止.例1.带符号双字节二进制数加减法程序对象:已知两个16位的带符号数分别存放在工作寄存器R2(高字节)、R3(低字节)和R4(高字节)、R5(低字节)中,两个数的D15位为符号位。编写多字节带符号数的加法和减法运算程序。减法入口地址为标号BSUB,加法入口地址为BADD.运算结果存入R6(高字节)和R7(低字节)中。分析:带符号数的减法运算,只要先将减数的符号位取反,即可把减法运算按加法运算的原则来处理。对于带符号数的加法运算,首先要判断两数的符号,若两数符号相同则进行两数相加,并以被加数符号为结果的符号。如果两数符号不同,则进行两数相减。如果相减结果为正,则该数即为最后结果,并以被减数符号为结果的符号。如果两数相减结果为负数,则应将其差数取补,并把被减数的符号取反后作为结果的符号。4.2.1顺序结构程序设计例.7001H+(-1020H)=5FE1H0111000000000001+1001000000100000||注:符号位不同,则运行相减程序,但实际运算时符号位均以清00111000000000001-00010000001000000101111111100001同理,计算0001H+(-1020H)-0001H+1020H注意取补运算。带符号减法正-正正-负负-正负-负正+负正+正负+负负+正正+正正+负负+正负+负带符号加法归一为带符号加法4.2.1顺序结构程序设计源程序:BSUB:MOVA,R4;取减数高字节CPLACC.7;减数符号取反以进行加法MOVR4,A;BADD:MOVA,R2;取被加数高字节MOVC,ACC.7MOVF0,C;被加数符号保存在用户标志F0中XRLA,R4;判别两个数的符号位是否相同MOVC,ACC.7;两数同号Cy=0,两数异号Cy=1MOVA,R2;被加(减)数符号位清为0CLRACC.7;MOVR2,A;取被加(减)数的数值部分MOVA,R4;加(减)数的符号位清为0CLRACC.7MOVR4,A;取加(减)数的数值部分4.2.1顺序结构程序设计JCJIAN;两数异号转JIANJIA:MOVA,R3;两数同号,进行加法ADDA,R5;低字节相加MOVR7,A;存和的低字节MOVA,R2;高字节相加ADDCA,R4;MOVR6,A;存和的高字节JBACC.7,QAZ;符号位为1,转溢出处理QWE:MOVC,F0;以被加数的符号为结果符号MOVACC.7,C;MOVR6,ARETJIAN:CLRCMOVA,R3;/低字节相减/SUBBA,R5;低字节相减MOVR7,A;存差的低字节MOVA,R24.2.1顺序结构程序设计SUBBA,R4;高字节相减MOVR6,A;存差的高字节JNBACC.7,QWE;判差的符号,为0转QWEBMP:MOVA,R7;若差的符号为1,则取补CPLA;低字节取反加1ADDA,#01H;MOVR7,A;MOVA,R6;高字节取补CPLA;ADDCA,#00H;MOVR6,A;CPLF0;被减数符号取反SJMPQWEQAZ:……4.2.1顺序结构程序设计P107例2.双字节乘法对象:分析:被乘数低字节(addr1)用A表示,高字节用(addr2)B表示;乘数低字节(addr3)用L表示,高字节(addr4)用M表示。用工作寄存器存放部分积,R2存放(HAL+LBL+LAM),R3存放(HBL+Cy+HAM+LBM),R4存放(HBM+Cy)。4.2.1顺序结构程序设计源程序:SART:PUSHPSW;PSW、A、B入栈PUSHACC;PUSHB;MOVPSW,#18H;选用工作寄存器组3MOVR0,#addr1;被乘数低字节地址送R0MOVR1,#addr3;乘数低字节地址送R1MOVA,@R0;被乘数低字节内容送AMOVB,@R1;乘数低字节内容送BMULAB;(1)A×LMOV@R0,A;积的最低字节存入addrl中MOVR2,B;HAL送R2中INCR0;指向被乘数高字MOVA,@R0;被乘数高字节送AMOVB,@R1;乘数低字节送B4.2.1顺序结构程序设计MULAB;(2)B×LADDA,R2;HAL十LBLMOVR2,A;HAL十LBI之和送R2MOVA,B;HBL送AADDCA,#00H;HBL+CYMOVR3,A;HBL送R3DECR0;指向ddrlMOVA,@R0;A送累加器AMOVA,@R1;M送BMULAB;(3)M×AADDA,R2;LAM+(R2)MOVR2,A;LAM+HAL十LBL之和送R2MOVA,B;HAM送AADDCA,R3;HAM十HBL+CYMOVR3,A;HAM+HBL+CY之和送R34.2.1顺序结构程序设计MOVR4,#0;清R4JNCLOOP;判CY,CY=0转LOOPINCR4;CY=1则(R4)←R4+lLOOP:INCR0;指向addr2MOVA,@R0;B送AMOVB,@R1;M送BMULAB;(4)M×BADDA,R3;HAM十HBL+LBMMOVR3,A;HAM+HBL+LBM之和送R3MOVA,B;HBM送AADDCA,R4;R4+HBM=RES3MOV@R1,A;RES3存入addr4中MOV@R0、R2;RES1存入addr2中4.2.1顺序结构程序设计DECR1;指向addr3MOV@R1,R3;RES2存入addr3中POPB;B、A、PSW出栈POPACCPOPPSW4.2.2分支结构程序设计分支结构程序设计定义:程序执行流程中必然包含有条件判断,符合条件要求和不符合条件要求的有不同处理路径,称为~.按程序出口数目判断,包括:单分支结构和多分支结构。实现分支结构的指令有:JC,JNC,JB,JNB,JZ,JNZ,DJNZ,JMP@A+DPTR,CJNEA,direct,rel多分支结构单分支结构P74.例4-4.无符号数的比较ORG1000HCOM1:MOVDPTR,#Data1MOVXA,@DPTRMOVB,AINCDPTRMOVXA,@DPTRCJNEA,B,L1L1:JCBIG1BIG:INCDPTRMOVX@DPTR,ARETBIG1:XCHA,BSJMPBIGEND4.2.2分支结构程序设计P74.例4-6.带符号数的比较4.2.2分支结构程序设计STEP1:jbACC.7,TESTxrla,Data2subba,Data2jcSTEP3STEP2:movBIG,Data1movSMALL,Data2retTEST:xrla,Data2jnbACC.7,STEP2STEP3:movSMALL,Data1movBIG,Data2retData1equ40hData2equ41hBIGequ30hSMALLequ31horg00hsjmpstartorg10hstart:nopmov40h,#45hmov41h,#45hCOM2:mova,Data1xrla,Data2jnzSTEP1nopsetbF0ret4.2.2分支结构程序设计例3.编写计算下式程序对象:Y=a2+b(当b≥10时)Y=a2-b(当b10时)分析:此式有一个判断b,使用CJNE指令。源程序:ORG0000HSTART:MOVA,#aMOVB,AMULAB;BA=a2MOVR0,A;R1R0=a2MOVR1,BMOVA,#bCJNEA,#0AH,MMN;b≠10则转移MM:ADDA,R0;b≥10,a2+b=YMOVR0,AMOVA,#00HADDCA,R1MOVR1,AJMPMMNN4.2.2分支结构程序设计MMN:JNCMM;无借位(即b10)转MMMOVR3,A;R3←bMOVA,R0CLRCSUBBA,R3;R1R0←a2-bMOVR0,AMOVA,R1SUBBA,#00H;判断低8位(R0)-b是否有借位MOVR1,AMMNN:MOVY0,R0;Y1Y0
本文标题:[单片机原理及接口技术][课件][第04章]
链接地址:https://www.777doc.com/doc-3975498 .html