双字节BCD乘法单片机_第1页
双字节BCD乘法单片机_第2页
双字节BCD乘法单片机_第3页
双字节BCD乘法单片机_第4页
双字节BCD乘法单片机_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、. MM 大 学MMMMMMM 学 院 实 验 报 告课程名称 单片机原理及其接口技术 实验名称 双字节BCD码乘法及数据排序实验实验类型 设计型 姓名 00 学号 00 日期 00 地点 00 成绩 教师 00 评语:1、 实验目的1. 进一步熟悉51汇编指令,掌握汇编语言的设计和调试方法。2. 设计十进制乘法和程序,了解如何通过调用系统提供的内置数码显示,键盘输入子程序。3. 熟悉如何使用高效方法对数据排序。2、 实验内容1. 从键盘上输入4位被乘数、乘数,实现4位十进制的乘法,结果显示在数码管上。其中键盘输入和数码显示可调用星研集成软件的内置函数实现,说明和参考实例见3.6节。说明:可分

2、步走,先省略键盘输入和数码显示,直接设定被乘数和乘数进行乘法,在验证乘法功能正确之后,在增加键盘输入和数码显示的功能。2. 调试状态下借助星研集成软件直接修改片内RAM30H3FH单元,数值任意,然后对其冒泡排序,检查排序结果。三、实验仪器STAR ES598PCI试验仪、PC机一台四、实验原理图A3区:JP51的p1口-G6区:LED 5、 设计思路1.双字节4位BCD码乘法2. 冒泡排序6、 实验程序1.双字节4位BCD码乘法EXTRNCODE(Display8, GetBCDKey)BUFFER2DATA70H;8字节显示缓冲区BUFFERDATA 30H BLOCKdata50HRES

3、ULTDATA40HF1BIT 0D1H ;PSW.1 ORG 0000H LJMP START ORG 0100HSTART: MOV SP,#60H CLR F1 ;先清除显示,再接收键输入START1:MOV R0,#BUFFER MOV A,#4 ;按键次数LCALL GetBCDKey ;得到双字节十进制数(乘数)MOV R0,#BUFFERACALL BCD2B ;转换成二进制数MOV BLOCK,R3MOV BLOCK+1,R4SETB F1 ;接收到第一个键,才清除显示MOV R0,#BUFFERMOV A,#4 ;按键次数LCALL GetBCDKey ;得到双字节十进制数(

4、减数)MOV R0,#BUFFERACALL BCD2BMOV BLOCK+2,R3MOV BLOCK+3,R4MOV R4,BLOCK ;四个BCD入口参数MOV R5,BLOCK+1MOV R6,BLOCK+2MOV R7,BLOCK+3MOV R0,#RESULTlCALL MLTYMOV R3,RESULTMOV R2,RESULT+1MOV R1,RESULT+2MOV R0,RESULT+3ACALL B4toD4 ;字节二进制数转十进制数;R0R1R2R3为二进制数,R4R5R6R7为压缩BCD码MOV A,R7ANL A,#0FHMOV BUFFER2,AMOV A,R7ANL

5、 A,#0F0HSWAP AMOV BUFFER2+1,AMOV A,R6ANL A,#0FHMOV BUFFER2+2,AMOV A,R6ANL A,#0F0HSWAP AMOV BUFFER2+3,AMOV A,R5ANL A,#0FHMOV BUFFER2+4,AMOV A,R5ANL A,#0F0HSWAP AMOV BUFFER2+5,AMOV A,R4ANL A,#0FHMOV BUFFER2+6,AMOV A,R4ANL A,#0F0HSWAP AMOV BUFFER2+7,AMOV R0,#BUFFER2LCALL Display8sjmp $BCD2B: MOV R1,#BU

6、FFER MOV R2,#2S: MOV A,R1 PUSH ACC ANL A,#0FH MOV R0,A POP ACC JNB ACC.4,NEXT1 ;分别判断4,5,6,7位是否为1,分别加上10,20,40,80 XCH A,R0 ADD A,#10 XCH A,R0NEXT1: JNB ACC.5,NEXT2 XCH A,R0 ADD A,#20 XCH A,R0NEXT2: JNB ACC.6,NEXT3 XCH A,R0 ADD A,#40 XCH A,R0NEXT3: JNB ACC.7,NEXT4 XCH A,R0 ADD A,#80 XCH A,R0NEXT4: MOV

7、 A,R0 PUSH ACC INC R1 DJNZ R2,S POP ACC MOV R0,A POP ACC MOV B,#100 ;高2位(千位、百位)乘以100 MUL AB ADD A,R0 MOV R3,A ;转换成的二进制数放在R4R3中 MOV A,B ADDC A,#0 MOV R4,A RET ;字节二进制数转十进制数;R0R1R2R3为二进制数,R4R5R6R7为压缩BCD码;该子程序也可以模仿书上(胡汉才)例4.22,采用除以10、其余数为个位数字,其商继续除以10得十位数字,依次类推B4toD4:CLRAMOVR4,AMOVR5,AMOVR6,AMOVR7,AMOVB

8、,#32LOOP:CLRCMOVA,R3RLCAMOVR3,AMOVA,R2RLCAMOVR2,AMOVA,R1RLCAMOVR1,AMOVA,R0RLCAMOVR0,AMOVA,R7 ;算法举例:例如数据为0010 0100(36),则过程为ADDCA,R7 ; A R7DAA ; 0 0MOVR7,A ; 0 0MOVA,R6 ; 1 1ADDCA,R6 ; 2 2DAA ; 4 4MOVR6,A ; 9 9MOVA,R5 ; 18 18ADDCA,R5 ; 36 36DAAMOVR5,AMOVA,R4ADDCA,R4DAAMOVR4,ADJNZB,LOOPRETMLTY:MOV A,R6

9、MOV B,R4MUL ABMOV R0,AMOV R3,BMOV A,R7MOV B,R4MUL ABADD A,R3MOV R3,AMOV A,BADDC A,#00HMOV R2,AMOV A,R6MOV B,R5MUL ABADD A,R3INC R0MOV R0,AMOV A,R2ADDC A,BMOV R2,AMOV R1,#00HJNC NXT1INC R1NXT1:MOV A,R7MOV B,R5MUL ABADD A,R2INC R0MOV R0,AMOV A,BADDC A,R1INC R0MOV R0,ARETend2.冒泡排序SIZE EQU 8 ;数据个数ARRAY

10、EQU 30H ;数据起始地址CHANGE EQU 0 ;交换标志SORT: MOV R0,#ARRAY MOV R7,#SIZE-1 CLR CHANGEGOON:MOV A,R0 MOV R2,A INC R0 MOV B,R0 CJNE A,B,NOTEQUAL SJMP NEXTNOTEQUAL: JC NEXT ;前小后大,不交换 SETB CHANGE ;前大后小,置交换标志 XCH A,R0 ;交换 DEC R0 XCH A,R0 INC R0NEXT:DJNZ R7,GOON JB CHANGE ,SORT SJMP $ END八、实验小结1、感觉这次实验还是有难度的,BCD码转化二进制,以及二进制转化BCD码算法,还无法融会贯通。2、这个乘法思路很有条理性,从键盘输入然后转化,后经过参数赋值传递调用乘法子程序,运行结果再经过转化,后调用内置函数显示出来,这样使程序相当于模块化,易懂明了。3、开始时,程序运行没有显示结果出来,后经过检查是调用内置显示函数时,参数的传递不正确,只要对Buffer

温馨提示

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

评论

0/150

提交评论