单片机习题参考答案
第四章 P97 6,7,9,10,12,16,17,18,19,23,27,28,29
6. 在80C51片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H,请分析下段程序中各指令的作用,并翻译成相应的机器码;说明源操作数的寻址方式及顺序执行每条指令后的结果。
机器码(H)
指令
结果
源操作数的寻址方式
E540
MOV
A,40H
;A=(40H)=48H
直接寻址
F8
MOV
R0,A
;R0=48H
寄存器寻址
7590F0
MOV
P1,#0F0H
;P1=0F0H
立即寻址
A630
MOV
@R0,30H
;(48H)= 38H
直接寻址
901246
MOV
DPTR,#1246H;DPTR=1246H
立即寻址
853840
MOV
40H,38H
;(40H)=40H
直接寻址
A830
MOV
R0,30H
;R0=38H
直接寻址
8890
MOV
90H,R0
;(90H)=38H
寄存器寻址
754830
MOV
48H,#30H
;(48H)=30H
立即寻址
E6
MOV
A,@R0
;A=40H
寄存器间接寻址
8590A0
MOV
P2,P1
;P2=P1=38H
直接寻址
7. 试说明下列指令的作用,并将其翻译成机器码,执行最后一条指令对PSW有何影响?A的终值为多少?
机器码(H)
指令
结果
(1) 7872
MOV
R0,#72H
;R0=72H
E8
MOV
A,R0
;A=72H,P=0
244B
ADD
A,#4BH
;A=BDH,CY=0,OV=1,AC=0,P=0
(2) 7402
MOV
A,#02H
;A=02H,P=1
F5F0
MOV
B,A
;B=02H
740A
MOV
A,#0AH
;A=0AH,P=0
25F0
ADD
A,B
;A=0CH,CY=0,OV=0,AC=0,P=0
A4
MUL
AB
;A=18H,B=0,CY=0,OV=0,AC=0,P=0
(3)
7420
MOV
A,#20H
;A=20H,P=1
F5F0
MOV
B,
A
;B=20H
25F0
ADD
A,B
;A=40H,CY=0,OV=0,AC=0,P=1
9410
SUBB
A,#10H
;A=30H,CY=0,OV=0,AC=0,P=0
84
DIV
AB
;A=01H,B=10H,CY=0,OV=0,AC=0,P=1
9. 试编程将片外数据存储器60H中的内容传送到片内RAM 54H单元中。
MOV
DPTR,#0060H
MOVX
A,@DPTR
MOV
54H,A
(MOV
P2,#0
MOV
R0,#60H
MOVX
A,@R0
MOV
54H,A)
10.试编程将寄存器R7内容传送到R1中去。
MOV
A,R7
MOV
R1,A
12.试说明下段程序中每条指令的作用,并分析当执行完指令后,R0中的内容是什么?
MOV
R0,#0A7H
;R0=A7H
XCH
A,R0
;A=A7H,A的内容暂存R0
SWAP
A
;A=7AH
XCH
A,R0
;R0=7AH,A的内容恢复
16.试编程将片外RAM中30H和31H单元的内容相乘,结果存放在32H和33H单元中,高位存放在33H单元中。
MOV
P2,#0
MOV
R0,#30H
MOVX
A,@R0
MOV
B,A
INC
R0
MOVX
A,@R0
MUL
AB
INC
R0
MOVX
@R0,A
INC
R0
MOV
A,B
MOVX
@R0,A
MOV
DPTR,#30H
MOVX
A,@DPTR
MOV
B,A
INC
DPTR
MOVX
A,@DPTR
MUL
AB
INC
DPTR
MOVX
@DPTR,A
INC
DPTR
MOV
A,B
MOVX
@DPTR,A
17.试用三种方法将累加器A中无符号数乘2。
(1)
CLR
C
RLC
A
(2)
MOV
R0,A
ADD
A,R0
或
ADD
A,ACC
(3)
MOV
B,#2
MUL
AB
18.请分析依次执行下面指令的结果:
MOV
30H,#0A4H
;(30H)=A4H
MOV
A,#0D6H
;A=D6H,P=1
MOV
R0,#30H
;R0=30H
MOV
R2,#47H
;R2=47H
ANL
A,R2
;A=46H,P=1
ORL
A,@R0
;A=E6H,P=1
SWAP
A
;A=6EH,P=1
CPL
A
;A=91H,P=1
XRL
A,#0FFH
;A=6EH,P=1
ORL
30H,A
;(30H)=EEH
19.求执行下列指令后,累加器A及PSW中进位位CY、奇偶位P和溢出位OV的值。
(1)当A=5BH时
;ADD
A,#8CH
0101 1011
+)
1000 1100
1110 0111
结果:A=E7H,CY=0,OV=0,P=0,AC=1
(2)当A=5BH时
;ANL
A,#7AH
0101 1011
∧)0111 1010
0101 1010
结果:A=5AH,P=0
(3)当A=5BH时
;XRL
A,#7FH
0101 1011
⊕)0111 1111
0010 0100
结果:A=24H,P=0
(4)当A=5BH,CY=1时
;SUBB
A,#0E8H
0101 1011
或将减法转换成补码加法
0101 1011
1110 1000
-E8H的补码
0001 1000
-)
1
-1的补码
+)
1111 1111
0111 0010
10111 0010
结果:A=72H,CY=1,OV=0,P=0,AC=0
23.执行下述程序后,SP=?A=?B=?解释每一条指令的作用,并将其翻译成机器码。
地址(H)
机器码(H)
ORG
200H
0200
758140
MOV
SP,#40H
;SP=40H
0203
7430
MOV
A,#30H
;A=30H
0205
120250
LCALL
250H
;调用250H开始的子程序SP=42H,
;(42H)=02H,(41H)=08H
0208
2410
ADD
A,#10H
;此句没有执行
020A
F5F0
MOV
B,A
;B=30H
020C
80FE
L1:SJMP
L1
;
ORG
0250H
0250
90020A
MOV
DPTR,#20AH;DPTR=020AH
0253
C082
PUSH
DPL
;DPL进栈,SP=43H,(43H)=0AH
0255
C083
PUSH
DPH
;DPH进栈,SP=44H,(44H)=02H
0257
22
RET
;返回,此处是利用RET将栈顶内容弹出
PC=020AH,SP=42H
44H
02H
43H
0AH
栈区 42H
02H
41H
08H
40H
执行程序后,SP=42H,A=30H,B=30H
27.试编一程序将外部数据存储器2100H单元中的高4位置“1”,其余位清”0”。
MOV
DPTR,#2100H
MOVX
A,@DPTR
ANL
A,#0F0H
MOV
A,#0F0H
ORL
A,#0F0H
MOVX
@DPTR,A
28.试编程将内部数据存储器40H单元的第0位和第7位置”1”,其余位变反。
MOV
A,40H
CPL
A
SETB
ACC.0
(或ORL
A,#81H)
SETB
ACC.7
MOV
40H,A
29.请用位操作指令,求下面逻辑方程:
MOV
C,P2.1
ORL
C,B.0
ANL
C,ACC.0
ORL
C,/P3.2
MOV
P1.7,C
MOV
C,P1.3
ANL
C,ACC.2
ORL
C,B.5
ANL
C,/P1.1
MOV
PSW.5,C
MOV
C,B.4
ANL
C,/P1.5
ORL
C,/ACC.7
ANL
C,P1.0
MOV
P2.3,C
第五章 P112 1,3,6,7,11,20
1. 编程将片内40H~60H单元中内容送到以3000H为首的片外RAM存储区中
方法1:
MOV
R0,#40H
MOV
DPTR,#3000H
MOV
R2,#21H
LOOP:
MOV
A,@R0
MOVX
@DPTR,A
INC
R0
INC
DPTR
DJNZ
R2,LOOP
┋
方法2:
MOV
R0,#40H
MOV
DPTR,#3000H
MOV
R2,#0
LOOP:
MOV
A,@R0
MOVX
@DPTR,A
INC
R0
INC
DPTR
INC
R2
CJNE
R2,#21H,LOOP
┋
方法3:
MOV
R0,#40H
MOV
DPTR,#3000H
LOOP:
MOV
A,@R0
MOVX
@DPTR,A
INC
R0
INC
DPTR
CJNE
R0,#61H,LOOP
┋
补充:编程将ROM中3000H~3020H单元的内容送片内RAM40H~60H单元中去。
MOV
R0,#40H
MOV
DPTR,#3000H
MOV
R2,#21H
LOOP:
CLR
A
MOVC
A,@A+DPTR
MOV
@R0,A
INC
R0
INC
DPTR
DJNZ
R2,LOOP
3.编程计算片内RAM区50H~57H 8个单元中数的算术平均值,结果存放在5AH中。
解:
ORG
2000H
MOV
R0,#50H
CLR
A
MOV
R2,A
LOOP:
ADD
A,@R0
JNC
DOWN
INC
R2
DOWN:
INC
R0
CJNE
R0,#58H,LOOP
MOV
R7,#3
SHIFT:
XCH
A,R2
CLR
C
RRC
A
XCH
A,R2
RRC
A
DJNZ
R7,SHIFT
MOV
5AH,A
┋
6.设有100个有符号数,连续存放在以2000H为首地址的片外RAM存储区中,试编程统计其中正数、负数、零的个数。
方法1:CLR
A
MOV
R5,A
;存零的个数
MOV
R6,A
;存负数的个数
MOV
R7,A
;存正数的个数
MOV
R2,#100
MOV
DPTR,#2000H
LOOP:
MOVX
A,@DPTR
JNZ
NZERO
INC
R5
SJMP
DOWN
NZERO:
JNB
ACC.7,PLUS
INC
R6
SJMP
DOWN
PLUS:
INC
R7
DOWN:
INC
DPTR
DJNZ
R2,LOOP
┋
方法2:
CLR
A
MOV
R5,A
;存零的个数
MOV
R6,A
;存负数的个数
MOV
R7,A
;存正数的个数
MOV
R2,#100
MOV
DPTR,#2000H
LOOP:
MOVX
A,@DPTR
INC
DPTR
CJNE
A,#0,NZERO
INC
R5
SJMP
DOWN
NZERO:
JC
NEGATIVE
INC
R7
SJMP
DOWN
NEGATIVE:
INC
R6
DOWN:
DJNZ
R2,LOOP
┋
7.请将片外数据存储器地址为1000H~1030H的数据块,全部搬迁到片内RAM 30H~60H中,并将原数据块区域全部清“0”。
解:
ORG
1000H
MOV
DPTR,#1000H
MOV
R0,#30H
MOV
R2,#31H
LOOP:
MOVX
A,@DPTR
MOV
@R0,A
CLR
A
MOVX
@DPTR,A
INC
R0
INC
DPTR
DJNZ
R2,LOOP
┋
8.试编写一子程序,使间址寄存器R1所指向的2个片外RAM连续单元中的高4位二进制数合并为1个字节装入累加器A中。已知R0指向低地址,并要求该单元高4位放在A的高4位中。
XX:
MOVX
A,@R1
ANL
A,#0F0H
MOV
B,A
INC
R1
MOVX
A,@R1
ANL
A,#0F0H
SWAP
A
ORL
A,B
RET
10.试编一查表程序,从首地址为1000H、长度为100的数据块中找出ASCII码A,将其地址送到10A0H和10A1H单元中。
MOV
DPTR,#1000H
MOV
R7,#100
LOOP:
MOVX
A,@DPTR
CJNE
A,#’A’,NXET
MOV
A,DPL
MOV
B,DPH
MOV
DPTR,#10A0H
MOVX
@DPTR,A
MOV
A,B
INC
DPTR
MOVX
@DPTR,A
SJMP
$
NEXT:
INC
DPTR
DJNZ
R7,LOOP
SJMP
$
11.设在200H~204H单元中存放有5个压缩BCD码,编程将它们转换成ASCII码,存放到以205H单元为首地址的存储区中。
方法1:
ORG
1000H
MOV
P2,#02H
MOV
R0,#00H
MOV
R1,#05H
MOV
R2,#05
LOOP:
MOVX
A,@R0
ANL
A,#0FH
ORL
A,#30H
MOVX
@R1,A
INC
R1
MOVX
A,@R0
SWAP
A
ANL
A,#0FH
ORL
A,#30H
MOVX
@R1,A
INC
R1
INC
R0
DJNZ
R2,LOOP
┋
方法2:
ORG
1000H
MOV
R2,#02H
MOV
R3,#00H
MOV
R4,#05H
MOV
R7,#05
MOV
DPH,R2
LOOP:
MOV
DPL,R3
MOVX
A,@DPTR
MOV
B,A
INC
DPTR
MOV
R3,DPL
MOV
DPL,R4
ANL
A,#0FH
ORL
A,#30H
MOVX
@DPTR,A
INC
DPTR
MOV
A,B
SWAP
A
ANL
A,#0FH
ORL
A,#30H
MOVX
@DPTR,A
INC
DPTR
MOV
R4,DPL
DJNZ
R7,LOOP
┋
13.试编程实现下列逻辑表达式的功能。设P1.7~P1.0为8个变量的输入端,而其中P1.7又作为变量输出端。
①
解:X0
BIT
P1.0
X1
BIT
P1.1
X2
BIT
P1.2
X3
BIT
P1.3
X4
BIT
P1.4
X5
BIT
P1.5
X6
BIT
P1.6
X7
BIT
P1.7
ORG
2000H
MOV
C,X0
ANL
C,X1
ANL
C,/X2
ORL
C,/X3
ORL
C,X4
ANL
C,X5
ANL
C,X6
ORL
C,/X7
MOV
P1.7,C
┋
②
解:ONE
BIT
20H
;存第一项逻辑值
TWO
BIT
21H ;存第二项逻辑值
X0
BIT
P1.0
X1
BIT
P1.1
X2
BIT
P1.2
X3
BIT
P1.3
X4
BIT
P1.4
X5
BIT
P1.5
X6
BIT
P1.6
X7
BIT
P1.7
ORG
2000H
MOV
C,X0
ANL
C,X1
CPL
C
MOV
ONE,C
MOV
C,X2
ANL
C,X3
ANL
C,X4
CPL
C
MOV
TWO,C
MOV
C,X5
ANL
C,X6
ANL
C,X7
CPL
C
ORL
C,TWO
CPL
C
ORL
C,ONE
MOV
P1.7,C
┋
20.根据图5.6的线路设计灯亮移位程序,要求8只发光二极管每次亮一个,点亮时间为40ms。顺次一个一个地循环右移点亮,循环不止。已知时钟频率为24MHz。
解:
MOV
A,#01H
LOOP:
MOV
P1,A
LCALL
D40MS
RR
A
SJMP
LOOP
D40MS:
MOV
R2,#160
EXTERNAL:
MOV
R3,#250
INTERNAL:
DJNZ
R3,INTERNAL
DJNZ
R2,EXTERNAL
RET
第六章 P155 5,6,8
5.已知80C51单片机系统时钟频率为24MHz,请利用定时器T0和P1.2输出矩形脉冲其波形如下:
选择T0工作于方式2(8位重置初值)定时50μs
fosc=24MHz
EMBED Equation.3
(28-X)×0.5μS=50μs X=156=9CH
方法1:
MOV
TMOD,#02H
MOV
TH0,#9CH
MOV
TL0,#9CH
CLR
P1.2
;P1.2=0
SETB
TR0
HIGH:
SETB
P1.2
;P1.2=1,输出50μs高电平
HIGH1:
JBC
TF0,LOW
;50μs到清TF0,转输出低电平
AJMP
HIGH1
;50μs未到,转HIGH1等待
LOW:
MOV
R7,#7
;350μs=7×50μs
CLR
P1.2
;P1.2=0输出350μs低电平
LOW1:
JBC
TF0,LOW2
;50μs到清TF0,转LOW2
AJMP
LOW1
LOW2:
DJNZ
R7,LOW1
;7次未到,转LOW1
AJMP
HIGH
;7次到,转HIGH,输出50μs高电平
方法2:
MOV
TMOD,#02H
;设置T0为方式2定时
MOV
TH0,#9CH
;赋初值
MOV
TL0,#9CH
CLR
P1.2
SETB
TR0
;启动T0工作
L1:
SETB
P1.2
;P1.2=1,输出50μs高电平
MOV
R7,#8
DEL:
JBC
TF0,REP
;50μs到清TF0,转输出低电平
AJMP
DEL
REP:
CLR
P1.2
;P1.2=0输出350μs低电平
DJNZ
R7,DEL
AJMP
L1
方法3:
选择T0工作于方式1定时50μs
(216-X)×0.5μS=50μs X=65436=FF9CH
选择T0工作于方式1定时350μs
(216-X)×0.5μS=350μs X=64836=FD44H
START:
MOV
TMOD,#01H
;设置T0为方式1定时
LP0:
MOV
TH0,#0FFH
;赋初值定时50μs
MOV
TL0,#9CH
CLR
P1.2
SETB
TR0
;启动T0工作
SETB
P1.2
LP1:
JBC
TF0,LP2
;P1.2=1,输出50μs高电平
SJMP
LP1
LP2:
CLR
P1.2
MOV
TH0,#0FDH
;赋初值定时350μs
MOV
TL0,#44H
LP3:
JBC
TF0,LP4
;P1.2=1,输出350μs低电平
SJMP
LP3
LP4:
SJMP
LP0
6.在80C51单片机中,已知时钟频率为12MHz,请编程使P1.0和P1.1分别输出周期为2ms和500μs的方波。
方法1:选择T0工作于方式1定时250μs
fosc=12MHz
EMBED Equation.3
(216-X)×1μS=250μs X=65286=FF06H
MOV
TMOD,#01H
MOV
TH0,#0FFH
MOV
TL0,#06H
SETB
TR0
DEL:
MOV
R7,#4
;1ms=4×250μs
D250:
JBC
TF0,D2
;250μs到清TF0,转移
AJMP
D250
;250μs未到,等待
D2:
CPL
P1.1
MOV
TH0,#0FFH
;重装初值
MOV
TL0,#06H
DJNZ
R7,D250
;4次未到,转D500
CPL
P1.0
AJMP
DEL
;4次到,转DEL
方法2:选择T0工作于方式2定时250μs
(28-X)×1μS=250μs X=6
MOV
TMOD,#02H
MOV
TH0,#06H
MOV
TL0,#06H
SETB
TR0
DEL:
MOV
R7,#4
;1ms=4×250μs
D250:
JBC
TF0,D2
;250μs到清TF0,转移
AJMP
D250
;250μs未到,等待
D2:
CPL
P1.1
DJNZ
R7,D250
;4次未到,转D250
CPL
P1.0
AJMP
DEL
;4次到,转DEL
方法3:选择T0工作于方式2定时250μs,中断
(28-X)×1μS=250μs X=6
T1工作于方式1定时1ms,中断
(216-X)×1μS=1000μs X=64536=FC18H
ORG
0000H
LJMP
MAIN
ORG
000BH
LJMP
T00
ORG
001BH
LJMP
T11
MAIN:
MOV
TMOD,#12H
MOV
TH0,#06H
MOV
TL0,#06H
MOV
TH1,#0FCH
MOV
TL1,#18H
MOV
IE,#8AH
SETB
TR0
SETB
TR1
SJMP
$
T00:
CPL
P1.1
RETI
T11:
MOV
TH1,#0FCH
MOV
TL1,#18H
CPL
P1.0
RETI
方法4:选择T0工作于方式3定时250μs,中断。
(28-X)×1μS=250μs X=6
T0方式3时TL0占用TR0、TF0,TH0占用TR1、TF1。
ORG
0000H
LJMP
MAIN
ORG
000BH
LJMP
ITL0
ORG
001BH
LJMP
ITH0
MAIN:
MOV
SP,#50H
MOV
TMOD,#03H
MOV
TH0,#06H
MOV
TL0,#06H
MOV
R7,#4
SETB
TR0
SETB
TR1
MOV
IE,#8AH
SJMP
$
ITL0:
MOV
TL0,#06H
CPL
P1.1
RETI
ITH0:
MOV
TH1,#06H
DJNZ
R7,ITH01
MOV
R7,#4
CPL
P1.0
ITH01:
RETI
7.设系统时钟频率为24MHz,试用定时器T0作外部计数器,编程实现每计到1000个脉冲,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环不止。
fosc=24MHz
EMBED Equation.3
T0作外部计数器选择工作于方式1:
1000=216-X X=64536=FC18H
T1定时2ms选择工作于方式1:
(216-X)×0.5μS=2000μs X=61536=F060H
MOV
TMOD,#15H
START:
MOV
TH0,#0FCH
MOV
TL0,#18H
SETB
TR0
JNB
TF0,$
CLR
TF0
CLR
TR0
MOV
TH1,#0F0H
MOV
TL1,#60H
SETB
TR1
JNB
TF1,$
CLR
TF1
CLR
TR1
SJMP
START
8.利用80C51单片机定时器/计数器测量某正脉冲宽度,已知此脉冲宽度小于10ms,主机频率为12MHz。编程测量脉冲宽度,并把结果转换为BCD码顺序存放在以片内50H单元为首地址的内存单元中(50H单元存个位)。
二进制数转换成BCD码是利用按权展开式计算,由于是BCD码计算中要用DA A指令
设脉冲由/INT0输入,T0工作于方式1
fosc=12MHz
EMBED Equation.3
MOV
TMOD,#09H
;设T0为方式1,GATE=1
MOV
TL0,#00H
MOV
TH0,#00H
MOV
R0,#4EH
JB
P3.2,$
;等待P3.2变低
SETB
TR0
;启动T0准备工作
JNB
P3.2,$
;等待P3.2变高
JB
P3.2,$
;等待P3.2再次变低
CLR
TR0
;停止计数
MOV
@R0,TL0
;存放计数的二进制数低字节入4EH
INC
R0
MOV
@R0,TH0
;存放计数的二进制数高字节入4EH
MOV
R1,#50H
;BCD码首址
MOV
R5,#3
;BCD码字节数
CLR
A
LOOP1:
MOV
@R1,A
;清存BCD码单元
INC
R1
DJNZ
R5,LOOP
MOV
R7,#10H
;二进制数位数
LOOP4:
MOV
R0,#4EH
;二进制数首址
MOV
R6,#2
;二进制数字节数
CLR
C
LOOP2:
MOV
A,@R0
RLC
A
MOV
@R0,A
INC
R0
DJNZ
R6,LOOP2
;2字节二进制数左移1位
MOV
R5,#3
;BCD码字节数
LOOP3:
MOV
A,@R1
ADDC
A,@R1
;BCD码乘2加C运算
DA
A
MOV
@R1,A
INC
R1
DJNZ
R5,LOOP3
DJNZ
R7,LOOP4
SJMP
$
第7章作业参考答案
P175 2,6,7
2.某异步通讯接口按方式3传送,已知其每分钟传送3600个字符,计算其传送波特率。
解:11(位)×3600(字符/秒)/60秒=660位/秒
注:方式3为11位异步通讯方式。
6.已知定时器T1设置为方式2,用做波特率发生器,系统时钟频率为24MHz,求可能产生的最高和最低的波特率是多少?此时串口工作于方式1或3
EMBED Equation.3
7.设计一个AT89C51单片机的双机通信系统,并编写程序将甲机片外RAM 3400H~3420H单元中的数据块通过串行口传送到乙机的片内RAM 40H~60H单元中。
串行口定义在工作方式1下发送。采用定时器T1方式2作波特率发生器,设波特率为4800,fosc=11.0592MHz。
SMOD=0时,X=250=FAH
SMOD=1时,X=244=F4H
本题取SMOD为0
双机异步通信连接图
解:编写发送子程序如下:
MOV
TM0D,#20H
;设置定时器T1为方式2
MOV
TL1,#0FAH
;设预置值
MOV
TH1,#0FAH
SETB
TR1
;启动定时器T1
MOV
SCON,#40H
;设置串行口为方式1
MOV
PCON,#00H
;SMOD=0
MOV
DPTR,#3400H
;设数据块指针
MOV
R7,#21H
;设数据长度
TRS:
MOVX
A,@DPTR
;取数据送至A
MOV
SBUF,A
;数据送至SBUF,启动发送
WAIT:
JNB
TI,$
;判1帧是否发送完
CLR
TI
INC
DPTR
;更新数据单元
DJNZ
R7,TRS
;循环发送至结束
RET
;返回
在进行双机通信时,两机应用相同的工作方式和波特率,因而接收子程序如下:
MOV
TMOD,#20H
;设置定时器1为方式2
MOV
TL1,#0FAH
;设预置值
MOV
TH1,#0FAH
SETB
TR1
;启动定时器T1
MOV
SCON,#40H
;设置串行口为方式3
MOV
PCON,#00H
;SMOD=0
MOV
R0,#40H
;设置数据块指针
MOV
R7,#21H
;设数据块长度
SETB
REN
;允许接收
WAIT:
JNB
RI,$
;判1帧是否接收完
CLR
RI
MOV
A,SBUF
;读入一帧数据
MOV
@R0,A
;存放数据
INC
R0
;修改地址指针
DJNZ
R7,WAIT
;判断数据块接收完否
RET
;返回
8.利用80C51串行口控制8位发光二极管工作,要求发光二极管每1S交替地亮、灭,画出电路图并编写程序。
;P3.1
EQU
CLK
;P3.0
EQU
SDA(A、B)
;P1.0
EQU
CLR
CLR
P1.0
SETB
P1.0
MOV
SCON,#00H
MOV
A,#55H
AA:
MOV
SBUF,A
JNB
TI,$
CLR
TI
ACALL
DELAY_1S
RR
A
AJMP
AA
第8章作业参考答案
P199 3,5
3.AT89S51有几个中断源,各中断申请标志是如何产生的,又如何清“0”的?CPU响应中断时,中断入口地址各是多少?
答:AT89S51单片机有5个中断源,分别为:2个外部输入中断源
(P3.2)和
(P3.3)2个片内定时器T0和T1的溢出中断源TF0(TCON.5)和TF1(TCON.7);1个片内串行口发送和接收中断源TI(SCON.1)和RI(SCON.0)。
各中断标志的产生和清“0”如下:
(1)外部中断类
外部中断是由外部原因引起的,可以通过两个固定引脚,即外部中断0
和外部中断
输入信号:
——外部中断0请求信号,由P3.2脚输入。通过IT0(TCON.0)来决定中断请求信号是低电平有效还是下跳变有效。一旦输入信号有效,则向CPU申请中断,并且使IE0=1。硬件复位。
——外部中断1请求信号,功能与用法类似外部中断0。
(2)定时中断类
定时中断是为满足定时或计数溢出处理的需要而设置的。当定时器/计数器中的计数结构发生计数溢出时,即表明定时时间到或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志位。这种中断请求是在单片机芯片内部发生的,无需在芯片上设置引入端,但在计数方式时,中断源可以由外部引入。
TF0——定时器T0溢出中断请求。当定时器T0产生溢出时,定时器T0中断请求标志TF0=1,请求中断处理。使用中断时由硬件复位,在查询方式下可由软件复位(即清“0”)。
TF1——定时器TI溢出中断请求。功能与用法类似定时器T0。
(3)串行口中断类
串行口中断是为串行数据的传送需要而设置的。串行中断请求也是在单片机芯片内部发生的,但当串行口作为接收端时,必须有一完整的串行帧数据从RI端引入芯片,才可能引发中断。
RI或TI——串行中断请求。当接收或发送完一串行帧数据时,使内部串行口中断请求标志RI或TI=1,并请求中断。响应中断后必须软件复位。
CPU响应中断时,各中断源的中断入口地址是:
中断源
入口地址
外部中断0
0003H
定时器T0中断
000BH
外部中断1
0013H
定时器T1中断
001BH
串行口中断
0023H
定时器T2中断
002BH(仅AT89S52有)
5.用定时器T1定时,要求在P1.6口输出一个方波,周期是1min。晶振频率为12MHz,请用中断方式实现,并分析采用中断后的优点。
解:计算半周期为250μS方波的时间初值。
(28-X)×1μS=250μs X=6=06H 即TH0=06H,TL0=06H;
采用定时器1,方式2定时250μS,则TMOD=20H;采用中断方式工作,IE=88H
输出周期为:P1.6为1min
ORG
0000H
AJMP
MAIN
ORG
001BH
AJMP
AA
ORG
0030H
MAIN:
MOV
TH0,#06H
MOV
TL0,#06H
MOV
TMOD,#20H
MOV
IE,#88H
SETB
TR0
MOV
R5,#40
;250μS×40=10ms
MOV
R6,#100
;10ms×100=1S
MOV
R7,#30
;1S×30=0.5min
SJMP
$
中断服务子程序
AA:
DJNZ
R5,BB
;250μS到中断,判10ms到?
MOV
R5,#40
DJNZ
R6,BB
;10ms到,判到1S?
MOV
R6,#100
DJNZ
R7,BB
;1S到,判到0.5min?
MOV
R7,#30
;半周期0.5min到,P1.6求反
CPL
P1.6
BB:
RETI
第9章习题参考答案
P236 3,4,5
3.以AT89S51为主机,扩展2片6264 RAM存储器芯片,设计硬件布线图。
(1)译码法:
IC0芯片地址范围0000H-1FFFH,
IC1芯片地址范围2000H-3FFFH。
(2)线选法:
4.根据图9.5所示线路设计程序。其功能是:按下K0~K3后,对应LED4~LED7发光,按下K4~K7后,对应LED0~LED3发光。
解:
ORG
1000H
LOOP:
MOV
DPTR,#0FEFFH
MOVX
A,@DPTR
SWAP
A
MOVX
@DPTR,A
SJMP
LOOP
5.请利用74HC138设计一个译码电路,分别选中2片29C256和2片62256,且列出各芯片所占的地址范围。
IC0芯片地址范围0000H-7FFFH,
IC1芯片地址范围8000H-FFFFH,
IC2芯片地址范围0000H-7FFFH,
IC3芯片地址范围8000H-FFFFH。
注:外部程序存储器一般应包括0000H附近地址,此时/EA接地。
7.试编程对8255进行初始化,使其A口为基本输出,B口为基本输入,C口上半部为输出,C口下半部为输入。
解: 电路图参见P221页图9.8。
A口为基本输出(方式0),B口为基本输入(方式0),C口上半部为输出,C口半班部为输入。
控制字为10010101B,其控制口地址为FF7FH。
按方式0输入,B口按方式1输出,C口上半部按方式0输出,C口半班部按方式1输入。
解: 电路图参见P211页图9.8。
控制字为1000 0011B,其控制口地址为FF7FH。
其初始化程序为:
MOV
DPTR,#0FF7FH
MOV
A,#83H
MOVX
@DPTR,A
� EMBED PBrush ���
PAGE
1
_1194072525.unknown
_1290250511.unknown
_1290251381.unknown
_1383565557.unknown
_1383832099.unknown
_1290424922.vsd
�
P2.7
P2.6
��
P2.0
ALE
EA
P0
PSEN
WR
RD
�
E3 E2
E1
C Y1
B
A Y0�
Q7��Q0
G
OE
D7��D0�
CE
A14��A8
A7��A0
IC0
29C256
D7��D0 OE�
74HC373�
�
�
7�
�
CE
A14��A8
A7��A0
IC1
29C256
D7��D0 OE�
CE
A14��A8
A7��A0
IC2
62256
WE D7��D0 OE�
CE
A14��A8
A7��A0
IC2
62256
WE D7��D0 OE�
�
�
�
�
VCC�
�
�
�
�
�
�
�
7�
7�
7�
AT89S51�
74HC138�
�
_1290251295.unknown
_1290249860.unknown
_1290249913.unknown
_1290249687.unknown
_1194072530.unknown
_1113933717.unknown
_1194072353.unknown
_1103479522.unknown
_1113921759.unknown
_1107346099.unknown
_1103479521.unknown
本文档为【单片机习题参考答案08-12】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。