单片机实验1-4.doc_第1页
单片机实验1-4.doc_第2页
单片机实验1-4.doc_第3页
单片机实验1-4.doc_第4页
单片机实验1-4.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 实验内容实验一 数码转换程序一单字节十六进制到BCD码的转换1实验目的:熟悉8051汇编语言的编制、调试。2编制说明:将十六进制数除以一百得百位BCD码,余数除以十得十位BCD码,再得余数为个位BCD码。3操作说明:将原文件在编辑器中进行编辑,编辑后回到主介面,建立工程文件,将原文件插入工程文件中,编译连接生成可执行文件。若编译连接成功,打开寄存器窗口,在R2中输入八位无符号十六进制数,单步或设断点运行程序,并检查运行结果。(运行结果在R6、R5中存放)4程序清单:NAME BCD1CSEG AT 0000HLJMP BCD1CSEG AT 4100HBCD1: MOV A,R2 MOV B,#64H DIV AB MOV R6,A MOV A,#0AH XCH A,BDIV AB SWAP AADD A,B MOV R5,A NOPEND5实验步骤编辑源程序、建立工程文件、编译连接生成可执行程序在R2中输入八位无符号十六进制整数单步执行程序,记录每条指令执行后有关寄存器和PSW中内容给R2中输入五组不同参数,改用设断点连续执行程序,自行设计表格记录程序执行后A、B、PSW、R5和R6中内容二双字节十六进制到BCD码的转换1编制说明:因为:(a15 a14 a1 a0)2=(0*2+ a15)*2 +a14)+ a0 所以,将十六进制数从最高位逐次左移入BCD码寄存器的最低位,并且每次都实现()*2+ai的运算,共循环十六次,由R7控制。2操作说明:操作说明同上。入口:R3、R2(为十六位无符号十六进制整数)。出口:R6(万位)、R5(千位、百位)、R4(十位、个位)存放五位BCD码。3程序清单NAME BCD2CSEG AT 0000H LJMP BCD2CSEG AT 4100HBCD2: CLR A MOV R4,AMOV R5,AMOV R6,AMOV R7,#10HLPO : CLR C MOV A, R2 RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R6 ADDC A,R6 DA A MOV R6,A DJNZ R7,LPO NOPEND4实验步骤编辑源程序、建立工程文件、编译连接生成可执行程序在R3、R2中输入双字节无符号十六进制整数单步执行程序,每次在DA A指令前,检查和记录A内容和PSW中标志位(主要为Cy和AC标志)的状态;在DA A指令后仍检查和记录A内容和标志位的状态。从而深入了解DA A指令是根据什么调整和如何调整的,这样单步执行循环七次,然后连续执行。给R3、R2中输入五组不同参数,改用设断点连续执行程序,自行设计表格记录程序执行后R6、R5和R4中内容5.思考题DA A指令只对什么寄存器起作用?DA A指令安排在程序何处,才能得到正确结果? 三双字节BCD码到十六进制的转换1编制说明:因为:(d3 d2 d1 d0)BCD=(d3*10+ d2)*100 +(d1*10+d0) 所以,di+1*10+ di的运算可由子程序BCD2B完成。 2操作说明:操作说明同一。入口:将BCD装入R5(千位、百位)、R4(十位、个位)。出口:R5、R4(为四位无符号十六进制整数)。3程序清单NAME BCD3CSEG AT 0000H LJMP BCD3CSEG AT 4100HBCD3: MOV A,R5 MOV R2,A ACALL BCD2B MOV B,#64H MUL AB MOV R6,A XCH A,BMOV R5,AMOV A,R4MOV R2,AACALL BCD2BADD A,R6MOV R4,AMOV A,R5ADDC A,#00HMOV R5,ANOPRETBCD2B: MOV A,R2ANL A,#0F0HSWAP A MOV B,#0AH MUL AB MOV R3,A MOV A,R2 ANL A,#0FH ADD A,R3 MOV R2,A RET END4实验步骤编辑源程序、建立工程文件、编译连接生成可执行程序在R5、R4中输入BCD码断点设在第一个ACALL BCD2B,检查和记录在ACALL BCD2B指令执行前后,堆栈指针SP、堆栈中内容及程序计数器PC中内容。断点设在第二个ACALL BCD2B,检查和记录在ACALL BCD2B指令执行前后,堆栈指针SP、堆栈中内容及程序计数器PC中内容。给R5、R4中输入五组不同参数,改用设断点连续执行程序,自行设计表格记录程序执行后R5和R4中内容5思考题SP表示什么,有几位,作用是什么?本实验系统复位后SP中内容是什么?实验二 双字节有符号数加、减法一、 双字节无符号数加法程序1实验目的:进一步熟悉MCS-51的指令系统,掌握汇编语言的程序设计方法。2编制说明:补码表示的数可以直接相加,所以双字节无符号数加、减程序也适用于补码的加、减法。3操作说明:入口:将(R2、R3)和(R6、R7)分别装入双字节无符号数,然后相加。出口:相加结果送入R4、R5。4程序清单:NAME NADDCSEG AT 0000H LJMP NADDCSEG AT 4100HNADD: MOV A,R3 ADD A,R7 MOV R5,A MOV A,R2 ADDC A,R6 MOV R4,A NOP RETEND5实验步骤编辑源程序、建立工程文件、编译连接生成可执行程序在(R2、R3) 和(R6、R7)中装入双字节无符号数单步执行程序,记录每条指令执行后有关寄存器和PSW中内容给(R2、R3)和(R6、R7)中输入五组不同参数,改用设断点连续执行程序,自行设计表格记录程序执行后A、PSW、R4和R5中内容6思考题ADD、ADDC指令有什么异同?是否能将这两条指令的位置交换?二、 双字节无符号数减法程序1操作说明:入口:将(R2、R3)和(R6、R7)分别装入双字节无符号数,然后相减。出口:相加结果送入R4、R5。2程序清单:NAME NSUB1CSEG AT 0000H LJMP NSUB1CSEG AT 4200HNSUB1: MOV A,R3 CLR C SUBB A,R7 MOV R5,A MOV A,R2 SUBB A,R6 MOV R4,A NOP RET END3实验步骤同双字节无符号数加法程序4思考题为什么第一条SUBB指令前加CLR C指令?而第二条SUBB指令前不加CLR C指令? 三、 双字节原码有符号数加、减程序1编制说明:对于原码表示的数,不能直接执行加、减运算,必须先按操作数的符号决定运算种类,然后再对数值部分执行操作。2操作说明:入口:将(R2、R3)和(R6、R7)分别装入双字节原码表示的数,最高位为符号位,然后求(R2、R3)(R6、R7),其中DADD为原码加法子程序入口,NAS为原码减法子程序入口。出口:相加减的结果送入R4、R5,Cy=1发生溢出,Cy=0为正常。3程序清单:NAME NASCSEG AT 0000H LJMP NASCSEG AT 4300HNAS : MOV A,R6 CPL ACC.7 MOV R6,ADADD:MOV A,R2 MOV C,ACC.7 MOV F0,C XRL A,R6 MOV C,ACC.7MOV A,R2CLR ACC.7MOV R2,AMOV A,R6CLR ACC.7MOV R6,AJC DAB2ACALL NADDMOV A,R4JB ACC.7,DABEDAB1: MOV C,F0MOV ACC.7,CMOV R4,ANOPRETDABE: SETB C RETDAB2: ACALL NSUB1MOV A,R4JNB ACC.7, DAB1ACALL CMPTCPL F0 SJMP DAB1CSEG AT 4400HCMPT : MOV A,R5 CPL A ADD A,#1 MOV R5,A MOV A,R4 CPL A ADDC A,#0 MOV R4,A RET END4实验步骤编辑源程序、建立工程文件、编译连接生成可执行程序应注意双字节原码有符号数加、减程序中调用了三个程序:NADD无符号数加法程序、NSUB1无符号数减法程序、CMPT带符号数求补程序。由源程序生成可执行程序由两种方法:一种方法:首先将NADD、 NSUB1、CMPT分别进行编辑、编译连接生成三个可执行程序;然后将原码有符号数加、减程序中ACALL NADD,ACALL NSUB1,ACALL CMPT三条指令中的符号地址NADD、 NSUB1、CMPT用相应程序的直接地址代替即NADD用4100H、 NSUB1用4200H、CMPT用4400H代替;最后将原码有符号数加、减程序进行编辑、编译连接生成可执行程序。另一种方法:将NADD程序、 NSUB1程序、CMPT程序和原码有符号数加、减程序在一个源程序进行编辑、编译连接生成一个可执行程序,此时原码有符号数加、减程序中ACALL NADD,ACALL NSUB1,ACALL CMPT三条指令如程序给出,不用改变。注意:在执行减法运算时,原码有符号数加、减程序如程序清单所给,在执行加法运算时, 将程序清单中LJMP NAS指令更正为 LJMP DADD。在(R2、R3) 和(R6、R7)中装入双字节无符号数在执行加法运算时,断点设在两条RET指令处,全速断点运行程序,记录程序执行后R4、R5中内容;在执行减法运算时,断点设在第一条RET指令处,全速断点运行程序,记录程序执行后R4、R5中内容。注:给(R2、R3)和(R6、R7)中输入五组不同参数,全速断点运行程序,自行设计表格记录程序执行后R4和R5中内容。5思考题:在程序中,哪些指令是位操作指令?请总结位操作指令的功能?试画出此程序框图。实验三 双字节有符号数乘法一、双字节无符号数乘法程序1实验目的:进一步熟悉在多字节情况下,如何运用乘、除法指令。2编制说明:MCS-51乘法指令实现两个八位无符号数直接相乘,因此双字节相乘需分解为四次单字节相乘,才可利用乘法指令。3操作说明:入口:将(R5、R4)装入双字节无符号数作为被乘数,将(R3、R2)装入双字节无符号数作为乘数。出口:乘积送入以R1(积的低位字节地址指针)为地址指针的四个单元中。4程序清单:NAME DUMULCSEG AT 0000H LJMP STARTCSEG AT 4130HSTART: MOV A,R1 MOV R6,A MOV R7,#04CLEAR:MOV R1,#00H INC R1 DJNZ R7,CLEAR MOV A,R6 MOV R1,AMM: MOV A,R2MOV B,R4MUL ABACALL ADDMDEC R1MOV A,R2MOV B,R5MUL ABACALL ADDMMOV A,R3MOV B,R4MUL ABACALL ADDM MOV A,R3MOV B,R5MUL ABACALL ADDMMOV A,R6MOV R1,ANOPRETADDM: ADD A,R1MOV R1,AMOV A,BINC R1ADDC A,R1MOV R1,AINC R1MOV A,R1ADDC A,#00HMOV R1,ADEC R1RETEND二、双字节原码有符号数乘法程序1编制说明:对原码表示的带符号的二进制数乘法,只需在乘法之前,先按正正得正,负负得正,正负得负的原则,得出积的符号,然后清零符号位,执行无符号乘法,最后送积的符号。2操作说明:操作说明同双字节无符号数乘法程序。入口:将(R5、R4)装入双字节原码有符号数作为被乘数,将(R3、R2)装入双字节原码有符号数作为乘数。出口:乘积送入R4、R5、R6、R7,操作数的符号位在最高位。3程序清单:NAME IMULCSEG AT 0000H LJMP IMULCSEG AT 4100HIMUL:MOV A,R5XRL A,R3MOV C,ACC.7MOV F0,CMOV A,R5CLR ACC.7MOV R5,AMOV A,R3CLR ACC.7MOV R3,AACALL 4130HMOV A,R1MOV R7,AINC R1MOV A,R1 MOV R6,AINC R1MOV A,R1MOV R5,AINC R1MOV A,R1MOV R4,AMOV C,F0MOV ACC.7,CMOV R4,ARETEND三、第3章课后作业编程四、第四章课后作业4-1和4-2编程实验四 双字节有符号数除法一、无符号二进制除法程序1编制说明:MCS-51的除法指令只实现两个八位无符号数直接相除,因此采用移位除方法。先把被除数高位和除数进行比较,如果被除数高位大于除数,则商1,并从被除数减去除数,形成一个部分余数;如果被除数高位小于除数,则商0,不执行减法。接着把部分余数左移一位,并与除数再次比较,如此循环直至被除数的所有位都处理完为止。一般情况下,如果除数和商都为双字节,则被除数为四

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论