哈工大 单片机第一次试验报告Word格式文档下载.docx
《哈工大 单片机第一次试验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《哈工大 单片机第一次试验报告Word格式文档下载.docx(52页珍藏版)》请在冰点文库上搜索。
![哈工大 单片机第一次试验报告Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/cd3840c1-74ef-48d8-bc0c-fbfa74b9e707/cd3840c1-74ef-48d8-bc0c-fbfa74b9e7071.gif)
SJMP$
END
实验二 拆字程序
掌握汇编语言设计和调试方法。
把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。
三、程序流程
四、实验步骤
⑵在“P.”状态下键入0660,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
在与PC联机状态下,编译、连接、下载PH51\se02.asm,用连续或单步方式运行程序。
⑴在单步运行时每走一步可观察其运行结果。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2000~2002h中内容变化情况。
运行程序前2000H中内容为34,运行程序后2001H中内容为03,2002H中内容为04.
如果将2001h、2002h高位置1,将源程序中的ANLA,#0FH语句改为ORLA,#0F0H
六实验源程序
ORG0000;
MOVDPTR,#2000H;
MOVXA,@DPTR;
ANLA,#0FH;
MOVR1,A;
SWAPA;
INCDPTR;
MOVX@DPTR,A;
MOVA,R1;
END;
实验三 拼字程序
进一步掌握汇编语言设计和调试方法。
把2000h、2001h的低位分别送入2002h高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。
⑴在“P.”状态下按"
0→EV/UN"
,装载实验所需的代码程序。
⑵在“P.”状态下键入0680,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
在与PC联机状态下,编译、连接、下载PH51\se03.asm,用连续或单步方式运行程序。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2002h内容变化情况。
运行程序后2002h的最终内容是2B.
ORG0000H;
ORLA,R1;
实验四 数据区传送子程序
掌握RAM中的数据操作。
把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。
⑵在“P.”状态下键入07B0,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
在与PC联机状态下,编译、连接、下载PH51\se04.asm,用连续或单步方式运行程序。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键检查由R4、R5所定义的目的地址单元。
R2、R3所定义的目的地址单元内容是20、00.
R4、R5所定义的目的地址单元内容是20、90.
R6、R7所定义的目的地址单元内容是00、00.
ORG07B0H
MOVR2,#20H
MOVR3,#00H
MOVR4,#20H
MOVR5,#90H
MOVR6,#00H
MOVR7,#00H
START:
CLRC
MOVDPL,R3
MOVDPH,R2;
建立源程序首址
MOVXA,@DPTR;
取数
MOVDPL,R5
MOVDPH,R4;
目的地首址
INCR3;
源地址加1
MOVA,R2
ACALLADB
MOVR2,A
INCR5;
目的地址加1
MOVA,R4
MOVR4,A
INCR7;
转移数加1
MOVA,R6
MOVR6,A
CJNER6,#00H,START
CJNER7,#2FH,START
ADB:
ADDCA,#00H
RET
实验六 查找相同数个数
熟悉汇编语言编程。
在2000~200Fh中查出有几个字节是零,把个数放在2100h中。
⑵在2000~200Fh的若干单元中填入零
⑶在“P.”状态下键入0AA0,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
在与PC联机状态下,编译、连接、下载PH51\se06.asm,用连续或单步方式运行程序。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2100h中是几个单元数。
如需查找0FF,则需在源程序JNZ LOOP前增加语句CLP A.
ORG2000H;
MOVR0,#0FH;
MOVR1,#00H;
MOVDPTR,#2000H;
JNZLOOP;
INCR1;
DJNZR0,START;
MOVA,R1;
MOVDPTR,#2100H;
MOVX@DPTR,A;
实验七 无符号双字节快速乘法子程序
掌握MCS-51汇编语言程序设计方法。
将(R2R3)和(R6R7)中双字节无符号整数相乘,积送R4R5R6R7中。
⑵对R2、R3所定义的源地址单元从首址开始输入无符号整数。
⑶在“P.”状态下键入0970,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
在与PC联机状态下,编译、连接、下载PH51\se07.asm,用连续或单步方式运行程序。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键检查R4R5R6R7中内容。
寄存器R2、R3、R6、R7分别输入01、21、02、22,运行程序,R6、R7中的内容是68、62
结果已经过验证。
六实验源程序
ORG0000H
MOVR2,#01H
MOVR3,#21H
MOVR6,#02H
MOVR7,#22H
MOVA,R3
MOVB,R7
MULAB
XCHA,R7
MOVR5,B
MOVB,R2
ADDA,R5
MOVR4,A
CLRA
ADDCA,B
MOVR5,A
MOVA,R6
MOVB,R3
ADDA,R4
XCHA,R6
XCHA,B
ADDCA,R5
MOVF0,C
MOVA,R2
MOVACC.0,C
MOVC,F0
SJMP$
END
实验八 多分支程序
掌握汇编语言的编程。
编写程序,根据送入的数据转移运行。
⑵在20H中分次送入00、01、02、03。
⑶在“P.”状态下键入0A10,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
在与PC联机状态下,编译、连接、下载PH51\se08.asm,用连续或单步方式运行程序。
(1)在单步运行时每走一步可观察其运行结果。
(2)在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后观察每次运行程序后,数码管上数字循环情况。
五实验结果及分析
循环变慢改变延时子程序
DELAY:
MOVR5,#0FFH
LP0:
MOVR6,#0FFH
LP1:
NOP
NOP
DJNZR6,LP1
DJNZR5,LP0
RET
变为四字循环程序改为:
LOOP0:
MOV20H,#0C0H;
0字循环
LJMPSOX0
LOOP1:
MOV20H,#0F9H;
1字循环
LOOP2:
MOV20H,#0A4H;
2字循环
LOOP3:
MOV20H,#0B0H;
3字循环
LJMPSOX0
MOV20H,#099H;
4字循环
MAIN:
MOV20H,#00H
MOVA,20H
MOVDPTR,#SZ;
散转首址
RLA;
(20)*2
JMP@A+DPTR;
转到(20)*2+DPTR
SZ:
AJMPLOOP0
AJMPLOOP1
AJMPLOOP2
AJMPLOOP3
SOX0:
MOVR0,#0DCH
MOVR1,#0DDH
MOVX@R0,A
MOVA,#01H
SOX1:
MOVX@R1,A
LCALLDELY
显示子程序
SJMPSOX1
DELY:
MOVR5,#1AH
MOVR6,#7DH
实验十 电脑时钟(定时器、中断器综合实验)
熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用实时程序的设计与调试技巧。
编写程序,从本实验系统键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。
⑵在“P.”状态下键入0030,然后按“EXEC”进入该实验项目的运行。
在与PC联机状态下,编译、连接、下载PH51\se10.asm,用连续方式运行该程序。
3、在键盘上输入时间初值,按执行键EXEC执行,数码管上实时显示时间值。
4、按“暂停图标”或实验箱上的“暂停按钮”,系统无条件退出该程序运行返回监控状态。
修改程序使定时器工作方式改变(实现12小时制)
将语句CJNEA,#24H,DONE改为CJNEA,#12H,DONE
六 实验源程序
SJMPCHK00
ORG000BH
LJMPCLOCK;
INT_T0
ORG0030H
CHK00:
MOVSP,#60H
LCALLLEDP
CHK0:
LCALLLCK0;
键扫,显示子程序
LCALLPTDS0;
显示缓冲区放数子程序
MOVTMOD,#01H
ORLIE,#10000010b;
EA=1,IT0=1
MOVTL0,#0
MOVTH0,#4ch;
定时中断初始化
MOV23H,#00H
SETBTR0;
开定时
LOO5:
LCALLDIS;
SSEE;
显示
LCALLPTDS0
SJMPLOO5
PTDS0:
MOVR0,#79H
MOVA,22H
ACALLPTDS
MOVA,21H
;
---------------------------------------
PTDS:
MOVR1,A;
拆送显示缓冲区
ACALLPTDS1
MOVA,R1
SWAPA
PTDS1:
ANLA,#0FH
MOV@R0,A
CLOCK:
MOVTL0,#0B7H
MOVTH0,#3CH;
恢复初值
PUSHPSW
PUSHACC
SETB0D3H;
保护
INC23H;
0.1秒加1
MOVA,23H
CJNEA,#20,DONE;
1秒到吗?
MOV23H,#00H;
清0.1秒单元
INCA;
秒加1
DAA
MOV22H,A;
十进制调整
CJNEA,#60H,DONE;
60秒到吗?
MOV22H,#00H;
秒单元清零
INCA
DAA;
分加1.十进制调整
MOV21H,A
60分到吗?
MOV21H,#00H;
分单元清零
时加1.十进制调整
MOV20H,A
CJNEA,#24H,DONE;
24小时到吗?
MOV20H,#00H;
时单元清零
DONE:
POPACC;
退栈
POPPSW
RETI
----------------------------------------------
SSEE:
SETBRS1;
换工作区
MOVR5,#05H
SSE2:
MOV30H,#20H
MOV31H,#7EH
MOVR7,#06H
SSE1:
MOVA,30H
MOVX@R1,A;
字位送入
MOVR0,31H
MOVA,@R0
MOVDPTR,#DDFF
MOVCA,@A+DPTR;
取字形代码
MOVR1,#0DCH
字形送入
MOVA,30H;
右移
RRA
MOV30H,A
DEC31H
MOVA,#0FFH
关显示
DJNZR7,SSE1;
6位显示完了吗?
DJNZR5,SSE2;
5次显示完了吗?
CLRRS1
-------------------------------------------------------
DDFF:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
X3:
MOVR0,#50H
MOVR1,A
MOV@R1,A
CLRA
POPDPH
POPDPL
MOVCA,@A+DPTR
CJNEA,01H,X30
decr1
clra
X31:
PUSHDPL
PUSHDPH
X30:
DECR1
SJMPX31
--------------------------
X2:
MOVR6,#50H
X0:
ACALLXLE
JNBACC.5,XX0
DJNZR6,X0
MOVR6,#20H
MOVR0,A
MOVR7,A
MOVA,#10H
X1:
JNBACC.5,XX1
DJNZR6,X1
MOVA,R7
SJMPX2
XX1:
XX0:
----------------------------
XLE:
ACALLDIS
ACALLKEY
MOVR1,#48H
MOVA,@R1
INCR1
MOVR3,A
XRLA,R3
MOVR3,04H
MOVR4,02H
JZX10
MOVR2,#88H
MOVR4,#88H
X10:
DECR4
XRLA,#82H
JZX11
XRLA,#0EH
JZX12
DECR2
SJMPX13
X12:
MOVR4,#0FH
X11:
MOVR2,04H
MOVR4,03H
X13:
MOVA,R3
JBACC.5,X113
JBACC.4,X113
MOVDPTR,#LS3
X113:
---------------------------------
LS3:
DB07H,04H,08H,05H,09H,06H,0AH
DB0BH,01H,00H,02H,0FH,03H,0EH
DB0CH,0DH
-----------------------------------
DIS:
SETBRS1
MOVR0,#7EH
MOVDPTR,#LS0
LS2:
incR1
LS1:
DJNZR3,LS1
RRCA
DECR0
JNZLS2
movx@r0,a
decr0
cpla
---------------------------------------------
LS0:
DB0C0H,0F9H,0A4H,0B0H,99H,92H
DB82H,0F8H,80H,90H,88H,83H,0C6H
DB0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
KEY:
MOVR2,#0FEH
MOVR3,#08H
RLA