单片机实验报告.docx
- 文档编号:18275783
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:19
- 大小:18.39KB
单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(19页珍藏版)》请在冰点文库上搜索。
单片机实验报告
第一部分软件实验
实验一熟悉伟福模拟仿真软件的使用
1.实验程序
INDEXEQU20H
SUMEQU21H
ORG0000H
START:
MOVINDEX,#5
MOVA,#0
LOOP:
ADDA,INDEX
DJNZINDEX,LOOP
MOVSUM,A
SJMP$
END
单步执行时
累加器A的内容变化:
0005090C0E0F
20H单元的内容变化:
050403020100
21H单元的内容变化:
0000000000000F
全速执行时
累加器A的内容:
0F
21H单元的内容:
0F
断点执行时
累加器A的内容变化:
0105090C0E
20H单元的内容变化:
0504030201
思考题:
将存储单元由内部存储单元21H改为外部存储单元2100H
程序如下:
INDEXEQU20H
ORG0000H
MOVDPTR,#2100H
START:
MOVINDEX,#5
MOVA,#0
LOOP:
ADDA,INDEX
DJNZINDEX,LOOP
MOVX@DPTR,A
SJMP$
END
实验二简单编程实验
1.清零程序
(1)对一个单元清零
ORG0000H
CLRA
MOVDPTR,#200AH
MOVX@DPTR,A
SJMP$
END
200AH单元内容执行前:
FF执行后:
00
思考题:
能否用MOVX@DPTR,#00H或MOVX200AH,A?
不能,访问外部数据需要间接访问
对内部数据清零的方法?
MOVdirect,A或MOVdirect,Rn或MOVdirect1,direct2
MOVdirect,@Ri或MOVdirect,#data
(2)将RAM某一数据块清零
程序如下:
ORG0000H
MOVDPTR,#2010H
MOVR0,#11H
CLRA
LL:
MOVX@DPTR,A
INCDPTR
DJNZR0,LL
SJMP$
END
执行前:
2010HFF执行后:
2010H00
2011HFF执行后:
2011H00
……
2020HFF执行后:
2020H00
流程图:
开始
DPTR2010
R011
A0
(@DPTR)A
DPTRDPTR+1
R0R0-1
否
R0=0?
是
结束
思考题:
如何对从2010H开始的256个存储单元清零
程序如下:
ORG0000H
MOVDPTR,#2010H
CLRA
MOVR1,#10H
LL2:
MOVR0,#10H
LL1:
MOVX@DPTR,A
INCDPTR
DJNZR0,LL1
DJNZR1,LL2
SJMP$
END
2.屏蔽程序
执行前:
2010HFF执行后:
2010HFF
2011HFF执行后:
2011H0F
思考题:
(1)如何对指定单元进行低4位屏蔽?
例如将2010H—2020H的低4位屏蔽,程序如下:
ORG0000H
MOVDPTR,#2010H
MOVRO,#11H
LOOP:
MOVXA,@DPTR
ANLA,#0FH
MOVX@DPTR,A
INCDPTR
DJNZR0,LOOP
SJMP$
END
(2)如何将指定位屏蔽?
答:
修改A,将相应的位取0即可。
3.位移程序
执行前:
2010H0B执行后:
2010H0B
2011H2D2011H85
思考题:
如何对指定单元内容左移一位?
程序如下:
ORG0000H
MOVDPTR,#2010H
MOVXA,@DPTR
RLA
INCDPTR
MOVX@DPTR,A
SJMP$
END
4.拆字程序
执行结果:
执行前:
2040H3A执行后:
2040H3A
2041HFF2041H0A
2042HFF2042H03
思考题:
执行后,原始数据(2040H的内容)有没有变化?
为什么?
答:
没有变化,因为程序在进行逻辑运算后都是把结果保存在另外的存储单元中,没有覆盖原来的值。
5.拼字程序
源程序执行结果:
执行前:
2040H58执行后:
2040H58
2041H4A2041H4A
2042H3D2042HA8
思考题:
结果单元2042H中的高4位是哪个单元的低4位,如果要将此单元的低4位放在结果单元的低4位上,结果单元的高4位放另一单元的低4位,请修改程序。
答:
结果单元2040H的高4位是2041H单元的低4位。
修改后程序如下:
ORG0000H
MOVDPTR,#2041H
MOVXA,@DPTR
ANLA,#0FH
MOVR0,A
MOVDPTR,#2040H
MOVXA,@DPTR
SWAPA
ANLA,#0F0H
ORLA,R0
INCDPTR
INCDPTR
MOVX@DPTR,A
SJMP$
END
实验三编程实验
(一)
1.分支程序
实验结果:
X(2100H)Y(2101H)
2429
119
8383
结果与设想相符。
1.循环程序
程序流程图如下:
开始
DPTR2010
A(@DPTR)
R1A
R000
DPTRDPTR+1
A(@DPTR)
否
ACC.7=1?
是
R0R0+1
R1R1-1
否
R1=0?
是
AR0
DPTR2100
(@DPTR)A
结束
执行结果:
将初始值设定好后,运算得2100H单元为02,与手算结果相同,改变初值,再次运行,结果依然正确。
2.子程序调用
实验结果:
PC值的变化:
SP值的变化:
思考题:
子程序中PUSHACC的作用是什么?
如果将这条指令去掉,执行程序会出现什么情况?
答:
指令PUSHACC的作用:
使得返回时的堆栈指针不变,保证调用完子程序后能够正确返回。
如果将这条指令去掉,则程序调用完子程序后返回出错,会跳到别的地方。
3.查表程序:
问题:
验证查找次数是否正确,读懂程序,给程序加上注释。
答:
赋初值执行,查找次数正确。
程序注释如下:
ORG0000H
MOVDPTR,#2100H
MOVXA,@DPTR
MOVB,A;将2100H单元的值赋给B
MOVR0,#00H;R0用于计量查找次数,初始化
MOVDPTR,#KYTRL;赋数据区的起始地址给DPTR
KEY1:
CLRA
MOVCA,@A+DPTR
CLRC;将C清零,便于A,B的比较
SUBBA,B;比较A,B,相等时表示找到
JZKEY2;找到后跳至KEY2
INCR0
INCDPTR;没找到时查找次数加1,地址加1
SJMPKEY1;跳到KEY1,重新比较查找
KEY2:
MOVA,R0
MOVDPTR,#2101H
MOVX@DPTR,A;保存查找次数到2101H单元
SJMP$
ORG2020H
KYTRL:
DB0FFH,0EFH,0F7H,0FBH;将数据区赋初值
DB0DFH,0E7H,0EBH,0CFH
DBOD7H,0DBH,0DDH
END
实验四编程实验
(二)
1.程序跳转表
实验结果:
各地址单元数据变化:
30H:
00000000
31H:
00000101
32H:
00000202
33H:
00000303
各寄存器变化:
DPL:
001919191919
PSW:
000101010100
A:
000102040306
第一部硬件基础实验
实验五并行接口
实验程序
(1)
自编程序①使第三个数码管各段轮流亮。
②使六个数码管共42段;LED各段轮流亮。
程序①如下:
ORG0000H
MOVP1,#04H
MOVA,#01H
NEXT:
MOVP2,A
MOVR3,#0
LOOP:
MOVR4,#0
DJNZR4,$
DJNZR3,LOOP
RLA
SJMPNEXT
END
程序②如下:
ORG0000H
MOVA,#01H
MOVR6,#06H
MOVR7,A
LOOP1:
MOVP1,A
MOVR5,#07H
MOVA,#01H
NEXT:
MOVP2,A
MOVR3,#0
LOOP2:
MOVR4,#0
DJNZR4,$
DJNZR3,LOOP2
RLA
DJNZR5,NEXT
MOVA,R7
RLA
MOVR7,A
DJNZR6,LOOP1
END
实验程序
(2)
1.自编程序:
编程并烧写程序完成置1键ON第一个数码管亮“1”,拨2键第二个数码管亮“2”,拨3键第三个亮“3”。
程序如下:
ORG0000H
MOVDPTR,#TAB0
MOVP1,#01H
STA1:
SETBC
MOVR0,#01
ASP:
MOVP0,#0FFH
MOVA,P0
CLPA
MOVP1,A
MOVA,P0
ASP1:
RRCA
JNCLED
INCR0
CJNER0,#9,ASP1
SJMPSTA1
LED:
MOVA,R0
MOVCA,@A+DPTR
MOVP2,A
SJMPSTA1
TAB0:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
2.自编程序:
编程并烧写程序完成置1键ON六个数码管轮流亮1,置2键轮流亮2,置3轮流亮3.
程序如下:
ORG0000H
MOVDPTR,#TAB0
STA1:
SETBC
MOVR0,#01
ASP:
MOVP0,#0FFH
MOVA,P0
ASP1:
RRCA
JNCLED
INCR0
CJNER0,#9,ASP1
SJMPSTA1
LED:
MOVA,R0
MOVCA,@A+DPTR
MOVP2,A
WE:
MOVA,#01
NEXT:
MOVP1,A
MOVR3,#0
LOP:
MOVR4,#0
LOP1:
NOP
NOP
DJNZR4,LOP1
DJNZR3,LOP
RLA
CJNEA,#10H,NEXT
SJMPSTA1
TAB0:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
实验六中断
实验程序1:
(1).分析该程序的功能及现象。
答:
功能:
通过开关产生中断信号,显示数码管的不同段亮。
现象:
不断按下开关W2,可看到第三个数码管的不同段顺序点亮。
(2).自编程序:
①七个发光二极管(即一个数码管)同时点亮,中断一次,同时熄灭,每中断一次,变反一次。
②要求同①,每中断一次,变反四次。
程序①如下:
ORG0000H
AJMPSTAR
ORG0003H
CPLA
MOVP2,A
RETI
STAR:
MOVP1,#01H
MOVA,#0FFH
MOVP2,A
SETBEA
SETBEX0
SETBIT0
SJMP$
END
程序②如下:
ORG0
AJSMSTAR
ORG3
CPLA
MOVP2,A
ACALLTIME
CPLA
MOVP2,A
ACALLTIME
CPLA
MOVP2,A
ACALLTIME
CPLA
MOVP2,A
ACALLTIME
RETI
STAR:
MOVP1,#01H
MOVA,#0FFH
MOVP2,A
SETBEA
SETBEX0
SETBIT0
SJMP$
TIME:
MOVR3,#0
LOP:
MOVR4,#0
LOP1:
NOP
NOP
DJNZR4,LOP1
DJNZR3,LOP
END
实验程序2.
分析该程序的功能及现象
答:
功能:
记录并显示INT0中断的次数
现象:
通过开关按键,按两下,数码管显示的数字增1。
自编程序:
使第六个数码管显示“H”,每中断一次,“H”左移一位。
程序如下:
ORG0000H
AJMPSTAR
ORG3
RRA
MOVP1,A
RETI
STAR:
MOVP2,#F6H
MOVA,#20H
MOVP1,A
SETBEA
SETBEX0
SETBIT0
SIMP$
END
实验七定时/计数器
实验程序1.
修改程序(使用查询方式)使计3个脉冲A加1,并将A的值显示在数码管上。
程序如下:
ORG0000H
MOVDPTR,#TAB0
MOVTMOD,#6
MOVTH0,#0FDH
MOVTL0,#0FDH
MOVP1,#0FFH
MOVA,#0
MOVR0,A
MOVP2,#3FH
COUN:
JNBTF0,$
CLRTF0
INCA
MOVR0,A
MOVCA,@A+DPTR
MOVP2,A
MOVA,R0
SJMPCOUN
TAB0:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
实验程序2.
修改程序(使用中断方式)使3个脉冲A加1,并将A值显示在数码管上。
程序如下:
ORG0000H
SJMPCOUN
ORG000BH
INCA
MOVR0,A
MOVCA,@A+DPTR
MOVP2,A
MOVA,R0
RETI
COUN:
MOVTMOD,#6
MOVTH0,#0FDH
MOVTL0,#0FDH
MOVP1,#0FFH
MOVA,#0
MOVP2,#3FH
SETBEA
SETBET0
SETBTR0
SJMP$
END
实验程序3.简易电子琴
计算“Do”的计算初值。
解:
单片机的内部脉冲:
f1=12000,000HZ,
机器周期:
T1=12/f1
Do的频率:
f2为262HZ,
音调周期:
T2=1/f2
由于是半个音调周期就要产生一次中断,
则计时时间t=T2/2
计时初值tt=2(16)-t/T1=63628
转为十六进制为F88C。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告