《单片机原理及应用》(张迎新) 课后习题答案 电子工业出版社
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章
单片机结构及原理 1、MCS-51 单片机内部包含哪些主
18bit CPU 是
2
3
4K ROM4128B RAM
516bit 定
时器/632 根可编程I/O
准8 4 I/O I/O 线都能独立地作输入或输出。
78
2
操作的命令。
程序是根据任务要求有序编排指令的集合。
3、如何认识 89S51/52 存储器空间在物理结构上可以划分为 4 个
分为3 89S51/52 存
片外程序存储器、片内数据存储器、片外数据存储器。
在逻辑
64KB 程序存储
器地址25664
数据存储器地址空间。
4CPU 使用的是哪组工
CPU 如何确定和改变当前工
CPU 使用的是第0 组工作寄
00H07H CPU 通过改变状态字寄存器PSW中的RS0 和RS1 来确定工作寄存器组。
5
SP 重新赋果CPU SP 应该多
SP复位后指向07H 00H1FH 20H2FH
SP 重新赋
值。
如果CPU SP 应该至少
设置为0FH。
6、89S51/52 的时钟周期、机器周期、指令周期
8MHz 个单片机周期为
中最基本的、最小的时间单位。
机器周期是指完成一个基本操
12 个时钟周期组成。
指令周
由若干个机器周期组成。
若fosc=8MHz=1/8×12μ s=1.5μ s 7、89S51/52 扩
为什么不会
据存储器使用不同的指令用来区分同一地址空间。
8、程序状态
字寄存器PSW
PSW是8
PSW中各位状态通常是在指令执行的过程中自
PSW.7Cy PSW.6AC
PSW.5F0
志位。
PSW.4、PSW.3RS1 和 RS0
PSW.2
OV PSW.1 PSW.0 P 9、位地址7CH 和字节地址7CH 有何区7CH 7CH
8
7CH 是内部数据存储器中位寻址区中的一
1 位二进制数。
位地址 7CH 具体
在片内数据存储器字节地址为2FH 中的第4 2FH.4 10、89S51/52 中4 个I/O 89S51/52 的片外三
I/O 端口是单片机与外界联系的重要
8 P0 16 P0 8
P2 8 PSEN ALE
RD WR EA P3 口。
11、89S51/52 中4 个I/O
89S51/52 I/O 口在结
每个端口都包括一个锁存器、一个输出驱动器和输入缓冲器。
的每一位都可以作
为双向通用I/O 端口使用。
在作为一般的通用I/O
输出驱动场效应管FET
1P0 口为双向8 位三态I/O
I/O
及低 8 位地址总线的分时复用口。
作为通用I/O
得到
8 个TTL 负载。
2P1 口为 8 位准双向 I/O
一般作通用 I/O 义为输入线
1。
每个引脚可驱动4 个TTL 负载。
3P2 口为8 位准双向I/O
I/O 设备。
它与地址总线高 8 位复
可驱动4 个TTL 负载。
一般作为外部扩展时的高8 位地址总
线使用。
4P3 口为8 位准双向I/O
4 个TTL 负载。
作为通
用I/O P1 第二功能。
12、复位的
RST 引脚产生两个
24 平即可实现复位。
主要的复位方法有上电自动复位和按键手动复位两种。
按键手动
位和按键脉冲复位。
第三章指令系统1
编语言指令
令。
系列指令的有序集合称为程序。
I/O
及低 8 位地址总线的分时复用口。
作为通用I/O
得到
8 个TTL 负载。
2P1 口为 8 位准双向 I/O
一般作通用 I/O 义为输入线
1。
每个引脚可驱动4 个TTL 负载。
3P2 口为8 位准双向I/O
I/O 设备。
它与地址总线高 8 位复
可驱动4 个TTL 负载。
一般作为外部扩展时的高8 位地址总
线使用。
4P3 口为8 位准双向I/O
4 个TTL 负载。
作为通用I/O P1 12、复位的
RST 引脚产生两个
24 平即可实现复位。
主要的复位方法有上电自动复位和按键手动复位两种。
按键手动
位和按键脉冲复位。
第三章指令系统1
编语言指令
令。
系列指令的有序集合称为程序。
I/O
及低 8 位地址总线的分时复用口。
作为通用I/O
得到
8 个TTL 负载。
2P1 口为 8 位准双向 I/O
一般作通用 I/O 义为输入线
1。
每个引脚可驱动4 个TTL 负载。
3P2 口为8 位准双向I/O
I/O 设备。
它与地址总线高 8 位复
可驱动4 个TTL 负载。
一般作为外部扩展时的高8 位地址总
线使用。
4P3 口为8 位准双向I/O
4 个TTL 负载。
作为通
用I/O P1 12、复位的
RST 引脚产生两个
24 平即可实现复位。
主要的复位方法有上电自动复位和按键手动复位两种。
按键手动
位和按键脉冲复位。
第三章指令系统
1
编语言指令
令。
系列指令的有序集合称为程序。
的内容传送到片内RAM54H 单元中。
MOV R0#60H MOVX A@R0 MOV 54H A 10、试编程将寄存器R7 的内容传送到R1 中去。
MOV A R7 MOV R1 A 11、已知当前PC 值为210H2F0H 中的常数送入累加器A 中。
1PC 作为基址寄存器MOV A#0E0H MOVC A@A+PC 2DPTR 作
为基址寄存器 MOV DPTR#02F0H MOV A#00H MOVC A
@A+DPTR 12
R0 MOV R0#0A7H
R0=A7H R0 XCH A R0 A=A7H
A 中的数据与R0 中的数据进行交换 SWAP A A=7AH
器A 中的高低四位进行交换 XCH A R0 R0=7AH
换回R0 13、请用两种方法实现累加器A 与寄存器B 的内容交
换。
1MOV R0 A MOV A B MOV B R0 2
MOV
R0 B XCH A R0 14、试编程将片外RAM中40H 单元的内
容与R1 的内容交换。
MOV R0#40H MOVX A@R0
XCH A R1 MOVX @R0 A 15A=0C9H B=8DH
CY=1。
执行指令 ADDC A B A=57H CY=1
OV=1AC=1P=1 执行指令 SUBB A B A=3BH CY=0AC=1OV=1 16、试编程将片外RAM中30H 和31H 单
32H33H
中。
MOV R0#30H MOVX A@R0 MOV B A INC R0 MOVX A@R0 MUL AB INC R0 MOVX @R0 A MOV A B
INC R0 MOVX @R0 A 17、试用3 种方法将累加器A 中的无
符号数乘2. 答1MOV R0 A ADD A R0 2MOV B
#2 MUL AB 3RL A 18 MOV
30H#0A4H (30H)=A4H MOV A#0D6H A=D6H MOV R0
#30H R0=30H MOV R2#47H R2=47H ANL A R2
A=46H
ORL A@R0 A=E6H SWAP A A=6EH CPL A A=91H XRL A#0FFH A=6EH ORL 30H A (30H)=EEH 19、求下列
A 及PSW中进位CY、奇偶位P 和溢出位
OV 的值。
1A=5BH 时ADD A#8CH 2A=5BH 时ANL A#7AH 3A=5BH 时XRL A#7FH 4
当A=5BH CY=1 时SUBB A#0E8H 1A=E7H
CY=1P=0OV=0 2A=5AH P=0 3A=24H P=0
4
A=72H CY=1P=0OV=0 20、把累加器A 中的低4 位数据送到外部数据存储器的2000H 单元。
ANL A#OFH MOV
DPTR#2000H MOVX @DPTR A 21、试说明指令CJNE @R1
#7AH10H 250H
R1 内容为地址的单元中的数据等
于7AH若本指令地
址为250H250H03H10H= 263H。
22、将
累加器A 中的数据由0 50 A 中。
CLR A MOV R0#50 L1: INC A DJNZ R0L1 23、试说明压栈
指令和弹栈指令的作用及执行过程。
SP 的内容加1后将直接地址单元中的数据压入SP 指向的
SP 指向最后推入数据所在的存
SP 所指出单元的内容
送入SP 的内容减1SP 指向新的栈顶。
24、下述程序执行SP=A=B= ORG 201H
MOV SP#40H MOV A#30H LCALL 250H
208H 送41H、42H,SP=42H ADD A#10H MOV B A
为20AH L1: SJMP L1 ORG 250H MOV DPTR#20AH PUSH DPL SP+1=43H,DPL→(43H) PUSH DPH
SP+1=44H,DPH→(44H) RET 20AH→PC
SP=42H A=30H B=30H。
25
是第1 和第8 2 和第7
3 和第6
4 和第5
延时后循环。
26、若系统晶振频率为 6MHz DELAY
DELAY: MOV R2#0FAH L1: MOV R3#0FAH L2: DJNZ R3
L2 DJNZ R2L1 RET T=4μ s250×4μ s4μ s
×2504μ s=251.008ms T=250×4μ s×250=250ms 若想加
若想减小延
27、P1 口连接8
MOV
A#0FEH L1: MOV P1 A RL A LCALL DELAY DELAY 子
程序同上题 SJMP L1 28
2100H 单元中的高4 位置“10”。
MOV
DPTR#2100H MOVX A@DPTR ORL A#0F0H ANL A
#0F0H MOVX @DPTR A 29、试编程将片内数据存储器40H 单元的第0 为和第7 位置1 MOV A40H CPL
A SET
B ACC.0 SETB ACC.7 MOV 40H A 30、将A.5 与80H 位
P1.4 输出。
MOV C80H ANL C ACC.5
MOV P1.4 C 311
MOV
C B.0 ORL C P2.1 ANL C ACC.0 ORL C/P3.2 MOV P1.7
C 2 MOV C P1.3 ANL C ACC.2 MOV 20H C MOV C
B.5 ANL C/P1.1 ORL C20H MOV PSW.5 C 3 MOV C B.4 ANL C/P1.5 MOV 20H C MOV C P1.0 ANL C/AC
C.7 ORL C20H MOV P2.3 C 第四章汇编语言程序设计 1、编
程将片内40H60H 单元中的内容送到以3000H 为首的存储区内。
MOV R1#40H MOV R2#21H MOV DPTR#3000H L1: MOV A@R1 MOVX @DPTR A INC R1 INC DPTR
DJNZ R2L1 2、编程计算下列算式的程序1
23H+45H+ABH+03H= MOV A#23H ADD A#45H ADD A
#0ABH XCH A B ADDC A#00H XCH A B ADD
27、P1 口连接8
MOV
A#0FEH L1: MOV P1 A RL A LCALL DELAY DELAY 子
程序同上题 SJMP L1 28
2100H 单元中的高4 位置“10”。
MOV
DPTR#2100H MOVX A@DPTR ORL A#0F0H ANL A
#0F0H MOVX @DPTR A 29、试编程将片内数据存储器40H 单
元的第0 为和第7 位置1 MOV A40H CPL
A SET
B ACC.0 SETB ACC.7 MOV 40H A 30、将A.5 与80H 位
P1.4 输出。
MOV C80H ANL C ACC.5
MOV P1.4 C 311
MOV
C B.0 ORL C P2.1 ANL C ACC.0 ORL C/P3.2 MOV P1.7
C 2 MOV C P1.3 ANL C ACC.2 MOV 20H C MOV C
B.5 ANL C/P1.1 ORL C20H MOV PSW.5 C 3 MOV C
B.4 ANL C/P1.5 MOV 20H C MOV C P1.0 ANL C/AC
C.7 ORL C20H MOV P2.3 C 第四章汇编语言程序设计 1、编
程将片内40H60H 单元中的内容送到以3000H 为首的存储区内。
MOV R1#40H MOV R2#21H MOV DPTR#3000H L1: MOV A@R1 MOVX @DPTR A INC R1 INC DPTR
DJNZ R2L1 2、编程计算下列算式的程序1
23H+45H+ABH+03H= MOV A#23H ADD A#45H ADD A
#0ABH XCH A B ADDC A#00H XCH A B ADD DPTR#3000H MOVX @DPRT A 2 MOV DPTR#3001H MOVX A@DPTR MOV 30H A INC DPTR MOVX A@DPTR ADD A30H MOV B A MUL AB (a b)2 MOV 31H A CJNE A#10L1 SJMP SAVE L1: JC L2 CLR C SUBB A#10 SJMP SAVE L2: ADD A#10 SAVE: MOV DPTR#3000H MOVC @DPTR A 7、设有两个长度均为 15
放在以 200H 和 210H 程求其对应
220H 为首地址的存储区中。
MOV DPH#02H MOV R1#15 MOV R2#00H 数组1 首地址
低位 MOV R3#10H 数组2 首地址低位 MOV R4#20H
和首地址低位 L1: MOV DPL R2 MOVX A@DPTR MOV
R1 A MOV DPL R3 MOVX A@DPTR ADD A R1 MOV
DPL R4 MOVX @DTPR A INC R2 INC R3 INC R4 DJNZ
R1L1 SJMP $ 8、设有 100 2000H
数和零的个数。
MOV 30H#00H MOV 31H#00H
器 MOV 32H#00H MOV DPTR#2000H MOV
R1#100 L4: MOVX A@DPTR INC DPTR CJNE A#0L1 INC 32H SJMP L2 L1: JC L3 INC 30H SJMP L2 L3: INC 31H
L2: DJNZ R1L4 SJMP $ 9、将片外数据存储器地址为1000H 1030H RAM 30H60H 并将
原数据块区域全部清零。
MOV R0#30H MOV R2#31H MOV DPTR #1000H LP: MOVX A@DPTR MOV @R0 A AND A#00H MOVX @DPTR A INC R0 INC DPTR DJNZ
R2LP SJMP $ 10 R1、R0 指向的两个
片外 RAM连续单元中的高 4
装入累加器A 中。
已知R0
放在A 中高四位。
MOVX A@R1 ANL A#0F0H SWAP A MOV R2 A MOVX A@R0 ANL A#0F0H ORL A R2 11、试编程把以 2040H 为首地址的连续 50 个单元的无符号数按
3000H为首地址的存储区中。
MOV
R2#50 MOV R3#20H MOV R4#40H MOV R5
#30H MOV R6#00H SEND: MOV DPH R3
SEND 将2040H 数据块移入3000H 存储区 MOV DPL R4 MOVX A@DPTR INC DPTR MOV R3DPH MOV R4DPL MOV DPH R5 MOV DPL R6 MOVX @DPTR A INC DPTR
MOV R5DPH MOV R6DPL DJNZ R2SEND MOV R2
#49 CMP1: MOV DPTR#3000H MOV R3#49
比较次数 CMP2: MOVX A@DPTR MOV B A INC DPTR MOVX A@DPTR CJNE A B L1 L1: JC NOMOVE MOV
30H A CLR C MOV A DPL SUBB A#01H MOV DPL A MOV A30H MOVX @DPTR A INC DPTR MOV A B MOVX
@DPTR A NOMOVE: DJNZ R3CMP2 50
DJNZ R2CMP1 LJMP $ 12
从首地址为2000H100 的数据块中找出ASCII 码为A
将其地址送到20A0H 和20A1H 单元中。
MOV DPTR
#2000H MOV R2#100 GO_ON: CLR A MOVC A,@A+DPTR CJNE A#41H IFEND MOV A DPH MOV B DPL MOV DPTR#20A0H MOVX @DPTR A INC DPTR XCH A B MOVX @DPTR A SJMP OVER IFEND: INC DPTR DJNZ
R2GO_ON OVER: SJMP OVER 13、设在200H204H 单元
5 个压缩BCD ASCII
放到以205H 单元为首地址的存储区。
MOV R2#05H
MOV R3#02H MOV R4#00H MOV R5#02H MOV R6
#05H CHLP: MOV DPH R3 MOV DPL R4 MOVX A@DPTR INC DPTR MOV R3DPH MOV R4DPL MOV B A SWAP A ANL A#0FH ORL A#30H MOV DPH R5 MOV DPL R6 MOVX @DPTR A INC DPTR MOV A B ANL A#0FH ORL A#30H MOVX @DPTR A MOV R5DPH MOV R6DPL DJNZ R2CHLP 14、有一无符号数据块长度在 30H
其首地址为 31H 并存入40H 中。
MOV R0#31H MOV R130H MOV 40H#00H LOOP: MOV A@R0 CJNE A40H L1 SJMP AGAIN L1: JNC L2
SJMP AGAIN L2: MOV 40H A AGAIN: INC R0 DJNZ R1
LOOP SJMP $ 15、略 16、在以 2000H
存放 20 个用 ASCII 码表示的 09
从首地址为2000H100 的数据块中找出ASCII 码为A
将其地址送到20A0H 和20A1H 单元中。
MOV DPTR
#2000H MOV R2#100 GO_ON: CLR A MOVC A,@A+DPTR CJNE A#41H IFEND MOV A DPH MOV B DPL MOV DPTR#20A0H MOVX @DPTR A INC DPTR XCH A B MOVX @DPTR A SJMP OVER IFEND: INC DPTR DJNZ
R2GO_ON OVER: SJMP OVER 13、设在200H204H 单元
5 个压缩BCD ASCII
放到以205H 单元为首地址的存储区。
MOV R2#05H
MOV R3#02H MOV R4#00H MOV R5#02H MOV R6
#05H CHLP: MOV DPH R3 MOV DPL R4 MOVX A@DPTR INC DPTR MOV R3DPH MOV R4DPL MOV B A SWAP A ANL A#0FH ORL A#30H MOV DPH R5 MOV DPL R6 MOVX @DPTR A INC DPTR MOV A B ANL A#0FH ORL A#30H MOVX @DPTR A MOV R5DPH MOV R6DPL DJNZ R2CHLP 14、有一无符号数据块长度在 30H
其首地址为 31H 并存入40H 中。
MOV R0#31H MOV R130H MOV 40H#00H LOOP: MOV A@R0 CJNE A40H L1 SJMP AGAIN L1: JNC L2
SJMP AGAIN L2: MOV 40H A AGAIN: INC R0 DJNZ R1
LOOP SJMP $ 15、略 16、在以 2000H
存放 20 个用 ASCII 码表示的 09
RET 1h DLY_1H: MOV R4#60 L5: LCALL DLY_1M DJNZ R4L5 RET 21、用程序实现 c=a2+b2。
设 a、b 均小于10 a 存在 31H b 存在 32H c存33H 单元。
ORG 1000H SR MOV A31H ACALL SQR MOV R1
A MOV A32H ACALL SQR ADD A R1 MOV 33H A SJMP
$ SQR: INC A MOVC A @A+PC RET TABLE: DB 0 1 4 9 16 DB
2536496481 END 22、如何实现将内存单元40H
60H 的
数逐个对应传到片外2540H2560H MOV R0
#40H MOV DPTR#2540H MOV R2#21H L1: MOV A@R0 MOVX @DPTR A INC R0 INC DPTR DJNZ R2L1 SJMP
$ 23、参考21 题 24、参考21 题 25、参考实验程序 26、参考
实验程序第五章定时/计数器 1、89S51 单片机内部有几个定
时/89S51 单片机内部有两个16 位定时/0T01T1
在定时器/计数器的16 位的计数器是由两个8 位的专用寄存器TH0、TL0TH1、TL1 组成。
2、89S51 单片机的定时/计数
/计数器有四
0123 3 只
适用于T0。
以T0 016 位寄存器只用了13
TL0 的高三位未用。
由TH0 的8 位和TL0 的低5 位组。