单片机实验 数据排序实验模板

合集下载

单片机实验 数据排序

单片机实验  数据排序

实验六数据排序一、实验目的掌握排序程序的设计方法。

二、实验内容本例程采用交换排序法将内部RAM 中的50~59H 单元中的10个单字节无符号二进制数按从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部RAM 1000H开始处。

三、实验步骤1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH6.ASM文件,打开TH6.ASM文件,阅读、分析、理解程序,编译程序进行调试。

2.在VIEW菜单中打开MEMORY WINDOW数据窗口,分别观察50H(在MEMORY#1中输入D:50H)、1000H(MEMORY#2窗口输入X:1000H)。

3.可在程序指令NOP 处设置断点,在第一个断点处可观察50~59H 单元内容是否为10 个任意排列原始数据。

4.在第二个断点处可观察每次排序的结果。

5.可单步执行程序观察排序过程。

四、实验参考程序(见光盘中的程序文件夹)ORG 0000HJMP MAINORG 0100HMAIN: MOV R0,#50HMOV @R0,#5FHINC R0MOV @R0,#56HINC R0MOV @R0,#5AHINC R0MOV @R0,#5EHINC R0MOV @R0,#51HINC R0MOV @R0,#5BHINC R0MOV @R0,#53HINC R0MOV @R0,#58HINC R0MOV @R0,#57HINC R0MOV @R0,#55H ;将10 个随机数送入内部RAM 的50~59H 单元NOP ;可在此处设置断点ACALL QUE ;调用排序子程序OUT: MOV R0,#50HMOV DPTR,#1000HMOV R7,#10OUT1: MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R7,OUT1HERE: AJMP HERENOP ;可在此处设置断点,观察每次排序结果QUE: CLR 00H ;清交换标志MOV R1,#50HMOV R6,#09HI3: MOV A,R6MOV R7,AMOV A,R1MOV R0,AMOV A,@R0I2: INC R0MOV R2,ASUBB A,@R0MOV A,R2JC I1SETB 00HXCH A,@R0I1: DJNZ R7,I2JNB 00H,STOPMOV @R1,AINC R1DJNZ R6,I3RETEND。

单片机 数据传送和排序实验34

单片机  数据传送和排序实验34

单片机实验数据传送
和排序
一、实验目的
1.掌握8051内部RAM和外部RAM之间的数据传送方法;
2. 熟悉51 单片机指令系统,掌握数的大小的排序方法,掌握程序设计方法。

二、实验设备:
CPU挂箱、8031CPU模块
三、实验内容:
编写并调试一个排序子程序,其功能为用冒泡法将外部RAM 中N 个单元字节无符号的正整数,按从小到大的次序重新排列。

四、实验步骤:
在外部RAM 6000H—6009H 中放入不等的10 个数据,运行本实验程序后,检查6000H—6009H中内容是否按从小到大的排列。

五、画出程序流程图
六、程序清单
程序流程图如下:
程序如下:
#include<reg52.h>
unsigned char xdata a[10] _at_ 0x6000;
unsigned char b[]={0x26,0x43,0x41,0x12,0x75,0x72,0x31,0x33,0x64,0x27}; void main()
{
int i,j,t;
for(i=0;i<10;i++)
{
a[i]=b[i];
}
for(i=0;i<10;i++)
for(j=0;j<10-i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
实验心得:
通过这次单片机实验,我学会了运用Keil写一些简单的C51程序,如何在Keil 上进行软件仿真,运用冒泡法对数组的进行排列。

总的来说这次实验我获益良多。

(中断、冒泡排序、1602)单片机实验报告

(中断、冒泡排序、1602)单片机实验报告

本科生实验报告实验课程单片机实验学院名称信息科学与技术学院专业名称物联网工程学生姓名曹林鑫学生学号201413060301指导教师谢兴红实验地点6B607实验成绩二〇一六年九月二〇一六年十二月实验一冒泡排序(汇编)一.实验目的掌握单片机的汇编语言排序程序。

二.实验内容将单片机内部的数据进行排序,且使用汇编语言。

三.实验要求根据实验内容编写一个程序,数据排列顺序要求是从小到大。

四.实验说明先在片内RAM中存储一组数据,重复地走访过要排序的数据,一次比较两块内存上的数据,如果他们的顺序错误就把他们交换过来。

走访数据的工作是重复地进行直到没有再需要交换,也就是说该列数据已经排序完成。

五.算法分析若文件的初始状态是正序的,一趟扫描即可完成排序。

所需的关键字比较次数C和记录移动次数M均达到最小值:,。

所以,冒泡排序最好的时间复杂度为O(n)。

若初始文件是反序的,需要进行n-1 趟排序。

每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。

在这种情况下,比较和移动次数均达到最大值:冒泡排序的最坏时间复杂度为。

综上,因此冒泡排序总的平均时间复杂度为。

六.实验程序及分析ORG 0000HLJMP mainORG 0100Hmain:MOV 40H,#05H//在40H-44H中随机存放五个立即数MOV 41H,#08HMOV 42H,#09HMOV 43H,#07HMOV 44H,#06HMOV R7,#04H//控制比较循环的次数MOV R6,#04HLOOP3:MOV R0,#40H//指向需要进行比较的数据的地址MOV R1,#41H//MOV A,R6MOV R7,ACLR ALOOP1:CLR CMOV A,@R1MOV 49H,A //交换数据前的备份SUBB A,@R0//用进位标志判断两数的大小JC LOOPLJMP LOOP4LOOP:MOV A, @R0//恢复交换前的备份数据MOV @R1,AMOV @R0,49HLOOP4:INC R0INC R1DJNZ R7,LOOP1//控制比较的次数DJNZ R6,LOOP3//控制比较的轮数LJMP $END六、实验截图排序前内存中的数据排序后内存的数据实验二外部中断一.实验目的1、掌握单片机外部中断的原理及过程。

单片机实验报告排序

单片机实验报告排序

计算机原理实验室实验报告课程名称:单片微型计算机原理及应用姓名学号0820542 成绩设备名称及软件环境MedWin v2.39 模拟仿真实验名称排序程序实验日期一.实验内容对内部存储器RAM中地址为20H开始的六个数据进行由大到小的排序,使用两种方法。

二.理论分析或算法分析采用的两种排序方法为直接排序和冒泡排序。

三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)源程序为:冒泡排序jmp L0org 20hdat1: db 22h,21h,10h,13h,11h,12hL0:mov r1,#06hmov r0,#20hmov dptr,#20hmov r2,#00hL1:mov a,r2movc a,@a+dptrmov @r0,ainc r0inc r2djnz r1,L1mov r3,#05hmov r4,#00hmov r0,#20hL2:mov a,@r0mov r5,ainc r0mov a,@r0subb a,r5mov a,@r0jnc L3dec r0mov @r0,ainc r0mov a,r5L3:djnz r3,L2mov r3,#05hmov r0,#20hinc r4mov a,r3clr csubb a,r4mov r3,acjne r4,#05h,L2直接排序:jmp L0org 20hdat1: db 22h,21h,10h,13h,11h,12h L0:mov r1,#06hmov r0,#20hmov dptr,#20hmov r2,#00hL1:mov a,r2movc a,@a+dptrmov @r0,ainc r0inc r2djnz r1,L1mov r3,#05hmov r4,#00hmov r0,#20hmov r1,#20hL2:mov a,@r1mov r5,ainc r0mov a,@r0subb a,r5mov a,@r0jnc L3mov @r1,amov a,r5mov @r0,aL3:djnz r3,L2mov r3,#05hinc r4mov a,r3clr csubb a,r4mov r3,ainc r1mov r0,acjne r4,#05h,L2四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)运行后的结果为:运行前:运行后:五.结论对于单片机的排序有了更多的了解,知道了排序的原理,对于排序也有了更好的了解。

单片机原理及应用实验一 数据排序实验

单片机原理及应用实验一 数据排序实验
裘任翔同学的实验结果应该为:
RAM50H~56H单元依次为:3,4,1,0,7,1,9
RAM60H~66H单元依次为:0,1,1,3,4,7,9
3、实验仪器
(1)PC微机1台
4、实验程序框图
5、实验程序
(实验程序清单作为附件放在最后)
6、实验步骤
将RAM 50H~56H中放入不等的数据,运行实验程序后检查60H~66H中的内容是否按从小到大的次序排列。
unsigned char data b[7] _at_ 0x0060;
unsigned char data b[7]={3,4,3,0,3,2,6};
#include<reg51.h>
#include<stdio.h>
void main()
{
int i,j,temp;
for(j=0;j<7;j++)
电子信息学院
实验报告书
课程名:《单片机原理及应用实验》
题目:实验一数据排序实验
软件实验
实验类别:【设计】
班级:电子1313
学号:26
姓名:吴限
1、实验内容或题目
题目:数据排序实验
实验内容:对于特定内存单元中的数据进行冒泡排序。
2、实验目的与要求
实验目的:掌握Keil软件的使用;
实验要求:
编写程序在RAM 50H~56H单元中放入自己学号的末7位,用冒泡法编写并调试一个排序程序,按从小到大的次序重新排列数据并放至RAM60H~66H,用Keil编译、调试。例如:裘任翔,学号为:111003410719,则50H~56H单元内容依次为:3,4,1,0,7,;)
{if(a[i]>a[i+1])

数据排序实验

数据排序实验

实验一数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。

二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。

三、实验程序框图四、实验步骤①把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法)。

②用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。

③排序结束,显示“P.”。

④用寄存器读写方法检查50—5AH中内容应从小到大排列。

五、思考:编一程序把50H—5AH中内容按从大到小排列。

实验二工业顺序控制一、实验目的掌握工业顺序控制程序的简单编程,中断的使用。

二、实验预备知识在工业控制中,象冲压、注塑、轻纺、制瓶等生产过程,都是一些断续生产过程,按某种程序有规律地完成预定的动作,对这类断续生产过程的控制称顺序控制,例注塑机工艺过程大致按“合模→注射→延时→开模→产伸→产退”顺序动作,用单片机最易实现三、实验内容8032的P1.0—P1.6控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,低电平启动。

P3.3为外故障输入模拟开关,P3.3为0时不断告警,P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。

四、实验说明实验中用外部中断0,编中断服务程序的关键是:1. 保护进入中断时的状态,并在退出中断之前恢复进入的状态。

2. 必须在中断程序中设定是否允许中断重入,即设置EX0位。

一般中断程序进入时应保护PSW、ACC以及中断程序使用但非其专用的寄存器,本实验中未涉及。

五、实验程序框图主程序:中断服务子程序:六、实验原理图七、实验步骤①P3.4连K1,P3.3连K2,P1.0—P1.6分别连到L1—L7,P1.7连SIN(电子音响输入端)。

①K1开关拨在上面,K2拨在上面。

③用连续方式从起始地址0580H开始运行程序(输入0580后按EXEC键),此时应在等待开工状态。

单片机与接口技术实验报告--冒泡排序实验

单片机与接口技术实验报告--冒泡排序实验

本科实验报告课程名称:单片机原理与接口技术实验项目:冒泡排序实验实验地点:跨越机房专业班级:学号:学生姓名:指导教师:2012 年4 月10 日一、实验目的和要求(1)熟悉MCS-51指令系统,掌握程序设计方法。

(2)掌握排序程序算法。

(3)掌握用循环程序实现数据排序的基本方法。

二、实验内容和原理编写并调试一个通用排序子程序,其功能为将RAM的40H~4FH单元的16字节无符号二进制整数按从小到大顺序排列,将排序后数据存储于RAM的50H~5FH单元中。

三、主要仪器设备计算机一台;伟福6000四、操作方法与实验步骤(上机源程序)ORG 0000H;该段代码向数据区域40H~4FH写入20H~11HMOV R7,#10H ;数据长度→R7MOV R0,#40H ;首地址→R0MOV R1,#20H ;第一个数据→R1START: MOV A,R1 ;(R1)→AMOV @R0,A ;数据→对应地址INC R0 ;地址加1DEC R1 ;数据减1DJNZ R7,START ;判断赋值完成否MOV R7,#0FH ;数据长度-1→R7LP0: MOV R0,#40H ;数据区域首地址→R0MOV A,R7 ;(R7)→AMOV R6,A ;(R7)→R6CLR 7FH ;设定7FH位为flag,并且flag=0LP1: MOV A,@R0 ;取得数据→AMOV 20H,@R0 ;当前地址中的值暂存到20H中INC R0 ;地址加1MOV 21H,@R0 ;当前地址中的值暂存到21H中CLR C ;清CSUBB A,21H ;相邻两个数相减JC LP2 ;如果前者大于后者则交换相邻的数SETB 7FH ;flag=1MOV @R0,21H ;把前边的数赋给后一个地址DEC R0 ;地址减1MOV @R0,21H ;把后边的数赋给前一个地址INC R0 ;地址加1LP2: DJNZ R6,LP1 ;判断是否到达内循环次数JNB 7FH,LP3 ;判断是否flag=0.如果flag=0,则表示顺序已经排好DJNZ R7,LP0 ;判断是否到达外循环次数LP3: MOV R7,#10H ;获得要传输的数据个数;把40H~4FH单元中数据复制到50H~5FH单元中MOV R0,#40H ;40H→R0MOV R1,#50H ;50H→R1LP4: MOV A,@R0 ;((R0))→AMOV @R1,A ;(A)→(R1)INC R0 ;地址加1INC R1 ;地址加1DJNZ R7,LP4 ;判断赋值是否完成SJMP $ ;程序在此处死循环END五、实验数据记录和处理单步执行观察发现,每一个数都会逐次与它之后的数进行比较,排序,直到所有数据都与其后的数据比较排完后才结束。

实验一 冒泡排序法排序实验

实验一 冒泡排序法排序实验

实验一冒泡排序法排序实验一、实验目的掌握控制转移指令的功能,以及冒泡排序法的原理。

二、实验内容1.设30H开始的10个存储单元从中,存放的是有符号数,编写程序实现:取它们的绝对值,存放到40H开始的单元中。

2.将40H开始的10个数排序,存放到50H开始的单元中。

三、实验程序ORG 0000HSJMP STARTSTART:MOV 30H,#07HMOV 31H,#02HMOV 32H,#00HMOV 33H,#05HMOV 34H,#03HMOV 35H,#09HMOV 36H,#08HMOV 37H,#06HMOV 38H,#01HMOV 39H,#04H;存入10个数SORT: MOV R4,#9 ;外循环次数LOOP1: MOV A,R4MOV R3,A ;内循环次数MOV R0,#0030H ;设数据指针,R0指向数据表的第一个单元LOOP2: MOV A,@R0 ;取一个数MOV B,A ;第一个数送到BINC R0 ;R0指向下一个数MOV A,@R0 ;取第二个数,送到ACLR CMOV R5,ASUBB A,B ;比较(A不等于B跳转)JNC UNEXCH ;A>=B,不交换MOV A,R5DEC R0 ;否则两个数据交换XCH A,@R0INC R0MOV @R0,AUNEXCH: DJNZ R3,LOOP2 ;内循环结束DJNZ R4,LOOP1 ;外循环结束SJMP MAINMAIN: MOV 40H,30HMOV 41H,31HMOV 42H,32HMOV 43H,33HMOV 44H,34HMOV 45H,35HMOV 46H,36HMOV 47H,37HMOV 48H,38HMOV 49H,39HEND四、实验仿真及结果(1)、第一次循环开始存入数据,结果如图1所示。

图1(2)、第二轮循环结束,比较出第一个数和第二个数并排序;结果如图2所示。

图2(3)、根据以上两个步骤类推,最后一轮循环结束时的实验结果如图3所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
裘任翔同学的实验结果应该为:
RAM50H~56H单元依次为:3,4,1,0,7,1,9
RAM60H~66H单元依次为:0,1,1,3,4,7,9
3、实验仪器
(1)PC微机1台
4、实验程序框图
5、实验程序
(实验程序清单作为附件放在最后)
6、实验步骤
将RAM 50H~56H中放入不等的数据,运行实验程序后检查60H~66H中的内容是否按从小到大的次序排列。
7、实验数据
8、思考题
本题中,除了冒泡排序,还有哪些排序方法可以实现?
答:
1.选择排序法
2.直接插入排序法
3.二分插入排序法
4.希尔排序法
5.快速排序法
6.简单选择排序法
7.树形选择排序法
8.堆排序
9.归并排序法
<附件>实验程序清单
实验报告书
课程名:《单片机原理及应用实验》
题目:实验一数据排序实验
软件实验
实验类别:【设计】
班:
学号:
姓名:
1、实验内容或题目
题目:数据排序实验
实验内容:对于特定内存单元中的数据进行冒泡排序。
2、实验目的与要求
实验目的:
掌握Keil软件的使用;
实验要求:
编写程序在RAM 50H~56H单元中放入自己学号的末7位,用冒泡法编写并调试一个排序程序,按从小到大的次序重新排列数据并放至RAM60H~66H,用Keil编译、调试。例如:裘任翔,学号为:************,则50H~56H单元内容依次为:3,4,1,0,7,1,9
相关文档
最新文档