单片机第二次作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附录1 实验报告格式要求
《微机实验》报告
实验名称 分支程序设计实验 专业班级
一、任务要求
1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。
240/2204020X X Y X X X
X ⎧≥⎪=<<⎨⎪≤⎩当当当
2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值别离通过P0、P 一、P2端口输出(以紧缩BCD 码的形式)。
P
3.0为低电平常开始计时,为高电平常停止计时。
二、设计思路
1. 可知此实验要求依照不同的值进行不同的运算,因此需要利用分支程序。
X 处于不同的范围,有不同的运算,可知应该先判定其与20的大小,再判定其与40的大小。
于是需要用到CJNE 指令和JNC 判定C 指令 。
并由此进行不同的运算,即可完成程序目的。
2.制作一个1s 的延时,并将其循环60次,并将其存入P0,作为秒的计时。
再来一个外层循环,将其循环60次,并存入P1,作为分计时,最后再加一个外循环,使其循环24次,并存入P2,作为时的计时。
开始计时的操纵可由JB 语句来实现
三、资源分派
1.将30H 作为外部RAM 的地址,并将A 的结果存入该RAM 中。
2.将R3,R4,R5,R6,R7作为临时放置数据的中间量,将秒,分,时的结果存入P0,P1,P2.
四、流程图
五、源代码(含文件头说明、资源利用说明、语句行注释)
1.File name: task2-1.asm
Description:
240
/22040
20
X X
Y X X
X X
⎧≥
⎪
=<<
⎨
⎪
≤
⎩
当
当
当
Date: 10/15/2020
Designed by: 刘珍
Source used: R0,30H
ORG 1000H
MOV R0,30H
MOVX A,@R0
CJNE A,#20,STEP1 ;X≠20,转STEP1
L1: CPL A ;X=20,计算/X
SJMP DONE
STEP1: JNC STEP2 ;C=0,X>20,转STEP2 SJMP L1 ;C=1,X<20,转L1
STEP2: CJNE A,#40,STEP3 ;X≠40,转STEP3
L2: CLR C ;X=40,计算X*X
ADDC A,@R0
SJMP DONE
STEP3: JNC L2 ;C=0,X>40,转L2
CLR C ;C=1,20<X<40,计算X/2
MOV B,#2H
DIV AB
DONE: MOVX @R0,A
SJMP $
END
2. File name: task2-2.asm
Description: 计时器,通过P0/P1/P2输出,通过P3.0操纵。
Date: 10/15/2020
Designed by: 刘珍
Source used: R3,R4,R5,R6,R7 临时放置数据的中间量
P0,P1,P2 寄存秒,分,时
ORG 0000H
MOV P0,#0H
MOV P1,#0H
MOV P2,#0H
MOV R3,#60
MOV R4,#60
MOV R5,#24H
MOV R6,#0H
MOV R7,#0H
CLR C
MOV P3.0,C
JB P3.0,DONE
DELAY: MOV R2,#50 ;置循环次数DELAY3: MOV R0,#20
DELAY2: MOV R1,#250
DELAY1: NOP
NOP
DJNZ R1,DELAY1 ;构架三重循环
DJNZ R0,DELAY2
DJNZ R2,DELAY3
INC A ;记录“秒”的次数
AJMP BCD ;转化为BCD
CLR C
DA A
MOV P0,A ;通过P0输出秒
DJNZ R3,DELAY ;置秒循环60次
MOV R3,#60 ;恢复秒的循环次数
MOV A,R7
INC A ;记录分的循环次数
AJMP BCD ;转化为BCD
CLR C
DA A
MOV R7,A ;保存分的循环次数
MOV P1,#0FFH ;读数的预操作
MOV P1,A ;输出分
MOV P0,#0H ;清零,保证下一轮循环
CLR A
DJNZ R4,DELAY ;置分循环60次
MOV R4,#60
MOV R7,#0H
MOV A,R6
AJMP BCD ;转化为BCD
INC A ;记录分的循环次数
CLR C
DA A
AJMP BCD ;转化为BCD
MOV R6,A ;保存分的循环次数
MOV P2,#0FFH
MOV P2,A
MOV P0,#0H
MOV P1,#0FFH
MOV P1,#0H
CLR A ;清零,保证下一轮循环
DJNZ R5,DELAY ;置时循环24次DONE: SJMP $
END
六、程序测试方式与结果、软件性能分析实验一:赋值1,所取得的结果
实验二:
七、试探题
1.实现多分支结构程序的要紧方式有哪些?举例说明。
答:要紧方式有:①分支地址表
如:BRATAB: DW SUBRO
DW SUBR1
DW SUBR2
②转移地址表
如:JMPTAB: AJMP SUBR0
AJMP SUBR1
AJMP SUBR2
③地址偏移量表
如:DISTAB: DB SUBRO-DISTAB
DB SUBR1-DISTAB
DB SUBR3-DISTAB
2.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?如何用十进制加法指令实现减1计数?
答:十六进制加一直接用INC加一,十进制加一时需先判定该位上是不是是9,假设是那么清零。
八、心得与体会
这一次的编程,第一个程序还算比较顺利,第二个因为关于延时程序不是专门了解,因此实在花了很多功夫。
一遍又一遍地看书,计算,调试,最后才终于做出来。
阳光明媚的周末就如此被程序给占据了。
此刻才真正体会到,想要编出一个程序来,扎实的基础知识是必不可少的。
因此,下次编程,得认真看看书,现有理论,而后实践,这才是学习知识最为简单的进程。