实验四子程序设计实验.doc_第1页
实验四子程序设计实验.doc_第2页
实验四子程序设计实验.doc_第3页
实验四子程序设计实验.doc_第4页
实验四子程序设计实验.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验四:子程序设计实验专业班级 姓名: 学号: 联系方式一、任务要求:1. 调试程序dmove.asm,观察片外数据区7000H、A000H开始的单元内容变化规律。 修改程序将7010H7073H单元内容传送至B000H开始的存储区中。2. 设计一个子程序,统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。3.(选作题)设计子程序,实现对片外数据存储器的测试。具体要求如下:1)测试方法自选2)数据存储区首地址、长度可变。3)可统计坏单元数目,并记录坏单元地址。4)利用LED指示灯,提示测试过程和结果状态。二、设计思路实验一:1.用MOVX DPTR, A指令,向片外数据区7000H到70FFH单元内容送值。2.用同样的指令,将7010H7073H单元内容传送至B000H开始的存储区中。实验二:1.将要检验的地址区域内容逐个取出,进行奇偶判断2.是偶数则统计加一,之后对下一位进行判断3.不是则对下一位进行判断4结束后返回实验三:1.先将监测区域内赋值2.赋值完成后通过改变区域内的内容,再进行检测3.若两次的内容不相同,则统计数加一并记录地址4用P1,P2,P3口的状态来表示LED指示灯的工作状态三、资源分配实验一:1. 起始地址为0090H2. 向片外数据区7000H、A000H开始的单元赋值。3. 将7010H7073H单元内容传送至B000H开始的存储区中。实验二:1. 起始地址1000H2. 统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。实验三:(选作题)1. 起始地址2000H2. 向7000H开始的片外RAM空间送监测数3. 错误数目放在R2中4. 错误地址放在片内IDATE中四、流程图 DPTR #2000C=1?R3 ACLR CINC DOTRA A+DPTR2R1=0?R1 #256R2 #0R3 #0开始 2结束 Y N YACC.0=1? NA R3INC AN YINC R2INC R1A A+DPTR开始3LONG DATA 50TABLE DATA 2000HINC DPTR MOV R2,#0MOV R6,#30HMOV R7,#31HMOV P0,#0MOV P1,#0MOV P2,#0MOV P3,#0MOV R1,#0R0=0? YP1 #1 NR2 #0FFH NA=(29)?MOV DPTR,#TABLEMOV R0,#LONGMOV A,R2 YA A+DPTRMOV P0,R1MOV P2,DPLMOV R6,DPLINC DPTRNINC R6INC R6R0=0? YP3 DPHR7 DPH (29H) R2INC R7INC R7R0 LONGDPTR TABLE五、源代码 (含文件头说明、资源使用说明、语句行注释)试验一代码:;File name: dmove.asm;Date: ;Designed by: ;Description: 数据块传送;Resource used: R0: 计数器 ; DPTR: 片外数据指针 ; R2, R3 源地址 ; R4, R5 目的地址 ; R6, R7 传送字节数 ORG0090HSTART: ;初始化7000H开始的片外RAM空间 MOV R0, #00H ;设循环计数器 MOV DPTR, #7000H ;设数据指针 MOV R1, #00HLOOP1: MOVA, R1 MOVX DPTR, A ;传送到片外RAM INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 INC R1 CJNER0, #00H, LOOP1 ;判断是否结束 ;给R2,R3,R4,R5,R6,R7赋初值 MOVR2, #70H MOVR3, #10H MOVR6, #01H MOVR7, #00H MOVR4, #0b0H MOVR5, #00H ;数据串传送DMVE: MOV SP, #70H ;设栈底 MOV DPL, R3 MOV DPH, R2 MOVX A, DPTR ;取一个字节 MOV DPL, R5 MOV DPH, R4 MOVX DPTR, A ;传送一个字节 CJNER3, #73H, DMVE1 SJMP LP ;源地址加1DMVE1: INCR3 CJNER5, #0FFH, DMVE2 INCR4 ;目的地址加1DMVE2: INCR5 CJNER7, #00H, DMVE3 CJNER6, #00H, DMVE4 ;数据传送结束? SJMP$ ;原地踏步DMVE3: DECR7 ;字节数减1 SJMP DMVEDMVE4: DEC R7 DEC R6 SJMP DMVELP : SJMP LP END实验二代码:ORG 1000H MOVR2, #00H ;统计数目高位MOVR3, #00H ;低位MOV R1, #00H ;定义判定区间长度MOVDPTR,#2000H ;预先定义ALLER : MOVX A,DPTR ;将目的地址中的内容送到A累加器中ANL A,#01H ;与1进行与运算CJNE A,#01H,COUNTN ;判定是否为偶数,是则跳至COUNTNINC DPTR ;指向下一地址 SJMP GOCOUNTN: CJNE R3,#0FFH,COUNT1 ;判断低位是否将要溢出INC R2 ;高位进一MOV R3,#00H INC DPTRSJMP GOCOUNT1 : INC R3 ;低位加一INC DPTRSJMP GO GO: INC R1CJNE R1,#00H,ALLER;判定循环是否结束SJMP LP LP : SJMP LPEND 实验三代码: ORG2000H MOV P0,#00H ;显示送数与检测功能 MOV P1,#00H ;显示程序执行结束 MOV P2,#00H ;显示警告功能 MOV P3,#00H START: ;初始化7000H开始的片外RAM空间 MOV P0, #0FH ;LED显示开始送数 MOV R0, #00H ;设循环计数器 MOV R1, #10H ;坏地址 MOV R2, #00H ;坏地址个数 MOV DPTR,#7000H ;设数据指针ORGINAL DATA 7000H ;定义数据存放初始地址 TEST DATA 00H ;定义判定值TEST的大小LOOP1: MOV A, #TEST ; MOVX DPTR, A ;传送到片外RAM INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #00H, LOOP1 ;判断是否结束 MOV P0,#0FFH ;LED显示检错状态 MOV DPTR,#ORGINAL ;返回数据区首地址CHECK: MOVX A,DPTR ;将数据送入A累加器中 CJNE A,#TEST,WARN ;与指定内容比较,不相同则出错 SJMP GO GO : INC DPTR INC R0 CJNE R0, #00H, CHECK;判断循环是否结束 SJMP LP WARN : MOV P2,#0FFH ;LED显示出错状态 INC R2 ;记录出错数目 MOV A,DPH MOV R1,A INC R1 MOV A,DPL MOV R1,A ;记录出错地址并存于R1中 INC R1 INC R1 ;留出间隔 SJMP GO LP : MOV P0,#00H MOV P1,#0FFH ;LED显示程序结束状态 SJMP LP END注释:通过改变TEST 的数值来决定输送的检测数(可为任意数) 再用手动改变区域的值来完成检验六、程序测试方法与结果、软件性能分析实验一:1. 片外数据区7000H、A000H开始的单元内容变化规律2. 7010H7073H单元内容传送至B000H开始的存储区实验二:1. 向检测区送偶数2 检测结果(显示为十六进制)实验三:1. 向检测区送检测值以及LED状态送书完毕2. 篡改检测区内容3. 检测结果:(1)坏区数目 R2(2)坏区地址(3)LED报警状态七、心得与体会这次实验通过传送数据的具体程序实验,进一步加深了对数据传送的基本步骤和思路的理解,在选作实验中也进一步对I/O的数据处理有了了解,在实验设计中对子程序和重复步骤的运用是相当重要的,对数据区的数据移动和传送也是要重点了解的。在这次程序设计中,尤其要注意的数据的起始地址等方面,另外,在循环和判断偶数实验中也要特别注意一些细节问题,在附加实验中,坏点的比较是比较需要注意处理的部分。思考题1从2000H单元开始的外部RAM中存有100个数,要求把它传送到自2500H单元开始的存贮区中去,但在传递过程中要检查数的值,遇到第一个零就停止传送。应如何编写程序?答: MOV DPTR,#2000H MOV R1,#100HMAIN: LCALL SEND DJNZ R1,MAINENDED: SJMP $ SEND: MOVX A,DPTR JZ ENDED PUSH DPH PUSH DPL PUSH ACC MOV A,DPL ADD A,#0F4H MOV DPL,A MOV A,DPH ADDC A,#1 MOV DPH,A POP ACC MOVX DPTR,A POP DPL POP DPH INC DPTR RET END2若要将偶数从小到大排序并置于从2000H开始的前端,其余符号数按原来顺序置于偶数后面。应如何编写程序? F1 EQU PSW.1COUNTEVE: MOV R2,#0 MOV R1,#0 MOV R5,#0 ;计数个数 MOV DPTR,#2000HCOUNT1: MOVX A,DPTR RRC A JC NOTEVEN LJMP CHANGECHANGE1:MOV A,R1 ADD A,#1 MOV R1,A MOV A,R2 ADDC A,#0 MOV R2,ANOTEVEN:INC DPTR DJNZ R5,COUNT1 LJMP STEP2 CHANGE: MOVX A,DPTR PUSH DPH PUSH DPL PUSH ACCNUOD: LJMP NUODONGNUOD1: MOV A,DPL JNZ NUOD POP ACC MOVX DPTR,A POP DPL POP DPH LJMP CHANGE1NUODONG: MOV A,DPL CLR C SUBB A,#1 MOV DPL,A MOV A,DPH SUBB A,#0 MOV DPH,A MOVX A,DPTR INC DPTR MOVX DPTR,A MOV A,DPL CLR C SUBB A,#1 MOV DPL,A MOV A,DPH SUBB A,#0 MOV DPH,A SJMP NUOD1;以上程序实现对偶数计数并把它们;挤到最前面;以下程序是上次写得排序程序稍加修改STEP2: MOV A,R2 JZ LOOP1 MOV R2,#0FH MOV R1,#0FH LOOP1: CLR F1 MOV A,R2 MOV R4,A MOV A,R1 MOV R3,A MOV DPTR,#2000HLOOP2: MOVX A,DPTR MOV R6,A INC DPTR MOVX A,DPTR MOV R7,A CLR C SUBB A,R6 JC LESS SETB F1 MOV A,R6 MOVX DPTR,A MOV A,DPL CLR C SUBB A,#1 MOV DPL,A MOV A,DPH SUBB A,#0 MOV DPH,A MOV A,R7 MOVX DPTR,A INC DPTR LESS: MOV A,R3 JZ CHECKR4 DEC R3 SJMP LOOP2CHECKR4:MOV A,R4 JZ OUTLOOP2 DEC R4 SJMP LOOP2 OUTLOOP2:JNB F1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论