实验一_单片机数据区传送排序程序设计复习课程
单片机原理与应用实验教案

《单片机原理及应用》实验教学大纲课程编号:B04611016课程类别:专业课实验学时:16学时学分:2.5适用专业:计算机科学与技术一、实验教学目的和任务本课程是计算机及应用专业一门重要的专业课。
其教学内容直接面向生产。
同时,微机向小型化、超小型化方面发展愈来愈迅猛。
单片机应用已渗透社会各个领域,特别在通信技术中的应用,大大提高了通信技术水平。
学生应具备这方面的知识与技能,为今后参加工作,打下坚实的基础。
二、实验教学基本要求本课程是一门很注重实践的课程。
以研究MCS-51系列单片机入手,掌握其硬件结构、指令系统和程序设计,以及常用接口技术和典型应用实例。
三、实验教学内容实验项目一:清零程序1、实验目的及要求要求学生掌握软件的结构和键盘的调试。
2、实验内容及学时分配(2学时)(1)了解MCS-51软件的构造(2)掌握清零程序的输入方法(3)了解起始伪指令的输入方法实验项目二:拼字和拆字程序1、实验目的及要求要求学生掌握存储器分配和汇编语言的简单应用。
2、实验内容及学时分配(2学时)(1)进一步掌握MCS-51软件的基本使用方法(2)掌握指令的寻址方式(3)掌握数据传送指令和地址内容的分配实验项目三:数据区传送子程序1、实验目的及要求要求学生掌握RAM数据存储器实际操作。
2、实验内容及学时分配(2学时)(1)掌握MCS-51逻辑运算指令和位操作指令(2)进一步掌握数据传送子程序的简单方法(3)掌握查表程序的编写实验项目四:数据排序实验1、实验目的及要求要求学生掌握汇编语言的应用和实际操作。
2、实验内容及学时分配(2学时)(1)掌握MCS51逻辑运算指令和位操作指令(2)进一步掌握简单顺序程序的编写和调试方法(3)掌握查表程序的编写实验项目五:查找相同个数1、实验目的及要求熟悉汇编语言程序,使用环移指令和加1指令。
2、实验内容及学时分配(2学时)(1)掌握赋值指令(2)掌握带进位的环移指令和加1程序的编写实验项目六:双字节无符号数的乘法实验1、实验目的及要求要求学生掌握MCS-51汇编语言设计和调试方法。
单片机实验 数据排序

实验六数据排序一、实验目的掌握排序程序的设计方法。
二、实验内容本例程采用交换排序法将内部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。
单片机实验-数据排序实验模板.doc

单片机实验-数据排序实验模板.doc实验名称:数据排序实验实验目的:1.了解常见排序算法的基本原理及实现方法;2.掌握排序算法在单片机中的具体实现方法;3.培养学生对于单片机编程实践的能力。
实验器材:1. STC89C52RC单片机开发板1台;2. 4*4矩阵按键模块1个;3. 1602液晶屏幕模块1个;4. 杜邦线若干根;5. 电源线及适配器。
实验原理:排序算法是数据处理中最基本的算法之一,是计算机程序设计的基础问题之一。
常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序等。
它们各有特点和适用场景。
对于单片机而言,由于其处理能力有限,程序空间也有限制,因此选择排序算法的实现需要考虑以下几点:1.尽量缩短算法实现时间;2.尽量降低程序空间占用,以便为后续的功能留出空间。
下面我们以冒泡排序算法为例,在单片机上实现数据排序。
1.冒泡排序原理:比较相邻的元素,将较大的元素交换到右边。
2.冒泡排序步骤:①.从头开始,一次比较两个元素,如果它们的顺序错误就把它们交换过来;②.直到没有相邻元素需要比较时,排序完成。
3.冒泡排序算法实现:void BubbleSort(int *p,int len){int i,j;int temp=0;for(i=0;i<len;i++){for(j=0;j<len-i-1;j++){if(*(p+j)>*(p+j+1)){temp=*(p+j+1);*(p+j+1)=*(p+j);*(p+j)=temp;}}}}实验步骤:1.将矩阵按键模块和1602液晶屏幕模块连接到开发板上;2.打开keil软件,创建工程,编写程序代码;3.编译,烧录程序到STC89C52RC单片机开发板;4.调试测试,验证排序算法的正确性和效率。
实验结果:经过测试,程序能够正确实现冒泡排序算法进行数据排序,并在屏幕上输出排序后的结果。
排序效率较高,排序100个以上数据的时间在200ms左右。
单片机 数据传送和排序实验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 上进行软件仿真,运用冒泡法对数组的进行排列。
总的来说这次实验我获益良多。
单片机原理及应用实验一 数据排序实验

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])
单片机实验

实验一数据传送指令的使用及编程方法1.片内RAM的数据传送【实验程序】源程序单元内容ORG 0000HLJMP MAINORG 0030HMAIN:MOV R0,#40H R0MOV R1,#41H R1MOV A,R0 AMOV 30H,A 30HMOV 20H,30H 20HMOV A,#30H AMOV @R0,A 40HMOV A,30H AMOV R7, A R7MOV A,@R0 AMOV R7,A R7MOV DPTR,#0A702H DPTRMOV 30H,R7 30HMOV 20H,@R0 20HMOV 21H,#10H 21HMOV @R0,21H 10HMOV @R1,#01H 41HSJMP $END【实验要求】(1)理解源程序中每条数据传送指令的操作含义,将结果填入每个单元的相应“内容”中。
(2)单步运行源程序,逐条检查“内容”是否正确。
2.外部RAM的数据传送。
【实验程序】源程序单元内容ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#1A33H DPTRMOV A,#80H AMOVX @DPTR,A 1A33HMOV A,#00H AMOV P2,#1AH P2MOV R0,#34H R0MOV R1,#35H R1MOVX @R0,A 1A34HMOVX A,@DPTR AMOVX @R1,A 1A35HMOVX A,@R0 AMOVX A,@R1 ASJMP $END【实验要求】(1)理解源程序指令含义,指出各存储单元的内容,写在右边的“内容”中。
(2)单步运行源程序,逐条验证分析结果。
3.片内特殊功能寄存器(SFR)的数据传送【实验程序】源程序ORG 0000HLJMP MAINORG 0030HMAIN:MOV SP,#60H ;设栈指针MOV R0,#30H ;#30H送R0(0区)MOV P1,#0EFH ;#EFH送P1口(直接地址为90H)MOV @R0,P1 ;将P1内容送R0所指单元MOV C,P1. 1 ;将P1口的D1位内容送CMOV P1. 7,C ;将CY的内容送P1. 7PUSH PSW ;保护0区寄存器MOV PSW,#08H ;选择1区寄存器MOV R0,#40H ;#40H送1区寄存器R0(08H)MOV @R0,P1 ;P1口内容送1区R0所指单元POP PSW ;恢复0区寄存器SJMP $END【实验要求】(1)理解源程序指令含义,并参照注释写出结果。
(完整word版)单片机实验一冒泡法排序

实验一:冒泡法排序实验一、实验要求实验目的:掌握控制转移指令的功能,以及冒泡法排序的原理。
实验要求:设 30H 开始的 10 个储存单元中,寄存的是无符号数,编写程序实现: 10 个数排序,寄存在 50H 开始的单元中。
二、实验原理多重循环即循环嵌套构造。
多重循环程序的设计方法和单重循环是同样的,不过要分别考虑各重循环的控制条件。
内循环属于外循环体重的详细办理部分。
在多重嵌套中,不同意各个循环体互相交错,也不同意从外循环跳入内循环,不然编译时会犯错。
应当注意每次经过外循环进入内循环式,内循环的初始条件需要重置。
三、程序设计1、程序流程图开始R4 ←外循环次数R3 ←内循环次数R0 ←缓冲区首地点B←((R0))A ←((R0)+1)(A)≥(B)?N ((R0)) ←→ ((R0)+1)R0←(R0)+1(R3)-1=0?Y(R4)-1=0?YR0←30HR1←31H((R1)) ←((R0)) ((R0)) ←((R0)+1) ((R1)) ←((R1)+1)(R7)-1=0?Y结束YNNN图 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个数排序,结果以下:图 3 对 30H 中 10 个数排序后的结果3、将30H中的数转移到50H 中,结果以下:图 4 30H 中 10 个数转移到50H 以后的结果结论:程序基本切合实验要求。
单片机实验——精选推荐

实验一认识实验一.实验目的1.了解仿真器的硬件结构与接线。
2.了解MCS-51单片机复位功能及复位后的内部状态。
3.通过示例程序的键入与执行,学习仿真器的使用与操作方法。
二.实验内容1.对照实验指导书,查对实验机具体接线。
2.按照开发系统的使用方法,分别查看复位后PC、SP、DPTR等特殊功能寄存器及片内、片外RAM的内容。
3.熟悉开发器的使用,将下面程序键入实验机。
ORG 2000H2000 74AA MOV A,#0AAH2002 75F0BB MOV B,#0BBH2005 E5F0 MOV A,B2007 78CC MOV R0,#0CCH2009 E8 MOV A,R0200A 80FE SJMP $4.程序键入后,检查各存储单元所储机器码是否正确如有误,重新键入,达到修正的目的。
5.单步执行示例程序,逐步检查执行结果,核查与分析结果是否相符,直到执行完最后一条指令。
6.练习连续执行示例程序,检查执行结果,核查与分析结果是否相符。
7.自己在示例程序中插入一条指令,执行并查看结果,然后删除,熟悉插入/删除操作。
8.将示例程序移到另外一个存储区,执行并查看结果,熟悉程序块移动操作。
三.实验预习要求1.认真阅读指导书的相关内容,熟悉开发系统的各种操作。
2.实验前应写出规定操作任务的具体操作方法步骤。
四.思考题1.MCS-51单片机怎样实现内部复位,画出一种复位电路。
2.PC、SP、P0、P1、P2、P3复位状态是什么?各有何意义?3.示例程序中最后一条指令SJMP $的作用是什么?如果取掉这一条指令,程序的执行将发生什么变化?4.实验机监控系统怎样实现程序“单步执行”功能?五.实验报告要求1.按实验顺序,写出实验操作的方法步骤。
2.写出实验中所遇到的问题与解决过程。
写出思考题的答案。
实验二建立数据区、数据块传送一.实验目的1.进一步熟悉实验机操作,练习程序调试方法。
2.理解并掌握建立数据区与数据块传送程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一_单片机数据区传送排序程序设计
实验一单片机数据区传送/排序程序设计
一、单片机数据区传送/排序程序设计
一、实验目的
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 0000H
Block equ 2000h
mov dptr, #Block ; 起始地址
mov r0,#12h
mov a,#20h ;修改2000h开始的地址所存放的内容为20h Loop:
mov r1,#14h ;增加r1计数,用循环方式实现大于256的数据传输(思考题3)
Loop1:
movx @dptr,a
inc dptr ; 指向下一个地址
djnz r1,Loop1
djnz r0, Loop ; 双循环实现r0,r1计数相乘
(以上程序实现对某一数据存储区2000h~2168hRAM赋都相同一个数值20h,思考题4)
mov r0, #20h ;改变源地址为2000h(思考题1)
mov r1, #00h
mov r2, #50h;改变目的地址为5000h(思考题2)
mov r3, #00h
mov r7, #0
Loop:
mov dph, r0
mov dpl, r1
movx a, @dptr
mov dph, r2
mov dpl, r3
movx @dptr, a
cjne r1, #0ffh, Goon1
inc r0
Goon1:
inc r1
cjne r3, #0ffh, Goon2
inc r2
Goon2:
inc r3
djnz r7, Loop
ljmp $
End
七、实验结果及说明
1、执行到mov r0, #20h的结果:
说明:实现对数据存储区2000h~2168hRAM都赋相同一个数值20h。
2、执行到 ljmp $的结果:
说明:5000h开头的存储区域执行程序之前的内容是FFh,执行程序之后变为20h,与2000h~20ffh的内容完全相同,说明程序实现了数据区传送。
二、单片机数据区数据排序设计
一、实验目的
(1)、进一步掌握汇编语言程序设计和调试方法。
(2)、了解数据排序的简单算法。
二、实验内容
(1)、要求:有序的数列更有利于查找。
本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。
再进行下一轮比较,找出第二大数据,直到全部数据有序。
(2)、在CPU内部的RAM 50H~5AH中放入不等的数据,查看RAM 区
50H~5AH的内容,也可自己重新赋值。
(3)、运行程序,首先单步,然后用执行到指定位置,最后用连续运行方式。
记录下比较一遍后运行结果,是否最大的移到最后。
三、程序流程
四、实验参考程序
Size equ 10 ; 数据个数
Array equ 50h ; 数据起始地址
Change equ 0 ; 交换标志
Sort:
mov r0, #Array
mov r7, #Size-1
clr Change
Goon:
mov a, @r0
mov r2, a
inc r0
mov B, @r0
cjne a, B, NotEqual
sjmp Next
NotEqual:
jc Next ; 前小后大, 不交换
setb Change ; 前大后小, 置交换标志
xch a, @r0 ; 交换
dec r0
xch a, @r0
inc r0
Next:
djnz r7, Goon
jb Change,Sort
ljmp $
end
五、实验步骤及结果分析
(1)、编写程序,编译程序,人为修改初始地址中的数据如下图,再运行程序,观察结果,结果如下:
图5 原始地址中的数
(2)、再运行程序,观察结果,结果如下:
图6 运行后的数据
(3)、从运行结果图6可以看出,从50H开始的10个地址单元中的数据按从小到大顺序排列。
六、思考题
(1)、改变源地址,例如20H,注意对其他位的影响;
将原程序的 Array equ 50h改为Array equ 20h 即可。
(2)、将50H~5AH中内容按从大到小排列,并且记录下程序运行前后的结果,分析是否正确。
(3)、记录执行交换的次数。
程序修改如下:
Size equ 10 ; 数据个数
Array equ 50h ; 数据起始地址
Change equ 0 ; 交换标志
mov r6, #0 ;交换次数寄存器
Sort:
mov r0, #Array
mov r7, #Size-1
clr Change
Goon:
mov a, @r0
mov r2, a
inc r0
mov B, @r0
cjne a, B, NotEqual
sjmp Next
NotEqual:
jnc Next ; 前小后大, 不交换
inc r6
setb Change ; 前大后小, 置交换标志 xch a, @r0 ; 交换
dec r0
xch a, @r0
inc r0
Next:
djnz r7, Goon
jb Change,Sort
ljmp $
end
运行结果如下:
图7 原始数据
图8 运行后的数据
从运行结果图8可以看出:运行后数据按从大到小的顺序排列,从图中也可以看出R6中的值为7,说明在排序过程中交换了7次。
程序中采用的是冒泡法,每次把最小的数沉底,由于原始数据只需把50H 中的1沉底,就能达到从大到小的排列,只需7次交换就可,说明程序运行结果与实际结果相符。