第4章 MCS51单片机实验Word文档下载推荐.docx
《第4章 MCS51单片机实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第4章 MCS51单片机实验Word文档下载推荐.docx(71页珍藏版)》请在冰豆网上搜索。
MOVSP,#6FH
MOVA,##0AAH
MOVPSW,#0CCH
PUSHACC
PUSHPSW
SJMP$
表4.2实验结果数据表
PSW
堆栈指针SP
堆栈单元
6FH
72H
程序执行前
程序执行后
4思考
观察PUSH指令对SP和堆栈中内容的影响。
编写一程序,将外部RAM中内容传送到内部RAM中。
4.1.2数据运算指令实验
⑴进一步加深对算术运算指令的理解,掌握其用法。
⑵了解算术运算指令对标志位的影响。
⑶掌握二进制数加法和BCD码加法编程方法。
⑴16位无符号二进制数加法实验
⑵BCD码减法实验
⑶移位指令实验
⑴二进制加法实验
设在内部RAM单元30H、31H和35H、36H中存有两个16位无符号二进制数,编写一程序求两个数的和,把和放在30H、31H中,各数的低8位在低位地址中。
将十六进制数2030H和3241H写入30H、31H和35H、36H中,执行程序,按照表将程序执行前后的数据填入表4.3中。
表4.3实验结果数据表
第1遍执行程序
第2遍执行程序
Cy
十六进制数
30H31H
单元
执行前
2030H
9A9AH
执行后
35H36H
3241H
8C8CH
将单元30H、31H和35H、36H中的被加数和加数分别改为9A9AH和8C8CH,重新执行程序,把结果填入表1中。
⑵BCD码减法程序
设在内部RAM单元30H和31H中分别存有两个BCD码数,编写程序,执行BCD码减法:
(30H)-(31H),将差存到30H中,设30H和31H中的BCD码数分别如表2所示,执行程序,把运算结果填入表4.4中。
表4.4实验结果数据表
BCD码数
30H
85H
27H
31H
27
实验程序:
CLRC
MOVA,#9AH
SUBBA,31H
ADDA,30H
DAA
MOV30H,A
CLRC
SJMP$
⑴试分析BCD码减法程序功能。
⑵试编写多位BCD码加法程序。
4.1.3其他指令实验
⑴掌握控制转移类指令、移位指令和位操作指令的用法,加深对这些指令的理解。
⑵进一步熟悉单片机开发装置的使用,增强程序调试能力。
⑴位操作指令练习
⑵移位指令练习
⑶转移指令练习
试编写程序实现表4.5中逻辑函数F的功能,计算函数F的真值表,将结果填入表4.5中。
表4.5实验结果数据表
布尔变量
F=XYYZ
Z
Y
X
实验值
计算值
1
设在内部RAM单元30H中为无符号数,编写一程序,将该数扩大5倍(适当选择无符号数的大小,使其扩大5倍后的值不超过0FFH)。
试选择不同的数,将相应的执行结果填入表4.6。
表4.6实验结果数据表
执行顺序
30H中内容
执行前(自设)
2
3
4
5
参考程序
CLRC
MOVA,30H
RILA
RLA
ADDA,30H
⑶转移类指令练习
设内部RAM单元35H中有一无符号二进制数,编写一程序,统计该二进制数中为1的位数,结果存入20H中。
按照表4.7对35H单元设置不同的二进制数,分别执行程序,将执行结果填入表4.7中。
表4.7实验结果数据表
(35H)
(20H)
0F9H
0AAH
75H
参考程序如下:
MOVR1,#35H
MOV20H,#00H
MOVR2,#08H
MOVA,@R1
N1:
RLCA
JNCN2
INC20H
N2:
DJNZR2,N1
⑷把2000H~20FFH的内容清零。
程序流程图如图4.1所示。
开始
字节数R0
N
(R0)=0FFH?
首址DPTR
DPTR+1R0+1
00(DPTR)
00R0
图4.1程序流程图
用连续或单步运行方式运行程序,检查2000H~20FFH中执行程序前后的内容变化。
4思考
⑴修改程序,把2000H~20FFH中的内容改成0FFH,。
4.1.4拆字和拼字程序实验
⑴熟悉逻辑操作指令和数据交换指令用法。
⑵初步掌握汇编语言程序设计和调试方法。
2实验内容
⑴拆字程序实验
编写程序把2000H单元中的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零。
把2001H、2002H和A的内容填入表4.8(a)中。
⑵拼字程序实验
编写程序把2000H、2001H的低位分别送入2002H高位和低位,读出2000H、2001H、2002H和A的内容并填入表4.8(b)中。
表4.8(a)实验结果数据表
2000H
2001H
2002H
A0-3
A4-7
表4.8(b)实验结果数据表
3程序流程图
拆字程序流程图如图4.2所示。
开始
(2000H)A
高低4位交换
取低4位2001H
取低4位2002H
结束
图4.2程序流程图
拼字程序流程图如图4.3所示。
(2000H)A,取低4位
高低4位交换后B
(2001H)A,取低4位
AORB2002H
结束
图4.3程序流程图
4实验步骤
运行程序前用仿真调试软件的存贮器读写命令向2000H和2001H写入数据,用单步或用断点方式运行程序,检查2000H~2002H中内容变化情况。
5思考
如何用断点方式调试本程序。
4.1.5数据块传送程序实验
⑴掌握RAM中的数据传送操作。
⑵学习汇编语言程序设计与调试运行。
将源数据区数据传送到目的数据区,其中R2、R3中是内部RAM源数据区首址,R4、R5中是目的数据区首址,R6、R7中是要传送字节数。
程序流程图如图4.9所示。
源地址内容A
A目的地址
源地址+1
目的地址+1
数据传送完?
图4.4程序流程图
在R2、R3中输入源首址(例如0000H),R4、R5中输入目的地址(例如2000H),R6、R7中输入字节数(例如1FFFH),运行程序,检查0000~1FFFH中内容是否和2000~3FFFH中内容完全—致。
4.1.6分支和循环程序实验
⑴掌握分支和循环程序的设计方法。
⑵学习用仿真软件调试和运行汇编语言程序。
⑴散转(分支)程序实验
编写程序,要求程序能根据20H中的数i的值(i≤3)进行散转的程序,即根据i的值分别转移到相应的处理程序BRi,BRi的功能是使Ri加1,然后实现((20H)+1)03H20H的操作,再返回去根据20H内容进行散转。
⑵求最小值程序实验
编写程序将内部RAM中30H开始的连续10个单元中最小的数找出来,并存入3FH单元中。
⑶查找关键词程序实验
编写程序,要求程序能在内部RAM中40H开始的连续10个存贮单元中搜索关键词0AAH,若搜索到,则将该单元地址存入20H中;
若未搜索到,则将0FFH存入20H中。
散转程序流程如图4.5。
求最小值程序流程如图4.6。
查找关键词参考程序流程如图4.7所示。
30HR0
(30H)(3FH)
020H
9R2
(20H)=i?
R0+1R0
BR2
BR1
BR0
(R0)(3FH)?
_
BR3
(R0)(3FH)
(20H)+120H
(20H)320H
R2-1=0?
图4.6求最小值程序流程图
图4.5散转程序流程图
数据块首址R0
数据块长度R2
((R0))A
A=0AAH?
(R0)20H
0FFH20H
图4.7查找关键词程序流程图
调试程序时先将R0、R1、R2置0,然后单步执行程序,观察20H单元内容变化情况和程序转移情况,将观察结果填入表4.9中。
表4.9实验结果数据表
20H
R1
R2
R3
执行分支BRi
调试程序时先对30H开始的10个单元置数,记下最小值。
用单步或连续执行方式运行程序,观察程序运行前后3FH单元中内容的变化情况。
实验时,先在指定的地址范围内某单元中置数0AAH,进行实验;
然后改变该单元的值,再进行实验,检查程序功能是否正确。
4.1.7数制转换和查表程序实验
⑴掌握代码转换和查表程序设计方法
⑵掌握数制转换程序设计方法
⑶进一步掌握程序调试方法
⑴多字节二进制数转换成十进制数
设R2R3中为一16位二进制度整数,要求编写一程序,将其转换为压缩BCD码送R4、R5、R6中。
⑵二进制码转换成ASCII码
已知在单片机内部RAM单元30H开始存有一组16进制数,试编写程序把它们转换成ASCII码,存在首地址为40H的内部RAM中。
数制转换程序流程如图4.8所示。
查表程序流程如图4.9所示。
0R4,R5,R6
10HR7
Cy(R2R3)左移1位(移出位bi在Cy中)
2*(R4R5R6)+CyR4R5R6(十进制运算)
(R7)-1=0?
图4.8数制转换程序流程图
30HR0
40HR1
数据长度R2
ASCII码表首址DPTR
取源操作数高4位R0
查ASCII码
存ASCII码
修改地址指针
取源操作数低4位
R2-1=0?
图4.9查表程序流程图
4实验步骤
⑴进制数转换程序实验
数制转换程序执行前先向R2R3中输入16进制数,将程序执行情况填入表4.10中。
二进制码转换成ASCII码
⑵查表程序实验
查表程序实验中,先对30H开始的单元赋16进制数值,将程序执行情况填入表4.11中。
程序中采用查表的方法进行代码转换,因此程序中要定义16进制数的ASCII码表。
表4.10实验结果数据表
执行次数
程序执行前R2R3中内容
(16进数)
程序执行后前R4R5R6中内容
(BCD码)
第1遍
第2遍
第3遍
表4.11实验结果数据表
程序执行前的源操作数
程序执行后的目的操作数
操作数地址
操作数(16进制)
目的单元地址
结果(ASCII码)
34H
40H
41H
0ABH
42H
43H
5实验说明
多字节二进制数转换成十进制数的原理是:
一个位长为m的整数二进制数的表达式为:
B=bm*2m+bm-1*2m-1+·
·
+b1*2+b0
按照多项式计算方法,将上式改写为:
B=b*2+bi
i=i-1
初值:
B=0,i=m-1
结束条件:
i0
按照上述递推公式中,B是部分和,只要对部分和按照十进制运算方法进行乘2(用BCD码加法)和加bi(用BCD码加法)的运算,就可得到十进制的转换结果。
4.1.8运算程序实验
1实验目的
⑴掌握运算指令的应用方法
⑵学习运算程序编程方法
⑶进一步提高程序调试能力
2实验内容
无符号二进制数乘法程序实验。
设计一个双字节无符号乘法运算程序,要求运用MCS-51的8位乘法指令来实现。
设被乘数和乘数分别在R7R6和R5R4中,其中R7和R5中是高位字节,乘积存入33H-30H(最高位字节在33H中)中。
3参考程序
MUL1:
MOVR0,#30H
MOVA,R6
MOVB,R4
MULAB
MOV@R0,A;
存R6R4L
MOVR3,B;
暂存R6R4H
MOVA,R4
MOVB,R7
MULAB
ADDA,R3
MOVR3,A
MOVA,B
ADDCA,#00H
MOVR2,A;
暂存R7R4H
MOVA,R6
MOVB,R5
ADDA,R3;
R6R4H+R7R4L+R6R5L
INCR0
MOV@R0,A
MOVR1,#00H
MOVA,R2
ADDCA,B
暂存R6R5H+R7R4H
JNCNEXT
INCR1;
置进位
NEXT:
MOVA,R7
ADDA,R2
MOV@R0,A;
存R7R5L+R7R4H+R6R5H
ADDCA,R1;
R7R5H+进位
MOV@R0,A存R7R5H+进位
END
程序运行前先对R7R6和R5R4赋值如表4.12所示,然后将执行结果填入表4.12中。
表4.12实验结果数据表
地址
R7R6
R5R4
33H30H
数据
0FFFFH
1234H
S678H
0FE00H
5程序说明
双字节无符号乘法运算程序算法是:
用MCS-51的8位数乘法指令来实现双字节数相乘时,可以把被乘数(R7R6)和乘数(R5R4)分别表示为:
(R7z+R6z)和(R5z+R4z),其中,R7,R6,R5,R4都是8位二进制数,z也是8位2进制数,但是各位均为0。
它们的乘积用下式表示:
(R7z+zR6)(R5z+zR4)=R7R5zz+zR7R4z+zR6R5z+zzR6R4
其中,R7R5、R7R4、R6R5、R6R4为相应的2个8位数的乘积,可以用4次乘法指令求出。
将这4个16位乘积分别以高8位和低8位表示为R7R5H、R7R5L、R7R4H、R7R4L、R6R5H、R6R5L、R6R4H、R6R4L,后缀H表示积的高8位,后缀L表示积的低8位,则可以按下列排序:
R7R5HR7R5L
R7R4HR7R4L
R6R5HR6R5L
R6R4HR6R4L
并按列求和,用3次8位数加法和3次带进位位加法就可以得到4字节乘积。
(R7R6):
被乘数
(R5R4):
乘数
R0:
乘积地址指针
R3R2:
部分积
R1:
进位位暂存单元
6思考:
本程序所用算法可以推广到更多字节的乘法运算中,试用此方法实现3字节无符号数的乘法。
4.1.9数据排序程序实验
熟悉MCS-51指令系统,掌握汇编语言程序设计与调试方法。
编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单字节无符号二进制整数,按从小到大的次序重新排列,读出这些单元中的内容,填入表4.13中。
表4.13实验结果数据表
地址
……
程序流程图如图4.10所示。
首地址R0,
数据长度R2
清标志位
((R0))A
(R0)+1(R0)
A((R0))?
置标志位,交换内容
数据长度-1=0?
标志位=0?
图4.10程序流程图
用仿真调试软件的RAM读写命令把内部RAM50H~5AH中放入不等的数据,运行本实验程序后检查50~5AH中内容是否按从小到大排列。
修改程序把50H~5AH内容按从大到小排列。
4.1.10查找相同数个数程序实验
⑴熟悉汇编语言编程。
⑵掌握较复杂程序的调试与运行。
在2000~200FH中查出有几个字节是零,把为零字节数放在2100H中,读出2100H、DPTR和2000~200FH中的内容,填入表4.14中。
表4.14实验结果数据表.
2100H
200FH
程序流程图如图4.11所示。
数据区首址DPTR
0R1
((DPTR))=0?
(R1)+1(R1)
(DPTR)+1
(R0)-1=0?
(R1)(2100H)
图4.11程序流程图
在2000~200FH的一些单元中填入零,运行本程序后检查2100H为零单元数。
修改程序,查找其它内容。
4.2硬件与接口实验
硬件实验可使学生能进一步掌握单片机系统扩展和输入输出程序的设计方法,熟悉对扩展系统的软件、硬件设计,调试方法和技巧。
4.2.1P1口输入输出实验
⑴学习P1口的使用方法;
⑵学习延时子程序的编写。
⑴P1作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
⑵P1口做输入口,接八个扭子开关,以实验开发系统上74LS273做输出口,编写程序读取开关状态,再将开关状态在发光二极管上显示出来。
程序流程图如图4.12所示。
左移一位
点亮1个发光二极管
P1口初始化
图4.12程序流程图
4实验电路
P1作为输出口实验电路如图4.13,P1口做输入口实验电路如图4.14。
图4.13P1口输出实验