单片机习题参考答案Word下载.docx
《单片机习题参考答案Word下载.docx》由会员分享,可在线阅读,更多相关《单片机习题参考答案Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
A=30H,CY=0,OV=0,AC=0,P=0
84DIVAB;
A=01H,B=10H,CY=0,OV=0,AC=0,P=1
9.试编程将片外数据存储器60H中的内容传送到片内RAM54H单元中。
MOVDPTR,#0060H
MOVXA,@DPTR
MOV54H,A
(MOVP2,#0
MOVR0,#60H
MOVXA,@R0
MOV54H,A)
10.试编程将寄存器R7内容传送到R1中去。
MOVA,R7
MOVR1,A
12.试说明下段程序中每条指令的作用,并分析当执行完指令后,R0中的内容是什么?
MOVR0,#0A7H;
R0=A7H
XCHA,R0;
A=A7H,A的内容暂存R0
SWAPA;
A=7AH
R0=7AH,A的内容恢复
16.试编程将片外RAM中30H和31H单元的内容相乘,结果存放在32H和33H单元中,高位存放在33H单元中。
MOVP2,#0
MOVR0,#30H
MOVB,A
INCR0
MULAB
MOVX@R0,A
MOVA,B
MOVDPTR,#30H
MOVXA,@DPTR
INCDPTR
MOVX@DPTR,A
17.试用三种方法将累加器A中无符号数乘2。
(1)CLRC
RLCA
(2)MOVR0,A
ADDA,R0
或ADDA,ACC
(3)MOVB,#2
MULAB
18.请分析依次执行下面指令的结果:
MOV30H,#0A4H;
(30H)=A4H
MOVA,#0D6H;
A=D6H,P=1
MOVR0,#30H;
R0=30H
MOVR2,#47H;
R2=47H
ANLA,R2;
A=46H,P=1
ORLA,@R0;
A=E6H,P=1
SWAPA;
A=6EH,P=1
CPLA;
A=91H,P=1
XRLA,#0FFH;
ORL30H,A;
(30H)=EEH
19.求执行下列指令后,累加器A及PSW中进位位CY、奇偶位P和溢出位OV的值。
(1)当A=5BH时;
ADDA,#8CH
01011011
+)10001100
11100111
结果:
A=E7H,CY=0,OV=0,P=0,AC=1
(2)当A=5BH时;
ANLA,#7AH
∧)01111010
01011010
结果:
A=5AH,P=0
(3)当A=5BH时;
XRLA,#7FH
⊕)01111111
00100100
A=24H,P=0
(4)当A=5BH,CY=1时;
SUBBA,#0E8H
01011011或将减法转换成补码加法01011011
11101000-E8H的补码00011000
-)1-1的补码+)11111111
01110010101110010
A=72H,CY=1,OV=0,P=0,AC=0
23.执行下述程序后,SP=?
A=?
B=?
解释每一条指令的作用,并将其翻译成机器码。
地址(H)机器码(H)ORG200H
0200758140MOVSP,#40H;
SP=40H
02037430MOVA,#30H;
A=30H
0205120250LCALL250H;
调用250H开始的子程序SP=42H,
;
(42H)=02H,(41H)=08H
02082410ADDA,#10H;
此句没有执行
020AF5F0MOVB,A;
B=30H
020C80FEL1:
SJMPL1;
ORG0250H
025090020AMOVDPTR,#20AH;
DPTR=020AH
0253C082PUSHDPL;
DPL进栈,SP=43H,(43H)=0AH
0255C083PUSHDPH;
DPH进栈,SP=44H,(44H)=02H
025722RET;
返回,此处是利用RET将栈顶内容弹出
PC=020AH,SP=42H
44H
02H
43H
0AH
栈区42H
41H
08H
40H
执行程序后,SP=42H,A=30H,B=30H
27.试编一程序将外部数据存储器2100H单元中的高4位置“1”,其余位清”0”。
MOVDPTR,#2100H
MOVXA,@DPTR
ANLA,#0F0HMOVA,#0F0H
ORLA,#0F0H
28.试编程将内部数据存储器40H单元的第0位和第7位置”1”,其余位变反。
MOVA,40H
CPLA
SETB(或ORLA,#81H)
SETB
MOV40H,A
29.请用位操作指令,求下面逻辑方程:
MOVC,
ORLC,
ANLC,
ORLC,/
MOV,C
ANLC,/
第五章P1121,3,6,7,11,20
1.编程将片内40H~60H单元中内容送到以3000H为首的片外RAM存储区中
方法1:
MOVR0,#40H
MOVDPTR,#3000H
MOVR2,#21H
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,LOOP
┋
方法2:
MOVR0,#40H
MOVDPTR,#3000H
MOVR2,#0
INCR2
CJNER2,#21H,LOOP
方法3:
CJNER0,#61H,LOOP
补充:
编程将ROM中3000H~3020H单元的内容送片内RAM40H~60H单元中去。
MOVDPTR,#3000H
MOVR2,#21H
CLRA
MOVCA,@A+DPTR
MOV@R0,A
INCR0
INCDPTR
DJNZR2,LOOP
3.编程计算片内RAM区50H~57H8个单元中数的算术平均值,结果存放在5AH中。
解:
ORG2000H
MOVR0,#50H
CLRA
MOVR2,A
ADDA,@R0
JNCDOWN
INCR2
DOWN:
INCR0
CJNER0,#58H,LOOP
MOVR7,#3
SHIFT:
XCHA,R2
CLRC
RRCA
XCHA,R2
DJNZR7,SHIFT
MOV5AH,A
┋
6.设有100个有符号数,连续存放在以2000H为首地址的片外RAM存储区中,试编程统计其中正数、负数、零的个数。
CLRA
MOVR5,A;
存零的个数
MOVR6,A;
存负数的个数
MOVR7,A;
存正数的个数
MOVR2,#100
MOVDPTR,#2000H
MOVXA,@DPTR
JNZNZERO
INCR5
SJMPDOWN
NZERO:
JNB,PLUS
INCR6
PLUS:
INCR7
INCDPTR
DJNZR2,LOOP
MOVR5,A;
MOVR6,A;
MOVR7,A;
MOVR2,#100
MOVDPTR,#2000H
MOVXA,@DPTR
INCDPTR
CJNEA,#0,NZERO
INCR5
SJMPDOWN
JCNEGATIVE
INCR7
NEGATIVE:
INCR6
7.请将片外数据存储器地址为1000H~1030H的数据块,全部搬迁到片内RAM30H~60H中,并将原数据块区域全部清“0”。
ORG1000H
MOVDPTR,#1000H
MOVR0,#30H
MOVR2,#31H
MOVX@DPTR,A
8.试编写一子程序,使间址寄存器R1所指向的2个片外RAM连续单元中的高4位二进制数合并为1个字节装入累加器A中。
已知R0指向低地址,并要求该单元高4位放在A的高4位中。
XX:
MOVXA,@R1
ANLA,#0F0H
MOVB,A
INCR1
MOVXA,@R1
SWAPA
ORLA,B
RET
10.试编一查表程序,从首地址为1000H、长度为100的数据块中找出ASCII码A,将其地址送到10A0H和10A1H单元中。
MOVDPTR,#1000H
MOVR7,#100
LOOP:
MOVXA,@DPTR
CJNEA,#’A’,NXET
MOVA,DPL
MOVB,DPH
MOVDPTR,#10A0H
MOVX@DPTR,A
MOVA,B
SJMP$
NEXT:
DJNZR7,LOOP
11.设在200H~204H单元中存放有5个压缩BCD码,编程将它们转换成ASCII码,存放到以205H单元为首地址的存储区中。
MOVP2,#02H
MOVR0,#00H
MOVR1,#05H
MOVR2,#05
MOVXA,@R0
ANLA,#0FH
ORLA,#30H
MOVX@R1,A
MOVXA,@R0
MOVR2,#02H
MOVR3,#00H
MOVR4,#05H
MOVR7,#05
MOVDPH,R2
MOVDPL,R3
MOVB,A
MOVR3,DPL
MOVDPL,R4
MOVA,B
MOVR4,DPL
DJNZR7,LOOP
13.试编程实现下列逻辑表达式的功能。
设~为8个变量的输入端,而其中又作为变量输出端。
①
X0BIT
X1BIT
X2BIT
X3BIT
X4BIT
X5BIT
X6BIT
X7BIT
MOVC,X0
ANLC,X1
ANLC,/X2
ORLC,/X3
ORLC,X4
ANLC,X5
ANLC,X6
ORLC,/X7
MOV,C
┋
②
ONEBIT20H;
存第一项逻辑值
TWOBIT21H;
存第二项逻辑值
X0BIT
MOVC,X0
CPLC
MOVONE,C
MOVC,X2
ANLC,X3
ANLC,X4
MOVTWO,C
MOVC,X5
ANLC,X7
ORLC,TWO
ORLC,ONE
┋
20.根据图的线路设计灯亮移位程序,要求8只发光二极管每次亮一个,点亮时间为40ms。
顺次一个一个地循环右移点亮,循环不止。
已知时钟频率为24MHz。
MOVA,#01H
MOVP1,A
LCALLD40MS
RRA
SJMPLOOP
D40MS:
MOVR2,#160
EXTERNAL:
MOVR3,#250
INTERNAL:
DJNZR3,INTERNAL
DJNZR2,EXTERNAL
RET
第六章P1555,6,8
5.已知80C51单片机系统时钟频率为24MHz,请利用定时器T0和输出矩形脉冲其波形如下:
选择T0工作于方式2(8位重置初值)定时50μs
fosc=24MHz
(28-X)×
μS=50μsX=156=9CH
MOVTMOD,#02H
MOVTH0,#9CH
MOVTL0,#9CH
CLR;
=0
SETBTR0
HIGH:
SETB;
=1,输出50μs高电平
HIGH1:
JBCTF0,LOW;
50μs到清TF0,转输出低电平
AJMPHIGH1;
50μs未到,转HIGH1等待
LOW:
MOVR7,#7;
350μs=7×
50μs
=0输出350μs低电平
LOW1:
JBCTF0,LOW2;
50μs到清TF0,转LOW2
AJMPLOW1
LOW2:
DJNZR7,LOW1;
7次未到,转LOW1
AJMPHIGH;
7次到,转HIGH,输出50μs高电平
MOVTMOD,#02H;
设置T0为方式2定时
MOVTH0,#9CH;
赋初值
CLR
SETBTR0;
启动T0工作
L1:
MOVR7,#8
DEL:
JBCTF0,REP;
AJMPDEL
REP:
CLR;
DJNZR7,DEL
AJMPL1
选择T0工作于方式1定时50μs
(216-X)×
μS=50μsX=65436=FF9CH
选择T0工作于方式1定时350μs
μS=350μsX=64836=FD44H
START:
MOVTMOD,#01H;
设置T0为方式1定时
LP0:
MOVTH0,#0FFH;
赋初值定时50μs
LP1:
JBCTF0,LP2;
SJMPLP1
LP2:
CLR
MOVTH0,#0FDH;
赋初值定时350μs
MOVTL0,#44H
LP3:
JBCTF0,LP4;
=1,输出350μs低电平
SJMPLP3
LP4:
SJMPLP0
6.在80C51单片机中,已知时钟频率为12MHz,请编程使和分别输出周期为2ms和500μs的方波。
选择T0工作于方式1定时250μs
fosc=12MHz
1μS=250μsX=65286=FF06H
MOVTMOD,#01H
MOVTH0,#0FFH
MOVTL0,#06H
SETBTR0
MOVR7,#4;
1ms=4×
250μs
D250:
JBCTF0,D2;
250μs到清TF0,转移
AJMPD250;
250μs未到,等待
D2:
CPL
MOVTH0,#0FFH;
重装初值
DJNZR7,D250;
4次未到,转D500
CPL
AJMPDEL;
4次到,转DEL
选择T0工作于方式2定时250μs
1μS=250μsX=6
MOVTMOD,#02H
MOVTH0,#06H
4次未到,转D250
选择T0工作于方式2定时250μs,中断
T1工作于方式1定时1ms,中断
1μS=1000μsX=64536=FC18H
ORG0000H
LJMPMAIN
ORG000BH
LJMPT00
ORG001BH
LJMPT11
MAIN:
MOVTMOD,#12H
MOVTH1,#0FCH
MOVTL1,#18H
MOVIE,#8AH
SETBTR1
T00:
RETI
T11:
MOVTH1,#0FCH
方法4:
选择T0工作于方式3定时250μs,中断。
1μS=250μsX=6
T0方式3时TL0占用TR0、TF0,TH0占用TR1、TF1。
LJMPITL0
LJMPITH0
MOVSP,#50H
MOVTMOD,#03H
MOVR7,#4
ITL0:
MOVTL0,