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

合集下载

单片机数据传送实验报告

单片机数据传送实验报告

竭诚为您提供优质文档/双击可除单片机数据传送实验报告篇一:单片机数据传送实验报告实验名称:数据传送实验实验类型:设计性实验姓名:袁志生时间: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

单片机实验-数据排序实验模板.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

单片机  数据传送和排序实验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单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。

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

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

《单⽚机原理及应⽤》实验报告本科⽣实验报告实验课程XXXXX学院名称XXXXXXXXXXXXXXX专业名称XXXXXXXXX学⽣姓名XXXX学⽣学号XXXXXXXXXXXX指导教师XXXXXX实验地点XXXXXX实验成绩⼆〇⼀六年四⽉⼆〇⼀六年六⽉《单⽚机原理及应⽤》实验报告摘要《单⽚机原理及应⽤》是电⼦科学与技术、电⼦信息⼯程、计算机科学与技术、⾃动控制等专业⼯程应⽤能⼒和创新能⼒培养的⼀门重要专业基础课。

课程重点讲授:单⽚机存储器体系结构、指令系统与编程技术、中断系统及应⽤、定时器及应⽤、外围设备与单⽚机的接⼝技术,单⽚机应⽤系统设计。

因为单⽚机这门课是⼀门实践性很强的课程,单纯学习课本不能掌握这门知识,必须要经过试验课程才能更加具体和深⼊地学会这门课。

通过试验课的学习,使学⽣掌握单⽚机技术及其在⼯业控制、经济建设和⽇常⽣活中的应⽤,培养学⽣实践能⼒、创新能⼒和新产品设计开发能⼒,为将来从事电⼦电器新产品设计开发,电⼦产品的检测和维护等⼯作奠定坚实的基础。

本实验板可以实现的实验内容:(1)单⽚机开发软件及仿真器的使⽤和P1⼝实验(2)I/O⼝实验(交通灯实验,温度传感器,蜂鸣器、I2C)(3)定时器实验(流⽔灯、交通灯、数码管等)(4)总线实验(流⽔灯LED、外部RAM)(5)系统扩展(包括:LCD、ADC、DAC、RAM等)(6)通信实验(RS232与计算机之间的串⼝实验)(7)传感器实验(1-Wire温度实验)(8)键盘实验(扫描接⼝)(9)电机实验(四相六线式步进电机)(10)时钟实验(RTC—PCF8563)(11)软件实验(多个数求和、排序等)(12)中断实验(外部中断、定时器、UART)本实验设计主要完成了数码管、流⽔灯、键盘、蜂鸣器等实验,与实验指导书结果符合,了解了部分功能的使⽤。

关键词:单⽚机 LED数码显⽰键盘串⼝第⼀章单⽚机集成开发环境应⽤⼀实验⽬的1.熟悉单⽚机集成开发软件(Keil);2.掌握单⽚机实验板的使⽤;3.掌握单⽚机P1⼝使⽤;⼆实验内容1、集成开发环境Keil介绍及开发流程Keil µVision4集成开发环境(Integrated Development Environment,IDE)是⼀个基于Windows的开发平台,它包含⾼效的源代码编辑器、项⽬(Project)管理器和程序⽣成(MAKE)⼯具。

单片机实验——精选推荐

单片机实验——精选推荐

实验一认识实验一.实验目的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.理解并掌握建立数据区与数据块传送程序。

实验要求通过电位器提供模拟量的输...

实验要求通过电位器提供模拟量的输...

单片机实验实验一顺序结构程序实验二数据区传送子程序实验三简单I/O口控制实验实验四信号灯控制实验五脉冲计数实验实验六并口扩展芯片8255控制交通灯实验七点阵LED显示实验实验八AD转换实验实验九电脑时钟(定时器,中断综合实验)实验十步进电机控制实验实验十一LCD液晶显示屏实验实验一顺序结构程序设计一、实验目的掌握汇编语言设计和调试方法。

二、实验内容1.拼字程序:把2000H的内容拆开,高位送2001H低位,低位送2002H 低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。

2.拼字程序:把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节。

3. 求和程序:将30H和31H单元中存放的2个一字节BCD码组合成一个2位的BCD 码存入32H单元,31H单元中的数为低4位。

三、实验步骤用连续或单步方式运行程序,检查2000—2002H中内容变化情况。

四、思考如何用断点方式调试本程序。

实验二数据传送程序一)实验目的:1)掌握单片机汇编语言程序设计和调试方法2)掌握单片机内部RAM,外部RAM,ROM中数据操作方法二)实验内容及步骤:1)再将内部RAM50H单元开始的十个数传到40H为始址的内部RAM中2)再将内部RAM 50H单元开始的十个数送到1000H为始址的外部RAM中3)再将ROM的2000H单元开始的十个数传送到以70H为始址的内部RAM中实验三简单I/O口控制实验一、实验目的(1)学习P1口的使用方法;(2)学习延时子程序的编写。

二、实验预备知识(1)P1口对准双向口,每一位都可独立地定义为输出线或输入线。

(2)本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。

三、实验内容P1作为输出口,接八只发光二极管,编写程序,使发光二极管左(右)循环点亮。

单片机C语言数据排序实验

单片机C语言数据排序实验

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

2.掌握排序程序的设计方法。

二、实验内容1.本例程采用交换排序法将内部RAM中的30〜39H单元中的10个单字节无符号二进制数按从小到大的次序排列,2.将排序后的数据中的最大的一个数和最小一个数去掉,求其他八个数的和,和放40H,41H中,求这八个数的平均值,放在50H中。

三、实验步骤1.用C语言或汇编语言编写程序。

2 •编译、生成项目、下载程序,调试运行程序。

3.用单步、断点、连续执行程序的方法调试程序。

4.打开RAM数据窗口,分别观察看30H- 39H 40H,41H(02H)(0C0H)和50H(58H)的单元。

四、实验参考程序ORG 0000HJMP MAINORG 0100HMOV SP #60HMOV 30H #5FHMOV 31H #56HMOV 32H #5AHMOV 33H #5EHMOV 34H #51HMOV 35H #5BHMOV 36H #53HMOV 37H #58HMOV 38H #57HMOV 39H #55HNOP ;设置断点ACALLQUENOPACALL LEIJANOPACALL CHU8NOPHERE AJMP HERE数据排序子程序框图数据排序子程累加序子程除8序子程QUE:MOV R3,#30H QUE1:MOV A,R3MOV R0,AMOV R7,#09HCLR 00HMOV A,@R0QL2:INC R0MOV R2,ACLR CMOV 22H,@R0CJNE A,22H,QL3SETB CQL3:MOV A,R2JC QL1SETB 00HXCH A,@R0DEC R0XCH A,@R0INC R0QL1:MOV A,@R0DJNZ R7,QL2JB 00H,QUE1 NOPRET LEIJA:MOV R0,#31HMOV R7,#8CLR CCLR AMOV 40H,#00HJIA:ADD A,@R0JC JIWEIJIA1:INC R0DJNZ R7, JIAMOV 41H,ASJMP JSJIWEI:INC 40HSJMP JIA1JS:RETCHU8:MOV 50H, 40HMOV 51H, 41HMOV R7,#3CHU81:CLR CMOV A,50HRRC AMOV 50H,AMOV A, 51HRRC AMOV 51H,ADJNZ R7,CHU81MOV 50H,51HRETEND#include<c8051f020.h>#include<stdio.h> unsigned char a[10] _at_0x30;unsigned char data0 _at_ 0x40;unsigned char data1 _at_ 0x41;unsigned char data2 _at_ 0x50;void main(){unsigned char tmp;int num;int i,j;a[0]=0x5f;a[1]=0x56;a[2]=0x5a;a[3]=0x5e;a[4]=0x51;a[5]=0x5b;a[6]=0x53;a[7]=0x58;a[8]=0x57;a[9]=0x55;for(i=1;i<10;i++)for(j=0;j<10-i;j++){if(a[j]>a[j+1]){tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;}} num=a[3]+a[4]+a[5]+a[6];data1=num%0x100; data0=num/0x100;data2=num/4;。

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

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

实验一单片机数据区传送/排序程序设计一、单片机数据区传送/排序程序设计一、实验目的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。

单片机原理实验报告

单片机原理实验报告

单片机原理实验报告班级:姓名:学号:实验日期:成绩:实验一基本操作实验目的:熟悉伟福仿真机软件的基本操作,熟悉MCS-51指令。

实验内容A:数据传送程序实验程序:实验步骤:(1)从起始地址开始全速运行程序Ⅰ,检查运行结果, 外部数据窗口中7000H~700FH单元的内容皆为00H;(2)按要求修改程序如Ⅱ,用单步/跟踪运行程序, 查看寄存器和外部数据窗口;(3)在PLUS处设置断点,从起始地址开始全速运行程序,查看寄存器和外部数据窗口;(4)清除断点,用运行到当前行方式将程序运行到PLUS的下一条指令,查看运行结果是否正确。

实验内容B: 1 , 当X>0时求符号函数Y= 0 , 当X=0时-1 , 当X<0时实验程序:实验步骤:(1)准备好三个有代表性的数据,分三次用单步/跟踪方式运行程序,注意PC指针的变化;当(40H)= _____(X>0) 时,ACC.7= 0 , 运行后(41H)= _01H_____(Y= 1),当(40H)= _00H____(X=0) 时,ACC.7= 0 , 运行后(41H)= __00H____(Y= 0),当(40H)= _____(X<0) 时,ACC.7= 1 , 运行后(41H)= FFH (Y=﹣1)(2)思考:能否用“JC POSI ”指令替代“JB ACC.7, POSI ”指令, 修改运行程序,验证结果。

注意“CJNE A, #00H, NZEAR”执行后CY位为0/1 ?单片机原理实验报告班级:姓名:学号:实验日期:成绩:实验二输入/输出控制实验实验目的:掌握单片机I/O口输入输出的控制方法,学会编写数码管的显示程序。

实验内容A:P1 口做输出口,接8只发光二极管L1~L8(高电平时发光二极管点亮),编写程序,使L1~L8流水闪烁。

ORG 0000HSTART: MOV A,#01HMOV R2,#08HLOOP:MOV P1,ALCALL DELAYRL ADJNZ R2,LOOPAJMP STARTDELAY:MOV R5,#40 ;延时1秒D1:MOV R6,#50D2:MOV R7,#248D3:DJNZ R7,D3DJNZ R6,D2DJNZ R5,D1RETEND实验内容B:P1 口做输入口,接拨动开关K1~K8。

1单片机实验报告系统认识实验和程序设计实验.doc

1单片机实验报告系统认识实验和程序设计实验.doc

一、实验目的:1、掌握实验系统的使用方法。

2、掌握集成调试软件的操作与程序调试方法。

3、熟悉51系列单片机的指令系统,掌握在单片机开发系统上调试和执行程序的过程。

4、熟悉51系列单片机软件的编程方法;5、通过使用汇编语言和C语言编写同一个程序,了解这二种方式的编程特点。

二、实验原理Lab6000通用微控制器实验系统由板上仿真器、实验单元、开关电源等构成。

接上EX51B 仿真板,可进行51单片机的实验。

实验系统通过串行通讯电缆将实验系统上的“仿真器串口”与计算机的串行通讯端口联接,在计算机上运行W AVE 集成调试软件,即可完成实验程序的编写、编译、装载、调试。

W A VE 集成调试软件具有与一般办公和工程软件相似的编辑功能和命令菜单。

可在软件上完成程序的输入、编辑、编译、调试等工作,实现对实验系统的控制。

并可通过相关窗口观察程序运行过程中,单片机各个数据存储单元的变化情况。

三、实验使用仪器。

1、Lab6000通用微控制器实验系统。

2、计算机,W A VE 集成调试软件。

四、实验内容。

1、熟悉51系列单片机开发环境。

2、运行一个简单的汇编语言程序。

3、运行一个简单的C语言程序。

4、了解本学期综合性、设计性实验的概况。

五、实验步骤1、按要求进行实验系统的联接与启动。

2、执行W A VE 集成调试软件。

进入开发环境界面,然后在“仿真器”下拉菜单,选择“仿真器设置”项。

在弹出的“仿真器设置”窗口中,应作设置如下:在“语言”标签窗口下,“编译器路径”为“C:\COMP51\”;“ASM命令行”勾选“使用伟福预定义符号”项;“编译器选择”点选“伟福汇编器”项;“缺省显示格式”点选“混合十、十六进制”项。

在“目标文件”标签窗口下,勾选:“缺省地址(由编译结果确定)”;“生成HEX文件”;“置未用程序存储器为00H”。

在“仿真器”标签窗口:选择仿真器:Lab6000 通用微控制器实验系统;选择仿真头:MCS51 实验;选择CPU:8031/32;去掉“使用伟福软件模拟器”选项。

单片机原理——实验指导书

单片机原理——实验指导书

《单片机原理》实验指导书张毅刚何谨孙震哈尔滨工业大学2005年4月目录序 ------------------------------------------------------------------------------------------------------------- 1实验1 单片机实验开发系统操作实验 ------------------------------------- 2实验2 单片机数据区传送程序设计------------------------------------------ 4实验3 数据排序实验 --------------------------------------------------------------------- 6实验4 查找相同数个数----------------------------------------------------------------- 8实验5 P1口转弯灯实验--------------------------------------------------------------- 10实验6 工业顺序控制 -------------------------------------------------------------------- 13实验7 8255控制交通灯--------------------------------------------------------------- 16实验8 A/D转换实验---------------------------------------------------------------------- 19实验9 D/A转换实验---------------------------------------------------------------------- 22实验10 电子时钟(定时器、中断综合实验) -------------------- 26附录1 DAIS-80958B单片机实验开发系统简介------------------- 36附录2 实验开发系统的字形/字位/键值表 --------------------------- 37序一、实验素养和一般知识1.实验前准备工作(1) 明确实验目的、熟悉实验内容、掌握实验步骤、了解所用单片机实验开发系统及仪器设备的性能。

(完整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

单片机实验1

单片机实验1实验一、MCS51单片机基本开发环境1.实验目的:1) 熟悉软件的集成开发环境2) 掌握单片机软件设计流程3) 掌握单片机存贮器结构及各窗口之间的联系2.实验内容:1) 用三种方法实现将累加器A内容改为20H方法1--MOV A,#20H方法2—MOV R0,#20HMOV A,R0方法3—MOV R0,#20HXCH A,R02) 将58H位单元置为1,观察内部RAM中2BH内容的变化代码:SETB 2BH.0JMP $END这是关于内部存储中对单元和字节了解,不理解很容易做错.比如开始写的指令为MOV R0,#58H;MOV @R0,#1这是错误的指令。

这就需要认真去了解单片机中的字节地址与位地址的关系。

80C51中有位寻址区和字节寻址区。

题目中58H为位地址,2BH为字节地址,且58H为2B字节的最低位。

由于58H属于位寻址区,可用位操作指令SETB进行置位,SETB 2BH.0执行后,2BH中内容变为013) 如果当前状态为有进位、工作寄存器使用区2,请用3种方法设置这种状态代码:ANL PSW,#01HMOV A,PSWCJNE A,#01,LAB2LAB1:JMP LAB1LAB2: SETB PSW.4 MOV P0,#01H MOV R0,#18HCLR PSW.3 MOV C,P0.0 MOV PSW,R0MOV PSW.4,CCPL CMOV PSW.3,CEND以上LAB2写了三段代码,可分别完成题目要求。

不过实验时只是对代码进行了错误调试,没有对结果进行检验。

其中值得注意的是对于布尔(位)操作指令的用法,比如传送指令必须经累加器C,如第二段中MOV P0,#01H ; MOV C,P0.0 ,以及对于位寻址的方式(如需用到“.”隔开)的应用。

4) 编一个小程序将内部RAM中的20H单元的内容送到21H单元并调试(分组完成)代码:5) 用程序将堆栈指针指向60H,然后在堆栈中依次压入01,02,03,04,05五个数,观察哪些单元内容发生了变化,各变为多少?从哪些窗口可以发现这些变化?顺序将堆栈中的五个数放入30H~34H 五个单元中,编程实现之。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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次交换就可,说明程序运行结果与实际结果相符。

相关文档
最新文档