单片机实验二 排序程序设计
单片机实验 数据排序

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

单片机顺序控制课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握顺序控制的基本概念。
2. 学生能掌握单片机编程中的顺序控制指令,并应用于实际电路中。
3. 学生能解释并分析单片机顺序控制在实际应用中的工作原理。
技能目标:1. 学生能运用所学知识,设计并编写简单的单片机顺序控制程序。
2. 学生能对设计的顺序控制系统进行调试和故障排查,提高解决问题的能力。
3. 学生能通过实际操作,提升动手实践能力和团队协作能力。
情感态度价值观目标:1. 学生能培养对单片机及编程的兴趣,激发学习的积极性和主动性。
2. 学生在学习过程中,养成严谨、细心的态度,提高自我管理和约束能力。
3. 学生通过团队协作,培养沟通、交流和合作意识,增强集体荣誉感。
课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,培养学生动手实践能力和创新能力。
学生特点:学生具备一定的单片机基础知识,具有较强的学习兴趣和动手欲望,希望通过实际操作提高自己的技能。
教学要求:教师需采用任务驱动法、案例教学法等教学方法,引导学生主动探究、积极实践,注重培养学生的创新意识和实际操作能力。
同时,关注学生的个体差异,因材施教,使每位学生都能在课程中取得进步。
通过分解课程目标为具体的学习成果,便于教学设计和评估的实施。
二、教学内容1. 单片机基础回顾:主要包括单片机的组成、工作原理和功能特点,重点复习单片机的内部结构及寄存器的作用。
2. 顺序控制原理:介绍顺序控制的概念、分类及其在单片机系统中的应用,分析顺序控制程序的编写方法。
3. 编程指令学习:学习单片机顺序控制相关指令,如跳转、循环等,并掌握其在编程中的应用。
4. 实践操作:设计简单的顺序控制程序,如流水灯、温度控制器等,让学生动手实践,提高编程和调试能力。
5. 故障分析与排查:分析在实际操作中可能出现的故障,教授学生如何进行排查和解决。
6. 案例分析与讨论:引入实际应用案例,让学生分组讨论,分析顺序控制在案例中的作用和实现方法。
单片机原理实验报告

实验报告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)熟悉单片机汇编语言,并进行简单程序设计(2)掌握纬蝠软件使用方法二实验内容(1)统计:1)为正数个数并保存在30H2)为负数个数并保存在31H3)为零个数并保存在32H(2)将表中的数据依次存储到数据存储器中首地址是40H并进行降序排列三源程序(1)判断存储器内数据属性以及同一属性的数目ORG 0000HLJMP MAINMAIN:MOV A,#00H ;A清0MOV R0,#09HMOV 30H,#00H ;将30H,31H,32H清0MOV 31H,#00HMOV 32H,#00HMOV R1,#00H ;R1清0LOOP: MOV A,R1MOV DPTR,#TAB ;将表头地址赋给DPTRMOVC A,@A+DPTR ;读取数据CJNE A,#00H,NZEAR ;判断数据是否为0,不为0跳转 INC 32H ;是0就将32H单元自加一AJMP NEGTNZEAR: JB ACC.7,POSI ;判断是否为负数,是就跳转INC 30H ;是整数加一AJMP NEGTPOSI: INC 31H ;是负数就加一NEGT:INC R1 ;R1加一MOV A,#00H ;A清0DJNZ R0,LOOP ;循环九次ORG 0100HTAB: DB -1,2,0,7,-3,-4,9,10,1END(2)将存储器中数据移到数据存储器中,并进行降序排列ORG 0000HLJMP MAINORG 0010HMAIN: MOV R2,#09HMOV R1,#40HMOV R0,#50HMOV A,#00HMOV DPTR,#TABLOOP2: MOVC A,@A+DPTRJB ACC.7,POSIMOV @R1,AMOV @R0,AINC R1INC R0POSI: INC DPTRMOV A,#00HDJNZ R2,LOOP2 ;以上程序是将表中非负数移到首地址40H,50H,处MAINA: ;以下进行降序排列 MOV R1,#50HMOV R5,#06HCLR F0DEC R5MOV A,@R1LOOP: MOV R3,AINC R1MOV A,@R1CLR CSUBB A,R3 ;判断两个读取数据的大小 JC LOOP1SETB F0 ;互换标志位F0置1MOV A,R3 ;两数交换XCH A,@R1DEC R1XCH A, @R1INC R1LOOP1:MOV A,@R1DJNZ R5,LOOPJB F0,MAINAORG 0100HTAB: DB -1,2,0,7,-3,-4,9,10,1END四总结。
单片机原理实验指导书

实验一仿真软件的使用,简单程序设计一.实验目的:1.掌握单片机仿真软件的基本操作方法;2.熟悉汇编语言源程序的编辑、汇编、运行和检查运行结果的方法(能查看各存储空间中值的变化);3.掌握简单程序编写的基本方法和技巧;二.实验内容:1. 将内部RAM的30H—33H四个存储单元內分别存放01H、02H、03H、04H 四个数;然后送至工作寄存器R0—R3。
2.将内部RAM的30H—33H四个存储单元內的数分别传送至外部RAM的2030H--2033H存储单元中。
3. 将内部RAM的30—32H的连续3个字节中的无符号数相加,结果的低位送33H 单元,高位送34H单元实用文档三.实验步骤:1.实验内容1的步骤(1)新建文件,输入能实现实验内容1的源程序并以 .ASM为扩展名存盘;(2)编译并运行程序,检查运行结果:检查R0—R3的内容;(3)单步运行程序,并检查运行结果:检査R0—R3的内容;(4)查看程序的机器码。
2.实验内容2的步骤(1)新建文件,输入能实现实验内容2的源程序并以 .ASM为扩展名存盘(2)编译并运行程序,检查运行结果:检査外部RAM 2030H—2033H单元的內容(3)单步运行程序,并检查运行结果;(4)查看程序的机器码。
3.实验内容3的步骤(1)新建文件,输入能实现实验内容3的源程序并以 .ASM为扩展名存盘;(2)编译并运行程序,检查运行结果;实用文档(3)单步运行程序,并检查运行结果,检查33H、34H单元内容;(4)查看程序的机器码四.实验程序1.实验内容1的程序ORG 0000HMOV 30H,#00HMOV 31H,#01HMOV 32H,#02HMOV 33H,#03HMOV R0,30HMOV R1,31HMOV R2,32HMOV R3,33HEND实用文档2.实验內容2的程序ORG 0000HMOV 30H,#00HMOV 31H,#11HMOV 32H,#22HMOV 33H,#33HMOV DPTR,2030HMOV R0,#30HMOV R1,#04HLOOP:MOV A,·R0HMOVX ·DPTR,AINC R0INC DPTRDJNZ R1,LOOPSJMP $实用文档END3.实验内容3的程序ORG 0000HMOV 30H,#0F8HMOV 31H,#0C6HMOV 32H,#0D9HCLR CMOV A,30HADD A,31HJC NEXT1SJMP NEXT2NEXT1:INC R1NEXT2:ADD A,32HMOV 33H,AJC NEXT3实用文档SJMP NEXT4NEXT3:INC R1NEXT4:MOV 34H,R1SJMP $五.实验报告要求:1.对实验内容1和实验内容2的程序加注释。
单片机实验报告

单片机与嵌入式系统实验报告一、软件模拟调试实验:本部分实验内容主要为指令系统和汇编语言程序设计。
采用软件模拟调试的方法,目的在于通过这些实验使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。
实验一数据传送实验实验目的1、熟悉软件模拟调试环境。
2、掌握汇编语言程序设计的方法,加深对指令的理解。
3、学会软件模拟调试和察看、验证结果方法。
4、印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。
实验步骤1、进入调试软件环境,输入源程序;2、汇编源程序;3、用单步方式运行程序;4、检查并记录各寄存器和存储单元内容的变化。
实验内容:将8031内部RAM 40H—4FH单元置初值A0H—AFH,然后将片内RAM 40H—4FH单元中的数据传送到片内RAM 50H—5FH单元。
将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。
源程序清单:ORG 0000HRESET:AJMP MAINORG 003FHMAIN:MOV R0,#40HMOV R2,#10HMOV A,#0A0HA1:MOV @R0,AINC R0INC ADJNZ R2, A1MOV R1,#10HMOV R0, #50HMOV R2, #10HA3: MOV A, @R1MOV @R0, AINC R1INC R2DJNZ R2, A3SJMP $END实验结果与分析:1、按照实验内容补全程序。
2、对源程序进行编译并查看相应程序存储器的内容,将源程序对应的机器码记录入下表,掌握ORG伪指令及汇编的过程。
ORG的作用及相关注意事项:ORG表示之后的语句从哪里开始,有的单片机里面的固定区域是用来做堆栈或者是子程序跳转地址的入口。
PC表示:下一条要执行的指令PSW表示:程序状态字,其各位的含义为:cy进位标志位AC辅助进位标志位Ov溢出标志位p校验位SP表示:堆栈指针R0~R7的物理位置:0000H-0007H3、运行机器码,查看片内数据区、CPU内寄存器的变化情况,按要求将结果记录入下表。
单片机实验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七、心得体会这次试验是一个数据的排序,通过学习,我进一步明白了利用汇编语言编程,收获了很多,希望能通过试验明白更多,对编程有更多的体会。
计算机原理实验报告 排序程序设计

《计算机原理实验报告》实验(二)排序程序设计一、实验目的:1、掌握分支、循环、子程序调用等基本的程序结构。
2、学习综合程序的设计、编制及调试。
二、实验要求:在数据区中存放着一组数(两位数或者一位数),数据的个数就是数据缓冲区的长度,要求用气泡法,对该数据区中的数据按递增关系排序。
三、编程算法与说明:1、从第一个数开始,依次把相邻的两个数比较,若前面的数大于后面的数,则交换,否则不交换,直到比较完最后两个数。
此时,最大的那个数将排在最后面。
2、除去已经排好的数,对剩下的数重复第一步。
3、重复第二步,直到所有的数都排完。
四、程序流程图:五、程序清单:SHOW MACRO B ;宏定义显示一个字符MOV DL,BMOV AH,02HINT 21HENDMDA TA SEGMENTINFO DB '**********',0AH,0DH,'$' ;学生信息ARRAY DB 34,56,25,17,68,95,40,59,9 ;数值为两位数或者一位数N EQU $-ARRAYMES1 DB 'Before: ','$'MES2 DB 'After: ','$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET INFO ;显示学生信息MOV AH,09HINT 21HMOV DX,OFFSET MES1MOV AH,09HINT 21HCALL DISP ;显示排序前数组MOV BX,NP4: DEC BX ;第一次比较N-1次,以后比较次数依次减1 MOV CX,BX ;循环比较相邻两个数LEA SI,ARRAYP2: MOV AL,[SI]MOV AH,[SI+1]CMP AL,AHJNG P3 ;前面数小于等于后面数,则不交换MOV [SI],AH ;前面数大于后面数,交换MOV [SI+1],ALP3: INC SILOOP P2 ;进行完一轮比较CMP BX,1JG P4 ;再进行一轮比较,直到结束SHOW 0AH ;另起一行显示排序后数组SHOW 0DHMOV DX,OFFSET MES2MOV AH,09HINT 21HCALL DISP ;显示排序后数组MOV AX,4C00HINT 21HDISP PROC NEAR ;将数组显示出来LEA SI,ARRAYMOV CX,N ;循环显示数组的N个数P1: LODSB ;依次取数到AL,取后SI自动加1CBW ;将AL扩展到AXMOV BL,0AH ;BL=10IDIV BL ;AX除以10,则十位存在AL,个位存在AHMOV BX,AXADD BL,30HSHOW BL ;显示十位数ADD BH,30HSHOW BH ;显示个位数SHOW ' ' ;两个数之间显示两个空格SHOW ' 'LOOP P1 ;循环显示N个数RETDISP ENDPCODE ENDSEND START六、实验结果与分析:汇编-连接-运行,显示如下:可看出正确按照递增排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二排序程序设计
一.实验目的:
1.熟悉C51的软件使用环境;
2.掌握起泡排序的程序设计及实现方法。
二.实验内容:
C51语言编程:把单片机片内RAM地址30H到3FH中的16个无符号数(随机设定)逐一比较,并按从小到大的顺序排列在RAM地址为40H到4FH 的单元中。
三.实验程序:
#include<reg52.h>
#include"absacc.h"
void main()
{
unsigned char i,j,temp,n=16;
unsigned char a[16]={ 1,44,7,38,8,76,4,58,6,7,15,18,13,9,3,19};
for(i=0;i<16;i++)
{
DBYTE[0X30+i]=a[i];
}
for(i = 0; i < n; i++)
{
for(j = 0; i + j < n - 1; j++)
{
if(a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for(i=0;i<16;i++)
{
DBYTE[0X40+i]=a[i];
}
}
四.实验截图:
五.实验总结
在第一个实验的指导下,我对于这个软件更加熟悉了解,但是对于汇编语言的使用还是很生疏,所以以后要多加练习。