《单片机原理及接口技术》段晨东
第三章答案
一、基础知识
1、(A)=25H
(R0)=50H
(50H)=00H
(51H)=25H
2、(A)=30H
(B)=20H
3、(A)=80H
4、把片外ROM的1031H单元的内容放到累加器ACC中。
5、把片外ROM的8140H单元的内容放到累加器ACC中。
6、(SP)=62H
(60H)=0F0H
(61H)=30H
(62H)=70H
7、(DPH)=7AH
(SP)=60H
(DPL)=50H
(60H)=0FDH
8、Cy=1
AC=1
OV=1
P=1
9、Cy=1
AC=1
OV=0
P=1
10、(A)=00H
(R3)=10H
(30H)=0F1H
(R0)=40H
(40H)=01H
11、Cy=1 (A)=23H
12、(A)=0EH
(R7)=18H
(30H)=0FFH
(R1)=40H
(40H)=0FEH
13、
14、(B)=32H
(A)=00H
Cy=0
OV=1
15、(B)=11H
(A)=0DH
Cy=0
OV=0
16、(A)=0FCH
17、(A)=0DCH
18、所谓的寻址方式就是CPU执行指令时获取操作数的方式。
分为:立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、位寻址、相对寻址7种寻址方式
19、
ANL:(A)=00H
(R5)=0AAH
ORL:(A)=FFH
(R5)=0AAH
XRL:(A)=FFH
(R5)=0AAH
二、选择题
1——5: BBCBB
6——10:CCCAB
11——14:CBDB
三、简单程序设计
13题:
MOV R0,20H
MOV R1,21H
MOV A, @R1
CPL A
ADD A,#01H
MOV 31H,A
MOV A,@R0
CPL A
ADDC A,#00H
XOR A,#80H
MOV 30H,A
14题:
MOV DPTR,#TABLE
MOV A ,X
RL A
JMP @A+DPTR
TABLE:
AJMP PROG1
AJMP PROG2
AJMP PROG3
AJMP PROG4
16题:
方法一:
MOV A,X
CJNE A,Y,L1
CJNE A,Z,L2
MOV 50H,A
L1:
JC M1
RET
M1:
MOV A,Y
RET
L2:
JC M2
RET
M2:
MOV A,Z
方法二:
MOV A,X
CLR C
SUBB A,Y
JC LOW1
CLR C
SUBB A,Z
JC LOW2
MOV 50H,A
LOW1:
MOV A,Y
RET
LOW2:
MOV A,Z
RET
19题:
MOV C,P1.2
CPL P3.3
ORL C,P3.3
ANL C,P1.1
MOV 20H.0,C
MOV C,/2EH.0
ANL C,28H.1
CPL C
ORL C,20H.0
MOV 20H.0,C
MOV C,28H.1
ANL C,/TF0
ANL C,/P1.1
ORL C,20H.0
MOV P1.5,C
20题:
MOV R0,#20H
MOV A, #60H
MOV R7,#00H
LOOP:
CJNE @R0,#65H,GOON
INC
GOON:
INC R0
INC A
JNZ LOOP
RET
22题:
MOV A,20H
MOV B,#10
DIV AB
MOV 20H,A
MOV 24H,B
MOV A,21H
MOV B,#10
DIV AB
MOV 22H,A
MOV 23H,B
MOV A,24H
MOV 21H,A
第四章答案
4.4、在如图4.13所示的电路中,通常情况下,L0~L7一次循环显示,每扳动一次开关K,L0~L7以2灯为1组循环显示1次。用中断方式实现上述要求。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_PR0
ORG 0030H
主程序:
MAIN:
MOV SP, #70H
SETB IT0
SETB EA
SETB EX0
CLR PX0
MOV A, #01H
ROT_DIS:
MOV P1, A
ACALL DLY
RL A
AJMP ROT_DIS
延时子程序:
DLY: MOV R7, #100
DL1: MOV R6, #200
DL0: DJNZ R6, DL0
DJNZ R7, DL1
RET
中断服务子程序:
ORG 0300H
INT_PRO:
PUSH ACC
PUSH PSW
MOV R0, #08
MOV A, #03H
CONT:
MOV P1, A
ACALL DLY
RL A
DJNZ R0,CONT
POP PSW
POP A
RETI
END
4-6、路灯控制器如图4.18所示,要求当黑夜降临时,路灯自动启动,当白天到来时,路灯自动熄灭。采用外部事件中断实现。要求用电平触发方式。
黑夜,路灯自动启动;白天,路灯自动熄灭;终端实现,电平触发。
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INI_PR0
ORG 0030H
MAIN:
MOV SP,#70H
CLR IT1
SETB EX1
SETB EA
HERE:
SETB P1.7
AJMP HERE
ORG 0200H
INT_PR0:
CPL P1.7
REI
END
4-7、如图4.19所示的单片机应用系统,4个外部扩展中断源EXINT0~EXINT3共享外部事件中断/INT0,当其中有一个或几个出现高电平,是/INT0脚为低电平,向单片机发出中断请求。设它们的优先级别顺序为EXINT0——>EXINT3,当EXINT0~EXINT3为高电平时,分别执行处理程序PREX0、PREX1、PREX2和PREX3,请用中断方式实现上述要求。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP P_INT0
ORG 0030H
MAIN:
MOV SP, #70H
CLR IT0
SETB EA
SETB EX0
SETB PX0
P_INT0:
CLR EA
PUSH ACC
PUSH PSW
SETB EA
JB P1.0, PREX0
JB P1.1, PREX1
JB P1.2, PREX2
JB P1.3, PREX3
RETURN:
CLR EA
POP PSW
POP ACC
SETB EA
RETI
PREX0:
……
AJMP RETURN
PREX1:
……
AJMP RETURN
PREX2:
……
AJMP RETURN
PREX3:
……
AJMP RETURN
END
第五章
5-1:用单片机内部定时方法产生100KHZ的等宽脉冲,从P1.1输出,假定单片机的晶振平率为12MHZ,请编程实现。
查询法:
MOV TMOD, #00H
MOV TH0, #1FH
MOV TL0, #16H
SETB TR0
LOOP:
JBC TF0, OVFLOW
AJMP LOOP
OVFLOW:
MOV TH0, #1FH
MOV TL0, #16H
CPL P1.1
AJMP LOOP
中断法:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP P_INT0
ORG 0030H
MAIN:
MOV SP, #60H
MOV TMOD, #00H
MOV TH0, #1FH
MOV TL0, #16H
SETB TR0
SETB EA
SETB ET0
HERE:
AJMP HERE
P_INT0:
PUSH ACC
PUSH PSW
MOV TH0, #1FH
MOV TL0, #16H
CPL P1.0
POP PSW
POP ACC
RETI
5-6:航标灯控制器如图5.19所示,要求当黑夜降临时,航标灯自动启动,亮2s,灭2s,指明航向,当白天到来时,航标灯自动熄灭,不发光。采用外部事件中断和定时中断来实现上诉要求。
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT_PR0
ORG 0030H
MAIN:
MOV SP, #60H
CLR IT0
SETB EX0
SETB EA
HERE:
AJMP HERE
LOOP:
JNB TF0, LOOP
DJNZ R6,INT_PR0
CPL P1.7
MOV R6, #50
AJMP INT_PR0
INT_PRO:
MOV R6, #50
MOV TMOD, #00H
MOV TH0, #(8192-40)/256
MOV TL0,#(8192-40)%256
SETB TR0
SETB EA
SETB ET0
RET
5-7:晶振频率为6MHZ的MCS-51单片机,使用定时器T0以定时方法在P1.0输出周期为400us、占空比为10:1的矩形脉冲,以定时工作方式1编程实现。
X=216-Td/TM=216-(400-1/11)/2=65354
TH0=0FFH
TL0=D7H
程序部分:
ORG 0030H
MAIN:
MOV R5, #10
MOV TMOD, #01H
MOV TH0, #0FFH
MOV TL0, #0D7H
SETB TR0
SETB P1.0
CLR 20H.0
CONT:
JBC TF0, OVERF
SJMP CONT
OVERF:
MOV TH0,#0FFH
MOV TL0,#0D7H
JB 20H.0,HIGH
CLR P1.0
SETB 20H.0
SJMP CONT
REI
HIGH:
SETB P1.0
DJNZ R5,CONT
MOV R5, #10
CLR 20H.0
REI
5-8:以定时器/计数器T1进行外部事件计数。每计数1000个脉冲后,定时器/计数器转为定时工作方式,定时10us后,又转为计数方式,如此循环。假定单片机晶振平率为6MHZ.
计数器初值设定:
X=216-1000=64536
TH1=0FCH
TL1=18H
定时器初值设定:
X=216-10/2=65531
TH1=0FFH
TL1=0FBH
主程序:
START:
MOV TMOD, #50H
MOV TH1, #0FCH
MOV TL1, #18H
SETB TR1
LOOP1:
JBC TF1, L2
SJMP LOOP1
L1:
CLR TR1
MOV TMOD,#40H
MOV TH1, #0FFH
MOV TL1, #0FBH
SETB TR1
LOOP2:
JBC TF1, START
SJMP LOOP2
第六章
6-3、简述MCS-51单片机多机通信原理
答:MCS-51单片机的串行口控制器SCON中的SM2位为多机通信控制位。在串行口工作在方式2或方式3时,如果SM2=1,只有在接收器收到第9位数据为1时,数据才装入接收缓冲器SBUF中,并将接收中断标志位RI置1,向CPU请求中断,如果接收器收到的第9位为0,则接收中断标志位不置1,并把接收到的数据丢弃。当SM2为0时,接收到一个数据帧后,不管第9位数据是0还是1,都会把接收中断标志RI置1,并将接收到的数据装入接收缓冲器SBUF。利用这个特点,可以实现多个MCS-51单片机之间的通信。
6-4、当系统晶振为11.0592MHz时,采用方式1实现异步通信串行通信,波特率为9600bit/s,用T1作为波特率发生器,计算计数初值。
答:定时/计数器工作方式为方式2、定时模式,则T1计数器初始值为:
即X=1111 1101B=0FDH
第七章
7-4题:假设0~44的平方值以表的形式存储在程序存储器中,采用查表的方法编制一个实现获取x(0<=x<=40)平方值的子程序。
MOV DPTR, #TABLE
MOV A, R2
MOVC A, @A+DPTR
MOV R2,A
TABLE: DW:0~9
DW:10~19
DW:20~29
DW:30~39
DW:40
7-11题:5个双字节无符号数求和,数据存放在外部RAM的5000H单元开始的区域,把结果存放在以SUM开始的内部RAM单元中。
MOV R0,#SUM
MOV R1,SUM+1
MOV R5,#04H
MAIN:
MOV DPTR, #5000H
MOVX A, @DPTR
MOV @R0, A
INC DPTR
MOVX A, @DPTR
MOV @R1, A
L1: INC DPTR
MOVX A, @DPTR
MOV R2, A
INC DPTR
MOVX A, @DPTR
MOV R3, A
ADD_PC:
MOV A, @R0
ADD A, R2
MOV @R0, A
MOV A, @R1
ADDC A, R3
MOV @R1, A
DJNZ R5, L1
RET
7-17题:查找内部RAM的20H------50H单元是否含有0AAH,若有,则置51H单元为0FFH,否则将51H单元清零。
MOV R0,#20H
CJNE @R0,#0AAH, L1
L1:
MOV A, R0
CJNE A, #50H, L2
MOV 51H, #00H
RET
L2:
INC R0
CJNE @R0,#0AAH, L1
MOV 51H, #0FFH
RET
7-20题:已知无符号数二进制数x存于20H单元,y存放于21H单元,编制程序实现下列表达式:
MOV R0, 20H
CJNE @R0,#50H, L
AJMP L2
L:
JB L1
CJNE @R0,#0F, L3
AJMP L3
L3:
JB L2
MOV 21H, #30
RET
L1:
MOV A, 20H
MOV B,#2
DIV AB
MOV 21H, A
RET
L2:
MOV A, 20H
MOV B, #05H
MUL AB
SUBB A, #07
MOV 21H, A
RET
7-21题:已知逻辑表达式 ,其中,Q为P1.5,X为P1.0,U为P1.1,V为P1.2,W为22H.5,E为定时计数器T0的溢出标志TF0,请编制程序实现上述逻辑功能。
MOV C, 22H.0
ORL C, P1.2
CPL C
MOV 30H.0,C
MOV C, 22H.5
ANL C, TF0
CPL C
ANL C, /P1.1
ORL C, P1.0
CPL C
ORL C, 30H.0
MOV P1.5,C