微机原理及应用实验报告课件.doc
《微机原理及应用实验报告课件.doc》由会员分享,可在线阅读,更多相关《微机原理及应用实验报告课件.doc(17页珍藏版)》请在冰点文库上搜索。
微机原理及应用实验报告
班级:
机械1301班
姓名:
黄佳清
学号:
0801130117
座位号:
中南大学机电工程学院
实验一单片机仿真开发机操作和MCS-51指令系统应用
一.实验目的
1、熟悉MCS-51单片机仿真开发机和开发调试软件的操作使用和调整;
2、学会编写和输入汇编语言源程序、对输入的源程序进行汇编;
3、掌握程序的调试和运行的各种方法。
二.实验设备
台式微型计算机
MCS-51仿真开发机THKSCM-2A
三.实验内容及步骤(完成分值:
60分)
本实验秩序运行KeiluVersion2程序,设置为keil为纯软件仿真
1.新建工程项目
2.设置工程文件参数
3.编写新程序事例
4.调试程序直至能够运行出结果。
四.实验程序
AJMPMAININCR0
ORG0030HINCDPTR
MAIN:
MOVR0,#20HDJNZR2,A2
MOVR2,#0FHMOVR0,#030H;
MOVA,#00H
断点,观察并记录!
A1:
MOV@R0,AMOVDPTR,#7000H
INCR0MOVR2,#0FH
A3:
MOVXA,@DPTR
INCAMOVX@R0,A
INCR0
DJNZR2,A1INCDPTR
MOVR0,#20H;DJNZR2,A3
暂停,观察并记录!
DO:
LJMPDO
MOVDPTR,#7000HEND;内部存储器数
MOVR2,#0FH
据块赋值,搬运数据块到外部存储
A2:
MOVA,@R0
器,再搬运回内部数据存储器。
MOVX@DPTR,A
五、附加题
1.将光标移到想要暂停的地方,MOVR0,#20H所在行,选择“执行到光
标处”功能,程序快速执行到光标所在行。
观察运行情况,并记录下表。
R0R2A20H21H22H23H24H25H
0x2f0x000x0f00H01H02H03H04H05H
26H27H28H29H2AH2BH2CH2DH2EH
06H07H08H09H0AH0BH0CH0DH0EH
2.在MOVR0,#0A0H行设置断点,全速执行,暂停后观察并记录以下单元
内容
R0DPL7000H7001H7002H7003H7004H7005H7006H
0X2F0FH00H01H02H03H04H05H06H
7007H7008H7009H700AH700BH700CH700DH700EH
07H08H09H0AH0BH0CH0DH0EH
3.画出程序流程图
开始
赋值R0←20HR2←0FHA←00H
(R0)←(A)
R0←R0+1
A←A+1
R2←R2-1
N
R2=0?
Y
赋值R0←20HDPTR←7000HR2←0FH
(A)←(R0)
(DPTR)←(A)
R0←R0+1
DPTR←DPTR+1R2←R2-1
NR2=0?
Y
赋值R0←30HR2←0FHDPTR←7000H
(A)←(DPTR)
(R0)←(A)
DPTR←DPTR+1R0←R0+1
R2←R2-1
N
R2=0?
Y
结束
4.修改程序,实现新功能
实现倒序数据转移程序
AJMP
MAIN
ORG0030H
MAIN:
MOVR0,#40H
MOVR2,#0FH
MOVA,#00H
A1:
MOV@R0,A
DECR0
INCA
DJNZR2,A1
MOVR0,#30H
MOVDPTR,#7000H
MOVR2,#0FH
A2:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,A2
MOVR0,#030H
MOVDPTR,#7000H
MOVR2,#0FH
A3:
MOVXA,@DPTR
MOVX@R0,A
INCR0
INCDPTR
DJNZR2,A3
DO:
LJMPDO
END
实验二程序设计
一、实验目的
1、掌握MCS-51单片机指令系统及用汇编语言编程技巧;
2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方法。
二、实验内容及步骤(完成分值:
30分/单个程序)
题目1、编写排序程序并上机调试通过。
已知8031内部RAM60H~69H单元中,依次存放了
0FH,09H,07H,0CH,03H,0DH,08H,0BH,04H,01H共10个字节无符号数,编程将它
们规律排序,最大数放在60H中,最小数放在69H中。
结果应该是
0FH,0DH,0CH,0BH,09H,08H,07H,04H,03H,01H。
题目2、编写多字节加法程序并上机调试通过。
8031内部RAM22、H21H、20H单元中,分别存放了3字节无符号被加数0FFH、
0FFH、0FFH(低字节在低地址),在32H、31H、30H单元中分别存放3字节无符
号加数22H、22H、22H(低字节在低地址),求两数之和,并将结果存入内部
RAM23H、22H、21H、20H单元中(低字节在低地址)。
结果应该是01H、22H、
22H、21H。
四、参考实验程序
题目1
ORG0000HMOVA,R2
LJMPmainMOVR4,A
ORG0100HLOOP1:
MOVA,@R1
main:
...将10个随机数送入内部RAM的CLRC
50~59H单元SUBBA,B
NOP可;在此处设置断点JCLOOP2;改为JNC即可逆
ACALLSELSORT调;用排序子程序
序排列
MOVB,@R1
HERE:
AJMPHERE;可在此处设置断MOVA,R1
点,观察每次排序结果MOVR3,A
NOPLOOP2:
INCR1
DJNZR4,LOOP1
;排序子程序MOVA,R3
DATEQU60H;排序数据首地MOVR1,A
址MOVA,@R1
NEQU10;排序个数XCHA,@R0
SELSORT:
MOVR0,#DATXCHA,@R1
MOVR2,#N-1INCR0
LOOP:
MOVB,@R0DJNZR2,LOOP
MOVA,R0RET
MOVR3,AEND
INCA
MOVR1,A
题目2
ORG0000HLJMPmain
ORG0100H([R0]+[R1])=([R0])
main:
MOVR0,#20H;入口:
R0,R1,R2
MOV@R0,#0FFH;占用资源:
ACC,B
INCR0;堆栈需求:
2字节
MOV@R0,#0FFH;出口:
R0存放结果高地址
INCR0MULTADD:
MOVR0,#20H;地址1
MOV@R0,#0FFHMOVR1,#30H;地址2
MOVR2,#03H;加法字节数
MOVR0,#30HNSUB:
CLRC
MOV@R0,#22HNSUB1:
MOVA,@R0
INCR0ADDCA,@R1
MOV@R0,#22HMOV@R0,A
INCR0INCR0
MOV@R0,#22HINCR1
ACALLMULTADD调;用多字节加法子DJNZR2,NSUB1
程序CLRA
ADDCA,#00H;把进位
HERE:
AJMPHERE;可在此处设置断位C加到高8位去
点,观察结果MOV@R0,A
NOPRET
END
;N字节无符号数加法子程序
五、附加题
1.画出题目1的程序流程图。
开始
存入数据到60H~69H
R0←60HN←10HR2←60H
A←(R0)
R2←R2+1
B←(R2)
A>B?
Y
N
(R0)和(R2)交换
N
N
R2=69H?
Y
R0←R0+1
N
R0=69H?
Y
结束
2.将题目1的排序算法进行改变,采用另一种排序算法进行排序。
ORG0000H
LJMPmain
LOOP3:
INCR1
ORG0100HCJNER1,#6AH,LOOP2;
MAIN:
...;将10个随机数送入INCR0
LOOP2:
MOVA,@R0MOV51H,R0
MOV50H,@R1MOVR1,51H
CJNEA,50H,BIG;做减法。
INCR1
BIG:
JNCLESS;是0则跳转CJNER0,#69H,LOOP2;以此类推,直到剩最
LJMPLOOP3
后两个数比较完。
LESS:
XCHA,@R1;交换60与61中的内SJMP$
容END
XCHA,@R0
3.画出题目2的程序流程图。
开始
存入数据到20好
~22H,30H~32H
R0←20H
R1←30H
R2←3H
C清零
A←((R0))+((R1))
50
0
一
食
物
((R0))←A
R0←R0+1
R1←R1+1
R2R2-1←
N
R2=0?
Y
A←A+C
((R0))←A
结束
4.改为编写多字节减法程序。
ORG0000H;N字节无符号数加法子程序
LJMPmain([R0]+[R1])=([R0])
ORG0100H;入口:
R0,R1,R2
main:
MOVR0,#20H;占用资源:
ACC,B
MOV@R0,#0FFH;堆栈需求:
2字节
INCR0;出口:
R0存放结果高地址
MOV@R0,#0FFHMULTADD:
MOVR0,#20H;地址1
INCR0MOVR1,#30H;地址2
MOV@R0,#0FFHMOVR2,#03H;加法字节数
NSUB:
CLRC
MOVR0,#30HNSUB1:
MOVA,@R0
MOV@R0,#22HADDCA,@R1
INCR0MOV@R0,A
MOV@R0,#22HINCR0
INCR0INCR1
MOV@R0,#22HDJNZR2,NSUB1
ACALLMULTADD调;用多字节加法子CLRA
程序ADDCA,#00H;把进位
位C加到高8位去
HERE:
AJMPHERE;可在此处设置断MOV@R0,A
点,观察结果RET
NOPEND
实验三定时/计数器实验
一、实验目的
1、掌握MCS-51单片机内部定时/计数器的功能与特点,工作方式选择和编
程方法,中断功能的使用和中断服务程序的设计;
2、了解和熟悉MCS-51单片机实验板的功能。
二、实验内容及步骤(完成分值:
60分/单个程序)
本实验需要用到单片机最小应用系统(F1区)和十六位逻辑电平显示模块
(I4区)。
用P1口做输出口,接十六位逻辑电平显示,程序功能使发光二极管
从右到左轮流循环点亮。
三、参考流程图、电路图、参考程序
VCCU1FVCC
P0.0P1.0510*8L0
VCC
P0.1
P0.2
P1.1
P1.2
R2F
100
R1F
1K
C3F
10uF
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
XTAL2
XTAL1
VSS
89C51
VCC40
39
P0.0
P0.138
37
P0.2
P0.336
35
P0.4
34
P0.5
33
P0.6
P0.732
EA31
30
29
ALE/PROG
PSEN
P2.728
27
P2.6
26
P2.5
25
P2.4
P2.324
23
P2.2
P2.122
21
P2.0
P0.5
P0.6
P0.7
ALE
P1.5
P1.6
P1.7
L2
L3
L4
RESET
L1
P0.3P1.3
P0.4P1.4
EA
PSEN
P2.7
P2.6
L5
P2.5
P2.4
L6
XTAL1A
P2.3
P2.2
L7
11.0592MHzP2.1
P2.0
C3AC2A
22pF22pF
程序:
Tickequ5000;100us记数次数,5000x100us=0.5s,十六进制#1388H
T100usequ156;100us时间常数(12MHz)
C100usequ5h;100us记数单元,05H、06H
org0000H
ljmpStart
org000BH
LJMPT0Int
;----------------------------------------
ORG0100H
Start:
movTMOD,#02h;方式2,定时器
movTH0,#T100us;100us时间常数(12MHz)
movTL0,#T100us;100us时间常数(12MHz)
movIE,#10000010b;EA=1,IT0=1
setbTR0;开始定时
movp1,#0FEH;由于电路原因,输出高电平为灭灯。
movC100us,#HIGH(Tick);05H<-#13H,初始化100us记数单元
movC100us+1,#LOW(Tick);06H<-#88H,初始化100us记数单元
Loop:
ljmpLoop
;----------------------------------------
ORG0300H
T0Int:
pushPSW
mova,C100us+1;100us高位记数单元06H
jnzGoon
decC100us;100us低位记数单元05H
Goon:
decC100us+1
mova,C100us;100us低位记数单元05H
orla,C100us+1
jnzExit;100us记数单元不为0,返回
movC100us,#HIGH(Tick);05H<-#13H,100us记数单元为0则初始化100us记数单
元
movC100us+1,#LOW(Tick);06H<-#88H,100us记数单元为0则初始化100us记数
单元
MOVA,P1;100us记数单元为0,位移!
RLA
MOVP1,A
Exit:
popPSW
reti
;----------------------------------------
End
五、附加题
1.修改程序,实现新功能
奇数偶数交换点亮
Tickequ5000T0Int:
T100usequ156pushPSW
C100usequ5hmova,C100us+1
org0000HjnzGoon
ljmpStartdecC100us
org000BHGoon:
LJMPT0IntdecC100us+1
;---------------------------------mova,C100us
-------orla,C100us+1
ORG0100HjnzExit
Start:
movTMOD,#02hmovC100us,#HIGH(Tick)
movTH0,#T100usmovC100us+1,
movTL0,#T100us#LOW(Tick)
movIE,#10000010bMOVA,P1
setbTR0RLA
movp1,#0AAHMOVP1,A
movC100usExit:
movC100us+1popPSW
Loop:
ljmpLoopreti
;---------------------------------;---------------------------------
--------------
ORG0300HEnd
2.用MCS-51单片机的内部定时器定时中断,编写一段电子秒表程
序,在静态数码管上实现显示。
TCNTAEQU30H;MOVA,KEYCNTDJNZR6,D1
TCNTBEQU31HCJNEA,#01H,KN1RET
SECEQU32HSETBTR0INT_T0:
KEYCNTEQU33HMOVTH0,#06HINCTCNTA
SP1BITP3.5MOVTL0,#06HMOVA,TCNTA
ORG00HMOVTCNTA,#00HCJNEA,#100,NEXT
LJMPSTARTMOVTCNTB,#00HMOVTCNTA,#00H
ORG0BHLJMPDKNINCTCNTB
LJMPINT_T0KN1:
CJNEA,#02H,KN2MOVA,TCNTB
START:
MOVCLRTR0CJNEA,#4,NEXT
KEYCNT,#00HLJMPDKNMOVTCNTB,#00H
MOVSEC,#00HKN2:
CJNEA,#03HINCSEC
MOVA,SECMOVSEC,#00HMOVA,SEC
MOVB,#10MOVA,SECCJNEA,#100,DONE
DIVABMOVB,#10MOVSEC,#00H
MOVDPTR,#TABLEDIVABDONE:
MOVA,SEC
MOVCA,@A+DPTRMOVDPTR,#TABLEMOVB,#10
MOVP0,AMOVCA,@A+DPTRDIVAB
MOVA,BMOVP0,AMOVDPTR,#TABLE
MOVDPTR,#TABLEMOVA,BMOVCA,@A+DPTR
MOVCA,@A+DPTRMOVDPTR,#TABLEMOVP0,A
MOVP2,AMOVCA,@A+DPTRMOVA,B
MOVMOVP2,AMOVDPTR,#TABLE
TMOD,#02H;MOVKEYCNT,#00HMOVCA,@A+DPTR
SETBET0DKN:
JNBSP1,$MOVP2,A
SETBEALJMPWTNEXT:
RETI
WT:
JBSP1,WTDELY10MS:
TABLE:
DB
LCALLDELY10MSMOVR6,#203FH,06H,5BH,4FH,66H,6DH,7DH,07H,
JBSP1,WTD1:
MOVR7,#2487FH,6FH
INCKEYCNTDJNZR7,$END
实验四动态显示实验
一、实验目的
1、掌握七段LED数码管显示器工作原理,以及用动态扫描方法编程实现8
位LED数码管显示的方法;
2、进一步了解和熟悉MCS-51单片机实验板的功能。
二、实验内容及步骤(完成分值:
60分/单个程序)
本实验需要用到单片机最小应用系统(F1区)和动态扫描显示模块(I2区)。
1.用8P排线将单片机最小应用系统(F1区)的P2口和动态扫描显示的
位选JD1I相连,用8P排线将单片机最小应用系统(F1区)的P0口和动态扫
描显示模块的段码JD0I相连。
2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座
中,请注意仿真器的方向:
缺口朝上。
3.打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加源
程序,进行编译,直到编译无误。
4.全速运行程序,直至显示效果为稳定的“123456”。
四、参考流程图、电路图、实验程序
电路接线图
程序:
ORG0000H
AJMPMAIN
ORG0080HMOVP0,#066H;显示4
MAIN:
CLRP2.2;选中第三个数码管
MOVP2,#0FFHLCALLDELAY
;MOVP0,#0FFH
MOVP0,#7DH;显示6SETBP2.2
CLRP2.0;选中第一个数码管
LCALLDELAY;调用延时
;MOVP0,#0FFH;关显示MOVP0,#4FH;显示3
SETBP2.0CLRP2.3;选中第四个数码管
LCALLDELAY
MOVP0,#6DH;显示5;MOVP0,#0FFH
CLRP2.1;选中第二个数码管SETBP2.3
LCALLDELAY
;MOVP0,#0FFH
SETBP2.1MOVP0,#5BH;显示2
CLRP2.4;选中第五个数码管;LCALLDELAY
LCALLDELAY;SETBP2.7
;MOVP0,#0FFH;MOVP0,#0FFH
SETBP2.4
AJMPMAIN;重新开始
MOVP0,#06H;显示1DELAY:
;延时子程序
CLRP2.5;选中第六个数码管MOVR7,#20H
LCALLDELAYD1:
MOVR6,#30H
;MOVP0,#0FFHD2:
DJNZR6,D2
SETBP2.5DJNZR7,D1
RET
;CLRP2.6;选中第七个数码管
;MOVP0,#21H;显示6;DISTAB:
DB3FH,06H,5BH,4FH
;LCALLDELAY;DB66H,6DH,7DH,07H
;MOVP0,#0FFH;DB7FH,6FH,77H,7CH
;SETBP2.6;DB39H,5EH,79H,