华科 微机实验报告2-2014.doc_第1页
华科 微机实验报告2-2014.doc_第2页
华科 微机实验报告2-2014.doc_第3页
华科 微机实验报告2-2014.doc_第4页
华科 微机实验报告2-2014.doc_第5页
已阅读5页,还剩10页未读, 继续免费阅读

下载本文档

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

文档简介

微机实验报告 实验名称 分支与循环程序设计实验 指导教师 专业班级 姓名 学号 联系电话 1、 任务要求1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。2、 设计思路1.分段函数设计 首先利用比较转移指令CJNE来判断X是否等于临界值20,40,若不等,再根据执行CJNE指令后的进位位CY的值来判断X与临界值的的大小关系,CY=0则X大于临界值,CY=1则X小于临界值;然后根据X的值所在的区间进行相应的计算。除法计算中可能产生余数,商和余数应该分开存储,若乘方运算结果大于255,高八位与低八位应分开存储。224进制时钟 首先构建一个三重循环实现“一秒延时”,再设计计时系统的三重循环,秒(0-59)、分(0-59)、时(0-23)。秒和分计60次,小时计24次,分、秒达到59,小时达到23时,下一次应该为零。程序运行时修改P3.0的值可以实现暂停和继续的功能。3、 资源分配1.分段函数外部寄存器DPTR用作数据指针,变量X的值存于片外RAM的3000H单元,计算结果存于片外RAM的3001H3002H单元,按位取反计算结果存于3001H单元,而除法计算结果的商与余数和乘方计算中结果的高、低八位分别存储于3001H3002H单元。2.二十四小时制电子时钟工作寄存器R0,R1,R2分别用于秒、分、时的循环计数,R3,R4,R5用作一秒延时的循环计数,秒、分、时数值分别由P0、P1、P2端口输出。4、 流程图 1. 分段函数2.二十四小时制电子时钟5、 源代码 (含文件头说明、语句行注释)1. 分段函数 ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV A, #29H ;取数X MOV DPTR, #3000H ;设置数据指针 MOVX DPTR, A ;X存于片外RAM CLR C ;进位位清零STEP1:CJNE A, #14H, STEP2 ;将A与20比较,若不等于20,跳转至STEP2Y1: CPL A ;A取反 MOV DPTR, #3001H ;设置数据指针 MOVX DPTR, A ;将计算结果存于片外地址3001H SJMP DONESTEP2:JNC STEP3 ;判断CY是否为0,若为0,跳转至STEP3 SJMP Y1 ;CY不为0则跳转至Y1STEP3:CLR C ;进位位清零 CJNE A,#28H, STEP4 ;A中内容与40比较,若不等于40,跳转至STEP4Y2: MOV B,A ;复制A MUL AB ;X平方 MOV DPTR, #3001H ;设置数据指针 MOVX DPTR,A ;结果低八位存于片外地址3001H INC DPTR ;数据指针加一 MOV A,B ;将B中内容赋给A MOVX DPTR,A ;结果高八位存于片外地址3002H SJMP DONESTEP4:JNC Y2 ;判断CY是否为0,若为0,跳转至Y2 SJMP Y3 ;否则跳转至Y3Y3: MOV B,#02H DIV AB ;计算X/2 MOV DPTR,#3001H ;设置数据指针 MOVX DPTR,A ;结果商存于片外地址3001H INC DPTR ;数据指针加1 MOV A,B ;将B中内容赋给A MOVX DPTR,A ;结果余数存于片外地址3002H SJMP DONEDONE: SJMP $ END2. 二十四小时制电子时钟 ORG 0000H LJMP START ORG 0010HSTART: MOV SP,#40H ;设置堆栈 MOV R0,#00H ;R0,R1,R2清零 MOV R1,#00H MOV R2,#00H MOV P0,#00H ;P0,P1,P2清零 MOV P1,#00H MOV P2,#00HPAUSE: JB P3.0,PAUSE ;设置暂停功能SEC: MOV A,R0 ;AR0 MOV P0,A ;秒数传至P0端口 ADD A,#01H ;秒进位 DA A ;A转BCD码 MOV R0,A ;R0A ACALL OSEC ;一秒延时 CJNE A,#60H,PAUSE ;进位MIN: MOV R0,#00H ;R0,P0清零 MOV P0,#00H MOV A,R1 ;AR1 ADD A,#01H ;分进位 DA A ;A转BCD码 MOV P1,A ;分数传至P1端口 MOV R1,A ;R1A CJNE A,#60H,PAUSE ;进位HOUR: MOV P0,#00H ;R1,P0,P1清零 MOV P1,#00H MOV R1,#00H MOV A,R2 ;AR2 ADD A,#01H ;时进位 DA A ;A转BCD码 MOV P2,A ;小时数传至P2端口 MOV R2,A ;R2A CJNE A,#24H,PAUSE ;判断0点 SJMP START ;到0点重复 OSEC: MOV R4,#46 ;一秒延时子程序L3: MOV R5,#152L2: MOV R3,#70L1: DJNZ R3,L1 DJNZ R5,L2 DJNZ R4,L3 RET END 6、 程序测试方法与结果1. 分段函数X取不同的值进行运算(1) X=50(2) X=30(3) X=16结果正确。2. 二十四小时制电子时钟(1) 运行一秒误差25微秒(2) 运行一分钟误差0.5毫秒(3) 运行一小时误差0.03秒(4) 运行一天误差0.7秒综合来看程序正常。七思考题一实现多分支结构程序的主要方法有哪些?举例说明。1.转移地址表 JMPTAB: AJMP TO1 AJMP TO2 AJMP TO31. 分支地址表BRATAB: DW TO1 DW TO2 DW T03 2. 地址偏移量表 DISTAB: DB TO1- DISTAB DB TO2- DISTAB DB TO3- DISTAB4.利用条件转移指令实现,如DJNZ,JNC等等二.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?答:十进制加1计数器需要先判断该为上是否为9,是9则加一变0进位,否则直接加一;十六进制加1计数器可以直接用INC加一。用十进制加法指令实现减1计数可以用ADD 语句加99H,再用DA语句 进行十进制修正。8 提高部分双向计数资源分配:P3.7为1时加计数,为0时减计数,P3的底四位全为1时开始计数P1口输出千位、百位,P2口输出十位、个位 R5,R6,R7 用作一秒延时的循环计数 ORG 0000H LJMP MAIN ORG 0010HMAIN: MOV P3,#00H ;P1,P2,P3清零 MOV P2,#00H MOV P1,#00H WAIT: ACALL OSEC ;延时1s MOV A,P3 ANL A,#0FH CJNE A,#0FH,WAIT ;P3低四位全为1则开始计数JB P3.7,PLUS ;P3.7为1进行加1计数LJMP MINUS ;P3.7为0进行减1计数PLUS: CLR C ;清进位 MOV A,P2 ADD A,#01H ;加1DA A ;转BCD码MOV P2,A MOV A,P1ADDC A,#00H ;P1加上P2的进位DA A ;转BCD码MOV P1,A AJMP WAITMINUS : MOV A,P2 CJNE A,#0,MINUS1 ;P2不为0时,P2减1 MOV P2,#99H ;P2为0时,向百位借位,减一为99H MOV A,P1 CJNE A,#0,MINUS2 ;发生借位,P1不为0时,P1减一 MOV P1,#99H ;P1为0时,减一为99H AJMP WAIT MINUS1: ;十位个位减一 ADD A,#99H DA A;转BCD码 MOV P2,A AJMP WAITMINUS2: ;千位百位减一 ADD A,#99H DA A;转BCD码 MOV P1 ,A AJMP WAITOSEC: MOV R5,#46 ;延时一秒子程序L3: MOV R6,#152L2: MOV R7,#70L1: DJNZ R7,L1 DJNZ R6,L2 DJNZ R5,L3 RET END程序测试加1 进位正常减1借位正常 程序运

温馨提示

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

评论

0/150

提交评论