单片机复习题解答+平时上课习题已通过测试.docx
《单片机复习题解答+平时上课习题已通过测试.docx》由会员分享,可在线阅读,更多相关《单片机复习题解答+平时上课习题已通过测试.docx(48页珍藏版)》请在冰点文库上搜索。
![单片机复习题解答+平时上课习题已通过测试.docx](https://file1.bingdoc.com/fileroot1/2023-6/17/e8122bbf-3965-44ff-8013-2bdc9e08fde8/e8122bbf-3965-44ff-8013-2bdc9e08fde81.gif)
单片机复习题解答+平时上课习题已通过测试
单片机综合试验总复习题
1、程序在运行时出现下面提示,要消除提示框应如何操作?
按复位键,再按PCDBG键,点OK或者YES
2、IN6接模拟量,Y4接地址线,写出启动0809进行A/D转换及读入数据的指令
MOVA,#6;送通道数
MOVDPTR,#0C000H;0809地址送数据指针
MOVX@DPTR,A;启动AD转换
ACALLDELAY;延时
MOVXA,@DPTR;读转换值
3、欲将8255PA、PB口设为输入(方式0),PC口设为输出,写出相关指令。
(1001001092H)8255的初始化,参考实验指导书17页命令口控制字
MOVDPTR,#0FF2BH;8255命令口地址
MOVA,#92H
MOVX@DPTR,A
4、已知0809参考电压为5V,输入的模拟电压为3.5V,经A/D转换后,对应的数字量是多少?
255*3.5/5=178.5=179
B3H
5、已知00H~FFH对应的0832输出模拟量是-5V~+5V,若要输出2.5V,写出相应指令。
(0832片选端接Y4)。
255*0.75=191.25=192
C0
MOVDPTR,0C000H;0832地址
MOVA,#0C0H;三角波初值
MOVX@DPTR,A;输出
6、用定时/计数器1延时277.1ms,写出其初始化程序。
(65536-定时常数)*2us=27.71ms定时常数=51681C9E1
T1T0
10000000
因此TOMD置10H
MOVTMOD,#10H
MOVTH1,#0C9H
MOVTL1,#0E1H
MOVR0,#10
SETBEA
SETBET1
SETBTR1
7、编写出软件延时270ms的延时子程序(6mhz晶振)
DELAY:
MOVR5,#27
LOP0:
MOVR6,#10
LOP1:
MOVR7,250
DJNZR7,$
DJNZR6,LP1
DJNZR5,LP0
RET
8、计算下列延时子程序的延时时间。
DELAY:
MOVR0,#01
DEL:
NOP1
NOP1
DJNZR0,DEL2循环256次
RET1
(1+256*(1+1+2)+2)*2us=2054us
9、欲在数码管上显示“-5”,写出相应程序指令。
要点:
在扫描最后的表中加个负号显示对应的编码0BFH
程序:
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单元的数据。
用定时器定时。
0.331s=331ms=33.1ms*10(65536-定时常数)*2us=33.1ms定时常数48986BF5A
接线方法:
P1.0接K(没要求的话随便哪个开关)
程序开头可给7003H和10H单元存入数据以便测试
参考赋值程序:
MOVA,#34H
MOVDPTR,#7003H
MOVX@DPTR,A
MOVA,#56H
MOV10H,A
程序:
ORG0000H
AJMPSTART
ORG001BH
AJMPIN_T1
ORG0030H
START:
MOVSP,#60H
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;等于1转移至FISH,否则往下走
MOVDPTR,#7003H
MOVXA,@DPTR
AJMPNEXT
FISH:
MOVA,10H
NEXT:
MOVB,#10H
DIVAB
MOV20H,B
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这三个单元中最大的数。
接线方法:
S/P区DATA插孔接BUS3区P3.0,CLK接P3.1
S/P区CLR接本区+5V
程序开头可给10H,11H,12H单元存入数值以便测试
参考赋值程序:
MOVA,#50H
MOV10H,A
MOVA,#51H
MOV11H,A
MOVA,#52H
MOV12H,A
程序:
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#60H
MOVSCON,#00H
MOVA,#50H
MOV10H,A
MOVA,#51H
MOV11H,A
MOVA,#52H
MOV12H,A
MOVA,10H
SUBBA,11H
JCBIG
MOVR1,10H
AJMPBIGER
BIG:
MOVR1,11H
BIGER:
MOVA,R1
SUBBA,12H
JCFISH
MOVA,R1
MOVB,#10H
DIVAB
MOV20H,B
MOV21H,A
MOVDPTR,#TAB
MOVA,20H
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
MOVR0,#5
DJNZR0,$
MOVA,21H
MOVCA,@A+DPTR
MOVSBUF,A
AJMPEXIT
FISH:
MOVA,12H
MOVB,#10H
DIVAB
MOV20H,B
MOV21H,A
MOVDPTR,#TAB
MOVA,20H
MOVCA,@A+DPTR
MOVSBUF,A
MOVR0,#5
DJNZR0,$
MOVA,21H
MOVCA,@A+DPTR
MOVSBUF,A
EXIT:
AJMP$
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
12、每147ms检测一次片内30H、31H单元中的数,将这两个单元中较大的值在数码管上显示出来(定时器定时)。
(65536-定时常数)*2us=14.7ms定时常数58186E34AH
程序中给已给30H单元存55H,31H存56H,便于测试
接线方法:
S/P区DATA插孔接BUS3区P3.0,CLK接P3.1
S/P区CLR接本区+5V
程序:
ORG0000H
AJMPSTART
ORG001BH
AJMPIN_T1
ORG0030H
START:
MOVA,#55H
MOV30H,A
MOVA,#56H
MOV31H,A
MOVSCON,#00;
MOVTMOD,#10H
MOVTH1,#0E3H
MOVTL1,#4AH
MOVR0,#10
SETBET1
SETBEA
SETBTR1
AJMP$
IN_T1:
PUSHACC
MOVTH1,#0E3H
MOVTL1,#4AH
DJNZR0,EXIT
MOVR0,#10
CLRC
MOVDPTR,#CDATE
MOVA,30H
SUBBA,31H
JCLOOP;进位为1转移
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,用定时器定时。
(65536-定时常数)*2us=77.03ms定时常数27021698D
若显示字符顺序改变,可更改DB后面的值,参考实验指导书24页求显示码
接线方法:
S/P区DATA插孔接BUS3区P3.0,CLK接P3.1
S/P区CLR接本区+5V
程序:
ORG0000H
AJMPSTART
ORG000BH
AJMPINT_T0
ORG0030H
START:
MOVSP,#60
MOVTMOD,#10H
MOVTH0,#69H
MOVTL0,#8DH
MOVR0,#0H
MOVR1,#30
MOVSCON,#00H
SETBTR0
SETBET0
SETBEA
SJMP$
INT_T0:
MOVTH0,#69H
MOVTL0,#8DH
DJNZR1,EXIT
MOVR1,#30
MOVDPTR,#CDATA
MOVA,R0
MOVCA,@A+DPTR
MOVSBUF,A
INCR0
CJNER0,#7,EXIT
MOVR0,#0H
EXIT:
RETI
CDATA:
DB6EH,0EEH,0DAH,3EH,0F2H,9CH,1CH
END
14、8255PC口接8个开关,每0.3秒读一次开关状态,并将其显示在数码管上。
(用定时器定时)
接线方法:
PC口PC7-PC0接开关K1-7
S/P区DATA插孔接BUS3区P3.0,CLK接P3.1
S/P区CLR接本区+5V
程序:
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;C口地址
MOVXA,@DPTR
MOVB,#10H
DIVAB;拆字也可用ANL指令屏蔽高低四位
MOV10H,B
MOV11H,A
MOVDPTR,#TAB
MOVA,10H
MOVCA,@A+DPTR
MOVSBUF,A
MOVR2,#5
DJNZR2,$
MOVA,11H
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位)。
接线方法:
T5端接P3.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,#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
16、P1.0接K1,试编程实现将拨开关次数显示在数码管上
接线方法:
P1.0接K1
S/P区DATA插孔接BUS3区P3.0,CLK接P3.1
S/P区CLR接本区+5V
程序:
ORG0000H
AJMPSTART
ORG0030H
START:
MOVR0,#0
LP1:
MOVDPTR,#CDATA
MOVA,R0
MOVCA,@A+DPTR
MOVSBUF,A
MOVR1,#5
DJNZR1,$
LP:
JNBP1.0,$
ACALLDELAY
JNBP1.0,LP
LP2:
JBP1.0,$
ACALLDELAY
JBP1.0,LP2
INCR0
AJMPLP1
DELAY:
MOVR6,#10
LP3:
MOVR7,#250
DJNZR7,$
DJNZR6,LP3
RET
CDATA:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0B6H,0BEH,0E0H
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
END
17、试编程使开关K为0时使8个发光二极管按规律1循环发光;开关为1时按规律2循环发光,每个状态显示880ms(定时器定时)。
1、L1--L2--L3--L4--L5--L6--L7--L8
2、L1L8—L2L7—L3L6—L4L5
接线方法:
P1.7-P1.0接LED灯1-8
P3.3接开关K(题目没说明的话任意一个开关都行)
程序:
ORG0000H
AJMPSTART
ORG000BH
AJMPIN_T0
ORG0030H
START:
MOVTMOD,#01H
MOVTH0,#54H
MOVTL0,#20H
MOVR0,#10
MOVR1,#0
MOVR2,#0
SETBET0
SETBEA
SETBTR0
AJMP$
LOOP1:
MOVDPTR,#TABL2
MOVA,R2
MOVCA,@A+DPTR
MOVP1,A
INCR2
CJNER2,#4,EXIT
MOVR2,#0
IN_T0:
MOVTH0,#54H
MOVTL0,#20H
DJNZR0,EXIT
MOVR0,#10
JBP3.3,LOOP1
LOOP2:
MOVDPTR,#TABL1
MOVA,R1
MOVCA,@A+DPTR
MOVP1,A
INCR1
CJNER1,#8,EXIT
MOVR1,#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上,用定时器定时。
10001000上C口入下C口出
88H
接线方法:
PC7-PC4接开关K1-4,PC3-PC0接LED灯1-4
程序:
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秒读一次开关,并将开关值显示在数码管上。
接线方法:
P1.7~P1.4接开关
S/P区DATA插孔接BUS3区P3.0,CLK接P3.1
S/P区CLR接本区+5V
程序:
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
MOV20H,B
MOV21H,A
MOVDPTR,#TAB
MOVA,20H
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
MOVR0,#5
DJNZR0,$
MOVA,21H
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
20、用定时器定时,设计一个10秒倒计时器,数码管从“10”、“09”、。
。
。
显示到“00”为止。
接线方法:
S/P区DATA插孔接BUS3区P3.0,CLK接P3.1
S/P区CLR接本区+5V
程序:
ORG0000H
AJMPSTART
ORG000BH
AJMPINT_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
DJNZR0,EXIT
MOVR0,#10
MOVA,R1
MOVB,#10H
DIVAB
MOV10H,B
MOV11H,A
MOVDPTR,#TAB
MOVA,10H
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
MOVA,11H
MOVCA,@A+DPTR