单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(53页珍藏版)》请在冰豆网上搜索。
单片机实验报告
单片机实验报告
学院:
机电工程学院年级:
2011
专业:
机械电子工程老师:
叶萍
姓名:
王宇学号:
1129401010
单片机实验报告
2014.4.3(实验一)
(1、)一个发光二极管闪烁
(2、)八个发光二极管轮流闪烁
实验程序:
ORG00H
again:
setbp1.0
lcalldelay
clrp1.0
lcalldelay
setbp1.0
lcalldelay
setbp1.1
lcalldelay
clrp1.1
lcalldelay
setbp1.1
lcalldelay
setbp1.2
lcalldelay
clrp1.2
lcalldelay
setbp1.2
lcalldelay
setbp1.3
lcalldelay
clrp1.3
lcalldelay
setbp1.3
lcalldelay
setbp1.4
lcalldelay
clrp1.4
lcalldelay
setbp1.4
lcalldelay
setbp1.5
lcalldelay
clrp1.5
lcalldelay
setbp1.5
lcalldelay
setbp1.6
lcalldelay
clrp1.6
lcalldelay
setbp1.6
lcalldelay
setbp1.7
lcalldelay
clrp1.7
lcalldelay
setbp1.7
lcalldelay
ljmpagain
DELAY:
MOVR3,#200
XX1:
MOVR2,#100
XX:
NOP
djnzR2,xx
djnzR3,xx1
ret
end
这次实验是对这两个软件界面的熟悉,熟练的找到各个元器件。
程序是先控制一个灯的闪烁,控制接口端高电平、低电平来回切换,并附加延时程序。
八个灯时,我就想到了控制p1.0~p1.7接口的高低电平,来控制着八个灯的来回闪烁。
2014.4.3(实验二)
(1、)显示0~9
实验程序:
org0000H
movR2,#0
xx:
movA,R2
movdptr,#tab
movcA,@A+dptr
movp0,A
lcalldelay
IncR2
cjneR2,#10,xx
movR2,#0
sjmpxx
ret
delay:
movR3,#200
xx1:
movR4,#200
xx2:
nop
nop
djnzR4,xx2
djnzR3,xx1
ret
tab:
db3fH
db06H
db5bH
db4fH
db66H
db6dH
db7dH
db07H
db7fH
db6fH
end
(2、)显示00~99
实验程序:
org00H
mov40H,#0
xx:
lcallbcd
movdptr,#tab
movA,41H
movcA,@A+dptr
movp0,A
movA,42H
movcA,@A+dptr
movp2,A
lcalldelay
Inc40H
movA,40H
cjneA,#100,xx
mov40H,#0
sjmpxx
delay:
movR3,#200
xx1:
movR4,#200
xx2:
nop
nop
djnzR4,xx2
djnzR3,xx1
ret
bcd:
movA,40H
movB,#10
divAB
mov41H,A
mov42H,B
ret
tab:
db3fH
db06H
db5bH
db4fH
db66H
db6dH
db7dH
db07H
db7fH
db6fH
end
这两个主要是基于第一次的实验基础上,实现同一时间多个数码管的亮暗,首先要找出共阴极数码管显示数字需要哪几个接口高电平、低电平。
然后控制其来回闪烁。
2014.4.17(实验三)数码管的动态显示
(1、)显示一个既定的两位数(65)
实验程序:
org000h
xx:
movp3,#0ffh
clrp3.0
movp2,#6dh
calldelay
movp3,#0ffh
clrp3.1
movp2,#7dh
calldelay
sjmpxx
DELAY:
MOVR3,#100
XX1:
MOVR2,#100
XX2:
NOP
djnzR2,xx2
djnzR3,xx1
ret
end
(2、)显示00~99
实验程序:
org00h
xx:
movA,50h
movB,#10
divAB
mov51h,A
mov52h,B
lcalldisplay
inc50h
mova,50h
cjnea,#100,xx
mov50H,#0
sjmpxx
display:
movp3,#0ffh
clrp3.0
movA,52H
movdptr,#tab
movcA,@A+dptr
movp2,A
calldelay
movp3,#0ffh
clrp3.1
mova,51H
movdptr,#tab
movca,@a+dptr
movp2,a
calldelay
delay:
MOVR3,#200
XX1:
MOVR2,#100
XX2:
NOP
djnzR2,xx2
djnzR3,xx1
ret
tab:
db3fH
db06H
db5bH
db4fH
db66H
db6dH
db7dH
db07H
db7fH
db6fH
end
这个主要是p2端数控,p3端位控。
在极短的时间里切换器显示位和数字,从而显示多位数字。
(3)
org0000h
xx:
movA,50h
movB,#100
divAB
mov51h,A
mov52h,B
movA,52h
movB,#10
divAB
mov52h,A
mov53h,B
lcalldisplay
inc50h
mova,50h
cjnea,#256,xx
mov50H,#0
sjmpxx
display:
movp3,#0ffh
clrp3.0
movA,51H
movdptr,#tab
movcA,@A+dptr
movp2,A
calldelay
movp3,#0ffh
clrp3.1
mova,52H
movdptr,#tab
movca,@a+dptr
movp2,a
calldelay
movp3,#0ffh
clrp3.2
mova,53H
movdptr,#tab
movca,@a+dptr
movp2,a
calldelay
delay:
MOVR3,#100
XX1:
MOVR2,#100
XX2:
NOP
djnzR2,xx2
djnzR3,xx1
ret
tab:
db3fH
db06H
db5bH
db4fH
db66H
db6dH
db7dH
db07H
db7fH
db6fH
end
实验四
(1)
org00h
xx:
movA,50h
movB,#10
divAB
mov51h,A
mov52h,B
lcalldelay2
jnbp3.6,next
sjmpxx
next:
lcalldelay1
jbp3.6,next
jnbp3.6,$
inc50h
mova,50h
cjnea,#100,xx
mov50H,#0
display:
movp3,#0ffh
clrp3.0
movA,52H
movdptr,#tab
movcA,@A+dptr
movp2,A
calldelay1
movp3,#0ffh
clrp3.1
mova,51H
movdptr,#tab
movca,@a+dptr
movp2,a
calldelay1
ret
delay1:
MOVR3,#200
XX1:
MOVR2,#20
XX2:
nop
djnzR2,xx2
djnzR3,xx1
ret
delay2:
movR5,#30
del1:
movR4,#20
del2:
nop
djnzR4,del2
lcalldisplay
djnzR5,del1
ret
tab:
db3fH
db06H
db5bH
db4fH
db66H
db6dH
db7dH
db07H
db7fH
db6fH
end
(2)
org00h
xx:
movA,50h
movB,#10
divAB
mov51h,A
mov52h,B
lcalldelay2
inc50h
mova,50h
cjnea,#100,xx
mov50H,#0
sjmpxx
display:
movp3,#0ffh
clrp3.0
movA,52H
movdptr,#tab
movcA,@A+dptr
movp2,A
calldelay1
movp3,#0ffh
clrp3.1
mova,51H
movdptr,#tab
movca,@a+dptr
movp2,a
calldelay1
ret
delay1:
MOVR3,#200
XX1:
MOVR2,#20
XX2:
nop
djnzR2,xx2
djnzR3,xx1
ret
delay2:
movR5,#30
del1:
movR4,#20
del2:
nop
djnzR4,del2
lcalldisplay
djnzR5,del1
ret
tab:
db3fH
db06H
db5bH
db4fH
db66H
db6dH
db7dH
db07H
db7fH
db6fH
end
实验五
(1)
org00h
ljmpstart
org03h
ljmpextt
org0030h
start:
movie,#81h
movtcon,#01h
xx:
ljmpxx
extt:
cplp1.0
movc,p1.0
cplc
movp1.4,c
cplp1.7
reti
end
(2)
org00h
ljmpstart
org0003h
ljmpinterrupt1
org0013h
ljmpinterrupt2
org0030h
main:
movR2,#0
xx:
movA,R2
movdptr,#tab
movcA,@A+dptr
movp0,A
lcalldelay
IncR2
cjneR2,#10,xx
movR2,#0
sjmpxx
ret
tab:
db3fH
db06H
db5bH
db4fH
db66H
db6dH
db7dH
db07H
db7fH
db6fH
delay:
movR3,#200
xx1:
movR4,#200
xx2:
nop
nop
djnzR4,xx2
djnzR3,xx1
ret
start:
movip,#00000001b
movie,#85h
movtcon,#05h
ljmpmain
aa:
ljmpaa
interrupt2:
pushacc
pushpsw
pushdpl
pushdph
again:
setbp1.0
lcalldelay
clrp1.0
lcalldelay
setbp1.0
lcalldelay
setbp1.1
lcalldelay
clrp1.1
lcalldelay
setbp1.1
lcalldelay
setbp1.2
lcalldelay
clrp1.2
lcalldelay
setbp1.2
lcalldelay
setbp1.3
lcalldelay
clrp1.3
lcalldelay
setbp1.3
lcalldelay
setbp1.4
lcalldelay
clrp1.4
lcalldelay
setbp1.4
lcalldelay
setbp1.5
lcalldelay
clrp1.5
lcalldelay
setbp1.5
lcalldelay
setbp1.6
lcalldelay
clrp1.6
lcalldelay
setbp1.6
lcalldelay
setbp1.7
lcalldelay
clrp1.7
lcalldelay
setbp1.7
lcalldelay
popdph
popdpl
poppsw
popacc
reti
interrupt1:
movp0,#01111101b
lcalldelay
reti
实验六
流程图
SECONDEQU30H
TCOUNTEQU31H
KCOUNTEQU32H
KEYBITP3.7
ORG00H
SJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVDPTR,#TABLE
MOVP0,#3FH
MOVP2,#3FH;开始,数码管显示"00"
MOVSECOND,#00H
MOVTCOUNT,#00H
MOVKCOUNT,#00H
MOVTMOD,#01H;定时器0工作在方式1
MOVTL0,#(65536-50000)/256
MOVTH0,#(65536-50000)MOD256
K1:
JBKEY,$;等待按键
LCALLDELAY
JBKEY,$
MOVA,KCOUNT
CJNEA,#00H,K2;判断按键次数
SETBTR0;第1次按键,启动定时器
MOVIE,#82H
JNBKEY,$
INCKCOUNT;按键抬起,按键次数值加1
LJMPK1
K2:
CJNEA,#01H,K3
CLRTR0;第2次按键,关闭定时器
MOVIE,#00H
JNBKEY,$
INCKCOUNT;按键抬起,按键次数值加1
LJMPK1
K3:
CJNEA,#02H,K1;第3次按键,返回初始状态
JNBKEY,$
LJMPSTART
INT_T0:
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
INCTCOUNT
MOVA,TCOUNT
CJNEA,#2,I2;是否计够0.1秒
MOVTCOUNT,#00H
INCSECOND
MOVA,SECOND
CJNEA,#100,I1;是否计够10秒
MOVSECOND,#00H
I1:
MOVA,SECOND
MOVB,#10
DIVAB
MOVCA,@A+DPTR;显示时间
MOVP0,A
MOVA,B
MOVCA,@A+DPTR
MOVP2,A
I2:
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
DELAY:
MOVR6,#20
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
RET
END
实验七
流程图
ledbufequ30h
hourequ40h
minuteequ41h
secondequ42h
org00h
ljmpstart
org000bh
ljmptoint
org0030h
start:
movtmod,#01h
movth0,#0b0h
movtl0,#3ch
movie,#10000010b
movhour,#0
movminute,#0
movsecond,#0
movR4,#0
movdptr,#ledmap
setbtr0
mloop:
movA,hour
movB,#10
divAB
movcA,@A+dptr
movledbuf,A
movA,B
movcA,@A+dptr
movledbuf+1,A
movledbuf+2,#40h
movA,minute
movB,#10
divAB
movcA,@A+dptr
movledbuf+3,A
movA,B
movcA,@A+dptr
movledbuf+4,A
movledbuf+5,#40h
movA,second
movB,#10
divAB
movcA,@A+dptr
movledbuf+6,A
movA,B
movcA,@A+dptr
movledbuf+7,A
calldisplayed
ljmpmloop
toint:
pushpsw
pushacc
incR4
cjneR4,#20,exit
movR4,#0
incsecond
movA,second
cjneA,#60,exit
movsecond,#0
incminute
movA,minute
cjneA,#60,exit
movminute,#0
inchour
movA,hour
cjneA,#24,exit
movhour,#0
exit:
movth0,#3ch
movtl0,#0b0h
popacc
poppsw
reti
delay:
movR7,#0ffh
del1:
nop
djnzR7,del1
djnzR6,del1
ret
ledmap:
db3fh,06h,5bh,4fh
db66h,6dh,7dh,07h
db7fh,6fh,77h,7ch
db39h,5eh,79h,71h
displayed:
movR0,#ledbuf
movR1,#8
movR2,#01111111b
loop:
movA,#0
movp0,A
movA,@R0
movp0,A
movA,R2
movp3,A
movR6,#01h
calldelay
movA,R2
RRA
movR2,A
incR0
djnzR1,loop
ret
end
实验八
(1)
流程图与试验七类似
ledbufequ30h
hourequ40h
minuteequ41h
secondequ42h
org00h
ljmpstart
org000bh
ljmptoint
org001bh
ljmptlint
org0030h
start:
movtmod,#11h
movtl0,#0b0h
movth0,#3ch
movth1,#0d8h
movtl1,#0f0h
movie,#10001010b
movhour,#0
movminute,#0
movsecond,#0
movR4,#0
movdptr,#ledmap
setbtr0
setbtr1
mloop:
movA,hour
movB,#10
divAB
movcA,@A+dptr
movledbuf,A
movA,B
movcA,@A+dptr
movledbuf+1,A
movledbuf+2,#40h
movA,minute
movB,#10
divAB
movcA,@A+dptr
movledbuf+3,A
movA,B
movcA,@A+dptr
movledbuf+4,A
movledbuf+5,#40h
movA,second
movB,#10
divAB
movcA,@A+dptr
movledbuf+6,A
movA,B
movcA,@A+dptr
movledbuf+7,A
ljmpmloop
toint:
pushpsw
pushacc
movth0,#3ch
movtl0,#0b0h
incR4
cjneR4,#20,exit
movR4,#0
incsecond
movA,second
cjneA,#60,exit
movsecond,#0
incminute
movA,minute
cjneA,#60,exit
movminute,#0
inchour
movA,hour
cjneA,#24,exit
movhour,#0
exit:
popacc
poppsw
reti
delay:
movR7,#0ffh
del1:
nop
djnzR7,del1
djnzR6,del1
ret
ledmap:
db3