1、MCS-51 系列单片机内部有哪些主要的逻辑部件?P10
第二章
答:MCS-51 系列单片机内部的逻辑部件主要有:算术/逻辑部件 ALU、累加器 A、只读存储器 ROM、随
机存储器 RAM、指令寄存器 IR、程序计数器 PC、定时器/计数器、I/O 接口电路、程序状态寄存器
PSW、寄存器组。
3、MCS-51 内部 RAM 区功能如何分配?如何选用 4 组工作寄存器中的一组作为当前的工作寄存器组?
位寻址区域的字节地址范围是多少?P13-P15
答:MCS-51 内部 RAM 的地址空间为 00H-7FH,128B,按功能分为 3 个区域。00H-1FH 的 32B 单元是 4
个工作寄存器组,单片机执行程序时,具体使用哪一组是通过对 PSW 的 RS1、RS0 两位的设置来实
现;20H-2FH 的 16B 共 128 位,是可以按位寻址的内部 RAM 区;30H-7FH 的 80B 单元是只能按字节
寻址的内部 RAM 区。
5、8031 设有 4 个 8 位并行端口,若实际应用 8 位 I/O 口,应使用 P0-P3 中的哪个端口传送?16 位地址
如何形成?P19-P21
答:
P1 口是专门供用户使用的 I/O 口,是准双向接口,故可以使用 P1 口传送;
P0 口既可作地址/数据总线使用,又可作通用 I/O 使用。一方面用来输出外部存储器或 I/O 的低 8 位地
址,另一方面作为 8 位数据输入/输出口,故由 P0 口输出 16 位地址的低 8 位;
P2 口可作通用 I/O 口使用,与 P1 口相同。当外接存储器或 I/O 时,P2 口给出地址的高 8 位,故 P2
口输出 16 位地址的高 8 位。
8、MCS-51 的时钟周期、机器周期、指令周期是如何分配的?当振荡频率为 10MHz 时,一个机器周期为
多少微妙?P25
答:CPU 执行一条指令的时间称为指令周期,它是以机器周期为单位的。MCS-51 典型的指令周期为一个
机器周期,每个机器周期由 6 个状态周期组成,每个状态周期由 2 个时钟周期(振荡周期)组成。
一个机器周期 一个状态周期
=6
=12
一个时钟周期
=12
1
振荡频率
当振荡频率为 10MHz 时,一个机器周期为 12/10M Hz=1.2us。
9、在 MCS-51 扩展系统中,片外程序存储器和片外数据存储器地址一样时,为什么不会发生冲突?P12;
P13、P18
答:1、程序存储器和数据存储器物理上是独立的,寻址片外程序存储器和片外数据存储器的寻址方式、
寻址空间和控制信号不同。
2、对外部程序存储器访问使用 MOVC 指令;对外部数据存储器访问使用 MOVX 指令。
08212032_程仕湘_单片机原理与应用课程作业
10、MCS-51 的 P3 口具有哪些第二种功能?P19 表 2-6
答: P3.0
RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2
P3.4
INT0(外部中断 0)
P3.3 INT(外部中断 1)
T0(定时器 0 外部中断)
P3.5 T1(定时器 1 外部中断)
P3.6 WR(外部数据存储器写信号)P3.7 RD(外部数据存储器读信号)
11、位地址 7CH 与字节地址 7CH 有哪些区别?位地址 7CH 具体在内存中什么位置?P14
答:位地址 7CH 与字节地址 7CH 在 RAM 中的位置不同,寻址方式也不用。位地址 7CH 在内部 RAM 区
2FH 中,可以位寻址;字节地址 7CH 在用户区中,只能按字节寻址。
2、什么是寻址方式?MCS-51 单片机有哪几种寻址方式?P36
第三章
答:寻址方式是指令中确定操作数的形式。MSC-51 单片机有立即数寻址、直接寻址、寄存器寻址、寄存
器间接寻址、变址寻址、相对寻址、位寻址。
3、指出下列指令中画线的操作数的寻址方式?P36
MOV R0, #55H
;
立即寻址
MOV A, 2AH
MOV A, @R1
MOV @R0, A
DIV A, B
ADD A, R7
;
;
;
直接寻址
寄存器间接寻址
寄存器寻址
;
;
寄存器寻址
寄存器寻址
MOVX A, @DPTR
;
寄存器间接寻址
MOV DPTR, #0123H ;
立即寻址
MOVC A, @A+DPTR ;
基址加变址寻址
INC DPTR
;
寄存器寻址
7、为什么要进行十进制调整?调整方法是什么?P49
答:十进制表示用 BCD 码规则,相加大于 10 进位;运算用二进制规则,相加大于 16 进位。所以要进行
十进制调整。调整方法:数的低四位大于 9 或标志位 AC=1,则低四位加 06H 调整。高四位大于 9 或
标志位 CY=1 则高四位加 60H。
1
8、编程实现两个一字节压缩型 BCD 码的减法。设被减数地址在 R0 中,减数地址在 R1 中,差仍存于被
08212032_程仕湘_单片机原理与应用课程作业
减数地址单元中。?
答:
C
CLR
MOV A,#9AH
SUBB A,@R1
ADD A,@R0
DA
MOV @R0,A
A
9、把片外数据存储器 8000H 单元中的数据读到累加器中,应用哪几条指令?P45 例 3.7
答: MOV DPTR, #8000H
MOV A, @DPTR
10、已知内部 RAM 中,(A)=35H,(R0)=6FH,(P1)=0FCH,(SP)=0C0H。分别写出下列各条指令的执
行结果。P41-
; (R0)=35H
(1) MOV R0, A
; (6FH)=35H
(2) MOV @R0, A
; (A)=90H
(3) MOV A, #90H
(4) MOV A, 90H
; (A)=(90H)
(5) MOV 80H, #81H ; (80H)=81H
(6) MOVX @R0, A ; (6FH)=35H
(7) PUSH A
(8) SWAP A
(9) XCH A, R0
P41(2)
P42(4)
P41(1)
P41(1)
P42(3)
P45
2
; (0C1H)=35H,(SP)=0C1H P43(6)
; (A)=53H
P44(8)
; (A)=6FH,(R0)=35H
P44(7)
第四章
2、在汇编语言程序设计中,为什么要采用标号来表示地址?标号的构成原则是什么?使用标号有什么限
制?注释段起什么作用?P69
答:采用标号便于在编写程序时,实现跳转、循环等程序控制转移。
标号位于语句的开始,由以字母开头的字母和数字组成,它代表语句的地址。标号与指令间要用冒
号“:”分开,标号与“:”之间不能有空格,“:”与操作码之间可以有空格。
注释段放在语句的最后,以冒号开始,为不可执行部分,对程序进行解释性说明。
3、MCS-51 汇编语言有哪几条常用的伪指令?各起什么作用?P70-P72
答:MCS-51 汇编语言有以下常用的伪指令:
1、设置起始地址伪指令 ORG(Origin)
格式:ORG 起始地址
作用:ORG 伪指令总是出现在每段源程序或数据块的开始,可以使程序、子程序和数据快存放在存
储器的任何位置。若在源程序中不放 ORG 指令,则汇编将从 0000H 单元开始编排目标程序。ORG
定义控件地址应由从小到大,且不能重叠。
2、定义字节伪指令 DB(Define Byte)
格式:<标号:>DB <项或项表>
作用:把项或项表的数值存入从标号开始的连续单元中。
3、定义字伪指令 DW(Define Word)
格式:<标号:>DW <项或项表>
作用:基本含义与 DB 相同,不同的是 DW 定义 16 位数据。
4、预留存储区伪指令 DS(Define Storage)
2
08212032_程仕湘_单片机原理与应用课程作业
格式:<标号:>DS <表达式>
作用:由标号指定的单元开始,定义一个存储区,以给程序使用。存储区内预留的存储单元数由表
达式的值决定。
5、为标号赋值伪指令 EQU
格式:<标号:>EQU 数或汇编符号
作用:将操作数中的地址或数据赋给标号字段的标号,故又称为等值指令。
6、数据地址赋值伪指令 DATA
格式:<标号:>DATA <数或表达式>
作用:其功能和 EQU 类似,但有以下区别。
(1)用 DATA 定义的标识符汇编时作为标号登记在符号表中,所以可以先使用后定义;而 EQU 定
义的标识符必须先定义后使用。
(2)用 EQU 可以把一个汇编符号赋给字符名,而 DATA 只能把数据赋给字符名。
(3)DATA 可以把一个表达式赋给字符名,而 DATA 只能把数据赋给字符名。
(4)DATA 常在程序中用来定义数据地址。
7、位地址符号伪指令 BIT
格式:字符名 BIT 位地址
作用:把位地址赋给字符名称
8、源程序结束伪指令 END
格式:<标号:>END <表达式>
作用:END 命令通知汇编程序结束汇编。在 END 之后,所有的汇编语言指令均不作处理。如果没
有这条指令,汇编程序通常会给出“警告”指示。
6、外部 RAM 中从 1000H 到 10FFH 有一个数据区,现在将它传送到外部 RAM 中 2500H 单元开始的区
域中,编写有关程序。COMPARE WITH P80 例 4.10
START: MOV R0,#00H
答:
MOV DPTR,#1000H
LOOP: MOVX A,@DPTR
MOV
DPH,#25H
MOVX @DPTR,A
MOV
DPH,#10H
DPTR
INC
INC R0
DJNZ R0,LOOP
SJMP $
11、设系统晶体振荡频率为 12MHz,请编写延时 50ms 的延时子程序。P81 例 4.11
答:使用 12MHz 晶振时,1 个机器周期为 1us,一条 DJNZ 耗时 2us,采用双重循环方法,50ms=2us*250*100,
程序如下:
DL50MS: MOV R4, #100
DELAY1: MOV R3 , #250
DELAY2: DJNZ R3, DELAY2
DJNZ R4, DELAY1
RET
12、分析下列程序中各条指令的作用,并说明运行后相应寄存器和内存单元的结果。
MOV A, #34H
MOV B, #0ABH
; (A)=34H
; (B)=0ABH
3
08212032_程仕湘_单片机原理与应用课程作业
MOV 34H, #78H ; (34H)=78H
XCH A, R0
XCH A, @R0
XCH A, B
SJMP $
; (A),(B)互换
; 暂停
; (A),((R0))互换
; (A),(R0)互换
2、8051 单片机的定时器/计数器有哪几种工作方式?各有什么特点?P105
答: 8051 单片机的定时器/计数器有 4 种工作方式,分别是:
第五章:
工作方式 0:M1M0=00,为 13 位定位器/计数器,其计数器由 THi 的全 8 位和 TLi 的低 5 位构成,
TLi 的高 3 位未用。当 TLi 的低 5 位计满时,向 THi 进位,THi 溢出后对中断标志位 TFi 置“1”,
并申请中断。Ti 是否溢出可用软件查询 TFi 是否为“1”。
计数器范围为 1-8192,如需再次定时或计数,需要用指令重置时间常数。
工作方式 1:M1M2=01,与工作方式 0 基本相同,不同之处在于其为 16 位定时器/计数器,计数值
范围为 1-65536,如需再次定时或计数,需要用指令重置时间常数。
工作方式 2:M1M0=10,为可重装初值的 8 位定时器/计数器。把 16 位的计数器拆成两个 8 位计数器,
TLi 用作 8 位计数器,THi 用来保存初值。每当 TLi 计满溢出时,可自动将 THi 的初值再装入 TLi,继
续计数,循环重复。其计数范围为 1-256。
这种工作方式可省去用户软件中重装初值的程序,并可产生相当精度的定时时间,特别适合于产生周期
性脉冲及作为串行口波特率发生器,缺点是计数长度太小。
工作方式 3:M1M0=11,该工作方式只适用于 T0。T0 在该工作方式被分成两个相互独立的 8 位计数器,
其中 TL0 既可以作计数器使用,又可以作定时器使用。而 TH0 只能作 8 位定时使用,并占用了 T1 的
控制启动位 TR1 和溢出标志位 TF1。T1 只能工作在方式 0、方式 1 或方式 2,只能用在不需中断控制的
场合。
工作方式 3 是为了在使用串行口时,需要两个独立的计数器而特别提供的。因为此时把定时器 1 规定用
作串行通信的波特率发生器,并设定为工作方式 2,使用时只要将计数器初值送到计数器寄存器即开始
工作,启动后不需要软件干预,也不使用溢出标志。
9、设晶振频率为 6MHz。编程实现:使用定时器 T0 工作在方式 2、定时,在 P1.4 输出周期为 100us,
占空比为 4:1 的矩形脉冲。
答:使用晶体振荡器频率为 6MHz 时,1 个机器周期为 2us。欲使占空比为 4:1,可将矩形脉冲分为 5 份,
初值 机器周期。计数初值满足:
前 4 份 P1.4 输出高电平,第 5 份输出低电平。计数初值:
8
)
t
(2 T
0
(256-Y)*2us=20us,解得计数初值为 Y=246=0F6H,则 TH0=TL0=0F6H。
TMOD 寄存器定义:
D6
C/ T
D3
GATE
D7
GATE
D2
C/ T
D1
M1
D5
M1
D4
M0
D0
M0
定时器 1
定时器工作方式定义:
M1
0
0
1
1
M0
0
1
0
1
工作方式
0
1
2
3
定时器 0
说明
13 位定时器/计数器
16 位定时器/计数器
可重装 8 位定时器/计数器
T0 分成两个 8 位定时器/计数器,T1 停止计数
定时器 0,定时方式 2,故 TMOD 设置:00000010=02H,。程序如下:
ORG 2000H
4
START: MOV TMOD, #02H
//定时器 0,定时方式 2
08212032_程仕湘_单片机原理与应用课程作业
MOV TL0, 0F6H
MOV TH0, 0F6H
SETB P1.4
SETB TR0
LOOP: MOV R0, #4
WAIT1: JNB TF0,WAIT1
CLR TF0
DJNZ R0,WAIT1
CPL P1.4
//初值送 TL0
//初值送 TH0
//P1.4 置高
//允许 T0 计数
//由于是 4:1,故计数周期定为 4
//等待定时器 T0 溢出标志位
//软件清零 TF0
//判断 R0 是否等于 0,即判断是否循环了四次
//对 P1.4 取反
WAIT2: JNB TF0,WAIT2//等待定时器 T0 溢出标志位,即判断是否循环一次
CLR TF0
CPL P1.4
SJMP LOOP
//软件清零 TF0
//对 P1.4 再次取反
//程序循环运行
2、MCS-51 单片机的串行口共有哪几种工作方式?各有什么特点和功能?P129
答: MCS-51 单片机的串行口共有以下四种工作方式:
第六章
工作方式 0:SM1SM0=00,为同步移位寄存器。当一个数据写入串行口发送缓冲器时,串行口即将
8 位数据以 fosc/12 的固定波特率从 RXD 引脚输出,低位在先,TXD 为移位脉冲信号输出端。发送
完 8 位数据后中断标志位 T1 置“1”。
特点是:移位寄存器的发送和接收以 8 位为一帧,不设起始位和停止位,低位在前高位在后,波特
率固定,一个机器周期移位一次。
工作方式 1:SM1SM0=01,串行口被定义为波特率可变的8 位异步通信接口。方式 1 的波特率=(2smod/32)
x 定时器 T1 的溢出率
特点为:一帧信息为 10 位,其中 1 位起始位“0”,8 位数据位(地位在前)和一位停止位“1”,其
波特率可变。
工作方式 2:SM1SM0=10,串行口被定义为 9 位异步通信接口。
方式 2 的波特率=(2smod/64) x 振荡器频率
特点是:一帧信息为 11 位,1 位起始位“0”,8 位数据位(低位再前),1 位可编程为“1”或“0”
的第 9 位数据,1 位停止位“1”。
工作方式 3:SM1SM0=11,串行口被定义为波特率可变的 9 位异步通信方式,除了波特率外,方式
3 和方式 2 完全相同。
方式 3 的波特率=(2smod/32) x 定时器 T1 的溢出率
特点:一帧信息为 11 位,1 位起始位“0”,8 位数据位(低位在先),1 位可编程为“1”或“0”的
第 9 位数据,1 位停止位“1”。
3、MCS-51 单片机 4 种工作方式的波特率应如何确定?P134
答: MCS-51 单片机波特率的确定方法:
(1)方式 0 的波特率=fosc/12
(2)方式 1 的波特率=(2smod/32) x 定时器 T1 的溢出率。
(3)方式 2 的波特率=(2smod/64) x 振荡器频率
5
(4)方式 3 的波特率=(2smod/32) x 定时器 T1 的溢出率
08212032_程仕湘_单片机原理与应用课程作业
7、请用查询法编写程序实现串行口工作方式 1 下的发送程序。设单片机主频为 11.0592MHz,波特率为
1200bps、发送数据缓冲区在外部 RAM,起始地址为 1000H,数据块长度为 30B,采用偶校验(其他条
件自设)。
答:
1) 设数据为 ASCII 码形式,最高位作为奇偶校验位。
2) T1 作为波特率发生器,工作于方式 2。
TMOD 寄存器定义:
D6
C/ T
D3
GATE
D7
GATE
D2
C/ T
D1
M1
D0
M0
D5
M1
D4
M0
定时器 0
说明
13 位定时器/计数器
16 位定时器/计数器
可重装 8 位定时器/计数器
T0 分成两个 8 位定时器/计数器,T1 停止计数
定时器 1
定时器工作方式定义:
工作方式
0
1
2
3
M1
0
0
1
1
M0
0
1
0
1
故,TMOD=20H;
3) 设 SMOD=0。
4) 串行口工作在方式 1
SCOD 寄存器定义:
D6
SM1
D7
SM0
D5
SM2
D4
REN
D3
TB8
D2
RB8
D1
TI
D0
RI
串行口工作方式定义:
SM0
0
0
1
1
SM1 工作方式
0
1
0
1
0
1
2
3
方式简单描述
移位寄存器 I/O
8 位 UART
9 位 UART
9 位 UART
波特率
主振频率/12
可变
主振频率/32 或主振频率/64
可变
故,SCON=40H;
5) 波特率为 1200bps
方式 的波特率
1
=
SMOD
2
32
定时器 的溢出率
T1
=
定时器 的溢出率
T1
f
osc
12
1
初值
K
2 -
初值
K
=2 -
SMOD
2
384
f
osc
波特率
=256-
11059200
384
1200
=232=0E8H
通过计算得 T1 的时间常数为 0E8H。
程序如下:
ORG 1000H
START: MOV
TMOD, #20H
;T1 工作方式 2
6
08212032_程仕湘_单片机原理与应用课程作业
MOV
TL1, #0E8H
MOV
TH1, #0E8H
MOV
SETB
MOV
MOV
PCON, #00H
TR1
SCON, #40H
DPTR, #1000H
R2, #30
MOV
MOVX A, @DPTR
LOOP:
MOV
MOV
MOV
WAIT: JNB
C, P
ACC.7, C
SBUF, A
TI, WAIT
CLR
TI
DPTR
INC
R2, LOOP
AJMP
START
DJNZ
;SMOD=0 波特率不倍增
;启动 T1
;串行口工作方式 1
;
;计数值 30
;送奇偶标志
;
;发送字符
;
;
1、MCS-51 有几个中断源?有几级中断优先级?各中断标志如何产生?又如何清除? P149
答:5 个中断源:2 个外部中断 INT0、INT1,3 个内部中断 T0、T1、串行口。
第七章
2 个优先级:高级中断和低级中断,由用户定义。
中断标志的产生:
(1) 外部中断可以设置边沿触发或者电平触发,边沿触发进入中断程序后硬件自动清中断标志,电平
触发需要软件清标志位;
(2) 定时器 T0,T1 计数溢出产生中断,进入中断程序硬件自动清标志位;
(3) 串行口发送完成或者接收到数据就触发中断,由于是两个中断标志共享一个中断向量,所以需要
在中断程序里由软件判断是发送中断还是接受中断,并且只能由软件清标志位;
中断请求的清除:
(1) 定时中断由硬件自动撤除定时中断响应后,硬件自动把标志位(TFx)清零。
(2) 外部中断的自动与强制撤除
若外部中断以脉冲方式触发,则由硬件自动地把标志位(IEx)清零。24 若以电平方式触发,则需
由外部电路和软件配合撤除。
(3)串行中断软件撤除 CLR TI; CLR RI;
2、什么是中断优先级?优先级的处理原则是什么?P151
答: CPU 一般与多个中断源相连,因此有多个中断同时发生的可能,为使系统能及时响应并处理发生的
所有中断,系统根据引起中断事件的重要性和紧迫程序,将中断源分为若干个级别,称作中断优先级;
中断优先级的处理原则:
1、低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断
服务,从而实现中断嵌套。
2、如果一个中断请求已被响应,则同级的其他中断响应将被禁止。
3、如果同级的多个请求同时出现,则按 CPU 查询次序确定哪个中断请求被响应。其查询次序为:
外部中断 0→定时中断 0→外部中断 1→定时中断1→串行中断。
8 试编写一段对中断系统初始化的程序,使之允许 INT0、INT1、T0 和串行口中断,且使串行口中断为高
优先级中断。 P150、P151
答:
允许 INT0、INT1、T0 和串行口中断
7