完整版单片机原理与应用技术江力版第三四六章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 作业参考答案
3-10. 己知 (A)=7AH , (R0)=34H , (34H)=A5H ,
请
(1) MOV A , R0 ;(A)=34H
(2) MOV A , @R0 ;(A)=A5H (3) MOV A , 34H ;(A)=A5H
(4) MOV A , #34H ;(A)=34H 3-12. 1 设 (R0)=32H , (A)=48H , 片内 RAM 中 (3 A 的内容。
, (40H )=61H 。
请指出在执行下列程序段后 上述各单元内容的变化。
A,@R0 @R0,40H 40H,A R0,#40H MOV MOV
MOV
MOV 即:执行完程序段后, 3-13 ; (A)=(32H)=60H ; ( 32H ) =61H ; (40H)=(A)=60H ; (R0)=40H (R0)=40H, (A)=60H, 片内 RAM 中,(32H ) =61H, (40H)=60H 已知(A)=83H , ANL 答: 3-14 A,47H
47H,A
A,@R0 SWAP A 执行完程序段后, ORL XRL (R0)=47H , (47H)=34H 。
请写出执行完下列程序段后 A 的内容。
;(A)=83H A 34H=00H
;(47H)=34H V 00H=34H ;(A)= 00H 34H=34H ;(A)=43H
=43H MOV SP,#30H ;(SP)=30H
MOV 30H,#55H
MOV 40H,#66H
PUSH 30H ;(SP)=31H, 堆栈区中( 31H) =55H PUSH 40H ;(SP)=32H, 堆栈区中( 32H) =66H
POP 30H
; 先将堆栈区中 32H 单元的内容送入 30H
;SP 值减 1 ,即: (SP)=31H
POP 40H ;先将堆栈区中 31H 单元的内容送入 40H
A ) (SP)=30H, 单元,使( 30H ) 单元,使( 40H ) ;SP 值减 1,即: (SP)=30H 内部 RAM 中, (30H)=66H, (40H)=55H.
最终, 编程实现两个 16 位二进制数的减法。
设被减数放在 14. 说明下段程序执行过程中, SP 的内容及堆栈中内容的改变过程。
=66H, 再使
=55H, 再使 3-15 单元,差仍存于被减数地址单元中,减数、被减数都是低地址单元存放低 解: 40H 、41H 单元中,减数放在 8 位。
50H 、 51H CLC C MOV A, 40H SUBB A, 50H MOV 40H, A MOV A, 41H
SUBB A, 51H MOV 41H,A BCD 码拼字程序,将存放在 40H 、41H 单元的两个一位十进制数的 BCD 码合并构成一 BCD 码,并将结果保存在 42H 单元中 ( 高地址单元的 BCD 码放在高 4 位 ) 。
则,合并结果为( 42H ) =ZYH, X,Y,W,Z 取值 0~9. 3-16. 编写一 个字节的压缩 分析:
设 (40H )=XYH,
(41H )=WZH, 解: MOV A, 40H ANL A,#0FH MOV B, A
MOV A,41H ANL A, #0FH SWAP A
ORL MOV
A, B 42H, A
3-17.把片外数据存储器 解:方法 1 : MOV DPTR, #4020H 方法2 : MOV P2, #40H MOVX A, @DPTR MOV R0, #20H
MOVX A, @R0
4020H 单元中的数据读到累加器中,应用哪几条指令 RAM 6030H 单元。
3-18 .试编写程序将外部 解: MOV MOVX MOV
MOVX 3-20.试编写一段程序, 分析:设(A)=XYH, (P 1)=WZH, 解: ANL
ANL ORL RAM 5000H 单元内容传送至外部 DPTR, #5000H A, @DPTR DPTR, #6030H @ DPTR, A 将累加器 A 的高4位由P1 口的高 则执行结果为:(P 1)=XZH, ;(A)=X0H ;(P 1)=0ZH ;(P 1)=XZH 口的高5位置位,低3位不变。
4位输出,P1 口低4位保持不变。
A,#0F0H P1,#0FH
P1, A 21.试编写一段程序,将 P1 ORL P1, #11111000B 或 ORL P1, #0F8H 25.使用位操作指令实现下列逻辑关系。
(1) (2) 解: (1) P1.0=(10H V Pl.1) A (ACC.0 V CY) P 1.3=(ACC.2 A P 1.0) ORL
MOV MOV ORL
® (ACC.1 V P 1.1) C, ACC.O FO, C C, 10H C, P1.1
;令 F0=ACC.0 V CY ;注意此处的 ;令 CY=(10H) V Pl.1
10H 是一个位地址而非字节地址
ANL C, F0 ;令CY=(10H) V Pl.1) A (ACC.0 V CY)
MOV P 1.0, C
(2) MOV C, ACC.2
ANL C, P1.0
MOV 20H, C ;令 20H=(ACC.2 A P1.0)
MOV C, ACC.1
ORL C, P1.1 ;令 CY=(ACC.1 V P 1.1) _ _
;位指令中没有XRL 指
令,只能用但可利用“ X Y xY XY”
MOV 21H, C ;令 21H= (ACC.1 V P 1.1 )
ANL C, /20H
MOV F0,C
MOV C,20H
ANL C, /21H
ORL C, F0 ; 令 C=(ACC.2 A P 1.0) ® (ACC.1 V P 1.1)
MOV P1.3, C
26.试编程将内部RAM 30H “7FH 单兀中的内容全部清0(利用循环转移指令解:MOV R0,#30H
MOV R7,#10H ;30H~3FH 共10H个数据
LOOP: MOV @R0, #00H
INC R0
DJNZ 来形成异或运算,
)。
R7, LO OP
27.在程序存储器中有一个常数表,从2040H单元开始分别存放表格的第0项、第1项第n项, 试编程查出表格第 m项的内容。
DP TR,#2040H A, #m A, @A+D PTR
第4章作业参考答案 5. 有两个4位十六进制数分别存放在片内
RAM 20H 2伯单元和30H 3伯单元内,请编程求它们 的和,并将和存放到片内 6. 有一个16位二进制负数的原码存放在片内 到片内RAM 70H
解:5.设 20H 、 RAM 40H 41H 单元。
RAM30H 、61H 单元内,请编程求它的补码,并将它存放 71H 单元。
30H 存放高字节 MOV ADD MOV MOV ADDC MOV END A,21H A,31H
41H,A
A,20H A,30H
40H,A 6. MOV CPL ADD MOV MOV CPL ADDC
SETB
A,61H A A,#1 71H,A A,60H A A,#00H
ACC.7
;低字节取反加1 ;高字节取反加上进位位 ;高字节的符号位一定为 1
MOV 70H,A END
RAM 以 50H 为首地址的
(编程1) (编程2) MOV R7,#20 MOV R7,#20 MOV R0,#40H
MOV R0,#40H MOV R1,#50H MOV
DP TR,#0050H MOV P2,#00H LOO P: MOV
A,@R0
lOV A,@R0 MOVX
@DP TR,A MOVX @R1,A INC R0 INC R0 INC DPTR INC
R1
DJNZ
R7,LO OP
DJNZ R7,LO OP END
END
40H,请编程将数据块传送到片外
40H,请编程将数据块传送到片外 LOOP: 8.片外RAM 中存放有20个数据,首地址为 的存储单元中,同时将片外 RAM 以 40H 为首地址的20个存储单元中的内容全清零。
解: 7.片内RAM 中存放有20个数据,首地址为 存储单元中。
解: RAM 以 5000H 为首地址
MOV R7,#20
MOV P 2,#00H
MOV R0,#40H MOV DP TR,#5000H
LOOP: MOVX
A,@R0 ;从源区取数据 MOVX
@DP TR,A ;送入目的区
CLR A
MOVX @R0,A ;将源区当前单元内容清( INC R0
INC DPTR ;修改源区和目的区的地址
DJNZ R7,LO OP
END
10.请分别编写延时1 min 、 解:设1min 延时子程序、
1 h 的子程序,晶振频率 12MHz 1h 延时子程序的名字分别为
DELAY1 DELAY2
解: MOV MOV MOVC
DELAY1:MOV R7,#250 DL1: MOV R6, #250
DL2: MOV R5,#240 DL3: NOP
NOP
DJNZ R5,DL3
DJNZ R6,DL2
DJNZ R7,DL1
RET
延时时间 =[250 X 250* (1 +
1+2)
DELAY2: MOV R1,#60
LOOP: ACALL DELAY1
DJNZ R1,LO OP
RET *240]*
1
需要较精确延时,则可修改DELAY1
DELAY1: MOV R7,#250
DL1:
DL2:
DL3:
MOV R6,#250
MOV R5,#239
NOP
NOP
jis =1m
in
;通过调用1min延时子程序60次,达到11.自变量
关系的程序:
解:1h延时。
----------
RAM区 30H单元,函数
NOP
DJNZ R5, DL3
DJNZ R6, DL2
DJNZ R7, DL1
RET
;精确延时时间计算为
[1+(1+(1+1+4*239+2) *250+2)*250+2]*1us
NEXT1: X为一无符号数,存放在片内
Xw 95 时,丫=1; 95< X< 105 时,丫=2; X> 105 时,
MOV
CJNE
JNC
Y存放在31H单元。
请编写满足如下
丫=3。
NEXT2: NEXT3:
NEXT4:
DONE: MOV
SJMP
CJNE
JNC
MOV
SJMP
MOV
A, 30H
A,# 96,NEXT1
NEXT2 ;X>95,则转至 NEXT2
;X w 95 则令丫=1
31H,#1
DONE
A,#105,NEXT3
NEXT4 31H,#2
DONE 31H,#3
$
;X > 105,则转至 NEXT4
;95 < X < 105 时,则令丫=2
> 105寸,令丫
=3
SJMP
END
13.编写双字节无符号数加法子程序。
解:设子程序的入口参数为:
(R0)
出口参数为:(R0)=被加数低字节地址指针,
=和的高字节地址指针
(R1)= 加数低字节地址指
针
参考程序如下:
MOV A,@R0
ADD A,@R1
MOV @R0, A
INC R0
INC R1
MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
CLR A
ADDC A, #0
MOV @R0, A
RET
ADD_SUB:
第六章作业参考答案
1 . (略)
3. 当定时器/计数器工作于方式 0时,晶振频率为12MHz ,请计算最小定时时间、最大定时时间、最 小计数值和最大计数值。
答: 当fosc=12MHz 时,T 机=1卩,对于方式0,最小定时时间为 1卩§最大定时时间为 8192卩, 最小计数值为1,最大计数值为8192。
(补充说明,如果工作于方式 1,则相应的最小定时时间、最大定时时间、最小计数值和最大计数值 分别为 1 11,65536 S 1,65536。
) 4. (略)
7.用方式0设计两个不同频率的方波, 12MHz 。
分析:该题编程可以有很多方案,比如可以设计两个定时器,让 T0作2.5ms 定时器,T1作5ms 定时
器,定时时间一到,分别对
P1.0 口和P1.1 口电平改变一次;也可以只设计一个
2.5ms 的定时器,让
P 1.1 口每次定时时间到改变电平一次, P1.0 口每两次定时时间到改变电平一次。
又如,定时器既可以 用中断方式工作,也可以用查询方式工作。
大家可自定方案。
参考方案1:设计两个定时器,让T0作2.5ms 定时器,T1作5ms 定时器,定时时间一到,分别对P1.0 口和P 1.1 口电平改变一次。
参考方案 每定时2次,P1.1电平改变 ;参考方案
ORG AJMP ORG AJMP ORG AJM P ORG MAIN: SETB SETB MOV
MOV MOV MOV MOV SETB SETB SETB SETB SETB SJM P
TIMER0:MOV MOV CPL RETI TIMER1: MOV MOV CPL
RETI END P1.0输出频率为 200Hz, P1.1输出频率为 100Hz ,晶振频率
2:只用T0作2.5ms 定时器, 定时时间到, P1.0电平改变1次, 次。
1(中断方式) 0000H MAIN 000BH TIMER0 001BH TIMER1 0100H P 1.0 P 1.1 TMOD,#00H TH0,#0B1H
TL0,#1CH TH1,#63H TL1,#18H
EA ET0 ET1
TR0 TR1
$ TH0,#0B1H TL0,#1CH P 1.0 TH1,#63H TL1,#18H P1.1
MAIN: ;参考方案1 (查询方式) ORG AJMP 0000H MAIN ;参考方案2 (查询方式) ORG AJMP 0000H
MAIN ORG SETB SETB MOV MOV MOV MOV MOV SETB SETB
CHECK: JBC
JBC SJMP
TIMER0: MOV
MOV CPL SJMP
TIMER1: MOV
MOV CPL SJMP END
0100H ORG 0100H P1.0 P1.1 TMOD,#00H TH0,#0B1H TL0,#1CH TH1,#63H TL1,#18H TR0 TR1 TF0,TIMER0 TF1,TIMER1 CHECK TH0,#0B1H TL0,#1CH P 1.0 CHECK TH1,#63H TL1,#18H P1.1
CHECK
MAIN: SETB SETB MOV MOV MOV MOV SETB LP1:
LP2: EXIT: P1.0
P1.1 R7,#2 TMOD,#00H TH0,#0B1H TL0,#1CH TR0 JBC SJMP MOV MOV CPL DJNZ MOV CPL SJMP END
TF0,L P2 LP1 TH0,#0B1H TL0,#1CH P 1.0 R7, EXIT R7,#2 P 1.1 LP1
8. P1.0输出脉冲宽度调制(PWM)信号,即脉冲频率为2KHz、占空比为7:10的矩形波,晶振频率为12MHz。
解:对P1.1取反时,由于高、低电平的时间不同,可选时间基准为0.05ms,高电平的软件计数为 7,低电平的软件计数为 3。
若采用定时器1工作于方式2,则定时初值 X=256-50/1=CEH 。
;参考程序MAIN:
TIMER1:
L1: EXIT:
;参考程序1 (中断方式)
ORG
LJMP
ORG
LJMP
SETB
MOV
MOV
MOV
MOV
SETB
SETB
SETB
SJMP
DJNZ
CPL
JNB
MOV
SJMP
MOV
RETI
END
(查询方式,T1工作于方式1)
0000H
MAIN 001BH
TIMER1
P 1.0 R7,#7
TMOD,#20H
TH1,#0CEH
TL1,#0CEH EA
ET1
TR1
$
R7, EXIT
P 1.0 P1.0,
L1 R7,#7
EXIT R7,#3
;参考程序
MAIN:
TIMER1:
LP2:
L1
:
2 (查询方
式)
ORG
SETB
MOV
MOV
MOV
MOV SETB
JBC
SJMP
DJNZ
CPL
JNB
MOV SJMP
MOV
SJMP
END
0000H
P 1.0
R7,#7
TMOD,#20H
TH1,#0CEH
TL1,#0CEH
TR1
TF1,L P2
TIMER1
R7, TIMER1
P 1.0
P1.0, L1
R7,#7
TIMER1
R7,#3
TIMER1
MAIN:
TIMER1: LP2:
L1
: ORG 0000H
SETB P 1.0
MOV R7,#7
MOV TMOD,#10H
MOV TH1,#0FFH MOV TL1,#0CEH
SETB TR1
JBC TF1,L P2
SJMP TIMER1
MOV TH1,#0FFH MOV TL1,#0CEH
DJNZ R7, TIMER1 CPL P 1.0
JNB P1.0, L1 MOV R7,#7 SJMP TIMER1 MOV R7,#3 SJMP TIMER1 END
9.两只开关分别接入P3.0、P3.1,在开关信号4种不同的组合逻辑状态, 使P 1.0分别输出频率 0.5kHz、
1kHz 、2kHz 、4kHz 的方波,晶振频率为 12MHz 。
解:仍有多种设计方案。
其中一种为: 要求P1.0分别输出频率 0.5kHz 、1kHz 、2kHz 、 4kHz 的方波,需要的定时时间分别为: 1ms 、0.5ms 、0.25ms 、0.125ms 。
可设计一个 0.125ms 的定时器,作为基准时间,再加上软 件计数器8、4、2、1即可。
设定时器T0工作 于方式1,查询方式工作,参考程序如下。
;参考程序1
END
;参考程序3
ORG OOOOH
MAIN: ORG
SETB 0000H P 1.0 ;参考程序 ORG 予2 0000H CHECK:
JB P 3.1,NEXT MAIN: SETB P 1.0 JB
P 3.0,KHZ 1
CHECK:
MOV P3,#0FFH
SJMP HZ_500
MOV A, P3 NEXT:
JNB P 3.0,KHZ_2
ANL
A,#03H
SJMP KHZ 4
TEST0:
CJNE A,#00H, TEST1 HZ_500:
MOV R7,#8
SJMP HZ_500
SJMP TO_DLY
TEST1: CJNE A,#01H,TEST2 KHZ_1:
MOV R7,#4
SJMP KHZ_1
SJMP TO_DLY TEST2:
CJNE A,#02H, TEST3 KHZ_2:
MOV R7,#2
SJMP KHZ_2
SJMP TO_DLY TEST3: SJMP KHZ_4 KHZ_4:
MOV R7,#1
HZ_500: MOV R7,#8 TO DELAY: ACALL
DELAY
SJMP TO_DLY
CPL
P 1.0 KHZ_1:
MOV R7,#4
SJMP
CHECK
SJMP TO_DLY DELAY:
MOV TMOD,#01H
KHZ_2: MOV R7,#2 MOV TH0,#0FFH
SJMP TO_DLY
MOV
TL0,#83H KHZ_4:
MOV
R7,#1
SETB
TR0 TO_DELAY: ACALL
DELAY LP:
JBC TF0,L P1
CPL P 1.0
SJM P LP
SJMP
CHECK LP 1:
DJNZ R7,L P2 DELAY:
MOV TMOD,#01H
SJMP
EXIT MOV TH0,#0FFH LP2:
MOV
TH0,#0FFH
MOV TL0,#83H MOV TL0,#83H
SETB
TR0
SJMP
LP
LP:
JBC
TF0,L P1
LP1:
SJMP DJNZ
SJMP
LP
R7,L P2 EXIT
MAIN:
SETB P
1.0
EXIT: RET END LP2:
MOV MOV EXIT:
SJMP
RET TH0,#0FFH TL0,#83H LP
CHECK: JB P3.1,NEXT
JB P3.0,KHZ_1
SJMP HZ_500 NEXT: JNB P3.0,KHZ_2
SJMP KHZ_4
HZ_500: MOV R7,#8
D1: ACALL DELAY
DJNZ R7, D1
CPL P1.0
SJMP CHECK KHZ_1: MOV R7,#4
D2: ACALL DELAY
DJNZ R7, D2
CPL P1.0
SJMP CHECK KHZ_2: MOV R7,#2
D3: ACALL DELAY
DJNZ R7, D3
CPL P1.0
SJMP CHECK KHZ_4: MOV R7,#1
D4: ACALL DELAY
DJNZ R7, D4
CPL P1.0
SJMP CHECK DELAY: MOV TMOD,#01H
MOV TH0,#0FFH
MOV TL0,#83H
SETB TR0
LP1: JBC TF0,LP2
SJMP LP1
LP2: MOV TH0,#0FFH
MOV TL0,#83H EXIT:
RET
END。