第4章 MCS51单片机实验Word文档下载推荐.docx

上传人:b****8 文档编号:22871884 上传时间:2023-02-05 格式:DOCX 页数:71 大小:54.07KB
下载 相关 举报
第4章 MCS51单片机实验Word文档下载推荐.docx_第1页
第1页 / 共71页
第4章 MCS51单片机实验Word文档下载推荐.docx_第2页
第2页 / 共71页
第4章 MCS51单片机实验Word文档下载推荐.docx_第3页
第3页 / 共71页
第4章 MCS51单片机实验Word文档下载推荐.docx_第4页
第4页 / 共71页
第4章 MCS51单片机实验Word文档下载推荐.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

第4章 MCS51单片机实验Word文档下载推荐.docx

《第4章 MCS51单片机实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第4章 MCS51单片机实验Word文档下载推荐.docx(71页珍藏版)》请在冰豆网上搜索。

第4章 MCS51单片机实验Word文档下载推荐.docx

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口输出实验

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1