51单片机复习题参考程序.docx
《51单片机复习题参考程序.docx》由会员分享,可在线阅读,更多相关《51单片机复习题参考程序.docx(21页珍藏版)》请在冰点文库上搜索。
51单片机复习题参考程序
1、略。
2、IN6接模拟量,Y4接地址线,写出启动0809进行A/D转换及读入数据的指令。
MOVA,#6
MOVDPTR,#0C000H
MOVX@DPTR,A
MOVXA,@DPTR
3、欲将8255PA、PB口设为输入(方式0),PC口设为输出,写出相关指令。
MOVDPTR,#0FF2BH
MOVA,#92H
MOVX@DPTR,A
4、已知0809参考电压为5V,输入的模拟电压为3.5V,经A/D转换后,对应的数字量是多少?
B3H
5、已知00H~FFH对应的0832输出模拟量是-5V~+5V,若要输出2.5V,写出相应指令。
(0片选端接Y4)。
MOVDPTR,#0C000H
MOVA,#0C0H
MOVX@DPTR,A
6、用定时/计数器1延时277.1ms,写出其初始化程序。
MOVTMOD,#10H
MOVTH1,#0C9H
MOVTL1,#0E1H
MOVR0,#10
SETBEA
SETBET1
SETBTR1
7、编写出软件延时7ms的延时子程序(6mhz晶振)
DELAY:
MOVR6,#7
DELAY1:
MOVR7,#250
DJNZR7,$
DJNZR6,DELAY1
RET
8、a、计算下列延时子程序的延时时间。
DELAY:
MOVR0,#01256
DEL:
NOP1
NOP1
DJNZR0,DEL2
RET1
a(1+256*4+2)*2MS=2.05US
b、试编写270ms的延时子程序。
bDELAY:
MOVR5,#27
DELAY1:
MOVR6,#10
DELAY2:
MOVR7,#250
DJNZR7,$
DJNZR6,DELAY2
DJNZR5,DELAY1
RET
9、欲在数码管上显示“-5”,写出相应程序指令。
ORG0000H
AJMPSTART
ORG0030H
START:
MOV10H,#5
MOV11H,#16
LOOP:
MOVR0,#10H
MOVR1,#1
MOVR2,#2
ACALLDISP
AJMPLOOP
DISP:
MOVDPTR,#DISPC
MOVA,@R0
MOVCA,@A+DPTR
MOVDPTR,#0FF22H
MOVX@DPTR,A
MOVDPTR,#0FF21H
MOVA,R1
MOVX@DPTR,A
RLA
MOVR1,A
MOVR7,#2
ACALLDELAY
INCR0
DJNZR2,DISP
RET
DELAY:
MOVR6,#249
DJNZR6,$
DJNZR7,DELAY
RET
DISPC:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH,0BFH
END
(完)
10.每0.331s读一次开关,当开关K=0时在数码管上显示片外7003H单元的数据,K=1时显示片内10H单元的数据。
用定时器定时。
ORG0000H
AJMPSTART
ORG001BH
AJMPIN_T1
ORG0030H
START:
MOVTMOD,#10H
MOVTH1,#0BFH
MOVTL1,#5AH
MOVR3,#10
SETBET1
SETBEA
SETBTR1
LOOP:
MOVR0,#20H
MOVR1,#1
MOVR2,#2
ACALLDISP
AJMPLOOP
IN_T1:
PUSHDPH
PUSHDPL
PUSHACC
MOVTH1,#0BFH
MOVTL1,#5AH
DJNZR3,LAST
MOVR3,#10
JBP1.0,FISH
MOVDPTR,#7001H
MOVXA,@DPTR
AJMPNEXT
FISH:
MOVA,10H
NEXT:
MOVB,A
ANLA,#0FH
MOV20H,A
MOVA,B
SWAPA
ANLA,#0FH
MOV21H,A
LAST:
POPACC
POPDPL
POPDPH
RETI
DISP:
MOVDPTR,#DISPC
MOVA,@R0
MOVCA,@A+DPTR
MOVDPTR,#0FF22H
MOVX@DPTR,A
MOVDPTR,#0FF21H
MOVA,R1
MOVX@DPTR,A
RLA
MOVR1,A
MOVR7,#2
ACALLDELAY
INCR0
DJNZR2,DISP
RET
DELAY:
MOVR6,#249
DJNZR6,$
DJNZR7,DELAY
RET
DISPC:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
END
(完)
11在数码管上显示片内10H、11H、12H这三个单元中最大的。
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSCON,#00H
MOVA,10H
SUBBA,11H
JCBIG
MOVR1,10H
AJMPBIGER
BIG:
MOVR1,11H
BIGER:
MOVA,R1
SUBBA,12H
JCFISH
MOVA,R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
MOVR5,#5
DJNZR5,$
AJMPEXIT
FISH:
MOVA,12H
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
MOVR5,#5
DJNZR5,$
EXIT:
AJMP$
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
(完)
12每147ms检测一次片内30H、31H单元中的数,将这两个单元中较大的值在数码管上显示出来(定时器定时)。
ORG0000H
AJMPSTART
ORG001BH
AJMPIN_T1
ORG0030H
START:
MOVSCON,#00;
MOVTMOD,#10H
MOVTH1,#0E3H
MOVTL1,#4AH
MOVR0,#10
SETBET1
SETBEA
SETBTR1
AJMP$
INT_1:
PUSHACC
MOVTH1,#0E3H
MOVTL1,#4AH
DJNZR0,EXIT
MOVR0,#10
CLRC
MOVDPTR,#TAB
MOVA,30H
SUBBA,31H
JCLOOP
MOVA,30H
AJMPFISH
LOOP:
MOVA,31H
FISH:
MOVB,A
ANLA,#0FH
MOVCA,@A+DPTR
MOVSBUF,A
MOVR1,#5
DJNZR1,$
EXIT:
POPACC
RETI
CDATE:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
(完)
13、在数码管上按下列规律循环显示H,A,2,B,3,C,L每个字符显示770.3mS,用定时器定时。
ORG0000H
AJMPSTART
ORG001BH
AJMPINT_1
ORG0030H
START:
MOVTMOD,#10H
MOVTH1,#69H
MOVTL1,#8DH
MOVR0,#10
MOVR1,#0
SETBET1
SETBEA
SETBTR1
AJMP$
INT_1:
PUSHACC
MOVTH1,#69H
MOVTL1,#8DH
DJNZR0,EXIT
MOVR0,#10
MOVDPTR,#TAB
MOVA,R1
MOVCA,@A+DPTR
MOVSBUF,A
MOVR2,#5
DJNZR2,$
MOVSBUF,#00H
INCR0
CJNER0,#7,EXIT
MOVR0,#0
EXIT:
POPACC
RETI
TAB:
DB6EH,0EEH,0DAH,3EH,0F2H,9CH,1CH
END
(完)
14、8255PC口接8个开关,每0.3秒读一次开关状态,并将其显示在数码管上。
(用定时器定时)
ORG0000H
AJMPSTART
ORG000BH
AJMPIN_T0
ORG0030H
START:
MOVDPTR,#0FF2BH
MOVA,#89H
MOVX@DPTR,A
MOVTMOD,#01H
MOVTH0,#9EH
MOVTL0,#58H
MOVR1,#6
MOVSCON,#0
SETBTR0
SETBET0
SETBEA
SJMP$
IN_T0:
MOVTH0,#9EH
MOVTL0,#58H
DJNZR1,EXIT
MOVR1,#6
MOVDPTR,#0FF2AH
MOVXA,@DPTR
MOVB,#10H
DIVAB拆字也可用ANL指令屏蔽高低四位
MOV10H,B
MOV11H,A
MOVDPTR,#TAB
MOVA,10H
MOVCA,@A+DPTR
MOVSBUF,A
MOVR2,#5
DJNZR2,$
MOVA,10H
MOVCA,@A+DPTR
MOVSBUF,A
EXIT:
RETI
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
15、测T5端7ms的脉冲数,并将其显示在数码管上(4位)。
ORG0000H
AJMPSTART
ORG001BH
AJMPIN_T1
ORG0030H
START:
MOVTMOD,#15H
MOVTH1,#0F2H
MOVTL1,#54H
MOVTL0,#0
SETBET1
SETBEA
SETBTR1
SETBTR0
LOOP:
MOVR0,#10H
MOVR1,#1
MOVR2,#4
ACALLDISP
AJMPLOOP
IN_T1:
PUSHACC
PUSHB
MOVTH1,#0F2H
MOVTL1,#54H
MOVA,TL0
MOVB,#10H
DIVAB
MOV10H,B
MOV11H,A
MOVA,TH0
MOVB,#10H
DIVAB
MOV12H,B
MOV13H,A同样,拆字也可用ANL指令屏蔽高低四位,但指令较多
MOVTL0,#0
MOVTH0,#0
POPB
POPACC
RETI
DISP:
MOVDPTR,#DISPC
MOVA,@R0
MOVCA,@A+DPTR
MOVDPTR,#0FF22H
MOVX@DPTR,A
MOVDPTR,#AAA
MOVA,R1
MOVCA,@A+DPTR
MOVDPTR,#0FF21H
MOVX@DPTR,A
MOVR7,#2
ACALLDELAY
INCR0
INCR1
DJNZR2,DISP
RET
DELAY:
MOVR6,#100
DJNZR6,$
DJNZR7,DELAY
RET
DISPC:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
END
16、P1.0接K1,试编程实现将按键次数显示在数码管上
见实验作业四程序不变(不过这个K1有点不解
)
17、试编程使开关K为0时使8个发光二极管按规律1循环发光;开关为1时按规律2循环发光,每个状态显示880ms(定时器定时)。
1、L1--L2--L3--L4--L5--L6--L7--L8
P1.7P1.0
2、L1L8—L2L7—L3L6—L4L5
ORG0000H
AJMPSTART
ORG000BH
AJMPIN_T0
ORG0030H
START:
MOVTMOD,#01H
MOVTH0,#54H
MOVTL0,#20H
MOVR0,#10
MOVR1,#0
MOVR2,#0
SETBET0
CJNER1,#8,EXIT
MOVR1,#0
AJMPEXIT
LOOP1:
MOVDPTR,#TABL2
MOVA,R2
MOVCA,@A+DPTR
MOVP1,A
INCR2
SETBEA
SETBTR0
AJMP$
IN_T0:
MOVTH0,#54H
MOVTL0,#20H
DJNZR0,EXIT
MOVR0,#10
JBP3.3,LOOP1
LOOP2:
MOVDPTR,#TABL1
MOVA,R1
MOVCA,@A+DPTR
MOVP1,A
INCR1
CJNER2,#4,EXIT
MOVR2,#0
EXIT:
RETI
TABL1:
DB80H,40H,20H,10H,08H,04H,02H,01H
TABL2:
DB81H,42H,24H,18H
END
18、8255PC口接4个开关和4个LED发光二极管,试编程实现每0.5秒读一次开关值,并将开关状态显示到发光二极管LED上,用定时器定时。
ORG0000H
AJMPSTART
ORG000BH
AJMPIN_T0
ORG0030H
START:
MOVDPTR,#0FF2BH
MOVA,#88H
MOVX@DPTR,A
MOVTMOD,#01H
MOVTH0,#9EH
MOVTL0,#58H
MOVR1,#10
MOVSCON,#0
SETBTR0
SETBET0
SETBEA
AJMP$
IN_T0:
MOVTL0,#58H
MOVTH0,#9EH
DJNZR1,EXIT
MOVR1,#10
MOVDPTR,#0FF2AH
MOVXA,@DPTR
SWAPA
MOVX@DPTR,A
EXIT;RETI
END
19、P1.7~P1.4接开关,每0.5秒读一次开关,并将开关值显示在数码管上。
ORG0000H
AJMPSTART
ORG000BH
AJMPIN_T0
ORG0030H
START:
MOVTMOD,#01H
MOVTH0,#9EH
MOVTL0,#58H
MOVR1,#10
MOVSCON,#0
SETBTR0
SETBET0
SETBEA
AJMP$
IN_T0:
MOVTL0,#58H
MOVTH0,#9EH
DJNZR1,EXIT
MOVR1,#10
MOVA,P1
MOVB,#10H
DIVAB
MOVDPTR,#TAB
MOVCA,@A+DPTR
CLRTI
MOVSBUF,A
JNBTI,$
MOVSBUF,#0
EXIT:
RETI
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
20、用定时器定时,设计一个10秒倒计时器,数码管从“10”、“09”、。
。
。
显示到“00”为止。
ORG0000H
AJMPSTART
ORG000BH
AJMPIN_T0
ORG0030H
START:
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVR0,#10
MOVR1,#9
MOVSCON,#0
MOVDPTR,#TAB
MOVA,#0
MOVCA,@A+DPTR
CLRTI
MOVSBUF,A
JNBTI,$
MOVA,#1
MOVCA,@A+DPTR
MOVSBUF,A
SETBTR0
SETBET0
SETBEA
AJMP$
INT_T0:
MOVTL0,#3CH
MOVTH0,#0B0H
DJNZR,EXIT
MOVR0,#10
MOVA,R1
MOVB,#10H
DIVAB
MOV10H,B
MOV11H,A
MOVDPTR,#CDATA
MOVA,10H
MOVCA,@A+DPTR
CLRTI
MOVSBUF,A
JNBTI,$
MOVA,11H
MOVCA,@A+DPTR
MOVSBUF,A
DECR1
CJNER1,#0FFH,EXIT
CLREA
EXIT:
RETI
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END