单片机实验报告——分支程序设计实验.doc_第1页
单片机实验报告——分支程序设计实验.doc_第2页
单片机实验报告——分支程序设计实验.doc_第3页
单片机实验报告——分支程序设计实验.doc_第4页
单片机实验报告——分支程序设计实验.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

微机实验报告实验名称:分支程序设计实验 指导教师: 专业班级: 姓名: 学号: 联系方式: 一、 任务要求实验目的:熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO口的使用。实验内容:1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。提高部分(选做):a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。 b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。二、 设计思路1.分支计算 数据X存于片外0010H,首先用CJNE语句与7FH比较(会给C赋值,X7FH时,C=0;反之C=1),等于时取平方;若不等,用JNC语句,C=0(X7FH)时取反;否则与28H比较(同上),大于等于28H时取平方;小于28H时,再与14H比较,大于14H时除二,否则取反。地址存于片外0040H和0041H,低位存于0040H,高位存于0041H。 2. 电子时钟电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0=0时开始计时。秒满60进位,为了60秒时直接显示1分钟0秒,需先将A赋给P2,再加一,再与60H比较,看是否进位。同理,分满60进位。时满24重新开始,由于P0端口的位置错误,A与P0相互赋值时,需加中间变量RO。 3.双向计数P3的底四位全为1时开始计数;用P3.7状态控制加、减计数方式;千位、百位由P1口输出,十位、个位由P2口输出(以压缩BCD码的形式)。P3.7为1时加计数,需先将进位C清零,用ADD语句给P2加一,并用DA语句进行十进制修正;再用ADDC语句给P1加一再十进制修正。P3.7为0时减计数,需先判断P2是否为00H, 不是00H则P2减一,是00H则给P2赋99H;同理,再判断P1是否为00H,不是00H则P1减一,是00H则给P1赋99H。延时可以用上面程序的延时1s子程序。三、资源分配1.分支计算初始数据X存于片外0010H;取反和除二操作,结果都存于片外0040H中;平方操作低位存于0040H中,高位存于0041H中。2. 电子时钟 P3.7为0时开始计数,为1时停止;P2显示秒,P1显示分,P0显示时;R3、R4、R5用于进行延时的装载循环次数。3.双向计数P3的底四位全为1时开始计数;用P3.7状态控制加、减计数方式;P1口显示千位、百,P2口显示十位、个位。四、流程图 图1为分支计算程序流程图图2为电子时钟程序流程图图3为双向计数程序流程图五、源代码 (含文件头说明、资源使用说明、语句行注释)1. 分支计算/*File name: 分支计算Description: 8bits符号数X存于片外0010H,当X=40时,取平方,高位存于0040H, 低位存于片外0041H中;当20X40时,除二,结果存于片外0040H中; 当X=20时,对X取反,结果存于片外0040H中。 Date: 2012.10.10Designed by: gxySource used: 0010H:片外RAM存储的数X 0040H:除二和取反结果、平方结果的平方的低八位 0041H:平方结果的高八位*/ ORG 0000H LJMP MAIN ORG 0010HMAIN: MOV DPTR,#0010H ;x存于片外0010H中 MOVX A,DPTR CLR C CJNE A,#7FH,TO1 ;与7FH比较,判断正负 SJMP PLACE1TO1: JNC PLACE3 CJNE A,#28H,TO2 ;与28H比较 SJMP PLACE1TO2: JNC PLACE1 CJNE A,#14H,TO3 ;与14H比较 SJMP PLACE3TO3: JNC PLACE2 SJMP PLACE3PLACE1: MOV B,A ;当x大于等于40时,取平方 MUL ABSJMP SAVEPLACE2: CLR C RRC A ;当x大于20小于40时,通过右移实现X除以2 SJMP SAVEPLACE3: CPL A ;当x小于等于20时,取反 SAVE: MOV DPTR ,#0040H MOVX DPTR,A ;低位存入片外0040HMOV A ,B INC DPTR MOVX DPTR,A ;高位存入片外0041HHERE: SJMP HERE ;踏步END2. 电子时钟/*File name: 电子时钟Description: 24小时电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。 P3.0为低电平时开始计时,为高电平时停止计时。Date: 2012.10.10Designed by: gxySource used: P2显示秒,P1显示分,P0显示时 P3.7为0时开始计数,为1时停止 R3、R4、R5:进行延时装载循环次数*/ ORG 0000H LJMP START ORG 0010HSTART: MOV SP,#40H MOV P0,#00H MOV P1,#00H MOV P2,#00H MOV R0,#00H MOV R1,#00H MOV R2,#00HWAIT: JB P3.0,WAIT ;P3.0为0时开始,为1时停止SEC: MOV A,R2 ;秒 MOV P2,A ;将A值赋给P2端口 ADD A,#01H DA A MOV R2,A ACALL DLY ;跳转到1s延时子程序 CJNE A,#60H,WAIT ;满60秒进位1分钟 MIN: MOV R2,#00H ;分 MOV P2,#00H MOV A,R1 ADD A,#01H DA A MOV P1,A ;将A值赋给P1端口 MOV R1,A CJNE A,#60H,WAIT ;满60分钟进位1小时 HOUR: MOV P2,#00H ;时 MOV P1,#00H MOV R1,#00H MOV A,R0 ADD A,#01H DA A MOV P0,A ;将A值赋给P0端口 MOV R0,A CJNE A,#24H,WAIT ;判断是否满24小时 SJMP START ;满24小时,重新开始计时 DLY: MOV R4,#46 ;延时1s,误差1usL3: MOV R5,#152L1: MOV R3,#70L2: DJNZ R3,L2 DJNZ R5,L1 DJNZ R4,L3 RET END 3. 双向计数 /*File name: 双向计数Description: 4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。P3.7为1时加计数,为0时减计数。P3的底四位全为1时开始计数。Date: 2012.10.10Designed by: gxySource used: P3.7为1时加计数,为0时减计数 P3的底四位全为1时开始计数 P1口输出千位、百位 P2口输出十位、个位由 */ ORG 0000H LJMP MAIN ORG 0010HMAIN: MOV P3,#00H MOV P2,#00H MOV P1,#00H WAIT: ACALL DLY ;延时1s MOV A,P3 ANL A,#0FH CJNE A,#0FH,WAIT ;P3低四位全为1则开始计数JB P3.7,INCREACE ; P3.7为1进行加计数LJMP DECREACE ; P3.7为0进行减计数INCREACE: CLR C MOV A,P2 ADD A,#01H DA A ;P2十进制修正修正MOV P2,A MOV A,P1ADDC A,#00H ;P1加上P2的进位DA A ;P1十进制修正修正MOV P1,A AJMP WAITDECREACE: MOV A,P2 CJNE A,#0,DECREACE_1 ;P2不为0时,P2减1 MOV P2,#99H ;P2为0时,向百位借位,减一为99H MOV A,P1 CJNE A,#0,DECREACE_2 ;由于借位,P1不为0时,P1减一 MOV P1,#99H ;P1为0时,减一为99H AJMP WAIT DECREACE_1: ;十位个位减一 ADD A,#99H DA A MOV P2,A AJMP WAITDECREACE_2:;千位百位减一 ADD A,#99H DA A MOV P1 ,A AJMP WAITDLY: MOV R4,#46 ;延时1s,误差1usL3: MOV R5,#152L1: MOV R6,#70L2: DJNZ R6,L2 DJNZ R5,L1 DJNZ R4,L3 RET END 六、程序测试方法与结果、软件性能分析 1. 分支计算程序运行测试:如图所示,在片外0010H中给X赋值7FH,运行结果在片外0040H和0041中显示,为013F7FH取平方为3F01H,所以X执行取平方操作,正确。在Register中A和B都为3FH,因为执行代码PLACE1: MOV B,A MUL ABSJMP SAVEDPTR 最后地址为0041H与存储地址相符分支功能测试:X为55H时,取平方,预期结果1C39X为7FH时,取平方,预期结果3F01 X为07H时,取反, 预期结果FBX为15H时,除二, 预期结果0AX为27H时,除二,预期结果13X为28H时,取平方,预期结果0640X为14H时,取反, 预期结果EBX为F9H时,取反, 预期结果06X存于片外0010H中,取反和除二操作,结果都存于片外0040H中,平方操作低位存于0040H中,高位存于0041H中。所得结果均符合分支计算的预期结果,而且在7FH、28H、14H这三个转折点计算结果也正确。Program Size: data=8.0 xdata=0 code=48所以本程序性能良好,运行正常。2. 电子时钟总体运行测试:端口显示的是6分21秒,实际精确运行时间为381.00312500s,相差0.003125s1s延迟子程序测试: 断点设置如下 两断点间运行时间为0.99999900s,说明1s延迟子程序误差为1us。60秒时直接显示1分钟0秒测试: 由图可知,由00:00:59直接变为00:01:00,符合要求。时钟误差测试:如上图,运行一分钟,误差为0.0005s如上图,运行一小时,误差为0.029422s如上图,运行24小时,误差为0.705901sProgram Size: data=8.0 xdata=0 code=81所以本程序性能良好,运行正常。程序稍加改进,还可以添加计天,甚至计月的功能3. 双向计数总体运行测试:加法测试:P3.7=1如上图所示,从4799到4800,两端口间进位正常如上图所示,从9999到0000再到0001,加法进位正常减法测试:P3.7=0如上图,从0000到9999,减一借位正常如上图,从9600到9599,减一,两端口间借位正常Program Size: data=8.0 xdata=0 code=86所以本程序性能良好,运行正常。七、思考题1实现多分支结构程序的主要方法有哪些?举例说明。答:1.转移地址表 JMPTAB: AJMP TO1 AJMP TO2 AJMP TO3 2.分支地址表BRATAB: DW TO1 DW TO2 DW T03 3.地址偏移量表DISTAB: DB TO1- DISTABDB TO2- DISTABDB TO3- DISTAB2在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?怎样用十进制加法指令实现减1计数?答:十进制加1计数器需要先判断该为上是否为9,是9则加一变0进位,否则直接加一;十六进制加1计数器可以直接用INC加一。用十进制加法指令实现减1计数可以用ADD 语句加99H,再用DA语句 进行十进制修正。八、实验小结 通过程序1,我们掌握了分支程序设计与调试方法,通过CJNE、 SJ

温馨提示

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

评论

0/150

提交评论