单片机实验多字节加减法
- 格式:doc
- 大小:61.50 KB
- 文档页数:4
ADuC831/MCS-51单片机实验实验一 BCD码加法实验一、实验要求利用子程序实现压缩BCD码的加法运算,通过循环多次调用子程序实现多字节BCD码的加法运算。
二、实验目的熟悉并掌握ADuC831/MCS-51单片机开发系统的使用,掌握BCD码的加法和子程序的编程方法。
三、实验说明编写程序,实现多字节BCD码的加法运算。
四、实验电路连线此实验不需要连线。
实验二输入/输出接口实验一、实验要求编写程序,使得八位发光二极管的亮灭变化与八位拨动开关的状态相一致。
二、实验目的掌握总线方式输入输出口的编程方法。
三、实验说明读入八位拨动开关的状态值,输出到八个二极管。
四、实验电路连线此实验不需要连线。
五、程序框图实验三外部中断实验一、实验要求编写程序,使其可以响应外部中断源产生的中断触发信号,并在对应的中断服务子程序中点亮/熄灭一个发光二极管作为观察现象。
二、实验目的1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
三、实验说明1.中断服务程序的关键是:1).保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2).必须在中断程序中设定是否允许中断重入,即设置EX0位。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
2.实验可使用INT0中断,并采用边沿触发方式。
3.实验可使用单脉冲输出或脉冲边沿输出申请中断,可用逻辑笔显示中断处理结果。
四、实验电路连线实验中将P3.2(INT0)扩展插孔与单脉冲输出插孔相连,P3.4(用于驱动发光二极管亮灭)扩展插孔与逻辑笔输入插孔相连。
五、程序框图实验四定时器实验一、实验要求编写程序,使用单片机的内部定时器中断方式,实现一秒钟输出状态反转一次。
二、实验目的1.学习MCS-51单片机内部定时器的使用和编程方法。
2.进一步掌握中断处理程序的编程方法。
三、实验说明1. 内部计数/定时器的编程主要是定时常数的设置和有关控制寄存器的设置。
实验二实现多字节加(减)法一、 实验目的:a)熟悉单片机指令系统,b)学会用汇编语言编写计算程序二、 实验内容:(一)实验要求:正确建立工程文件、编写程序,会利用keil进行程序调试并观察运行结果。
z基本要求:编写程序,将存放在内部RAM起始地址为20H和30H的两个3字节无符号相加,结果存放在内部RAM单元70H、71H、72H中(低位对应低字节)。
数据要求初始化:参考将20H和30H分别存放两个三字节的无符号数333333H和222222H。
z提高要求:将基本要求中的“相加”改成“减法”,其它要求与基本要求相同,数据要求初始化:参考将20H和30H分别存放两个三字节的无符号数333333H和223344H。
编写相应的程序并给予适当的注释。
(二)实验基本步骤:1.打开Keil,新建工程:Project/New Project,输入工程名,并保存2.选项选择器件:Atmel 的89C513.新建程序文本,并另存为该文件为汇编文件格式: (1)“File/New”,(2) File/Save As/键入欲使用的文件名及后缀名,即“文件名.asm”。
再单击“保存”4.添加该文件该工程:回到编辑界面后,单击“Target 1”前面的“+”号,然后在“SourceGroup 1”上单击右键,单击“Add File to Group ‘Source Group 1’”选择刚才新建的汇编文件。
5.在keil的汇编文件中输入程序代码,并编译,调试。
(1)写完代码后单击“Project”菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成功后(0个errors),(每次修改程序后都要重新编译下,才能生效)。
(2)再单击“Debug”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键Ctrl+F5),点击RUN进行运行,或者按F11进行单步运行。
一、实验目的和要求
1.熟悉双字节编码加法程序的编写方法
2.掌握编写和运行子程序的技巧
二、实验内容和原理
实验内容:
对双字节的数字进行加法运算
实验原理:
将16位数字分成两段,分别存放在两个单元中,对低位的数字进行无进位加法运算,储存到另外一个存储单元,对高位的的数字继续进行带进位加法运算,然后存储。
三、主要仪器设备
计算机一台。
硬件配置:Pentium II及以上配置,内存为128M、硬盘剩余空间为100MB,配置有串口、并口和USB口。
操作系统:Windows98/2000/XP。
应用软件:KeilC51或其他。
四、操作方法与实验步骤
六、讨论、心得。
单片机多字节B C D码减法;入口条件:字节数在R7中,被减数在[R0]中,减数在[R1]中。
;出口信息:差在[R0]中,最高位借位在CY中。
;影响资源:PSW、A、R2、R3A-B=A+(B)补99-66=33 -----99+(100-66)=99+34=133BCDB: LCALL NEG1 ;减数[R1]十进制取补LCALL BCDA ;按多字节BCD码加法处理CPL C ;将补码加法的进位标志转换成借位标志MOV F0,C ;LCALL NEG1 ;恢复减数[R1]的原始值MOV C,F0 ;恢复借位标志RETNEG1: MOV A,R0 ;[R1]十进制取补子程序入口 A- R0XCH A,R1 ;交换指针 A-R1,R1-R0XCH A,R0 A-R0,R0-R1LCALL NEG ;通过[R0]实现[R1]取补MOV A,R0 A-R0XCH A,R1 ;换回指针 A-R1, R1-R0XCH A,R0 A-R0, R0-R1RET;多字节BCD码取补NEG: MOV A,R7 ;取(字节数减一)至R2中 A-R7 DEC A A-(R7-1)MOV R2,A R2-A MOV A,R0 A-R0MOV R3,A R3-R0NEG0: CLR CMOV A,#99HSUBB A,@R0 ;按字节十进制取补MOV @R0,A ;存回[R0]中INC R0 ;调整数据指针DJNZ R2,NEG0 ;处理完(R2)字节MOV A,#9AH ;最低字节单独取补SUBB A,@R0MOV @R0,AMOV A,R3 ;恢复指针MOV R0,ARET;多字节BCD码加法BCDA: MOV A,R7 ;取字节数至R2中MOV R2,AADD A,R0 ;初始化数据指针MOV R0,AMOV A,R2ADD A,R1MOV R1,ACLR CBCD1: DEC R0 ;调整数据指针DEC R1MOV A,@R0ADDC A,@R1 ;按字节相加DA A ;十进制调整MOV @R0,A ;和存回[R0]中DJNZ R2,BCD1 ;处理完所有字节RET。
单片机多字节加减乘除法程序文章长度[6790]加入时间[2007-8-14]更新时间[2012-6-12 18:04:14]级别[0][评论][收藏]一种实用的单片机多字节除法算法一种实用的单片机多字节除法算法在单片机的实际应用中,除法运算是比较常见的一种运算。
以MCS-51单片机为例,虽然它提供了除法指令,但只能进行单字节除以单字节的运算,如果要进行多字节的除法运算,就得自己设计算法。
目前,许多资料上都介绍了四字节除以二字节的算法,但它们主要有以下几点不足:1.只能求出商,不能求出余数;2.在被除数高二位大于除数时,不能进行运算;3.商只有两个字节。
例如,被除数是0FFFFFFFFH,除数是0004H时,商数应该是3FFFFFFFH,余数是0003H。
但是,用以前的算法是无法进行运算的。
在实际运用中,参与运算的数是任意的,有时需要求出余数,有时商数要求有四个字节,因此,以前的算法在实际应用中受到了很大的限制。
为了满足实际运用中的需要,我设计了一套新的四字节除以二字节的算法,克服了上述算法中的缺点,可以适合广泛的实际需要。
下面以MCS-51汇编语言为例进行说明。
该算法增加了两字节的余数单元,并把被除数单元用来存放商数。
运算时,首先判断除数是否为零,若为零时,则设溢出标志为1,然后退出。
若除数不为零,则采用移位相减法进行运算。
首先,把进位位和余数单元清零。
再将进位位、余数单元和被除数单元按顺序首尾相连,逐位进行向左循环移位(如图示),共移位32次。
每移位一次,余数单元都 C (H L)(HH HL LH LL) 进位位余数单元被除数单元和除数作一次减法运算,若够减,余数单元内容更新为两者之差,并且将被除数最末一位置为1;若不够减,则余数单元内容保持不变,且将被除数最末一位置为0。
判断是否够减的方法是:在作减法之前,先保存进位位,再看作完减法后的进位位。
仅在作减法之前进位位为0,并且作减法之后进位位为1时判为不够减,其余情况均视为够减。
51单⽚机实验合集实验⼀多字节⼗进制加法程序设计⼀.实验⽬的:1.熟悉仿真器的软件使⽤环境及单⽚机汇编语⾔编程;2.掌握多字节⼗进制加法的程序设计及实现⽅法。
⼆.实验内容:编写多字节⼗进制加法程序,实现下式运算:4574+6728=11302要求:被加数在⽚内RAM区20H、21H单元;分别为学号(7),学号+1(8);加数在⽚内RAM区30H、31H单元;分别为学号+2(9),学号+3(10);结果在⽚内RAM区20H(最⾼位进位)、21H(⾼位)、22H(低位)单元。
三.实验步骤:1.开机启动Keil C51软件进⼊µVision2 集成开发环境,确认89C51处于软件仿真状态。
2.完成程序的设计、编辑、编译、连接。
3.进⼊DEBUG⽅式,打开存储器Memory 1窗⼝,在窗⼝Address栏键⼊D:20H;点击⿏标右键,选择最后⼀项Modify Memory ,输⼊被加数;在窗⼝Address栏键⼊D:30H;点击⿏标右键,选择最后⼀项Modify Memory ,输⼊加数。
4.调试和运⾏程序并记录存储器Memory 1窗⼝实验结果。
四.实验参考程序:ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,20HADD A,30HDA AMOV 22H,AMOV A,21HADDC A,31HDA AMOV 21H,ACLR AMOV R3,00HADDC A,R3MOV 20H,ASJMP $END五.实验截图:实验总结:学会了多字节⼗进制加法程序设计,对keilc51有了更为熟练地掌握,也对程序有了更为深⼊的了解,课堂所学的理论以及⼀些不清楚的地⽅在实验中得到了答案。
实验三 P1⼝输出实验⼀.实验⽬的:1.掌握P1⼝输出端⼝的使⽤原理及编程⽅法;2.加深I/O端⼝对外部电路驱动原理的理解。
⼆.实验内容:P1⼝做输出,驱动8只发光⼆极管,编写程序,以1s的时间间隔使得⼀个发光⼆极管从左到右循环点亮。
实验二汇编语言程序设计(一)【实验目的】复习MCS—51单片机汇编语言的编辑、编译、调试方法,熟练掌握汇编语言程序设计的方法与技巧。
【实验内容】1.多字节加减法2.多字节乘法3。
数据转换(选做)【实验原理】利用子程序调用在内部RAM单元中实现多字节的加法程序,并且把和再放回原单元中,其中R7是循环次数计数器,R0和R1分别作为加数和被加数指针。
1、多字节加法源程序:ORG 0000HMOV R0,#40HMOV R1,#50HMOV R7,#03HCLR CLOOP1: MOV A,@R0ADD A,@R1MOV @R0,AJNC LOOP2LOOP2: INC R0INC R1MOV A,R0DJNZ R7,LOOP1SJMP $END实验结果如下图:2、多字节乘法源程序:ORG 0000HQMUL: MOV A,R3MOV B,R7MUL ABXCH A,R7MOV R5,BMOV B,R2MUL ABADD A,R5MOV R4,ACLR AADDC A,BMOV R5,AMOV A,R6MOV B,R3MUL ABADD A,R4XCH A,R6XCH A,BADDC A,R5MOV R5,AMOV F0,CMOV A,R2MUL ABADD A,R5MOV R5,ACLR AMOV ACC。
0,CMOV C,F0ADDC A,BMOV R4,AEND实验结果如下图:。
一、双字节BCD码加法实验
一.实验目的:
(1)熟悉MCS—51指令系统,掌握程序设计方法。
(2)熟悉掌握编码加法程序的编写的方法。
(3)掌握编写和运行程序的技巧和学习WA VE6000的使用。
二.实验设备:
装有wave6000软件的计算机一台
三.实验内容:
将以片内RAM 30H 为起始地址的双字节BCD码30H 和40H为起始地址的双字节BCD码相加,结果放在50H和51H 中,程序结束。
四.实验原理提示:
设定两个指针R0 和R1,分别指向两个相加数的存储地址,通过变换指针,实现两字节的相加,并在指针变化前,将结果存入指定地址。
五.实验程序:
ORG 0
LJMP MAIN
ORG 50H
MAIN: CLR C
MOV 30H, #1
MOV 40H, #2
MOV 31H, #3
MOV 41H, #3
MOV R0, #30H
MOV R1, #40H
MOV A, @R0
ADDC A, @R1
DA A
MOV 50H, A
INC R0
INC R1
MOV A,@R0
ADDC A,@R1
DA A
MOV 51H,A
END
六.实验结果:
编译并调试程序,成功后执行程序,记录结果。
实验结果如下所示:。
实验一多字节数求和运算,字节拆分运算一.实验目的1.熟悉emu8086调试程序的使用。
2.编写两个4字节数的加法、减法运算程序,并运用emu8086进行调试。
3. 编写字节拆分运算程序,并运用emu8086进行调试二.实验目的1.学习数据传送和算术运算指令2.熟悉在PC机上调试程序的方法三.emu8086调试程序的使用1.启动emu8086a.在WINDO WS下双击emu8086图标,启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。
2.新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。
选择empty worksp ace的选项,打开一个完全空的文档。
3. 编辑程序如图3所示为编辑程序界面。
该编辑界面集文档编辑、指令编译、程序加载、系统工具、在线帮助为一体。
编写完程序后,用户只需单击工具栏上的“emulat e”按钮即可仿真运行程序。
4.仿真运行当用户将程序加载到仿真器后,会同时打开仿真器界面和源程序界面,用户在仿真器界面中也可以同时看到源代码和编译后的机器码。
点击的任意一条源程序指令,则对应的机器代码显示为被选显示状态,与此同时,上面的代码指针也会相应变化。
用户也可以通过这种操作了解,数据段和堆栈段中各变量或数据在存储器中的情况。
用户可以利用工具栏中的“single step”按钮进行单步跟踪调试,以便仔细观察各寄存器、存储器、变量、标记位等情况,这对于程序初始调试时十分有用;当程序调试完毕,或需要连续运行观察时,则可以使用“r un”按钮;当希望返回上一步操作时,则可以使用“s tep back”按钮;若单击“reload”按钮,则仿真器会重新加载程序,并将指令指针指向程序的第一条指令;您也可以利用“load”按钮,从您保存的文件夹中加载其它程序。
实验报告 课程名称:
单片机原理与应用技术 实验名称:
BCD 加法实验 实验地点:
单片机实验室 专业班级:
测控1401班
学号: 学生姓名:
郭佳鑫 指导教师:
温景国 2017年 4月 18日
2014001796
一、实验目的
1.通过常用指令的编辑练习,进一步理解并掌握MCS-51单片机的指令系统。
2.学习并掌握双字节BCD加法的程序设计。
3.学习汇编语言的程序设计基本方法。
二、实验原理
BCD码因其十进制的表示方式,在直接做二进制加法,发生进位时,结果可能会出现偏差,需人为校准。
三、实验仪器
1.PC机
2.操作系统:Windows XP
3.应用程序:Wave 6000
四、实验内容
程序代码如下:
运行结果如下:
可以看出,30H、31H中的5555与40H、41H中的5555相加得到结果为50H、51H、52H中的011110。
六、实验总结
实验一让我学初步了解了汇编语言的使用,对我今后的学习有很大的帮助。
同时,在做实验的过程中,我遇到的一些问题也使我对思考问题的方法,有了新的认识,还让我深刻体会到实验前的理论知识准备的重要,并且在做实验时最好先预习一下实验内容,这样更有利于实验的操作。
实验二汇编语言程序设计(一)
【实验目的】复习MCS-51单片机汇编语言的编辑、编译、调试方法,熟练掌握汇编语言程序设计的方法与技巧。
【实验内容】1.多字节加减法
2.多字节乘法
3.数据转换(选做)
【实验原理】
利用子程序调用在内部RAM单元中实现多字节的加法程序,并且把和再放回原单元中,其中R7是循环次数计数器,R0和R1分别作为加数和被加数指针。
1、多字节加法
源程序:
ORG 0000H
MOV R0,#40H
MOV R1,#50H
MOV R7,#03H
CLR C
LOOP1: MOV A,@R0
ADD A,@R1
MOV @R0,A
JNC LOOP2
LOOP2: INC R0
INC R1
MOV A,R0
DJNZ R7,LOOP1
SJMP $
END
实验结果如下图:
2、多字节乘法
源程序:
ORG 0000H
QMUL: MOV A,R3
MOV B,R7
MUL AB
XCH A,R7
MOV R5,B
MOV B,R2
MUL AB
ADD A,R5
MOV R4,A
CLR A
ADDC A,B
MOV R5,A
MOV A,R6
MOV B,R3
MUL AB
ADD A,R4
XCH A,R6
XCH A,B
ADDC A,R5
MOV R5,A
MOV F0,C
MOV A,R2
MUL AB
ADD A,R5
MOV R5,A
CLR A
MOV ,C
MOV C,F0
ADDC A,B
MOV R4,A
END
实验结果如下图:。