河北工业大学单片机习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章思考题及习题
1-1请写出下列各十进制数在八位微型机中的原码、反码和补码形式:
(1)X=十48 (2)X=+123 (3)X=-34 (4)X=-115
1-2将下列数看作八位微型机中带符号数的原码、反码和补码时,写出相应的真值:
1-3 写出下列各数的BCD码:
(1)47 ---47H 0100 0111B (2)78 --78H 0111 1000B
(3)1996 --1996H 0001 1001 1001 0110B (4)115 --115H 0001 0001 0101B
1-5将下列数据进行加法和减法运算,写在前面的数为被加数或被减数(写出竖式)。

(1)97H和OFH (2)0A6H和33H (3)0F3H和0F4H (4)0B6H和0EDH
一、加法
(1)97H和OFH
被加数 1 0 0 1 0 1 1 1 B =97H
加数0 0 0 0 1 1 1 1 B =0FH
+
和 1 0 1 0 0 1 1 0 B =A6H
C8=0 ,C7=0 0V =0 ,CY =0
分析:
无符号数: CY=0, 97H+0FH=0A6H=166 ∵151+15=166
带符号数: OV=0, 97H+0FH=0A6H 真值=-5AH=-90 ∵-69H+15=-105+15=-90
被加数 1 0 1 0 0 1 1 0 B =A6H
加数0 0 1 1 0 0 1 1 B =33H
+
和 1 1 0 1 1 0 0 1 B =D9H
C8=0 ,C7=0 0V =0 ,CY =0
分析:
无符号数: CY=0, A6H+33H=0D9H=217 ∵166+51=217
带符号数: OV=0, A6H+33H=0D9H 真值=-27H=-39 ∵-5AH+51=-90+51=-39
(3)0F3H和0F4H
被加数 1 1 1 1 0 0 1 1 B =F3H
加数 1 1 1 1 0 1 0 0 B =F4H
+
和 1 1 1 1 0 0 1 1 1 B =E7H
C8=1 ,C7=1 0V =0 ,CY =1
分析:
无符号数: CY=1, F3H+F4H=100H+0E7H=1E7H=487 ∵243+244=487
带符号数: OV=0, F3H+F4H=0E7H 真值=-19H=-25 ∵-13+(-12)= -25
(4)0B6H和0EDH
被加数 1 0 1 1 0 1 1 0 B =B6H
加数 1 1 1 0 1 1 0 1 B =EDH
+
和 1 1 0 1 0 0 0 1 1 B =A3H
C8=1,C7=1 0V =0 ,CY =1
分析:
无符号数: CY=1,B6H+EDH=100H+0A3H=1A3H ∵182+237=419
带符号数: OV=0, B6H+EDH=0A3H 真值=-5DH=-93 ∵-4AH-13H=-74-19=-93
二、减法:
(1)97H和OFH
被减数 10010111B
求补
进位 111110111
差10001000B
分析:
无:CY=/C8=/1=0,∵97H-0FH=88H, 151-15=136
带:C8=1,C7=1 OV=0, ∵97H-0FH=88H, 真值=-78H=-120 ∴ -105-15=-120
(2)0A6H 和33H
差 101100011B
分析:
无:CY=/C8=/1=0,∵0A6H-33H=73H, 166-51=115
带:C8=1,C7=0,OV=1, ∵0A6H-33H=63H, OVER ∴ -90-51=-141<-128
(3)0F3H 和0F4H
差 11111111B
分析:
无:CY=/C8=/0=1,∵0F3H-0F4H=-100H+0FFH=-1
带:C8=0,C7=0,OV=0, ∵0F3H-0F4H=0FFH, 真值=-(00H-0FFH )=-1
(4)0B6H 和0EDH
差 11001001B
分析:
无:CY=/C8=/0=1,∵0B6H-0EDH=-100H+0C9H=-37H=-55
带:C8=0,C7=0,OV=0, ∵0B6H-0EDH=0C9H, 真值=-(00H-0C9H )=-37H=-55
1-6 完成下列数据的乘除运算,写在前面的数为被乘数或被除数(写出竖式)。

求补
求补
求补
(2)ll0ll0llB 和10010101B
(1)1100B 和1101B
0 .1 1 1 0 1
1 1 0 1
1 0 1 1 0
1 1 0 1
1 0 0 1 0
1 1 0 1
0 1 0 1 0 0
0 1 1 0 1
1 1 1
(2)ll0ll0llB 和10010101B
1 .0 1 1 1 1
10010101 1 0 0 1 0 1 0 1
1 0 0 0 1 1 0 0 0
1 0 0 1 0 1 0 1
1 0 0 0 0 0 1 1 0
1 0 0 1 0 1 0 1
1 1 1 0 0 0 1 0
1 0 0 1 0 1 0 1
1 0 0 1 1 0 1 0
1 0 0 1 0 1 0 1
被乘数 1 1 0 0 B
乘数 × 1 1 0 1 B
1 1 0 0
0 0 0 0
1 1 0 0
+ 1 1 0 0
乘积 1 0 0 1 1 1 0 0 B
被乘数 1 1 0 1 1 0 1 1 B
乘数 × 1 0 0 1 0 1 0 1 B
1 1 0 1 1 0 1 1
0 0 0 0 0 0 0 0
1 1 0 1 1 0 1 1
0 0 0 0 0 0 0 0
1 1 0 1 1 0 1 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
+ 1 1 0 1 1 0 1 1
乘积 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 B
1-7将下列数据分别进行逻辑乘、逻辑加和逻辑异或运算(写出竖式)。

(1)33H和0BBH
0 0 1 1 0 0 1 1 B =33H
1 0 1 1 1 0 1 1 B =BBH

0 0 1 1 0 0 1 1 B =33H
0 0 1 1 0 0 1 1 B =33H
1 0 1 1 1 0 1 1 B =BBH

1 0 1 1 1 0 1 1 B =BBH
0 0 1 1 0 0 1 1 B =33H
1 0 1 1 1 0 1 1 B =BBH

1 0 0 0 1 0 0 0 B =88H
(2)0ABH和7FH
1 0 1 0 1 0 1 1 B =ABH
0 1 1 1 1 1 1 1 B =7FH

0 0 1 0 1 0 1 1 B =2BH
1 0 1 0 1 0 1 1 B =ABH
0 1 1 1 1 1 1 1 B =7FH

1 1 1 1 1 1 1 1 B =FFH
1 0 1 0 1 0 1 1 B =ABH
0 1 1 1 1 1 1 1 B =7FH

1 1 0 1 0 1 0 0 B =D4H
(3)0CDH和80H
1 1 0 0 1 1 0 1 B =CDH
1 0 0 0 0 0 0 0 B =80H

1 0 0 0 0 0 0 0 B =80H
1 1 0 0 1 1 0 1 B =CDH
1 0 0 0 0 0 0 0 B =80H

1 1 0 0 1 1 0 1 B =CDH
1 1 0 0 1 1 0 1 B =CDH
∨ 1 00 0 0 0 0 0 B =80H
0 1 0 0 1 1 0 1 B =4DH
(4)78H和OFH
0 1 1 1 1 0 0 0 B =78H
0 0 0 0 1 1 1 1 B =0FH

0 0 0 0 1 0 0 0 B =08H
0 1 1 1 1 0 0 0 B =78H
0 0 0 0 1 1 1 1 B =0FH

0 1 1 1 1 1 1 1 B =7FH
0 1 1 1 1 0 0 0 B =78H
0 0 0 0 1 1 1 1 B =0FH

0 1 1 1 0 1 1 1 B =77H
1-8把下列各数按补码运算规则求出X+Y的补码及其真值:(1)X=十48 Y=十38
被加数0 0 1 1 0 0 0 0 B [X]补=30H
加数0 0 1 0 0 1 1 0 B [Y]补=26H
+
和0 1 0 1 0 1 1 0 B =56H
C8=0,C7=0 0V =0
∵[X]补+[Y]补=[X+Y]补=56 H 真值=+56H=+86
(2)X=+123 Y=—49
被加数0 1 1 1 1 0 1 1 B [X]补=7DH
加数 1 1 0 0 1 1 1 1 B [Y]补=CFH
+
和 1 0 1 0 0 1 0 1 0 B =4AH
C8=1,C7=1,0V=0
∵[X]补+[Y]补=[X+Y]补=4A H 真值=+4AH=+74
(3)X=-34 Y=+87
被加数 1 1 0 1 1 1 1 0 B [X]补=DEH
加数0 1 0 1 0 1 1 1 B [Y]补=57H
+
和 1 0 0 1 1 0 1 0 1 B =35H
C8=1,C7=1 0V =0
∵[X]补+[Y]补=[X+Y]补=35 H 真值=+35H=+53
(4)X=-115 Y=-15
被加数 1 0 0 0 1 1 0 1 B [X]补=8DH
加数 1 1 1 1 0 0 0 1 B [Y]补=F1H
+
和 1 0 1 1 1 1 1 1 0 B =7EH
C8=1,C7=0 0V =1
∵[X]补+[Y]补=7EH≠[X+Y]补负溢出
第二章习题答案
2-2 8051单片机内部包含哪些主要逻辑部件?各自的功能是什么?
答:8051单片机内部包含:
1、中央处理器CPU:它是单片机内部的核心部件,决定了单片机的主要功能特性,由运算器
和控制器两大部分组成。

2、存储器:8051单片机在系统结构上采用了哈佛型,将程序和数据分别存放在两个存储器内,
一个称为程序存储器,另一个为数据存储器。

在物理结构上分程序存储器和数据存储器,
有四个物理上相互独立的存储空间,即片内ROM和片外ROM,片内RAM和片外RAM。

3、定时器/计数器(T/C):8051单片机内有两个16位的定时器/计数器,每个T/C既可以设
置成计数方式,也可以设置成定时方式,并以其定时计数结果对计算机进行控制。

4、并行I/O口:8051有四个8位并行I/O接口(P0~P3),以实现数据的并行输入输出。

5、串行口:8051单片机有一个全双工的串行口,可实现单片机和单片机或其他设备间的串行
通信。

6、中断控制系统:8051共有5个中断源,非为高级和低级两个级别。

它可以接收外部中断申
请、定时器/计数器申请和串行口申请,常用于实时控制、故障自动处理、计算机与外设
间传送数据及人机对话等。

2-3 8051单片机的存储器分哪几个空间?通过什么信号来区别不同空间的寻址?
答:有四个物理上相互独立的存储空间:片内ROM地址为0000H-0FFFH此时/EA=1;片外ROM地址为0000H-0FFFFH此时/EA=0。

片内数据存储器地址为00H-0FFH;片外数据存储器地址为0000H-0FFFFH;区分片内片外数据存储器通过指令MOV与MOVX。

2-6内部RAM低128单元划分为哪三个主要部分?各部分主要功能是什么?
答:分为三部分:工作寄存器去,位寻址区,用户RAM区(堆栈、数据缓冲)。

工作寄存器区(00H-1FH):32个RAM单元共分四组,每组8个寄存单元(R0-R7)。

寄存器常用于存放操作数及中间结果等。

位寻址区(20H-2FH):此部分16个单元的每一位都有一个8位表示的位地址,位寻址取得每一个单元既可作为一般RAM单元使用,进行字节操作,也可以对单元中的每一位进行位操作。

用户RAM区:也是数据缓冲区,一般用于存放用户数据及作堆栈区使用。

第三章习题答案
3-1 MCS-51的寻址方式及特点
MCS-51的寻址方式有七种:
1.直接寻址:指令中直接给出操作数所在的单元地址或位地址P68
2.立即寻址:在指令中紧跟在操作码之后的字节是操作数P69
3.寄存器寻址:操作数在指令中给出的寄存器内P69
4.寄存器间接寻址:指令中指定的寄存器内存的是操作数的地址P70
5.变址寻址:指令中给出由基址加变址形成的16位地址作为操作数的地址P71
6.相对寻址:指令中给出相对偏移量,该相对偏移量与PC当前值求和得到转移地址P72
7.位寻址:指令中给出的位地址或位寄存器里存是所寻的位操作数P71
3-2 MCS-51的指令按功能分类及各类的作用
MCS-51的指令按功能分5类:
1.数据传送指令:主要用于数据的传送与交换和栈操作。

P74
2.算术运算指令:主要用来作算术四则运算、增量、减量及二—十进制调整。

P81
3.逻辑运算指令:主要用来作“与”、“或”、“异或”、“清除” “求反”及“左右移位”等逻辑运算。

P88
4.位操作指令:主要用来作“与”、“或”、“清除”、“置位” “求反”等布尔操作及“位传送” 操作。

P90
5.控制转移指令:主要用于改变程序计数器PC的值,以控制程序执行的走向,有转移、调用及返回操作.P91 3-3变址寻址和相对寻址中偏移量的异同点
变址寻址:@A+DPTR ;基址:DPTR, 变址:A
@A+PC ;基址:PC当前值, 变址:A
变址:A 中为8位二进制无符号数偏移量(A)∈[0,255]即[00H,0FFH]相对寻址:
相对偏移量为8位二进制带符号数的补码
rel ∈[-128,+127]
[rel]补码∈[00H,0FFH]
相同点:偏移量∈[00H,0FFH]
不同点:变址寻址中偏移量为8位二进制无符号数;相对寻址中偏移量为8位二进制带符号数的补码
3-4指出下面每条指令的寻址方式:
MOV A,#30H –寄存器、立即–30H 立即数
MOV C,30H –寄存器、位–30H 位地址
MOVX A,@DPTR –寄存器、间接
jC LAB1 –相对
MOV 30H,@R1 –直接、间接–30H 字节地址
MOV 30H,R5 –直接、寄存器–30H 字节地址
MOVC A,@A+PC –寄存器、变址
sjmp LAB2 –相对
3-5运行下列程序后各单元及A、PSW的内容(1)Array
1.
MOV A,#2 ;(A)=02 H 0000 0001(psw)
MOV R1,#30H ;(R1)=30H 0000 0001
MOV @R1,A ;((R1))=(30H)=02 H 0000 0001
MOV 35H,R1 ;(35H)=30H 0000 0001
XCH A,R1 ;(A)=30H, (R1)= 02 H 0000 0000
2.
MOV A,#0F5H ;(A)=0F5H 00000000
MOV 30H,#9BH ;(30H)=9BH
ADD A,#28H ;(A)=1D H 10000000
ADDC A, @R0 ;(A)=0B9H 01000001
3.
CLR C ;(CY)=0
MOV 40H,#7AH ;(40H)=7AH
MOV A,#92H ;(A)=92H 00000001
MOV R0,#40H ;(R0)=40H
SUBB A,@R0 ;(A)=92H-7AH-0=18H,(PSW)=44H 4.
MOV A,#79H ;(A)=79H 00000001
MOV 30H,#89H ;(30H)=89H
ADD A,30H ;(A)=02H 11000001
DA A ;(A)=68H 10000001
SWAP A ;(A)=86H 10000001
3-6写出能完成下列数据传送的指令
⑴R1内容传送到R0
MOV A,R1;MOV R0,A
(2)内部RAM25H单元内容送到 35H单元
MOV 35H,25H或MOV A,25H ; MOV 35H,A ;MOV 35H,25H
(3)内部RAM25H单元内容送到 P1口
①MOV A,25H ; MOV P1,A ;
②MOV P1,25H ;
③MOV 90H,25H
(4)内部RAM40H单元内容送外部RAM 2005H单元
MOV A,40H;MOV DPTR,#2005H;MOVX @DPTR,A
(5)外部RAM3000H单元内容送内部RAM 25H单元
MOV DPTR,#3000H; MOVX A,@DPTR;MOV 25H,A
(6)外部ROM1000H单元内容送内部RAM 35H单元
MOV DPTR,#1000H; CLR A ;MOVC A,@A+DPTR;MOV 35H,A
(7)外部ROM4000H单元内容送外部RAM4000H单元
MOV DPTR,#4000H; CLR A;MOVC A,@A+DPTR;MOVX @DPTR,A
(8)外部RAM 1000H单元内容送SP堆栈指针
MOV DPTR,#1000H;MOVX A,@DPTR; MOV SP,A
3-7 BCD码减法,求7954H-4157H=3797H。

算法1:
999AH-4157H=5843H
5843H+7954H并调整
ORG 0000H
BCDS: MOV A,#9AH
CLR C
SUBB A,#57H
MOV 30H,A
MOV A,#99H
SUBB A,#41H
MOV 31H,A
MOV A,#54H
ADD A,30H 2.机器码:74H 0F5H
75H 30H 9BH 78H 30H
24H 28H
36H
3.机器码:
0C3H
75H 40H 7AH 74H 92H
78H 40H
96H
4.机器码:74H 79H
75H 30H 89H 25H 30H
0D4H
0C4H
MOV 20H,A
MOV A,#79H
ADDC A,31H
DA A
MOV 21H,A
CPL C
MOV 2FH,C
SJMP $
END
循环程序
ORG 0000H
BCDS1: MOV 20H,#54H
MOV 21H,#79H
M OV 30H,#57H
MOV 31H,#41H
MOV R0,#30H
CLR C
MOV A,#9AH
SUBB A,@R0
MOV 40H,A
INC R0
MOV A,#99H
SUBB A,@R0
MOV 41H,A
CLR C
MOV R0,#40H
MOV R1,#20H
MOV R2,#2
LOOP: MOV A,@ R0
ADDC A,@R1
DA A
MOV @R0,A
INC R0
INC R1
DJNZ R2,LOOP
CPL C
MOV 7FH,C
SJMP $
END
3-7顺序程序算法2
ORG 0000H
BCDS1: MOV 20H,#54H
MOV 21H,#79H
MOV 30H,#57H
MOV 31H,#41H
MOV R0,#30H
MOV A,#9AH
SUBB A,@R0 ;
ADD A,20H ;
DA A ; CY)=0
MOV 40H,A
CPL C ; ( CY)=1
INC R0
MOV A,#9AH
SUBB A,@R0 ;(CY)=0
ADD A,21H
DA A
MOV 41H,A
CPL C
MOV 7FH,C
SJMP $
END
3-8写出下段程序中每一步A、B中的结果
MOV A,#22H ;(A)=22H
MOV B,#05H ; (B)=05H
MOV R0,#08H
MUL AB ; (A)=0AAH,(B)=0 00000000
MOV B,R0
DIV AB ;(A)=15H,(B)=02H 00000001 3-9 试写出完成如下操作的程序
(1) ORG 0000H
MOV DPTR,#1000H
MOVX A,@DPTR
ANL A,#11110000B
MOVX @DPTR,A
SJMP $
(2) ORL 50H,#00001111B
(3) XRL 50H,#11100000B
(4) MOV 50H,#11110000B
(5) XRL 50H,#0FFH
3-10 30H开始的20个单元数据传送到外部3000H
ORG 0000H
MOV R0,#30H
MOV DPTR,#3000H
MOV R7,#20
Loop1: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R7,Loop1
SJMP $
END
3-11 根据R3条件转移 1 ORG 0000H CJNE R3,#15,NEQ SJMP L1 ;=15 NEQ: JNC L1 ;>15 SJMP $ ;<15 L1: NOP ;≥15 .
O RG 0000H CJNE R3,#15,NEQ SJMP HALT NEQ: JC L1 ;<15 SJMP HALT L1: NOP ;<15 HALT: S JMP $ ; ≥15 ORG 0000H CJNE R3,#15,NEQ SJMP L1 NEQ: JC L1 SJMP $ L1: NOP ;≤15 ORG 0000H CJNE R3,#15,NEQ SJMP HALT NEQ: JNC L1 SJMP HALT L1: NOP ;>15 HALT: S JMP $
3-12 已知(SP)=53H,(PC)=37FEH 执行: ACALL 3A00H 后:
解:37FEH: ACALL 3A00H
3800H:
1)PC 当前值:(PC)+2=37FEH+2=3800H ,为返回地址
2)将PC 当前值压入堆栈
((SP+1))=(54H)=00H ;PCL
((SP+1))=(55H)=38H ;PCH
(SP)=55H
3)将子程序入口地址赋给PC
(PC)=3A00H
ORG 0000H
CLR C
MOV A,R3
SUBB A,#15
JNC GE15 ;≥15
….
(R3)-15
ORG 0100H
CLR C
MOV A,R3
SUBB A,#15
JC GE15 ;<15
….
(R3)-15
ORG 0000H
CLR C
MOV A,#15
SUBB A,R3
JNC GE15 ;≤15
….
15-(R3)
ORG 0000H
CLR C
MOV A,#15
SUBB A,R3
JC GE15 ;>15
….
15-(R3)
第四章汇编语言程序设计思考题与习题4及答案
4-1从20H单元开始存放一组带符号数,其数目已存在1FH单元。

要求统计出大于0、小于0和等于0的个数并存于ONE、TWO、THREE 三个单元。

ORG 0000H
ONE EQU 30H
TWO EQU 31H
THREE EQU 32H
NUM EQU 1FH
MOV NUM,#0FH
MOV R0,#20H;-1,2,34,0A0H,0....
MOV R1,#ONE
LOOP: MOV @R1,#0
INC R1
CJNE R1,#34H,LOOP
LOOP1: MOV A,@R0
JZ MTHREE
JB ACC.7,MTWO
INC ONE
SJMP DJNZZ
MTHREE: INC THREE
SJMP DJNZZ
MTWO: INC TWO
DJNZZ: INC R0
DJNZ NUM,LOOP1;NUM=0FH
SJMP $
END
4-2设自变量X为一无符号数,存放在内部RAM的VAX单元,函数Y存放在FUNC单元,请编出满足如下关系的程序:
X X≥50
Y= 5X 50>X≥20
2X X<20
ORG 0000H
VAX EQU 30H
FUNC EQU 31H
MOV VAX,#55;15;20;25;50;55
MOV A,VAX
CJNE A,#20,DO1
DO1: JNC DO2
MOV B,#2
MUL AB
SJMP MEM
DO2: CJNE A,#50,DO3
DO3: JNC MEM
MOV B,#5
MUL AB
MEM: MOV FUNC,A
SJMP $
4-3到3100H区域的程序。

4-7 ORG 0000H
MOV DPTR,#2000H
MOV P2,#30H
MOV R0,#00H
MOV R2,#0
LOOP:MOVX A,@DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ R2,LOOP ;0—FF--0
MOVX A,@DPTR ;(DPTR)=2100H
INC P2 ;31H
MOVX @R0,A
SJMP $
END
4-4在内部RAM中,有一个以BLOCK为始址的数据块,块长在LEN单元。

请用查表指令编一程序,先检查它们若是16进制中的A~F,则把它们变为ASCⅡ码;若不是,则把它们变为00H。

4-4
BLOCK EQU 31H
LEN EQU 30H
N EQU 30
ORG 0000H
MOV R0,#BLOCK
MOV LEN,#N
MOV R2,LEN
LOOP: MOV A,@R0
CJNE A,#0AH,DO1
DO1: JNC DO2
SJMP DO5
DO2: CJNE A,#0FH,DO3
SJMP DO4
DO3: JC DO4
DO5: MOV A,#0
SJMP NEXT
DO4: MOV DPTR,#TAB
CLR C
SUBB A,#0AH
MOVC A,@A+DPTR
NEXT: MOV @R0,A
INC R0
DJNZ R2,LOOP
SJMP $
TAB: DB 'A','B','C','D','E','F'
END
4-5在用JMP指令实现128分支的程序中,试用LJMP代替AJMP指令。

修改后的程序有何特点?最多能实现多少分支?
4-5
AJMP指令表 128分支占128*2=256 字节MEMORY
LJMP指令表可以实现256/3=85 个分支
特点:各分支可在64KB存储器中转移。

4-6试编写一个子程序将字符串:“MCS-51 Microcntrol”装入外部RAM 8000H开始的显示缓冲区。

ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: ACALL MOVX8000
SJMP $
ORG 0200H
MOVX8000: MOV DPTR,#TAB
MOV P2,#80H
MOV R0,#00H
MOV R2,#19
LOOP: MOV A,#0
MOVC A,@A+DPTR
MOVX @R0,A
INC R0
INC DPTR
DJNZ R2,LOOP
RET
tab: DB 'MCS-51 Microcontrol'
END
4-7设一个加数在50H~52H单元中,另一个加数在53H~55H中,进位存放在位地址00中,试编程实现两数求和。

ORG 000H
ONE DATA 50H
TWO DATA 53H
WEI BIT 00H
MOV R0,#ONE
MOV R1,#TWO
; MOV C,WEI
CLR C
MOV R2,#3
LOOP: MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
MOV WEI,C
SJMP $
END
4-7-2
ORG 0000H
ONE DATA 50H
TWO DATA 53H
WEI BIT 00H
MOV R0,#ONE
MOV R1,#TWO
CLR C
MOV R2,#3
SETB RS0
MOV R0,#58H
CLR RS0
LOOP: MOV A,@R0
ADDC A,@R1
INC R0
INC R1
SETB RS0
MOV @R0,A
INC R0
CLR RS0
DJNZ R2,LOOP
MOV WEI,C
SJMP $
END
4-9求8个数的算数平均值Y=(∑Xi)/8 (i=0,…7)
ORG 0000H
MOV SP,#6FH
CALL ZHISHU
MOV R2,#0 ;QIU HEA
MOV R3,#0 ;QIU HE B
MOV R0,#30H
MOV R4,#08
LOOP: MOV A,@R0
JZ NEXT
MOV B,#08H
DIV AB
ADD A,R2
MOV R2,A
MOV A,B
ADD A,R3
MOV R3,A
NEXT: INC R0
DJNZ R4,LOOP
DIV AB
ADD A,R2
MOV R2,A
MOV R3,B
SJMP $
ZHISHU: MOV 30H,#0FFH
MOV 31H,#0FFH
MOV 32H,#0FFH
MOV 33H,#0FFH
MOV 34H,#0FFH
MOV 35H,#0FFH
MOV 36H,#0FFH
MOV 37H,#0FFH
MOV 38H,#0FEH;FH
MOV 39H,#0FFH
RET
END
4-10将内部RAM的AAA单元中8位无符号二进制数转换成用BCD码表示的十进制数。

(要求用连续除10的方法实现)
4-10
ORG 0000H ORG 1000H
AAA DATA 0FFH AAA EQU 0FFH
MOV A,#AAA MOV A,#AAA
MOV B,#0AH MOV R0,#30H
DIV AB MOV B,#0AH
MOV 30H,B DIV AB
MOV B,#0AH MOV @R0,B
DIV AB INC R0
MOV 31H,B JNZ LOOP
MOV 32H,A SJMP $
SJMP $ END
END
4-11试用除法指令将20H单元的两位BCD码变成ASCII码后存入21H和22H单元。

ORG 0000H
MOV 20H,#67H
MOV A,20H
MOV B,#10H
DIV AB
ADD A,#30H
MOV 21H,A
ORL B,#30H
MOV 22H,B
SJMP $
END
4-13 试编程实现将20H 单元的两位BCD 数相乘,结果以BCD 码的形式存于21H 单元当中。

4-13-1 ORG 0000H
MOV 20H,#56H
MOV A,20H
ANL A,#0FH
MOV B,A
MOV A,20H
ANL A,#0F0H
SWAP A
MOV R2,A
DEC B
LOOP: ADD A,R2
DA A
DJNZ B,LOOP
MOV 21H,A
SJMP $
END
4-13-2
ORG 0000H
MOV 20H,#56H
MOV A,20H
MOV R0,#21H
MOV 21H,#0
XCHD A,@R0
MOV B,@R0
SWAP A
MOV R2,A
DEC B
LOOP: ADD A,R2
DA A
DJNZ B,LOOP
MOV 21H,A
SJMP $
END
4-16设逻辑运算表达式为
其中变量A 、B 、C 分别为P1.0、P1.4、定时器溢出标志TF1,D 、E 、F 分别为22H .2、22H .3的位地址、外部中断标志IF1,输出变量Y 为P1.5,请编写程序用软件方法实现上述逻辑功能。

4-16-1
A1 BIT P1.0
B1 BIT P1.4
C1 BIT TF1
)
()(F E D C B A Y +⋅++⋅=
D BIT 22H.2
E BIT 22H.3
F BIT IE1
Y BIT P1.5
ORG 0000H
MOV C,B1
ORL C,/C1
CPL C
ANL C,A1
MOV F0,C
MOV C,E
ORL C,/F
CPL C
ANL C,D
ORL C,F0
MOV Y,C
SJMP $
END
4-17 A-T 20个合法字符,散转程序设计。

解:
方法1:键盘键入A-T按ASCII码考虑,则有:
方法2:
按方法1编程如下:
ORG 1000H
MAIN: CJNE A,#41H,DO1 ;方法2 #01H
SJMP DO2
DO1:JC ERR
CJNE A,#54H,DO3 ;方法2 #14H
SJMP DO2
DO3: JNC ERR
DO2: CLR C
SUBB A,#41H ;方法2#01H
ADD A,ACC
MOV DPTR,#ADDLAB
MOV R2,A
MOVC A,@A+DPTR
MOV R3,A
INC R2
MOV A,R2
MOVC A,@A+DPTR
MOV DPL,A
MOV DPH,R3
CLR A
JMP @A+DPTR
ADDLAB: DW AAAA,BBBB,CCCC,DDDD,EEEE,FFFF,GGGG,HHHH,IIII,JJJJ
DW KKKK,LLLL,MMMM,NNNN,OOOO,PPPP,QQQQ,RRRR,SSSS,TTTT
ERR: …

AAAA:…
BBBB:…

TTTT:……
注:程序中变址(A)<0FFH。

第五章输入/输出和中断部分习题参考答案
5-2什么叫I/O接口?I/O接口的作用是什么?
I/O接口是计算机和外设进行数据交换的桥梁。

I/O接口的作用:
锁存作用:防止由于CPU速度快,外设慢而产生的丢数现象
隔离作用:防止DB上的信息重叠
变换作用:在CPU与外设之间进行信息类型、电平、传送接收方式变换
联络作用:在CPU与外设之间进行联络,Ready Busy
5-3 I/O端口有哪两种编址方式?各有什么特点?
I/O端口编址方式:统一编址、独立编址
统一编址:I/O接口与内存储器采用一套地址,完全相存储器单元一样处理,使用访问存储器的指令。

如:movx 类指令。

独立编址:采用一套与存储器不同的地址,利用/MREQ(存储器请求)和/IORQ(输入输出请求), CPU 有专门的I/O指令如:IN, OUT 。

5-4 I/O数据有哪四种传送方式?
无条件传送方式
条件传送方式(查询方式)
中断方式
存储器直接存取(DMA)方式
5-6结合图5-17说明DMA传送的工作过程
外设向DMAC发DMA申请
DMAC向CPU发BUSRQ
CPU发BUSAK响应
DMAC发存储器地址和读写信号
DMA控制结束,恢复CPU对总线控制
5-13中断允许寄存器IE各位的定义是什么?请写出允许定时器/计数器T/C1溢出中断的指令。

IE.8:EA,中断允许触发器
IE.4:ES,串行口中断允许位
IE.3:ET1, 定时器/计数器1中断允许位
IE.2:EX1,外部中断1允许位
IE.1:ET0, 定时器/计数器0中断允许位
IE.0:EX0, 外部中断1允许位
允许定时器/计数器T/C1溢出中断的指令:
Setb ET1
Setb EA
Setb TR1
5-17 MCS-51的中断处理程序能否存储在64kB程序存储器的任何区域?若可以,则如何实现?
可以。

实现方法:在中断向量入口处,放一条长跳转指令,跳转到中断服务程序处。

第六章习题参考答案
6-1
8051单片机内部有四个8位并行I/O口,命名为P0、P1、P2、P3。

这4个并行I/O口都可以作准双向通用I/O 口,即先执行一条指令MOV P1,#0FFH。

P0、P2和P3口还有复用的第二功能。

每个口都包含一个(8位)锁存器(即特殊功能寄存器P0~P3),一个输出驱动器,和两个三态缓冲器。

P0口功能:可作通用I/O口,是漏级开路的。

因此必须外接上拉电阻,以保证“1”信号正常输出。

也可作为分时作为地址/数据总线使用。

P1口功能:可作通用I/O口,也是一个“准双向”口,作输入口时要先将输出驱动管截止。

P2口功能:可用作通用I/O口,与P1口类似,也可用作高8位地址总线。

P3口功能:可用作通用I/O口,另外,还有其第二功能。

6-2
“读锁存器”指令是P0~P3作目的操作数的指令,能实现“读—修改—写”口锁存器的操作。

“读引脚”指令的特点是:P0~P3 作为源操作数出现在指令中,但在读引脚数据之前,必须对所读的口或口位的D锁存器写入“1”。

要正确读引脚数据,必须先写一条MOV PX,#0FFH指令或能对所读的口或口位的D锁存器写入“1”的指令,而后紧接着写指令。

6-3
在单片机实时应用系统中,定时器/计数器有定时和对外部事件计数的功能,可用于定时控制、延时、对外部事件检测和计数等场合.定时是对周期已知的脉冲信号计数。

计数是对外部发生事件进行计数,对周期未知的外来脉冲信号计数。

采用可编程的定时器/计数器
可以方便灵活地修改定时或计数的参数或方式,与CPU并行工作,大大提高了CPU的工作效
率。

6-4
MCS-51单片机内部有2个16位的可编程的定时器/计数器:定时器/计数器0(T/C0),定时器/计数器1(T/C1)。

定时方式下,T/C计数8051内部机器周期信号的个数,由计数个数可以计算出定时时间。

每个机器周期使T/C的计数器增加1,直至计满回零后自动产生溢出中断请求,表示定时时间到。

计数方式下,T/C计数来自引脚T0(P3.4)和T1(P3.5)的外部脉冲信号的个数。

输入脉冲由1变0的下降沿时,计数器的值增加1直到回零产生溢出中断,表示计数已达预期个数。

6-5
MCS-51单片机的定时器/计数器共有四种工作方式:方式0、1、2、3。

方式0是高8位和低5位的一个13位计数器的运行方式。

当TL1的低5 位溢出时,向TH1进位,而TH1溢出(回零)时向TF1标志进位(硬件置位TF1),并申请中断。

还可以通过查询TF1是否置位来判断TH1是否回零溢出。

方式1是一个16为定时器/计数器,结构几乎与方式0完全一样,唯一的差别是方式1中的TH1(TH0)和TL1(TL0)均是8位的,构成16位计数器。

方式2中,T/C被拆成一个8位的寄存器TH1(TH0)和一个8位计数器TL1(TL0),两者构成可以自动重装载的8位T/C。

每当它计满回零时,一方面向CPU发出溢出中断请求,
另一方面从TH1(或TH0)中重新获得初值并启动计数;也就是CPU 自动将TH1(或TH0)中存放的初值重新装回到TL1(或TL0),并在此初值的基础上对TL1(或TL0)开始新一轮计数,周而复始,直到下停止计数或更改工作方式命令为止。

方式3下T/C0和T/C1功能就不同了。

此时,TH0和TL0按两个独立的8位计数器工作, T/C1只能按不中断的方式工作,常常利用它的定时功能作串行口波特率发生器。

T/C0方式3时,TL0占用了T/C0的C/T、GATE、TR0、TF0、T0(P3.4)和INT0控制引脚。

TH0只有简单的内部定时功能,它占用了T/C1的TR1控制位和TF1中断标志位,其启动/关闭仅受TR1控制。

6-6
定时器/计数器用做定时时,定时时间与时钟的振荡频率和定时器/计数器的设定初值有关。

用做计数时,最高输入信号频率为振荡频率的1/24。

即计数周期=2机器周期。

6-7
在T/C0工作在方式3时,T/C1仍可设置为方式0~2。

由于TR1和TF1已被T/C0(TH0)占用,计数开关已被接通,此时仅用T/C1的C/T来切换其定时或计数工作方式就可使T/C1工作。

计数器(8位、13位或16位)回零溢出时,只能将输出送入串行口或用于不需要中断的场合。

一般情况下,当T/C1用作串行口波特率发生器时,T/C0才设置为工作方式3。

此时,常把T/C1设置为方式2用作波特率发生器。

6-8
T/C0的实际作用为计时,当达到106mS后中断.
6-14
ORG 0000H
LJMP START
ORG 001BH ;TIMER1中断
LJMP TT1
ORG 1000H
START: MOV TMOD,#20H ;8位自动重新装入
MOV TH1,06H ;装入初始值
MOV TL1,06H
MOV R2,#00H ;用于统计250us的个数
SETB P1.1 ;初始化P1.0 P1.1
SETB P1.0
SETB EA ;开放中断
SETB ET1
SETB TR1
SJMP $ ;主程序踏步
TT1: CPL P1.1 ;取反P1.1产生250us方波
INC R2 ;计数值增一,统计250us的个数
CJNE R2,#4,CONT ;达到1s?
CPL P1.0 ;产生2ms方波
CLR R2 ;重新统计
CONT: RETI ;中断返回
END
第七章思考题与习题7参考答案
7-1
答:在MCS-51扩展系统中,程序存储器与数据存储器共用16根地址线和8根数据线,两个存储空间不会发生冲突。

因为,访问外部程序存储的读选通信号是/PSEN,而访问外部数据存储器使用/RD引脚信号作读选通,用/WR引脚信号作写选通,即虽然地址总线与数据总线相同,但控制信号不同,因此,两个存储空间不会发
生冲突。

7-2
答: P2口是双功能口,当它作地址总线高8位后,不再适宜作通用I/O口。

因为,P2口线已经与8031外部的存储器的地址线相连,此时,P2口不能再与外部I/O口的数据线相连,当CPU不断地访问外部存储器时,由P2口不断输出所访问存储空间的高8位地址,若此时P2口与外部I/O口的数据线相连,特别是在访问外部数据存储器时,输出的高8位地址信号会使I/O口作为I/O数据,从而可能产生误操作,严重的可能引起I/O设备的损坏。

7-3
答:扩展系统中,程序存储器是只读的,其时序中读选通信号是/PSEN,当ALE下降沿时,P0口上的地址是稳定的程序存储器的低8位地址,来自PC指针,当/PSEN地电平期间,P0口上是从选中的程序存储器单元中读出的指令码,P2口输出的是来自PC指针的高8位地址。

地址锁存允许信号ALE和/PSEN读程序存储器的时序中分别出现两次。

数据存储器的读/写时序,与前者的主要区别在于:在第二个机器周期中,地址锁存允许信号ALE和/PSEN 信号丢失一次,存储器的读选通信号是/RD,写选通信号是/WR。

当ALE下降沿时,P0口出现的是数据存储器的低8位地址,来自DPL或R0,当/RD低电平期间,P2口上的地址来自DPH或P2口锁存器,P0口作数据总线,其数据了来自选中的数据存储单元。

在/WR有效期间,P0口是由CPU输出的数据。

7-4
答:扩展2764三片和一片6264 ,要求用74LS273锁存地址,译码用74LS138。

画图如下:。

相关文档
最新文档