单片机实验二 排序程序设计
单片机实验 数据排序
实验六数据排序一、实验目的掌握排序程序的设计方法。
二、实验内容本例程采用交换排序法将内部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六、实验结果与分析:汇编-连接-运行,显示如下:可看出正确按照递增排序。
实验2 数据排序实验
单片机课内实验(二)实验名称:数据排序实验学院:自动化学院姓名:班级:学号:日期:实验二数据排序实验一、实验目的熟悉51指令系统,掌握数据排序程序的设计方法。
二、实验设备1.实验开发箱一套2.PC机一台三、实验线路同实验1。
四、实验内容1.编写并调试一个排序程序,其功能为用冒泡法将RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。
程序框图如下:五、实验步骤1.编写程序XXXXS2,满足程序要求,在CPU内部的RAM 50H~5AH中放入不等的数据。
七、参考程序ORG 0100HQUE: MOV R3,#50HQUE1: MOV A,R3MOV R0,AMOV R7,#0AHCLR 00HMOV A,@R0INC R0QL2:MOV R2,ACLR CMOV 22H,@R0CJNE A,22H,QL3SETB CMOV A,R2QL3:JC QL1SETB 00HXCH A,@R0DEC R0XCH A,@R0INC R0MOV A,@R0QL1:DJNZ R7,QL2JB 00H,QUE1LOOP: SJMP LOOP六、思考题修改程序S2,将50H~5AH中内容按从大到小排列,并且记录下程序运行前后的结果,分析是否正确。
修改后的程序为ORG 0100HQUE:MOV R3,#50HQUE1: MOV A,R3MOV R0,AMOV R7,#0AHCLR 00HMOV A,@R0INC R0QL2:MOV R2,ACLR CMOV 22H,@R0CJNE A,22H,QL3SETB CQL3:MOV A,R2JNC QL1SETB 00HXCH A,@R0DEC R0XCH A,@R0INC R0MOV A,@R0QL1:DJNZ R7,QL2JB 00H,QUE1LOOP: SJMP LOOP七、实验心得本次实验是利用课堂上所学的知识,使用汇编语言编写冒泡排序程序。
在实验期间我输入代码后总是出现错误,经过仔细检查后发现好多细节部分错误,并加以改正,程序最终得以成功运行,得出正确的实验结果。
单片机原理实验报告
实验一:系统认识实验一、设计目的:1. 学习 Keil C51 集成开发环境的操作;2. 熟悉 TD-51 系统板的结构及使用。
二、设计内容:编写程序,将 00H~0FH 共 16 个数写入单片机内部 RAM 的 30H~3FH 空间。
三、设计步骤:1. 创建 Keil C51 应用程序(1)运行 Keil C51 软件,进入 Keil C51 集成开发环境。
(2)选择工具栏的 Project 选项,弹出下拉菜单,选择 NewProject 命令,建立一个新的μVision2 工程。
这时会弹出文件保存对话框,选择工程目录并输入文件名 Asm1 后,单击保存。
(3)工程建立完毕后,μVision2 会马上弹出器件选择窗口。
器件选择的目的是告诉μVision2 使用的 80C51 芯片的型号是哪一个公司的哪一个型号,不同型号的 51 芯片内部资源是不同的。
此时选择 SST 公司的 SST89E554RC。
(4)到此建立好一个空白工程,现在需要人工为工程添加程序文件,如果还没有程序文件则必须建立它。
选择工具栏的 File 选项,在弹出的下拉菜单中选择 New 目录。
(5)输入程序,完毕后点击“保存”命令保存源程序,将 Text1 保存成Asm1.asm。
Keil C51 支持汇编和 C 语言,μVision2 会根据文件后缀判断文件的类型,进行自动处理,因此保存时需要输入文件名及扩展名.ASM 或.C。
保存后,文件中字体的颜色会发生一定变化,关键字会变为蓝色。
(6)程序文件建立后,并没有与 Asm1.Uv2 工程建立任何关系。
此时,需要将 Asm1.asm 源程序添加到 Asm1.Uv2 工程中,构成一个完整的工程项目。
在Project Window 窗口内,选中Source Group1 点击鼠标右键,选择 Add Files to Group‘Source Group1’命令,此时弹出添加源程序文件对话框,选择文件Asm1.asm,点击 Add 命令按钮即可将源程序文件添加到工程中。
单片机原理——实验指导书
《单片机原理》实验指导书张毅刚何谨孙震哈尔滨工业大学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) 明确实验目的、熟悉实验内容、掌握实验步骤、了解所用单片机实验开发系统及仪器设备的性能。
单片机原理及应用实验报告
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。
实验二:排序、加法(80C51单片机汇编语言编程)
实验二:排序、加法(80C51单片机汇编语言编程)
有两个长度为10H 的数,分别放到30H 和40H 为首地址的存储器中(低
字节),求其对应之和,放在50H 为首地址的存储器中(处理进位位),然后按
升序排列,放在70H 为首地址的存储器中汇编程序:ORG 0000H;设置初始位置START:MOV R0,#30H MOV R1,#50H MOV R3,#10HCF:MOV A,@R0;将30H 的数放在50H MOV @R1,A INC R0 INC R1 DJNZ R3,CF MOV R0,#50H MOV R1,#40H MOV R3,#10H CLR CJIA:MOV A,@R0;将两个数求和ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R3,JIA CLR A;查看最后一个数是否有进位位ADDC A,#00H MOV 60H,A MOV R0,#50H;将50H 的数放到70H MOV R1,#70H MOV R3,#10HZY:MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R3,ZY MOV DPL,#0FH;用DPL 计数AA:MOV R0,#70H MOV R1,#71H PUSH DPL;保护DPLBB:CLR C MOV A,@R0 SUBB A,@R1 JC CC;第一个数小于第二个数跳转MOV A,@R0 XCH A,@R1 MOV @R0,ACC:INC R0 INC R1 DJNZ DPL,BB;减一不等于零跳转(内循环)POP DPL DJNZ DPL,AA;减一不等于零跳转(外循环)SJMP $ ENDtips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
实验二数据排序实验
实验二数据排序实验一、实验要求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中的数据存放到制定的数据存储器中。
单片机数据区数据排序设计
第二次实验单片机P1口输入输出实验一、实验目的1、学习P1口的使用方法。
2、学习延时子程序的编写和使用。
3、熟练在汇编软件环境下编写、修改、调试、和运行硬件程序。
4、熟悉汇编语言。
二、实验说明1、P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
2、P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二极管,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
编程时应注意P1.0,P1.1作为输入口时应先置1,才能正确读入值。
四、实验内容1、P1口是准双向口。
它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。
若不先对它置“1”,读入的数据是不正确的。
2、8051延时子程序的延时计算问题,计算和估算延时子程序的时间。
关于延时子程序的时间计算,查指令表可知MOV和DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6MHZ,所以上面延时子程序该的执行时间为:(256×255+2)×2×12÷6≈261ms五、实验程序Loop:mov a, #01hmov r2, #8Output:mov P1, arl acall Delaydjnz r2, Outputljmp LoopDelay:mov r6, #0mov r7, #0DelayLoop:djnz r6, DelayLoopdjnz r7, DelayLoopretendKeyLeft equ P1.0KeyRight equ P1.1LedLeft equ P1.2LedRight equ P1.3SETB KeyLeftSETB KeyRightLoop:MOV C,KeyLeftMOV LedLeft,CMOV C,KeyRightMOV Ledright,CLJMP LoopEND五、思考题1、改变延时时间,变快或者变慢,观察效果;2、第2个实验在每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果;3、改变流水灯的运行方向;4、改变流水灯的运行模式,双灯对跑,双灯一起跑。
顺序程序设计实验报告
顺序程序设计实验报告顺序程序设计实验报告引言顺序程序设计是计算机科学中的基础概念之一,也是初学者入门的重要环节。
本文将对顺序程序设计进行实验报告,通过实践探索该概念的应用和实际效果。
实验目的本次实验的目的是通过编写一段顺序程序,加深对顺序程序设计的理解,并掌握其基本语法和规则。
通过实践,我们将能够更好地理解程序的执行顺序和逻辑,提高编程能力。
实验过程首先,我们需要选择一个编程语言来实现顺序程序设计。
在本次实验中,我们选择了Python作为编程语言。
Python是一种简洁而强大的编程语言,非常适合初学者学习和实践。
接下来,我们需要定义一个问题或任务,以便编写程序。
在本次实验中,我们选择了一个简单的任务:计算圆的周长和面积。
这个问题非常适合顺序程序设计,因为它只涉及到顺序执行的计算过程。
在编写程序之前,我们需要了解圆的周长和面积的计算公式。
周长的计算公式是2πr,面积的计算公式是πr^2。
其中,π是一个常数,约等于3.14159,r是圆的半径。
接下来,我们可以开始编写程序了。
我们首先定义一个变量来表示圆的半径,然后使用周长和面积的计算公式来计算结果。
最后,我们将结果输出到屏幕上。
编写完成后,我们可以运行程序,观察结果是否正确。
如果结果与预期相符,则说明程序编写成功;如果结果不符,则需要检查代码逻辑和语法,进行调试和修改。
实验结果经过编写和测试,我们得到了正确的结果。
程序能够准确地计算圆的周长和面积,并将结果输出到屏幕上。
这证明了顺序程序设计的有效性和实用性。
实验总结通过本次实验,我们深入理解了顺序程序设计的概念和原理。
顺序程序设计是一种基础的编程思维方式,它能够帮助我们解决复杂的计算问题,并提高编程效率。
在实验过程中,我们学会了如何选择合适的编程语言来实现顺序程序设计。
Python作为一种简洁而强大的编程语言,非常适合初学者学习和实践。
此外,我们还学会了如何定义问题或任务,并使用适当的计算公式来解决问题。
分支程序设计实验-单片机第二次试验
分支程序设计实验-单片机第二次试验一、任务要求1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。
X2当X 40Y X/2 当20 X 40X 当X 202. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过PO、P1、P2端口输出(以压缩BCD码的形式)。
P3.0为低电平时开始计时,为高电平时停止计时。
提高部分(选做):a.实现4位十进制加、减1计数,千位、百位由P1 口输出;十位、个位由P2 口输出。
利用P3.7状态选择加、减计数方式。
b. 利用P3 口低四位状态控制开始和停止计数,控制方式自定。
二、设计思路1. 将8bits符号数从外部RAM单元取出至A中,符号位为1的时候为负数,进行取反运算;当符号位为0的时候为正数,因此将A与20进行比较,当A< 20时跳至取反运算那一步;当A>20时将A与40进行比较,如果当A>40 时则对其进行平方运算那一步,当A V 40时则进行除法运算那一步。
每次算完之后直接储存,最后再分配储存于外部RAM单元的指定位置。
2. 清零R0~R2和P0~P2开始先判断控制位P3.0是不是0,当P3.0=1时原地踏步重复判断,当P3.0=0时开始运行程序。
计时开始,进行秒钟R0计数,每次计数完成用BCD码子程序转换,然后判断计数后R0值是否到60,若R0 的值不足60,就直接输出给P2,若R0的值为60,就把R0和P2进行清零后,开始分钟计数部分。
同理,每次分钟计数完之后用BCD码子程序转换,然后判断计数后R1的值是否为60,若不为60,就直接输出给P1,若R1的值为60,就把R1和P1清零后开始时钟计数部分。
时钟计数完后同样用BCD码子程序转换,然后判断计数后的R2的值是否为24,若不为24,就直接输出给P0,若R2为24,就把R2和P0清零后直接跳出计数部分,从判断P3.0部分再开始.每两次计数输出之间穿插一个1s的延时程序。
- 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];
}
}
四.实验截图:
五.实验总结
在第一个实验的指导下,我对于这个软件更加熟悉了解,但是对于汇编语言的使用还是很生疏,所以以后要多加练习。