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

合集下载

单片机实验 数据排序

单片机实验  数据排序

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

二、实验内容本例程采用交换排序法将内部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所示。

单片机原理实验报告

单片机原理实验报告

实验报告01_排序程序实验目的1. 熟悉MCS-51指令系统,掌握程序设计方法。

2. 掌握控制转移指令的功能,以及冒泡排序法原理。

3. 熟悉51单片机汇编语言编程环境。

实验要求设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:将它们排序,并存放到50H开始的单元中。

实验原理冒泡算法的思想为,每次取相邻单元的两个数比较,判断是否需要交换数据的位置。

第一次循环,比较N-1次,取到数据表的最大值;第二次循环,比较N-2次,取到次大值;……第N-1次循环,比较一次,排序结束。

流程框图实验程序及调试仿真:实验程序如下:N EQU 10TAB EQU 30HTAC EQU 50HORG 0000H SORT: MOV R4,#N-1 LOOP1: MOV A,R4MOV R3,AMOV R0,#TAB LOOP2: MOV A,@R0MOV B,AINC R0MOV A,@R0CLR CSUBB A,BJNC UNEXCHMOV A,@R0DEC R0XCH A,@R0INC R0MOV @R0,A UNEXCH: DJNZ R3,LOOP2DJNZ R4,LOOP1MOV R1,#TABMOV R7,#NMOV R0,#TAC AGAIN: MOV A,@R1MOV @R0,AINC R1INC R0DJNZ R7,AGAINSJMP $END程序调试及运行结果实验结论通过本实验,我对冒泡排序法的原理有了更深入的理解,同时在掌握此算法思想的基础上能够用汇编语言进行编程,并学会在Keil μVersion4调试界面的Memory窗口中查看内存地址的内容,从而验证设计的源程序的正确性,提高了自己解决问题的能力。

实验报告02_ 外部中断实验实验目的学会使用Keil μVersion4和Proteus软件进行单片机汇编语言和C语言程序设计与开发;了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。

单片机的实验报告

单片机的实验报告

单片机实验报告实验一:存储器块清零或赋值一、实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。

2 熟悉循环结构程序的编写。

3 熟悉编程环境和程序的调试。

二、实验内容指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。

例如将4000H开始的10个字节内容清零或全部赋值为33H。

注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。

2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。

5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。

三、实验仪器微机、VW,WAVE6000编程环境软件,(单片机实验箱)Lab6000/Lab6000通用微控制器 MCS51实验四、实验步骤1、新建工程文件。

(注意:文件不要用中文名称保存时不要用中文路径)2、编写程序。

3、运行和调试过程。

外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH):单步执行程序,观察SFR中外部地址指针的变化;全速执行程序,可以看到外部数据存储器已赋值33H:五、实验结果可以看到外部数据存储器已赋值33H:六、问题讨论本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。

同时,学习掌握汇编程序的编写和调试过程。

实验二:存储块移动一、实验目的1 熟悉51汇编语言程序结构。

2 熟悉循环结构程序的编写,进一步熟悉指令系统。

3 熟悉编程环境和程序的调试。

二、实验内容将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。

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

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

单片机与接口技术实验报告--冒泡排序实验单片机与接口技术实验报告--冒泡排序实验一、实验目的本实验旨在通过单片机实现冒泡排序算法,加深对单片机和接口技术的理解和实践操作能力,提高程序设计和调试的能力。

二、实验设备实验设备包括:单片机开发板、计算机、串口通信设备、LED指示灯等。

三、实验原理冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

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

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

四、实验步骤1、硬件连接:将单片机开发板与计算机通过串口通信设备连接,并连接LED指示灯。

2、编写程序:在计算机上使用单片机开发环境编写冒泡排序算法程序,并通过串口通信发送到单片机。

3、调试程序:在单片机上运行程序,观察LED指示灯的变化,对程序进行调试和修改。

4、测试结果:对不同的输入数据进行测试,观察LED指示灯的变化,验证程序的正确性。

五、实验结果通过本实验,我们成功地在单片机上实现了冒泡排序算法,并能够根据不同的输入数据进行正确的排序。

同时,通过LED指示灯的显示,我们可以直观地观察到排序的过程。

六、实验总结通过本次实验,我们深入了解了冒泡排序算法的原理和实现方法,同时也提高了对单片机和接口技术的理解和实践操作能力。

在实验过程中,我们遇到了一些问题,比如如何正确地连接硬件,如何编写和调试程序等,但在老师的指导下,我们都成功地解决了问题。

我们也意识到自己在某些方面还有不足,比如对单片机的了解还不够深入,对程序的调试能力还有待提高等。

在今后的学习和实践中,我们将更加努力,提高自己的能力和水平。

(完整word版)单片机实验一冒泡法排序

(完整word版)单片机实验一冒泡法排序

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

实验要求:设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:10个数排序,存放在50H开始的单元中。

二、实验原理多重循环即循环嵌套结构.多重循环程序的设计方法和单重循环是一样的,只是要分别考虑各重循环的控制条件.内循环属于外循环体重的具体处理部分。

在多重嵌套中,不允许各个循环体相互交叉,也不允许从外循环跳入内循环,否则编译时会出错.应该注意每次通过外循环进入内循环式,内循环的初始条件需要重置。

三、程序设计1、程序流程图图1 冒泡法程序流程图2、程序代码N EQU 10TAB EQU 30HORG 0000HMOV 30H, #1 ;在30H中输入10个随机数MOV 31H,#3MOV 32H,#2MOV 33H,#4MOV 34H,#6MOV 35H,#8MOV 36H,#7MOV 37H,#11MOV 38H,#9MOV 39H,#10SORT: MOV R4,#N-1LOOP1:MOV A,R4 ;冒泡法循环MOV R3, AMOV @R0,#TABLOOP2: MOV A,@R0MOV B, AINC R0MOV A, @R0CLR CMOV R2, ASUBB A, BJNC UNEXCHMOV A,R2UNEXCH:DJNZ R3,LOOP2 ;如果A〈B,顺序执行UNEXCH DJNZ R4, LOOP1LJMP SWITCHEXCH: DEC R0 ;如果A>B,则A,B调换位置XCH A,@R0INC R0MOV @R0, ASWITCH: MOV R0,#30HMOV R1,#50HMOV R2,#NPAIXU: MOV A,@R0 ;将30H中排好的数移动到50H中MOV @R1,AINC R0INC R1DEC R2CJNE R2, #0, PAIXUSJMP $END四、程序验证1、在30H中输入10个数,显示如下:图2 30H单元中存储的10个数2、对30H中的10个数排序,结果如下:图错误!未定义书签。

单片机原理及应用实验报告

单片机原理及应用实验报告
EA=1;
ET0=1;
TR0=1;
while (1)
{
ScanKey0( );
keyscan( ); //按键扫描
time_pro( ); //时间处理
display( ); //显示时间
}
}
实验结果:
数码管可以显示时钟的时分秒,按下按键1,可以在时钟的时分秒为切换,按下按键2,可以在选择的任意位+1,从而实现时间的修改。
实验接线图:
实验程序:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dispcode[ ]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xf8,0x80,0x90};
loop:
Dsplay();
goto loop;
}
void Dsplay() //动态扫描显示
{uchar i;
for(i=0,P1=0x01;i<6;i++)
{ P0=cDsCode[mDS[i]];//输出段
Delayms(2);
P1=P1<<1; //选通下一位
}
P1=0x00; //关闭位选通
实验五:存储器系统设计
实验目的:掌握存储器工作原理及特点。通过该实验让学生掌握单片机存储器系统的硬件设计,存储器在系统中的地址分配,地址总线、数据总线与控制总线的连接。
实验内容:1.在实验板上将一片6264RAM芯片设计成8K的外部数据存储器,地址为0000H—1FFFH。

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

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

实验一单片机数据区传送/排序程序设计一、单片机数据区传送/排序程序设计一、实验目的1.进一步掌握汇编语言程序设计和调试方法。

2.了解单片机RAM中的数据操作二、实验说明要求:编写程序把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的地址的RAM区。

三、实验仪器计算机伟福软件(lab2000P )四、实验内容在R0、R1中输入源地址(例如:3000H),R2、R3中输入目的地址(例如4000H),R6、R7中输入字节数(例如:1FFFH)。

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

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

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

五、思考题1、改变源地址,例如00FFH;2、改变目的地址,例如2000H;3、改变传输的个数,小于256个和大于256个的情况。

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

六、源程序及其修改原理org 0000HBlock equ 2000hmov dptr, #Block ; 起始地址mov r0,#12hmov a,#20h ;修改2000h开始的地址所存放的内容为20hLoop:mov r1,#14h ;增加r1计数,用循环方式实现大于256的数据传输(思考题3)Loop1:movx @dptr,ainc dptr ; 指向下一个地址djnz r1,Loop1djnz r0, Loop ; 双循环实现r0,r1计数相乘(以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4)mov r0, #20h ;改变源地址为2000h(思考题1)mov r1, #00hmov r2, #50h;改变目的地址为5000h(思考题2)mov r3, #00hmov r7, #0Loop:mov dph, r0mov dpl, r1movx a, @dptrmov dph, r2mov dpl, r3movx @dptr, acjne r1, #0ffh, Goon1inc r0Goon1:inc r1cjne r3, #0ffh, Goon2inc r2Goon2:inc r3djnz r7, Loopljmp $End七、实验结果及说明1、执行到mov r0, #20h的结果:说明:实现对数据存储区2000h~2168hRAM都赋相同一个数值20h。

实验二数据排序实验

实验二数据排序实验

实验二数据排序实验一、实验要求1.编写程序,并将自身代码从程序存储器中按照次序读取N个字节(自定,不少于20个字节),存放到数据存储器中40H开始的N个单元中2.在要求1的基础上,将数据存储器40H单元开始的N个单元的数值按照从小到大的顺序排序,结果存放回40H开始的N个单元中。

3.分析程序的效率二、实验目的1.学习使用MOVC指令对程序存储器的读取方法2.学习使用DJNZ实现循环结构3.学习使用CJNE等指令实现数据的比较4.了解并掌握一种数据排序算法三、实验电路及连线无四、实验说明1.编写汇编程序时,程序的主代码一般从0040H开始存放,根据要求1,一般使用MOVC指令配合DPTR便可实现从程序存储器中读取数据到累加器A中,然后将A中的数据存放到制定的数据存储器中。

2.请把读出的N个单元的数值记录在实验数据中。

3.将数据存储器中的一段数据进行排序,一般可以采用“冒泡排序法”。

冒泡排序法通过对待排序数据进行双重筛选排序来完成排序要求,效率较低,但比较适合算法的设计,逻辑清楚简单。

设计该算法,可以查阅相关算法资料。

可以选择其它的排序算法实现本排序要求。

4.请把排序后的N个单元的数字记录在实验数据中。

5.编制好程序,并在单片机实验系统中运行,通过查看程序存储器的内容和数据存储器的内容来了解程序是否运作成功。

编写代码时,可以将要求1和要求2单独编码和运行测试,正确后再合二为一,完成本实验。

6.要求3是在完成本实验后,通过分析代码的长度、代码执行大致时间来分析执行效率。

参与实验的同学可以将自己的代码情况与其它同学做比较,分析算法的优劣。

五:实验框图此次实验用冒泡排序法来实现排序,因此在做排序时,数据要进行多次比较循环。

通过 DJNZ Rn, rel 指令来实现循环。

首先编写程序,并将自身代码从程序存储器中按照次序读取20字节存放到数据存储器中40H开始的20个单元中,用MOVC指令配合DPTR便可实现从程序存储器中读取数据到累加器A中,然后将A中的数据存放到制定的数据存储器中。

实验三数据排序程序(介绍两种)

实验三数据排序程序(介绍两种)

实验三:数据排序实验3.1.1:实验目的熟悉51指令系统,掌握数据排序的设计方法3.1.2:实验设备PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51系统平台”、或“TD-PITE教学实验系统+TD-51系统平台”。

3.1.3:实验内容在单片机内RAM的30H~39H写入10个数,编写实验程序,将这10个数按照由小到大的顺序排列,写入RAM的30H~39H单元中。

(比较)3.1.4:实验步骤1、编译实验程序,编译、连接无误后联机调试;2、为30H~39H赋初值;3、将光标移到语句行SJMP$处,运行程序;4、查看存储器窗口中30H~39H中的内容,验证程序功能;5、重新为30H~39H单元赋值,反复运行实验程序,验证程序的正确性。

ORG 0000HLJMP MAINORG 0100H MAIN: MOV R0, #30H MOV R7, #0AHLP1: MOV A, R7MOV R6, AMOV A, R0MOV R1, AINC R1LP2: MOV A, @R0CLR CSUBB A, @R1JC LP3MOV A, @R0XCH A, @R1MOV @R0, ALP3: INC R1DJNZ R6, LP2INC R0DJNZ R7, LP1SJMP $ END3.2.1:实验目的熟悉51指令系统,掌握数据排序的设计方法3.2.2:实验设备PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51系统平台”、或“TD-PITE教学实验系统+TD-51系统平台”。

3.2.3:实验内容在单片机内RAM的30H~39H写入10个数,编写实验程序,将这10个数按照由小到大的顺序排列,人写入RAM的30H~39H单元中。

(冒泡法)3.2.4:实验步骤1、编译实验程序,编译、连接无误后联机调试;2、为30H~39H赋初值;3、将光标移到语句行SJMP$处,运行程序;4、查看存储器窗口中30H~39H中的内容,验证程序功能;5、重新为30H~39H单元赋值,反复运行实验程序,验证程序的正确性。

实验四数据排序

实验四数据排序

实验四数据排序实验一、实验目的1、熟悉80C51 指令系统,掌握程序设计方法;2、了解数据在单片机内的比较、交换过程;3、掌握使用汇编语言来实现数据冒泡排序并输出结果;二、实验仪器计算机一台、单片机实验箱一台,MCS51仿真开发系统。

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

冒泡排序原理:依次比较相邻的两个数,将小数放在前面,大数放在后面。

即首先比较第1个和第2个数,将小数放前,大数放后。

然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。

如此下去,直至最终完成排序。

四、实验内容及步骤1) 打开MCS51仿真开发系统,编写好程序,保存、编译正确后进入调试界面。

2)在仿真系统中打开寄存器窗口手工修改片内RAM 区50H—5AH 的值,在其中放入不等的数据。

3)用连续运行方式从起始地址0100H 开始运行程序。

4)观察寄存器的数据变化,检查50—5AH 中内容应是否从小到大排列。

ORG 0100HQUE: MOV R3,#50HQUE1: MOV A,R3 ;指针送R0MOV R0,AMOV R7,#0AH ;长度送R7CLR 00H ;标志位为0MOV A,@R0QL2: INC R0MOV R2,ACLR CMOV 22H,@R0CJNE A,22H,QL3 ;相等吗?SETB CQL3: MOV A,R2JC QL1 ;大于交换位置SETB 00HXCH A,@R0DEC R0XCH A,@R0INC R0 ;大于交换位置QL1: MOV A,@R0DJNZ R7,QL2JB 00H,QUE1 ;一次循环中有交换继续SJMP $ ;无交换退出五、实验结果及数据处理(实验结果数据暂时不填)运行程序前地址50H 51H 52H 53H 54H 55H 56H 57H 58H 59H 5AH 数据1FH 0FFH 56H 78H 7CH 80H 9AH 0A8H 0CH 0F0H 0FH运行程序后地址50H 51H 52H 53H 54H 55H 56H 57H 58H 59H 5AH 数据0CH 0FH 1FH 56H 78H 7CH 80H 9AH 0A8H 0F0H 0FFH六、实验分析及结论通过本次实验,使我对单片机MCS51系列指令系统有了更深层次的了解,也学会了如何运用它们编写程序来对单片机内存单元的读写操作进行控制,对于在单片机内如何利用寄存器来进行数据比较与交换也有了更深层次的了解。

单片机实验2数据排序1

单片机实验2数据排序1

实验二数据排序一、实验目的1.了解数据排序的简单算法。

2.了解数列的有序和无序概念。

二、实验内容八个随机无符号数存于内部RAM的30H为起始地址的八个单元,将此组数据排序,使之成为有序数列。

编写程序进行调试三、实验说明有序的数列更有利于查找。

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

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

四、实验仪器和设备PC机、MedWin软件。

五、参考程序ORG 0000HLJMP 0030HORG 0030HMOV R0, #30HMOV A, R0MOV R1, AMOV @R1, #06HINC R1MOV @R1, #04HINC R1MOV @R1, #01HINC R1MOV @R1, #02HINC R1MOV @R1, #05HINC R1MOV @R1, #07HINC R1MOV @R1, #03HSORT: MOV A, R0MOV R1, AMOV R2, #07HMOV A, R2MOV R5, ACLR F0DEC R5MOV A, @R1LOOP: MOV R3, AINC R1CLR CMOV A, @R1SUBB A, R3JNC LOOP1SETB F0MOV A, R3;XCH A, @R1DEC R1XCH A, @R1INC R1LOOP1: MOV A, @R1DJNZ R5,LOOPJB F0, SORTEND六、结果排序前:06 04 01 02 05 07 03排序后:01 02 03 04 05 06 07七、心得体会这次试验是一个数据的排序,通过学习,我进一步明白了利用汇编语言编程,收获了很多,希望能通过试验明白更多,对编程有更多的体会。

(整理)单片机冒泡排序.

(整理)单片机冒泡排序.

课程名称:嵌入式系统基础实验项目:冒泡排序实验实验地点:专业班级:学号:学生姓名:指导教师:2012年 3 月日一、实验目的和要求1、实验目的(1)熟悉MCS-51指令系统,掌握程序设计方法(2)掌握排序程序算法(3)掌握用循环程序实现数据排列的基本方法2、实验要求(1)根据试验任务要求,编制C51源程序(2)上机调试程序,记录相关调制信息(3)写出实验报告二、实验内容和原理1、实验内容编写并调试一个通用排序子程序,其功能为将RAM 的40H ~4FH 单元16个字符无符号二进制整数按从小到大顺序排列,将排序后数据存储于RAM 的50H ~5FH 单元中。

2、实验原理从40H 单元的第一个开始依次和相邻单元的另一个数比较,如果顺序对,则不作任何操作;如果顺序不对,则将这两个数交换位置。

这样在完成第一遍1-n 次比较后,最大的数到了最后,所以第二遍比较只需要比较2-n 次,最多作1-n 遍比较就可完成排序。

在比较中设立一个标志位flag ,每次进入外循环时把flag 清零,在内循环结束时若flag=1说明排序未完成,进入外循环;若flag=0,说明排序完成,程序结束。

三、主要仪器设备计算机一台操作系统:Windows98/2000/XP应用软件:W AVE6000四、操作方法与实验步骤org 0000hmov r7,#10hmov r0,#40hmov r1,#20hstart: mov a,r1mov @r0,ainc r0DEC r1djnz r7,startmov r7 ,0FHLP0: MOV R0,#40HMOV A,R7MOV R6,#2HCLR 7FHLP1: MOV A,@R0MOV 20H,@R0INC R0MOV 21H ,@R0CLR CSUBB A,21HJC LP2SETB 7FHMOV @R0,20HDEC R0MOV @R0,21HINC R0LP2: DJNZ R6,LP1JNB 7FH,LP3MOV R7,#2HDJNZ R7,LP0LP3: MOV R7,#10HMOV R0,#40HMOV R1,#50HLP4: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R7,LP4MOV 60H,R0MOV 80H,R1SJMP $END(1)按输入顺序从小到大的序列:(2)按输入顺序为从大到小的序列:(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
相关文档
最新文档