实验一单片机数据区传送排序程序设计复习课程.docx

上传人:b****7 文档编号:15888975 上传时间:2023-07-08 格式:DOCX 页数:9 大小:374.58KB
下载 相关 举报
实验一单片机数据区传送排序程序设计复习课程.docx_第1页
第1页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第2页
第2页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第3页
第3页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第4页
第4页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第5页
第5页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第6页
第6页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第7页
第7页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第8页
第8页 / 共9页
实验一单片机数据区传送排序程序设计复习课程.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验一单片机数据区传送排序程序设计复习课程.docx

《实验一单片机数据区传送排序程序设计复习课程.docx》由会员分享,可在线阅读,更多相关《实验一单片机数据区传送排序程序设计复习课程.docx(9页珍藏版)》请在冰点文库上搜索。

实验一单片机数据区传送排序程序设计复习课程.docx

实验一单片机数据区传送排序程序设计复习课程

 

实验一_单片机数据区传送排序程序设计

实验一单片机数据区传送/排序程序设计

一、单片机数据区传送/排序程序设计

1、实验目的

1.进一步掌握汇编语言程序设计和调试方法。

2.了解单片机RAM中的数据操作

2、实验说明

要求:

编写程序把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的地址的RAM区。

3、实验仪器

计算机

伟福软件(lab2000P)

4、实验内容

在R0、R1中输入源地址(例如:

3000H),R2、R3中输入目的地址(例如4000H),R6、R7中输入字节数(例如:

1FFFH)。

查看RAM区3000~30FFH和4000~40FFH内容,也可自己重新赋值。

运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。

记录下运行结果,检查3000~30FFH中内容是否和4000~40FFH内容完全一致。

5、思考题

1、改变源地址,例如00FFH;

2、改变目的地址,例如2000H;

3、改变传输的个数,小于256个和大于256个的情况。

4、把程序改为对某一数据存储区RAM赋都相同一个数值。

6、源程序及其修改原理

org0000H

Blockequ2000h

movdptr,#Block;起始地址

movr0,#12h

mova,#20h;修改2000h开始的地址所存放的内容为20h

Loop:

movr1,#14h;增加r1计数,用循环方式实现大于256的数据传输(思考题3)

Loop1:

movx@dptr,a

incdptr;指向下一个地址

djnzr1,Loop1

djnzr0,Loop;双循环实现r0,r1计数相乘

(以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4)

movr0,#20h;改变源地址为2000h(思考题1)

movr1,#00h

movr2,#50h;改变目的地址为5000h(思考题2)

movr3,#00h

movr7,#0

Loop:

movdph,r0

movdpl,r1

movxa,@dptr

movdph,r2

movdpl,r3

movx@dptr,a

cjner1,#0ffh,Goon1

incr0

Goon1:

incr1

cjner3,#0ffh,Goon2

incr2

Goon2:

incr3

djnzr7,Loop

ljmp$

End

7、实验结果及说明

1、执行到movr0,#20h的结果:

说明:

实现对数据存储区2000h~2168hRAM都赋相同一个数值20h。

2、执行到ljmp$的结果:

说明:

5000h开头的存储区域执行程序之前的内容是FFh,执行程序之后变为20h,与2000h~20ffh的内容完全相同,说明程序实现了数据区传送。

二、单片机数据区数据排序设计

一、实验目的

(1)、进一步掌握汇编语言程序设计和调试方法。

(2)、了解数据排序的简单算法。

二、实验内容

(1)、要求:

有序的数列更有利于查找。

本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。

再进行下一轮比较,找出第二大数据,直到全部数据有序。

(2)、在CPU内部的RAM50H~5AH中放入不等的数据,查看RAM区50H~5AH的内容,也可自己重新赋值。

(3)、运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。

记录下比较一遍后运行结果,是否最大的移到最后。

三、程序流程

 

 

四、实验参考程序

Sizeequ10;数据个数

Arrayequ50h;数据起始地址

Changeequ0;交换标志

Sort:

movr0,#Array

movr7,#Size-1

clrChange

Goon:

mova,@r0

movr2,a

incr0

movB,@r0

cjnea,B,NotEqual

sjmpNext

NotEqual:

jcNext;前小后大,不交换

setbChange;前大后小,置交换标志

xcha,@r0;交换

decr0

xcha,@r0

incr0

Next:

djnzr7,Goon

jbChange,Sort

ljmp$

end

五、实验步骤及结果分析

(1)、编写程序,编译程序,人为修改初始地址中的数据如下图,再运行程序,观察结果,结果如下:

图5原始地址中的数据

(2)、再运行程序,观察结果,结果如下:

图6运行后的数据

(3)、从运行结果图6可以看出,从50H开始的10个地址单元中的数据按从小到大顺序排列。

六、思考题

(1)、改变源地址,例如20H,注意对其他位的影响;

将原程序的Arrayequ50h改为Arrayequ20h即可。

(2)、将50H~5AH中内容按从大到小排列,并且记录下程序运行前后的结果,分析是否正确。

(3)、记录执行交换的次数。

程序修改如下:

Sizeequ10;数据个数

Arrayequ50h;数据起始地址

Changeequ0;交换标志

movr6,#0;交换次数寄存器

Sort:

movr0,#Array

movr7,#Size-1

clrChange

Goon:

mova,@r0

movr2,a

incr0

movB,@r0

cjnea,B,NotEqual

sjmpNext

NotEqual:

jncNext;前小后大,不交换

incr6

setbChange;前大后小,置交换标志

xcha,@r0;交换

decr0

xcha,@r0

incr0

Next:

djnzr7,Goon

jbChange,Sort

ljmp$

end

运行结果如下:

图7原始数据

图8运行后的数据

从运行结果图8可以看出:

运行后数据按从大到小的顺序排列,从图中也可以看出R6中的值为7,说明在排序过程中交换了7次。

程序中采用的是冒泡法,每次把最小的数沉底,由于原始数据只需把50H中的1沉底,就能达到从大到小的排列,只需7次交换就可,说明程序运行结果与实际结果相符。

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2