华中科大光电学院微机实验报告二分支程序设计.docx
- 文档编号:5134655
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:8
- 大小:131.30KB
华中科大光电学院微机实验报告二分支程序设计.docx
《华中科大光电学院微机实验报告二分支程序设计.docx》由会员分享,可在线阅读,更多相关《华中科大光电学院微机实验报告二分支程序设计.docx(8页珍藏版)》请在冰豆网上搜索。
华中科大光电学院微机实验报告二分支程序设计
实验名称分支程序设计实验
指导教师XXX
专业班级光信XXXX班
姓名XX
学号UXXXXXXXXX
联系方式Tel:
XXXXXXXXX
2012-10-10
【任务要求】
熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO口的使用。
1.设有8bits无符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写程序。
2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。
为低电平时开始计时,为高电平时停止计时。
【设计思路】
1、分段函数
根据变量X的值所处的区间进行相应的计算,可利用比较转移指令CJNE来判断X是否等于临界值(20,40),再根据执行CJNE指令后进位位CY的值来判断X与临界值的的大小关系(CY=0则X大于临界值,CY=1则X小于临界值),如此,再进行相应计算。
另外,除法计算可能产生余数,商和余数分开存储,乘方运算结果大于255,高八位与低八位分开存储。
2、二十四小时制电子时钟
此程序须构建两部分循环。
首先构建一个三重循环实现“一秒延时”,循环体利用NOP指令(单字节指令,1µs)调节延时时间。
再利用“一秒延时”,构建计时系统的三重循环,秒(0~59)、分(0~59)、时(0~23)。
此外,在计时至23:
59:
59时,返回至00:
00:
00,程序运行时修改的值可以实现暂停和继续的功能(利用JB指令进行判断和跳转)。
【流程图】
1、分段函数
2、二十四小时制电子时钟
【资源分配】
1、分段函数
寄存器DPTR用作数据指针。
变量X的值存于片外RAM的3000H单元,计算结果存于片外RAM的3001H~3002H单元,按位取反计算结果存于3001H单元,而除法计算结果的商与余数和乘方计算中结果的高、低八位分开存储于3001H~3002H单元。
2、二十四小时制电子时钟
工作寄存器R0、R1、R2分别用于秒、分、时循环次数的设定,R3、R4分别用于分与时的循环计数,R5~R7用于“一秒延时”中三重循环的循环次数设定。
秒、分、时数值分别由P0、P1、P2端口输出。
【源代码】
1、分段函数
ORG0000H
LJMP1000H
ORG1000H
MOVA,#30H;X赋值
MOVDPTR,#3000H
MOVX@DPTR,A;存X于片外RAM
CLRC
JUDGE1:
CJNEA,#14H,JUDGE2;X≠20,跳转至JUDGE2
ACCOUNT1:
CPLA;X≤20,计算Y,存于片外RAM
MOVDPTR,#3001H
MOVX@DPTR,A
SJMPDONE
JUDGE2:
JNCJUDGE3;C=0,则X>20,跳转至JUDGE3
SJMPACCOUNT1;C=1,则X<20,跳转至ACCOUNT1
JUDGE3:
CLRC
CJNEA,#28H,JUDGE4;X≠40,跳转至JUDGE4
ACCOUNT2:
MOVB,A;X≥40,计算Y,存于片外RAM,高、低八位分开
MULAB
MOVDPTR,#3001H
MOVX@DPTR,A
MOVDPTR,#3002H
MOVA,B
MOVX@DPTR,A;高、低八位分开储存
SJMPDONE
JUDGE4:
JNCACCOUNT2;C=0,X>40,跳转至ACCOUNT2
SJMPACCOUNT3;C=1,20 ACCOUNT3: MOVB,#02H;20 DIVAB MOVDPTR,#3001H MOVX@DPTR,A MOVDPTR,#3002H MOVA,B MOVX@DPTR,A;商、余数分开储存 SJMPDONE DONE: SJMP$ END 2、二十四小时制电子时钟 ORG0000H LJMP2000H ORG2000H MOVP0,#00H;输出端口初始化 MOVP1,#00H MOVP2,#00H MOVR0,#3BH;计时循环次数赋值 MOVR1,#3BH MOVR2,#18H MOVR3,#00H;“分循环”计数 MOVR4,#00H;“时循环”计数 CLRC CLRA MOV,C VOL: JB,PAUSE;暂停功能跳转入口 VOL1: MOVR5,#0AH;“一秒延时”循环次数赋值 VOL2: MOVR6,#64H VOL3: MOVR7,#0FAH DELAY: NOP;“一秒延时” NOP DJNZR7,DELAY DJNZR6,VOL3 DJNZR5,VOL2;“一秒延时”结束 INCA;“秒”数加1 DAA MOVP0,A;通过P0输出“秒”数 DJNZR0,VOL;“秒循环”60次 MOVR0,#3BH;“秒循环”循环次数复位 CLRA INCR3 MOVA,R3;“分”数加1 DAA MOVR3,A;保存“分”的循环次数 MOVP1,#0FFH MOVP1,R3;通过P1输出“分”数 MOVP0,#00H CLRA DJNZR1,VOL MOVR1,#3BH MOVR3,#00H CLRA INCR4 MOVA,R4 DAA MOVR4,A;保存“时”的循环次数 MOVP2,#0FFH MOVP2,R4;通过P2输出“时”数 MOVP0,#00H MOVP1,#00H CLRA DJNZR2,VOL MOVR4,#00H MOVP2,#00H SJMPVOL;时钟计时满二十四小时,跳转至初始时刻 PAUSE: JB,PAUSE;暂停功能模块 SJMPVOL END 【程序测试方法与结果、软件性能分析】 1、分段函数 截图: X=16: X=32: X=48: 2、二十四小时制电子时钟 截图: 计时状态 暂停状态 功能分析: 该程序运行后可按正确的二十四小时制时钟进行计时,并通过手动修改 的值来控制暂停与否。 程序功能完整可靠。 【思考题】 ●实现多分支结构程序的主要方法有哪些举例说明。 答: 一是利用条件转移指令实现,如DJNZ,JNC等等,二是利用分支表来实现,如分支地址表、转移指令表、地址偏移量表。 ●在编程上,十进制加1计数器与十六进制加1计数器的区别是什么怎样用十进制加法指令实现减1计数 答: 十进制加一后需要在计算结果的基础上进行修正,运用DA指令,而十六进制加一指令所得结果即为最终结果,无需进行修正。 用十进制加法指令实现减1计数,可通过以下代码实现: …… ADDA,#63H DAA ……
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中 光电 学院 微机 实验 报告 二分 程序设计