




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机上机实验报告 学院:光学与电子信息学院 班级:光电1001班 姓名:秦承志 学号:U201013349 日期:2012.10.13 微机实验二 实验名称 KeilC的使用与汇编语言的上机操作 指导教师 曹丹华 专业班级 光电1001班 姓名 秦承志 学号 U201013349 序号 联系方式一实验目的: 熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令,机器码,寻址方式等基本内容的理解,掌握用分支程序和简单程序的设计和调试方法,了解并行I/O口的使用。二实验内容:1. 分支程序的设计: 1)设计要求: 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序: 2)设计思路: 把外部RAM内容传给A,先判断正负,小于或等于0,则执行取反,并把结果传回片外RAM,并结束;若大于0,再判断A与14H的大小,若小于,则执行取反;若大于14H,则再判断A与28H的大小,若A大于等于28H,则执行平方操作,并依此分别把积的低八位,高八位传回片外RAM,并结束;若小于28H,则执行A除以2,结果传回片外RAM。 3)程序流程图如下所示: 4)资源分配和源代码如下所示: File name: 分支程序设计.asm Description: 判断片外RAM的2000H单元的内容,若小于或等于40,则逐位取反,结果 存于原单元中,若大于20且小于40,则内容除以2,结果送回原单元,若大 于或等于40,则单内容平方,结果低八位送回原单元,高八位送至下一单元。 Date: 2012.10.10 Designed by: QinChengzhi Source used: DPTR 对片外RAM进行读写 A,B 用于乘法运算的中间结果 2000H,2001H 存放待操作的数作为结果的存放单元 ORG 0000H LJMP MAIN ORG 1000H ;程序从1000H开始 TABLE EQU 2000H ;定义符号地址TABLE,为2000H MAIN: MOV DPTR,#TABLE ;DPTR赋初值,指向2000H单元 MOVX A,DPTR ;把2000H单元内容给A JB ACC.7, L1 ;最高位为1,则跳转至L1 CJNE A,#14H,LOOP1 ;最高位为0,则比较A与14H,不等则跳转LOOP1L1: CPL A ;A等于14H,也跳转L1,A逐位取反 INC DPTR ; DPTR加1 MOVX DPTR,A ;把A的内容再送回下一单元 SJMP DONE ;跳转至DONE LOOP1: JC L1 ;A小于14H,也跳转至L1 CJNE A,#28H,LOOP3 ;A大于14H,再与28H比较,不等则跳转LOOP3 LOOP2: MOV B,A ;若A小于28H,则转LOOP2,把A内容给B MUL AB ;A与B相乘 INC DPTR ;DPTR加1 MOVX DPTR,A ;积的低位存于下一单元 INC DPTR ;高位存于再下一单元 MOV A,B MOVX DPTR,A SJMP DONE ;跳转至DONE LOOP3: JNC LOOP2 ;若A大于28H,跳转到LOOP2 RR A ;若A小于28H,则A除以2 INC DPTR ;DPTR加1 MOVX DPTR,A ;把A内容传回下一单元 SJMP DONE ;跳转至DONE DONE: SJMP $ ;踏步 END ;结束4) 程序结果测试与软件性能分析: 4.1程序结果测试: 情况1:不妨在memory的2000H中输入FE,运行结果应为(2001H)=FE取反,即(2001H)=01 仿真结果如下:对比运行结果和分析结果,两者相符 情况2:在memory的2000H中输入24H,运行结果应为24H/2=12H,运行结果如下所示:对比运行结果和分析结果,两者相符情况3:在memory的2000H中输入35H,运行的结果为(2001H)=F9,(2002H)=0A,运行结果如下:对比运行结果和分析结果,两者相符4.2软件性能测试: 1)运行时间:从simulation中即可看出程序的运行时间,情况如下: 情况1: 情况2: 情况3: 2)代码量的大小,资源的消耗情况如下所示: 2. 24小时的电子时钟的设计:1) 设计要求:利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。2) 设计思路:先将P0,P1,P2端口清零,P3.0置0,调用延迟子程序,延时接近1s,在从P2端口读入数据到A中,并加1计数,再转换成压缩BCD码,再调用补偿延时子程序,使定时精确为1s,再判断加1次数,达到60次后,P2端口清零,P1端口加1,再继续调用延迟子程序和补偿延迟子程序,继续计数,再判断P1是否加到60次,加到后,P1端口清零,P0端口加1,再继续加1计数,判断P0所加次数是否达到24,达到24后,P0端口清零,程序结束。3) 程序流程图如下所示: 4) 程序的资源分配及源代码如下: File name: 24小时电子时钟.asm Description: 电子时钟的时,分,秒分别由P0,P1,P2端口输出,P3.0A为低电平时,开 始计时,输出形式为压缩BCD码 Date: 2012.10.10 Designed by: QinChengzhi Source used: P0,P1,P2:输出时分秒 A:加1计数 P3.0:计数标志位 ORG 0000H LJMP MAIN ORG 1000H ;程序从1000H开始 MAIN: MOV P0,#0 ;P0端口清零 MOV P1,#0 ;P1端口清零 MOV P2,#0 ;P2端口清零 JNB P3.0,LOOP ;若P3.0为0,则开始计时 LOOP: LCALL SDELAY ;调用S延时子程序,延时接近1秒 MOV A,P2 ;把P2端口值给A ADD A,#01H ;A的内容加1 DA A ;转化为BCD码 LCALL MDELAY ;调用M延迟子程序,补偿1秒延时 NOP NOP MOV P2,A ;把A的内容给P2 CJNE A,#60H,LOOP ;A小于60H,继续LOOP程序段 MOV P2,#00H ;A等于60H,则将P2清零 MOV A,P1 ;把P1口内容读入A ADD A,#01H ;A的内容加1 DA A ;转化为BCD码 MOV P1,A ;把A的内容给P1 CJNE A,#60H,LOOP ;A小于60H,继续LOOP程序段 MOV P1,#00H ;A等于60H,则将P1清零 MOV A,P0 ;把P0口内容读入A ADD A,#01H ;A的内容加1 DA A ;转化为BCD码 MOV P0,A ;把A的内容给P0 CJNE A,#24H,LOOP ;A小于24H,继续LOOP程序段 MOV P0,#00H ;A等于60H,则将P0清零 SJMP DONE ;跳至DONE SDELAY: MOV R1,#8 ;S延迟子程序,延迟为999012.5us DELAY1: MOV R2,#250 DELAY2: MOV R3,#249 DELAY3: NOP NOP DJNZ R3,DELAY3 DJNZ R2,DELAY2 DJNZ R1,DELAY1 RET MDELAY: MOV R4,#2 ;M延迟子程序,补偿延迟979.5us DELAY4: MOV R5,#244 DELAY5: NOP NOP DJNZ R5,DELAY5 DJNZ R4,DELAY4 RET DONE: SJMP DONE ;踏步指令 END ;结束5) 程序结果测试与软件性能性能分析: 5.1 程序结果测试:理论分析过程:该程序选用的8951单片机,晶振频率为24MHz,故一个机器周期时间为: ; 由于该程序使用了延时补偿,所以每一秒钟可以精确定时,第一个延时子程序S延时子程序,用到了三层循环,共定时时间计算如下: ;补偿延时子程序M延时子程序,运用了两层循环,共定时为: 剩下有2个NOP操作,2个MOV操作,1个ADD操作,1个DA,一个CJNE操作,共定时为: 所以每两次加1操作之间的时间定时精确为运行结果如下所示:取两次P2口刷新的时间差,即计数时间差如下:下一次P2口刷新完一瞬时,即下一次计数时间如下: 对比两次计数时间的时间差,发现为精确的1秒钟,说明没隔1秒钟计数没有误差,即P2端口是严格的按照每个一秒钟加1刷新1次的。再看每一分钟的误差: 理论上分析:每次P2端口清零,P1端口加1,即分钟加1时,经过了2个MOV,1个ADD,1个DA,2个CJNE的操作,故每相邻的P1口刷新时间间隔,也即是每1分钟的定时误差为: 即是每分钟误差为4us,因此每小时误差为240us.每相邻P1口刷新时间间隔如下:下一次加1完成的时间见下页,两次时间差为4us.以上的分析是正确的下次P1端口刷新时间如下:5.2 软件性能分析如下:三提高任务:1) 设计要求:a. 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。2)2.1.1设计思路1:4位十进制数加计数器为一个状态为00009999的循环计数器,可以从任何一个状态开始,必须先预处理,对于任何初始状态,先转换成BCD码。每次计数前,先由P3.0端口状态决定是否计数,再由P3.7端口状态决定计数模式。进行加1计数时:把P2端口(十位和各位)的值给A,然后加1,进行DA修正后,再传回P2端口,再把P1端口(千位和百位)的值给A,加上低位的进位,再进行DA修正,再把结果传回P1端口;进行减1计数时:把P2端口(十位和各位)的值给A,然后加上99H,进行DA修正后,再传回P2端口,判断P1端口是否为00H,为00H,则再把P1端口(千位和百位)的值给A,此时不管低位的进位,直接加上99H,进行DA修正,直接送回P1端口。且每两次计数的时间间隔由两次延迟子程序决定。 2.1.2思路1的程序流程图如下所示: 2.1.3思路1的资源分配及其源代码如下: File name: 4位十进制加减计数器1.asm Description: P3.0=1,开始计数;P3.0=0,停止计数 P3.7=1,加计数;P3.0=0,减计数 P1显示千位和百位的压缩BCD码,P2输出十位和各位 Date: 2012.10.10 Designed by: QinChengzhi Source used: P1,P2:输出计数器的千位百位,十位各位 A:用于加1计数和减1计数的中间操作 P3.0:计数起停标志位 P3.7:计数模式标志位 ORG 0000H LJMP MAIN ORG 1000H MAIN: MOV A,P2 ;把P2端口的初始值转成成BCD码 ADD A,#00H DA A MOV P2,A MOV A,P1 ;把P1端口的初始值转化成BCD码 ADD A,#00H DA A MOV P1,A START: JNB P3.0,DONE ;P3.0为0,不计数,跳至DONE ACALL SDELAY ;计数开始,调用S延迟子程序 ACALL MDELAY ;调用M延迟子程序,定时1秒 JNB P3.7,DOWN ;P3.7为0,则调至减计数 UP: MOV A,P2 ;P3.7为1,则进行加计数,P2口读到A ADD A,#01H ;A内容加1 DA A ;2-10进制转换,化成BCD码 MOV P2,A ;把A内容传回P2,显示十位和各位 MOV A,P1 ;把P1的内容读到A ADDC A,#00H ;A加上低位的进位 DA A;2-10进制,化成BCD码 MOV P1,A ;把A的内容传回P1 SJMP START;不断的加循环计数 DOWN: MOV A,P2;减计数,P2内容给A ADD A,#99H;加上99H DA A;化成BCD MOV P2,A;把A的内容传回P2 CJNE A,#00H,START CLR A;A清零 MOV A,P1;P1的内容给A ADD A,#99H;A的内容加99H DA A;化成BCD码 MOV P1,A;把A的内容传回P1 SJMP START;继续减计数 SDELAY: MOV R1,#8;S延迟子程序,延迟为999014.5us DELAY1: MOV R2,#250 DELAY2: MOV R3,#249 DELAY3: NOP NOP DJNZ R3,DELAY3 DJNZ R2,DELAY2 DJNZ R1,DELAY1 RET MDELAY: MOV R4,#2 ;M延迟子程序,补偿延迟981.5us DELAY4: MOV R5,#244 DELAY5: NOP NOP DJNZ R5,DELAY5 DJNZ R4,DELAY4 RET DONE: MOV P1,#00H ;P1口清零 MOV P2,#00H ;P2口清零 SJMP DONE ;踏步指令 END ;结束2.2.1设计思路2: 程序的预处理的和计数起停及计数模式标志位都与思路1相同,加1计数与思路1也相同,不同的是减1计数,思路如下:先进行低位的减1操作,把结果的各位和十位分别用寄存器存起来,借位位存在C中,再取千位和百位,先减去借位位,再把百位和千位分别存起来。无论是高位还是低位,减1之前当遇到00H时,减之后单片机中为FFH,此时应该把FFH直接转换09H或90H.再将结果显示出来。2.2.2程序的资源分配和部分源代码如下:(由于加1计数和延时子程序均与思路1相同,故此处只给出思路2的减1计数的子程序)。File name: 4位十进制加减计数器2.asm Description: P3.0=1,开始计数;P3.0=0,停止计数 P3.7=1,加计数;P3.0=0,减计数 P1显示千位和百位的压缩BCD码,P2输出十位和各位 Date: 2012.10.10 Designed by: QinChengzhi Source used: P1,P2:输出计数器的千位百位,十位各位 A:用于加1计数和减1计数的中间操作 P3.0:计数起停标志位 P3.7:计数模式标志位 R1,R2,R3,R4分别用来存储各位,十位,百位,千位 R0用来存储中间计算结果 . DOWN: CLR C ;C清零 MOV A,P2 ;P2的内容给A SUBB A,#01H ;A的内容减1 MOV R0,A ;暂存结果于R0 ANL A,#0FH ;取个位 MOV R1,A ;存于R1 MOV A,R0 ;暂存结果传回A ANL A,#0F0H ;取十位 MOV R2,A ;存于R2 MOV A,P1 ;把P1内容给A SUBB A,#00H ;A减去低位的借位 MOV R0,A ;暂存结果 ANL A,#0FH ;取百位 MOV R3,A ;存于R3 MOV A,R0 ;暂存结果传回A ANL A,#0F0H ;取千位 MOV R4,A ;存于R4 CJNE R1,#0FH,L1 ;个位不为0FH,转L1 MOV R1,#09H ;个位为0FH,直接变为09H L1: CJNE R2,#0F0H,L2 ;十位不为F0H,转L1 MOV R2,#90H ;十位为F0H,直接变为90H L2: CJNE R3,#0FH,L3 ;百位不为0FH,转L1 MOV R3,#09H ;百位为0FH,直接变为09H L3: CJNE R4,#0F0H,L4 ;千位不为F0H,转L1 MOV R4,#90H ;千位为F0H,直接变为90H L4: MOV A,R1 ;个位给A ADD A,R2 ;十位个位相加 MOV P2,A ;结果传回P2 MOV A,R3 ;百位给A ADD A,R4 ;百位千位相加 MOV P1,A ;结果传回P1 SJMP START ;继续减1计数 .3) 程序的测试结果如下:(由于两种思路的测试结果相同,这里就第2种思路进行结果测试)。 3.1加1计数: 取几个状态刷新一瞬时的结果,如下所示: 由以上的运行结果可看出:计数器从0099到0100完成状态转换,时间为1.000003秒定时误差为3us,定时准确度比较高。 3.2减1计数如下: 由运行结果可知:以上为从0100减1到0099状态的转换,用时1.00001550秒定时误差为15.5us,定时误差较加1计数大些。4 实验的思考题:1 实现多分支结构程序的主要方法有哪些?举例说明。答:方法主要是分支表法,分支表发又分为:分支地址表法,转移指令表法,地址偏移量表法,现针对一个例子分别用三种方法:例子如下:根据R1的值,控制程序转向8个分支程序1) 分支地址表法:思路就是先把分支地址表的表首地址给DPTR,再通过R1的值得出要跳转到的 程序的首地址在分支地址表中的位置,把要跳转到的地址给DPTR,再把A清 零,再用指令JMP A+DPTR转向分支地址,具体程序如下: MOV DPTR,#TABLE ;取表首地址 MOV A,R1 ADD A,R1 ;R1加倍,给A JNC LOOP ;无进位,直接转LOOP INC DPH ;有进位,则DPTR的高8位加1 LOOP: MOV R2,A ;暂存A MOVC A,A+DPTR ;取分支地址的高8位给A MOV R3,A ;存地址 MOV A,R2 ;回复A INC A MOVC A,A+DPTR ;取分支地址的低8位给A MOV DPL,A ;分支地址低位给DPL MOV DPH,R3 ;分支地址高位给DPH CLR A JMP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鱼塘土方开挖施工方案
- 蚌埠九年级二模数学试卷
- 2025年高性能纤维超细纤维项目建议书
- 灞桥工程铁艺花箱施工方案
- 2025年柔印CTP项目发展计划
- 马凳筋专项施工方案
- 渠道预制板衬砌施工方案
- 多重发展模式在林业高效种植中的应用价值及实现路径探讨
- 基本医疗卫生服务面临的主要问题
- 流动式起重机分解组塔施工方案
- 煤矿防治水中长期规划2017—2019
- 2022年乡镇(街道)执法人员资格考试题库(含答案)
- 新版广西大学毕业设计封面
- 幼儿园一日生活中的保教结合(课堂PPT)
- 有害物质培训教材(ROHS2.0及REACH)
- 基于深度学习的图像压缩感知算法综述
- 德语A1单词表
- ARL4460 OXSAS曲线制作及学习笔记
- 主板维修思路分析
- 高三地理二轮专题河流特征
- Unit__A_View_of_Mountains
评论
0/150
提交评论