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

竭诚为您提供优质文档/双击可除单片机数据传送实验报告篇一:单片机数据传送实验报告实验名称:数据传送实验实验类型:设计性实验姓名:袁志生时间:04.17第五六节课一、实验目的与要求实验目的:1、掌握单片机的汇编指令系统及汇编语言程序设计方法。
2、掌握单片机的存储器体系结构。
3、熟悉keil软件的功能和使用方法。
4、掌握单片机应用程序的调试方法。
实验要求:1、实现单片机内部RAm之间,外部RAm之间以及内部RAm与外部RAm之间的数据传送。
2、利用Keil软件编辑、汇编、调试、运行实验程序并记录实验数据。
二、设计要求1、编写程序将00h~0Fh16个数据分别送到单片机内部RAm30h~3Fh单元中。
2、编写程序将片内RAm30h~3Fh的内容传送至片内RAm40~4Fh单元中。
3、编写程序将片内RAm40h~4Fh单元中的内容传送到外部RAm4800h~480Fh单元中。
4、编写程序将片外4800h~480Fh单元内容送到外部RAm5800h~580Fh单元中。
5、编写程序将片外RAm5800h~580Fh单元内容传送回片内RAm50h~5Fh单元中。
三、实验程序流程框图和程序清单.程序清单:oRg0000hsTART:moVR0,#30hmoVDpTR,#Qw1moVR5,#0Loop:Qw1:Qw2:Loop1:Loop2:Loop3:R7,#16A,R5A,@A+DpTR@R0,AR0IncR5R7,LoopQw200h,01h,02 h,03h,04h,05h,06h,07h08h,09h,0Ah,0bh,0ch,0Dh,0eh,0F hR0,#30hR1,#40hmoVR5,#16A,@R0@R1,AR0R1R5,Loop1R1,#4 0hmoVDpTR,#4800hR5,#16A,@R1@DpTR,AR1DpTRR5,Loop2moV sp,#60h11h,#48h10h,#58hR2,#00hDpL,R210h11hDphmoVxA, @DpTRmoVmoVmoVcmoVIncDJnZLJmpDbDbmoVmoVmoVmoVIncInc DJnZmoVmoVmoVmoVxIncIncDJnZmoVmoVmoVmoVpushpushpop popmoVxInccJnemoVmoVmoVLoop4:moVxmoVIncIncDJnZenD四,实验小结Dph@DpTR,AR2R2,#10h,Loop3R1,#50hDpTR,#5800hR5,#16A, @DpTR@R1,AR1DpTRR5,Loop41通过本次实验熟悉了keil软件的功能和使用方法.2掌握单片机的数据传送类和循环类汇编指令系统,学会了各种数据传送形式的程序设计方法.3掌握了单片机的调试方法。
单片机实验 数据排序

实验六数据排序一、实验目的掌握排序程序的设计方法。
二、实验内容本例程采用交换排序法将内部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 上进行软件仿真,运用冒泡法对数组的进行排列。
总的来说这次实验我获益良多。
单片机实验

实验一数据传送指令的使用及编程方法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)理解源程序指令含义,并参照注释写出结果。
单片机及其接口技术实验报告

单片机及接口技术实验报告实验一数据传送程序一、实验目的1、掌握汇编语言设计和调试方法。
2、掌握DVCC实验系统的操作步骤。
二、实验内容1、编程实现,把7000H~70FFH单元的内容清零。
2、编程实现,把源地址为6000H开始的单元内容,传送到目的地址7000H开始的单元中,传送个数为0FFFH个。
三、DVCC实验系统操作说明1、接通DVCC实验系统电源,在DVCC实验箱上应显示闪动的“P”,否则按Reset键。
2、运行DVCC软件。
(程序DVCC598H实验系统DVCC实验系统)3、单击工具栏上“新建”或“打开”按钮,编写源程序。
单击“编译”按钮,使其形成可执行文件。
4、单击工具栏上“联接”按钮,同时按下DVCC实验箱上PCDBG键(键盘上最右边第2个),实现PC机和实验箱的联接。
联机成功,屏幕上出现:.反汇编窗口、寄存器标示位窗口。
5、在成功联机后,单击工具栏上“调试”按钮,把最终目标文件装载到实验系统RAM区;或者通过单击菜单栏中的“动态调试”,选择“传送(.EXE)文件”来实现。
6、单击工具栏上“运行”或“单步”按钮,运行实验程序。
7、单击工具栏上“窗口”,选择“显示内部数据窗口”或“显示外部数据窗口”可显示数据窗口。
鼠标右击数据窗口的数据,可设置数据块新地址;鼠标左键单击数据,可修改数据数值。
8、运行完毕,先按实验箱上的复位按钮Reset键,再按PCDBG键,并且点击屏幕上OK,即可退出运行状态。
四、实验程序代码1、把7000H~70FFH单元的内容清零。
程序代码:ORG 0000HAJMP STARTORG 70HSTART: MOV P2, #70H ;送地址高8位到P2端口MOV R0, #00H ;R0=00H,表地址低8位CLR A ;将累加器A清0LOOP: MOVX @R0, A ;将A送入以R0内容为地址的外部RAM.INC R0 ;R0+1-->R0CJNE R0,#00H,LOOP;比较条件转移指令,若R0不等于0,则跳转到LOOPAJMP $ ;暂停END2、编程实现,将源地址为6000H开始的单元,传送到目的地址7000H开始的单元,传送个数为0FFFH个。
单片机实验程序及流程图

《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.程序清单及程序流程框图ORG 0000H Array LJMP MAINMAIN: MOV R0,#30HMOV R2,#10HCLR AA1: MOV @R0,AINC R0INC ADJNZ R2,A1MOV R0,#30HMOV R1,#40HMOV R2,#10HA2: MOV A, @R0MOV @R1,AINC R0INC R1DJNZ R2, A2MOV R1,#40HMOV DPTR ,#4800HMOV R2, #10HA3: MOV A,@R1MOVX @DPTR ,AINC R1INC DPTRDJNZ R2,A3MOV SP,#60HMOV R2,#10HMOV DPTR ,#4800HPUSH DPLPUSH DPHMOV DPTR,#5800HMOV R3,DPLMOV R4,DPHA4: POP DPHPOP DPLMOVX A,@DPTRINC DPTRPUSH DPLPUSH DPHMOV DPL,R3MOV DPH,R4 MOVX @DPTR,A INC DPTRMOV R3,DPLMOV R4,DPHDJNZ R2,A4MOV R0,#50HMOV DPTR,#5800H MOV R2,#10HA5: MOVX A,@DPTR MOV @R0,AINC R0 INC DPTR DJNZ R2,A5POP DPH POP DPL HERE: LJMP HEREEND《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.实验电路四.程序清单及流程图程序一ORG 0000HLJMP MAIN ORG 000BH LJMP IPTO MAIN: MOV SP, #30H MOV TMOD, #01HCLR 00H SETB EA SETB ET0 MOV TH0, #3CH MOV TL0, #0B0H MOV R1, #14H SETB TR0 MOV A, #0feH MOV P1, A NT: JNB 00H, NT RL A MOV P1, ACLR 00H LJMP NT IPTO: MOV TH0,#3CH MOV TL0,#0B0HDJNZ R1, TIOMOV R1, #14HSETB 00HTIO: RETIEND程序二只需将程序一中“RL A”改为“RR A”即可实现其功能。
单片机原理实验报告

实验报告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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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次交换就可,说明程序运行结果与实际结果相符。