分支程序设计试验.doc

上传人:scccc 文档编号:12037403 上传时间:2021-12-01 格式:DOC 页数:12 大小:383.50KB
返回 下载 相关 举报
分支程序设计试验.doc_第1页
第1页 / 共12页
分支程序设计试验.doc_第2页
第2页 / 共12页
分支程序设计试验.doc_第3页
第3页 / 共12页
分支程序设计试验.doc_第4页
第4页 / 共12页
分支程序设计试验.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《分支程序设计试验.doc》由会员分享,可在线阅读,更多相关《分支程序设计试验.doc(12页珍藏版)》请在三一文库上搜索。

1、WORD格式整理单片机实验报告实验名称分支程序设计实验指导教师刘冬生专业班级电子1103班姓名 XXXXXX学号 XXXXXXXXXXX联系方式 XXXXXXXXXXX专业知识分享一、任务要求熟练掌握KeilC环境下汇编语言程序的调试方法, 加深对汇编语言指令、 机器码、寻址 方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行10 口的使用1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果 Y也存于外部RAM 单元,请按要求编写程序。2当 X 3 40Y = X/2 当20 : X : 40X 当X兰202. 利用51系列单片机设计一个 24小时制电子时

2、钟,电子时钟的时、分、秒数值分别 通过P0、P1、P2端口输出(以压缩 BCD码的形式)。P3.0为低电平时开始计时,为高电平 时停止计时。提高部分(选做):a.实现4位十进制加、减1计数,千位、百位由P1 口输出;十位、个位由 P2 口输出。 利用P3.7状态选择加、减计数方式。b. 利用P3 口低四位状态控制开始和停止计数,控制方式自定。思考题:1 实现多分支结构程序的主要方法有哪些?举例说明。2 在编程上,十进制加 1计数器与十六进制加 1计数器的区别是什么?怎样用十进制 加法指令实现减1计数?二、设计思路1. 分段函数设计第一个任务相当于一个分段函数程序,根据变量X的值所处的区间进行相

3、应的计算。可利用比较转移指令 CJNE来判断X是否等于临界值 20、40,若不等,再根据执行 CJNE指令 后的进位位CY的值来判断X与临界值的的大小关系,易知CY=0则X大于临界值,CY=1则X 小于临界值;如此,再进行相应的计算。另外若乘方运算结果大于255,高八位与低八位应分开存储;本次除法采用右移一位来处理,未考虑余数。2. 24小时制时钟程序首先构建一个三重循环实现“一秒延时”,循环体利用NOP指令(单字节指令,1卩s)经多次循环达到延时一秒的效果。再利用已经构建好的“一秒延时”部分,设计计时系统:秒(0-59 )、分(0-59 )、时(0-23 )。需要注意的是,在小时、分、秒达到

4、59时,下一次应该为零。程序运行时修改P3.0的值可以实现暂停和继续的功能。三、资源分配1. 分段函数假设该8位无符号数的地址 2000H分配给它,把片外地址2001H和2002H分配给经 分段函数计算得到的结果丫。按位取反计算结果存于2001H单元,乘方计算中结果的高、低八位分开存储于 2001H-2002H单元,除法运算结果放在 2001H中。寄存器A,B存放在乘除运 算中所得的中间结果。2. 二十四小时制时钟工作寄存器R0 R1、R2分别用于秒、分、时循环次数的计数,R5-R7用于“一秒延时”循环中的循环次数设定。秒、分、时数值分别由P2、P1、P0端口输出。四、流程图1. 分段函数2.

5、二十四小时制时钟语句行注释)清零取外部数据与20比较大小与40比较大小平方除以2 (右移一位)五、源代码(含文件头说明、资源使用说明、1.分段函数clr c;mov dptr ,#2000h;movx a ,dptr/mov a ,#1hcjne a,#14h ,cmp20;qufan:cpl a;inc dptrmovx dptr ,asjmp jieshucmp20: jc qufancjne a ,#28h , cmp40;sq: mov r7, a;mov b , r7mul abinc dptrmovx dptr ,amov a, binc dptrmovx dptr ,asjmp

6、jieshucmp40: jnc sqchu2:rr a;inc dptrmovx dptr ,asjmp jieshujieshu: nopend2. 二十四小时制时钟start: mov rO,#O1h;寄存器初始化mov r1,#O1hmov r2,#01hmov pO ,#00h; 端口初始化mov pl ,#00hmov p2 ,#00hmov a ,#0/setb p3.0;设置、判断 p3.0clr p3.0jb p3.0,$on esec:mov r7 , #10;1 秒延时del1:mov r6 ,#200nopdel2:mov r5,#248del3:djnz r5 ,de

7、l3djnz r6 ,del2djnz r7 ,del1mov p2 ,r2; 把秒数送入p2mov a,r2add a,#01hda amov r2 ,acjne r2 ,#60h ,onesec; 判断r2是否计到60,跳转on emi n:mov r2 ,#01h; 把r2,p2初始化,开始分钟计数mov p2 ,#00hmov pl ,r1mov a ,r1add a ,#01hda amov r1 ,acjne r1 ,#60h, on esec判断r1是否计到60,跳转hour:mov r2 ,#01hmov p2 ,#00hmov r1 ,#01hmov p1 ,#00hmov

8、p0 ,r0mov a ,r0add a ,#01h da a把r2,p2,r1,p1初始化,开始小时计数mov r0 ,acjne r0 ,#24h ,on esecsjmp startend判断r0是否计到24,跳转六、程序测试方法与结果、软件性能分析1.分段函数X=01HX:0x002090:01FE0000QQ0000000000000000DO000000QO00QD000000X:0x002017:000000DO00 000DO00000G0000aa0OQ0000000000X:0xO0202E:00000000000000000000000000DO000000oa00DO0

9、0oo00X:OxOO2O45:00000000000000DO00000000000000OQ00000000000000X:Dx00205C:oa000000000000DO00000000000000DO000000DO00DO00X:0x002073:0000000000DO00DO000000000000DO000000000000X:0xOO2O6A:00000000 Q00QQ00as00QQ0QQDOQQ0QQDOQQ0QQ000Xt0x0020A1:0000000000000000000000000000oo000000000000QOAddress: |XCW00&

10、Stade 11 Louis1 | 0 Merncjiyl (QsymbcilsX=1EHdess:网面丽-0JXXXXXXXX0x0020000x002017OxOO2O2E0x0020450x00205C 0x002073Dx0020eA0x002 0A1IE OF000!00000000000000000000000000000000000000000 000000000-0000000DO00DO00DO000000DO00DO00DO0000 QQ000-0000000000Q00000000000000QQ00QQDOQQDO0000 00000000000000000000000

11、0OG00000000'0000'000000oo aoaooooooooo000000000000do000000do00do00000000 00000000000G0000000000000000000000000000000000 00000000000Q0000000000000000Q0000000Q000000000 00Q00000000000000000000000oa0000000000000000.jII Stock Locals 扉 rmh 1 Memoq' 1 1X=31HX0x002000316109000020000000000000000

12、000000000000000000X0x0020170000000000000000000-0000000DO00DO000000DO00DO00X0X0Q2Q2E 000QQ000000Q0000000Q000000 00 00000 00 0X0x00204500000000000000000000000000oa00DO000000DO00DO00X;XO02O5C00:J00000000:<000000:<0000::0000000000DO00DO00X0x002030000000000000000000000000G00000000000000000000XOX002

13、0BA00000000000000000000000000000000000000DO00DO00X0x002 0A10000sc00J:000000J?0000000000 Q000000? ?:: 000J JSts匚k JglLciiiilsWatch 1 | 二 Memory 1 I QgSinnlDoh功能分析:该程序可正常执行要求的3项功能2. 二十四小时制时钟Parallel Port 0XParallel Port 1| X,Parallel Port 2XParallel Port 3XPort 0P0: OhOOPins: |0x007 Bits 0nTTTTTT厂厂厂厂厂

14、厂厂厂Port 1P1: |0x18Pins: 0x181 Bits 0厂厂厂”应厂厂厂厂厂厂1717厂厂厂Port 2P2: SiePins: OkIS7 Bits 0rn叶厂厂厂rTTwrrrPort 3P3: OkFEPins: OkFE1 Bits 071717171717 |7r叶叶叶“厂Parallel Port 0Parallel Port 1X,Parallel Port 2|X,Parallel Port 3|X|Port 0P0: 10x01Pins: 0x007 Bits 0厂厂厂厂厂厂厂”rrrrrrrrPortlP1: |0x107 Bits 0I I I PI I

15、I Ipins: | oxio rmrmPort 2P2: 10x00Pins: 0x001 Bits 0厂厂厂厂厂厂厂厂rrrrrrrrPort 3P3: OwFEPins:7 Bits 0"叶叶叶厂功能分析:该程序运行后可按正确的二十四小时制时钟进行计时,程序功能完整可靠。【思考题】实现多分支结构程序的主要方法有哪些?举例说明。答:一是利用条件转移指令实现,如DJNZ, JNC等等,二是利用分支表来实现,如分支地址表、转移指令表、地址偏移量表。在编程上,十进制加1计数器与十六进制加 1计数器的区别是什么?怎样用十进制加法指令实现减1计数?答:十进制加一后需要在计算结果的基础上进行修正,运用DA指令,而十六进制加一指令所得结果即为最终结果,无需进行修正。用十进制加法指令实现减1计数,可通过以下代码实现:ADD A ,#63HDAA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1