华中科技大学单片机实验二报告文档格式.docx
- 文档编号:8078424
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:17
- 大小:226.96KB
华中科技大学单片机实验二报告文档格式.docx
《华中科技大学单片机实验二报告文档格式.docx》由会员分享,可在线阅读,更多相关《华中科技大学单片机实验二报告文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
我们可利用比较转移指令CJNE来判断X是否等于临界值20,40,若不等,再根据执行CJNE指令后的进位位CY的值来判断X与临界值的的大小关系,如:
CY=0则X大于临界值,CY=1则X小于临界值;
然后根据X的值所在的区间进行相应的计算。
应该注意的是,除法计算中可能产生余数,商和余数应该分开存储,若乘方运算结果大于255,高八位与低八位应分开存储
2.24进制时钟
本程序须可以构建两部分循环。
首先构建一个三重循环实现“一秒延时”,循环体利用NOP指令(单字节指令,1µ
s)经多次循环达到延时一秒的效果。
再利用已经构建好的“一秒延时”部分,设计计时系统的三重循环,秒(0-59)、分(0-59)、时(0-23)。
秒和分计60次,小时计24次,但,是从0开始计,所以在分、秒达到59,小时达到23时,下一次应该为零。
程序运行时修改P3.0的值可以实现暂停和继续的功能
三.资源分配
1.分段函数
根据题目的条件,首先,设该8位无符号数为30H,把片外地址4000H分配给它,把片外地址4001H和4002H分配给经分段函数计算得到的结果Y。
按位取反计算结果存于4001H单元,而除法计算结果的商与余数和乘方计算中结果的高、低八位分开存储于4001H-4002H单元。
用寄存器A,B来存放在乘除运算中所得的中间结果。
2.二十四进制时钟
工作寄存器R0、R1、R2分别用于秒、分、时循环次数的设定,R3、R4分别用于分与时的循环计数,R5-R7用于“一秒延时”中三重循环的循环次数设定。
秒、分、时数值分别由P2、P1、P0端口输出。
四.流程图
N
Y
N
NY
YN
NY
五.源代码
1.分段函数
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#29H;
将8位无符号数赋给A
MOVDPTR,#4000H;
定义数据指针
MOVXDPTR,A;
将X存于片外RAM
CLRC;
将进位位清零
KIND1:
CJNEA,#14H,KIND2;
将A与14H比较,若不等于14H,跳转至KIND2
OUT1:
CPLA;
对A中容取反
MOVDPTR,#4001H;
将计算结果存于片外地址4001H
SJMPDONE
KIND2:
JNCKIND3;
判断进位位CY是否为0,若为0,跳转至KIND3
SJMPOUT1;
否则跳转至OUT1
KIND3:
CLRC;
CJNEA,#28H,KIND4;
将A中容与28H比较,若不等于28H,跳转至KIND4
OUT2:
MOVB,A;
将A中容赋给B
MULAB;
计算X的平方,将结果高八位存于B,低八位存于A
MOVXDPTR,A;
将结果低八位存于片外地址4001H
INCDPTR;
数据指针加一
MOVA,B;
将B中容赋给A
将结果高八位存于片外地址4002H
KIND4:
JNCOUT2;
判断进位位是否为0,若为0,跳转至OUT2
SJMPOUT3;
否则跳转至OUT3
OUT3:
MOVB,#02H
DIVAB;
计算X/2,将商存于A,余数存于B
MOVDPTR,#4001H;
将商存于片外地址4001H
数据指针加1
MOVA,B
将余数存于片外地址4002H
DONE:
SJMP$
END
2.24小时时钟
ORG0000H
LJMPMAIN
ORG0100H
MOVR0,#00H
MOVP0,#00H;
时钟位清零
MOVP1,#00H;
分钟位清零
MOVP2,#00H;
秒钟位清零
START:
P3.0,START;
P3.0为低电平开始计数,高电平停止计数
MOVR2,P2;
P2的值存入R2
CJNER2,#60H,DEL;
秒钟达到60继续,不足60跳转
MOVP2,#00H;
秒钟清零
MOVA,P1
ADDA,#01H;
分钟位加1
DAA;
分钟位改为BCD码
MOVP1,A
MOVR1,P1;
P1的值存入寄存器R1
CJNER1,#60H,DEL;
分钟达到60继续,不足60跳转
MOVP1,#00H;
分钟清零
MOVA,R0
ADDA,#01H;
时钟位加1
时钟位改为BCD码
MOVR0,A
MOVP0,A
CJNER0,#24H,DEL;
时钟达到24继续,不足24跳转
MOVR0,#00H
DEL:
MOVR7,#24;
延时程序
LOOP1:
MOVR6,#61
LOOP2:
MOVR5,#170
LOOP3:
NOP
NOP
DJNZR5,LOOP3
DJNZR6,LOOP2
DJNZR7,LOOP1
MOVA,P2
秒钟位加1
DAA
MOVP2,A
SJMPSTART
END
六.程序测试方法与结果、软件性能分析
1.分段函数
改变X的值,分别在不同的X值时运行程序,结果如下截图
(1)X=29H
(2)X=21H
(3)X=0CH
结果与预测相符合,程序正确。
2.24小时时钟程序
暂停时
思考题:
1.实现多分支结构程序的主要方法有哪些?
举例说明。
答:
1.是利用条件转移指令实现,如DJNZ,JNC等等
例如:
例如,判断两个单字节无符号数的大小(分别存于片RAM的40H和41H单元)并把大数存入42H单元。
可以用判断CY的转移指令JNC来实现,程序如下:
JUDGE:
MOVA,40H
CLRC
SUBBA,41H
JNCLP
MOV42H,41H
RET
LP:
MOV42H,40H
2.利用分支表来实现,如分支地址表、转移指令表、地址偏移量表。
例如:
根据R3的值控制转向8个分支程序。
采用分支地址表实现:
MOVDPTR,#BRATAB;
取表首地址
MOVA,R3
ADDA,R3;
A←R3×
2
JNCNADD
INCDPH;
R3×
2进位加到DPH
NADD:
MOVA,R4;
暂存A
MOVCA,A+DPTR;
取分支地址高8位
XCHA,R4
INCA
取分支地址低8位
MOVDPL,A;
分支地址低8位送DPL
MOVDPH,R4;
分支地址高8位送DPH
CLRA
JMPA+DPTR;
转相应分支程序
BRATAB:
DWSUBR0;
分支地址表
DWSUBR
DWSUBR7
2.在编程上,十进制加1计数器与十六进制加1计数器的区别是什么?
怎样用十进制加法指令实现减1计数?
十进制加一后需要在计算结果的基础上进行修正,运用DA指令,而十六进制加一指令所得结果即为最终结果,无需进行修正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中科技大学 单片机 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)