《单片机原理及应用》习题参考答案
第一章
1.为什么计算机要采用二进制数?学习十六进制数的目的是什么?
在计算机中,由于所采用的电子逻辑器件仅能存储和识别两种状态的特点,计算机内部一切信息存储、处理和传送均采用二进制数的形式。可以说,二进制数是计算机硬件能直接识别并进行处理的惟一形式。十六进制数可以简化表示二进制数。
2.
(1)0111100179H(2)0.110.CH(3)01111001.1179.CH
(4)11101010.1010EA.AH(5)0110000161H(6)0011000131H
3.
(1)0B3H(2)80H(3)17.AH(4)0C.CH
4.
(1)01000001B65(2)110101111B431
5.
(1)[***********]100100(2)[***********]011100
(5)[***********]111111
6.
00100101B00110111BCD25H
7.
13711989
8.什么是总线?总线主要有哪几部分组成?各部分的作用是什么?
总线是连接计算机各部件之间的一组公共的信号线。一般情况下,可分为系统总线和外总线。系统总线应包括:
地址总线(AB)
控制总线(CB)
数据总线(DB)
地址总线(AB):CPU根据指令的功能需要访问某一存储器单元或外部设备时,其地址信息由地址总线输出,然后经地址译码单元处理。地址总线为16位时,可寻址范围为216=64K,地址总线的位数决定了所寻址存储器容量或外设数量的范围。在任一时刻,地址总线上的地址信息是惟一对应某一存储单元或外部设备。
控制总线(CB):由CPU产生的控制信号是通过控制总线向存储器或外部设备发出控制命令的,以使在传送信息时协调一致的工作。CPU还可以接收由外部设备发来的中断请求信号和状态信号,所以控制总线可以是输入、输出或双向的。
数据总线(DB):CPU是通过数据总线与存储单元或外部设备交换数据信息的,故数据总线应为双向总线。在CPU进行读操作时,存储单元或外设的数据信息通过数据总线传送给CPU;在CPU进行写操作时,CPU把数据通过数据总线传送给存储单元或外设
9.什么是接口电路?CPU与接口电路连接一般应具有哪些信号线?外部设备与接口电路连接一般应具有哪些信号线?
CPU通过接口电路与外部输入、输出设备交换信息,
一般情况下,外部设备种类、数量较多,而且各种参量(如运行速度、数据格式及物理量)也不尽相同。CPU为了实现选取目标外部设备并与其交换信息,必须借助接口电路。一般情况下,接口电路通过地址总线、控制总线和数据总线与CPU连接;通过数据线(D)、控制线
(C)和状态线(S)与外部设备连接。
10.存储器的作用是什么?只读存储器和随机存储器有什么不同?
存储器具有记忆功能,用来存放数据和程序。计算机中的存储器主要有随机存储器(RAM)
和只读存储器(ROM)两种。随机存储器一般用来存放程序运行过程中的中间数据,计算机掉电时数据不再保存。只读存储器一般用来存放程序,计算机掉电时信息不会丢失。
11.某存储器的存储容量为64KB,它表示多少个存储单元?
64×1024
12.简述微型计算机硬件系统组成。
一台计算机的基本结构由运算器、控制器、存储器、输入设备和输出设备五部分组成。
13.什么是单片机?单片机与微机相比有何特点?
单片机(Single-Chip-Microcomputer)又称单片微控制器,其基本结构是将微型计算机的基本功能部件:中央处理机(CPU)、存储器、输入接口、输出接口、定时器/计数器、中断系统等全部集成在一个半导体芯片上,因此,单片机其体积小、功耗低、价格低廉,且具有逻辑判断、定时计数、程序控制等多种功能。
单片机结构上的设计,在硬件、指令系统及I/O能力等方面都有独到之处,具有较强而有效的控制功能。虽然单片机只是一个芯片,但无论从组成还是从其逻辑功能上来看,都具有微机系统的含义。另一方面,单片机毕竟是一个芯片,只有外加所需的输入、输出设备,才可以构成实用的单片机应用系统。
14.单片机主要应用于哪些领域?
(1)智能仪器。智能仪器是含有微处理器的测量仪器。单片机广泛应用于各种仪器仪表,使仪器仪表智能化取得了令人瞩目的进展。
(2)工业控制。单片机广泛应用于各种工业控制系统中,如数控机床、温度控制、可编程顺序控制等。
(3)家用电器。目前各种家用电器普遍采用单片机取代传统的控制电路,如洗衣机、电冰箱、空调、彩电、微波炉、电风扇及高级电子玩具等。由于配上了单片机,使其功能增强而身价倍增,深受用户的欢迎。
(4)机电一体化。机电一体化是机械工业发展的方向,机电一体化产品是指集机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品。
单片机除以上各方面应用之外,还广泛应用于办公自动化领域(如复印机)、汽车电路、通信系统(如手机)、计算机外围设备等,成为计算机发展和应用的一个重要方向。
15.什么是嵌入式系统?嵌入式系统有哪些重要特征?
所谓嵌入式系统,是“以应用为中心、以计算机技术为基础、软件硬件可裁减、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”。即以嵌入式应用为目的计算机系统。嵌入式系统的重要特征:
⑴、系统内核小
⑵、专用性强。
⑶、系统精简
嵌入式系统一般没有系统软件和应用软件的明显区分,其功能设计及实现上不要
求过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。
⑷、高实时性
。
第二章
1.举例说明MCS-51有哪些典型产品,它们有何区别?
MCS-51系列单片机可分为两大系列:51子系列和52子系列。
51子系列单片机的典型产品有8051、8751、8031、80C51、80C31等。它们的结构基本相同,其主要差别反映在片内存储器的配置上有所不同
2.8051单片机内部包含哪些主要功能部件?各功能部件的主要作用是什么?
8051单片机内部由CPU、4KB的ROM、128B的RAM、4个8位的I/O并行端口、一个串行口、两个16位定时/计数器及中断系统等组成。
3.程序状态字寄存器PSW各位的定义是什么?
PSW是一个8位寄存器,用于寄存当前指令执行后的某些状态,即反映指令执行结果的一些特征信息。
Cy(PSW.7):即PSW的D7位,进位/借位标志。
AC(PSW.6):即PSW的D6位,辅助进位标志。
F0(PSW.5)及F1(PSE.1):即PSW的D5位、D1位,用户标志位。
RS1及RS0(PSW.4及PSW.3):即PSW的D4位、D3位,寄存器组选择控制位。
OV(PSW.2):即PSW的D2位,溢出标志。
4.MCS-51存储器结构的主要特点是什么?程序存储器和数据存储器各有何不同?
MCS-51单片机的存储器结构与一般微机存储器的配置方法不同,一般微机把程序和数据共存同一存储空间,各存储单元对应惟一的地址。而MCS-51的存储器把程序和数据的存储空间严格区分开。
数据存储器用于存放程序运算的中间结果、状态标志位等。
程序存储器用于存放已编制好的程序及程序中用到的常数。
5.MCS-51单片机内部RAM可分为几个区?各区的主要作用是什么?
内部数据存储器分为高、低128B两大部分。
低128B为RAM区,地址空间为00H~7FH,可分为:寄存器区、位寻址区、堆栈及数据存储区。存放程序运算的中间结果、状态标志位等。
高128B为特殊功能寄存器(SFR)区,地址空间为80H~FFH,其中仅有21个字节单元是有定义的。
6.MCS-51单片机的P0~P3四个I/O端口在结构上有何异同?使用时应注意哪些事项?P0口是一个8位漏极开路型双向I/O端口。
P1口是一个内部带上拉电阻的8位准双向I/O端口。
P2口也是一个内部带上拉电阻的8位准双向I/O端口
P3口是一个内部带上拉电阻的8位多功能双向I/O端口。
在使用时应注意以下方面:
①P0~P3都是准双向I/O口,即CPU在读取数据时,必须先向相应端口的锁存器写入“1”。各端口名称与锁存器名称在编程时相同,均可用P0~P3表示。当系统复位时,P0~P3端口锁存器全为“1”,故可直接对其进行读取数据。
②P0口每一输出位可驱动8个LS型TTL负载,P0口可作通用输入、输出端口使用,此时,若要驱动NMOS或其他拉电流负载时,需外接上拉电阻,才能使该位高电平输出有效。
在单片机进行外部存储器扩展时,P0口必须作为地址/数据复用线使用,此时,不必外接上拉电阻,P0也不能作通用I/O口使用。
③P1、P2、P3口输出均接有内部上拉电阻,输入端无需外接上拉电阻,每一位输出可以驱动4个LS型TTL电路。
④P0、P2口除可以作通用I/O端口、以实现与外部进行数据交换外,更主要的是,当CPU访问外部存储器时,CPU将自动地把外部存储器的地址线信号(16位)送P0、P2口,作为地址总线(P0口输出低8位地址,P2口输出高8位地址),向外部存储器输出16位存储单元地址。在控制信号作用下,该地址低8位被锁存后,P0口自动切换为数据总线,这时经P0口可向外部存储器进行读、写数据操作。此时,P2口不再作通用I/O端口,P0口为地址/数据复用口。
7.在什么情况下,P3口作为第二功能使用?
P3口的第二功能是作为控制端口使用的。由于单片机没有专设的控制信号引脚,单片机在进行外部存储器和I/O端口扩展时所需要的控制信号必须由P3口提供,P3口第二功能相当于PC机中CPU的控制线引脚。
8.为什么说单片机具有较强的位处理能力?
对于许多控制系统,开关量控制是控制系统的主要对象之一。作为传统的CPU,对于简单的个别开关量进行控制却显得不那么方便,而让MCS-51值得骄傲的正是它有效地解决了单一位的控制。
MCS-51片内CPU还是一个性能优异的位处理器,也就是说MCS-51实际上又是一个完整而独立的1位单片机(也称布尔处理机)。该布尔处理机除了有自己的CPU、位寄存器、位累加器(即进位标志Cy)、I/O口和位寻址空间外,还有专供位操作的指令系统,可以直接寻址对位存储单元和SFR的某一位进行操作。MCS-51单片机对于位操作(布尔处理)有置位、复位、取反、测试转移、传送、逻辑与和逻辑或运算等功能。所以,单片机具有较强的位处理能力。
9.指出8051可进行位寻址的存储空间。
00~7FH(即20H.0~2FH.7)及SFR地址能被8整除的寄存器中的各位。
10.位地址90H和字节地址90H及P1.0有何异同?如何区别?
位地址90H表示P1.0位
字节地址90H表示P1口
11.在访问外部ROM或RAM时,P0和P2口各用来传送什么信号?P0口为什么要采用片外地址锁存器?
P0口传送地址低八位后可复用数据线,所以,P0口要采用片外地址锁存器。P2口传送地址高八位。
12.什么是时钟周期?什么是机器周期?什么是指令周期?当振荡频率为12MHz时,一个机器周期为多少微秒?
时钟周期:也称振荡周期,即振荡器的振荡频率fosc的倒数,是时序中最小的时间单位。
机器周期:执行一条指令的过程可分为若干个阶段,每一阶段完成一规定的操作,完成一个规定操作所需要的时间称为一个机器周期,一个机器周期包含12个时钟周期。当振荡频率为12MHz时,一个机器周期为12/(12×1000000)秒=1微秒
指令周期:定义为执行一条指令所用的时间。
13.MCS-51单片机有几种复位方法?复位后,CPU从程序存储器的哪一个单元开始执行程序?
MCS-51的复位电路包括上电复位电路和按键(外部)复位电路
0000H
14.8051系统掉电时如何保存内部RAM中的数据?
单片机在运行过程中,如果发生掉电,片内RAM和SFR中的信息将会丢失。为防止信息丢失,可以把一组备用电源加到RST/VPD端,当VCC上的电压低于VPD上的电压时,备用电源通过VPD端,以低功耗保持内部RAM和SFR中的数据。
15.8051单片机引脚ALE的作用是什么?当8051不外接RAM和ROM时,ALE上输出的脉冲频率是多少?其作用是什么?
地址锁存使能输出ALE:当单片机访问外部存储器时,外部存储器的16位地址信号由P0口输出低8位,P2口输出高8位,ALE可用作低8位地址锁存控制信号;当不用作外部存储器地址锁存控制信号时,该引脚仍以时钟振荡频率的1/6固定地输出正脉冲,可以驱动8个LS型TTL负载。
第三章
1.MCS-51有哪几种寻址方式?举例说明它们是怎样寻址的?
MCS-51指令系统的寻址方式有以下7种:
立即寻址方式:操作数直接出现在指令中。
直接寻址方式中:操作数的单元地址直接出现在指令中。
寄存器寻址方式中:寄存器中的内容就是操作数。
寄存器间接寻址方式中,指定寄存器中的内容是操作数的地址,该地址对应存储单元的内容才是操作数。
变址寻址方式是以程序指针PC或数据指针DPTR为基址寄存器,以累加器A作为变址寄存器,两者内容相加(即基地址+偏移量)形成16位的操作数地址,
相对寻址是以程序计数器PC的当前值作为基地址,与指令中的第二字节给出的相对偏移量rel进行相加,所得和为程序的转移地址。
位地址:内部RAM地址空间的可进行位寻址的128位和SFR地址空间的可位寻址的11个8位寄存器的88位。位寻址给出的是直接地址。
2.位寻址和字节寻址如何区分?在使用时有何不同?
由寻址方式可以看出,不同的寻址方式所寻址的存储空间是不同的。正确地使用寻址方式不仅取决于寻址方式的形式,而且取决于寻址方式所对应的存储空间。字节寻址必须是对8位存储单元,位寻址的存储空间只能是片内RAM的20H~2FH字节地址中的所有位(位地址为00H~7FH)和部分SFR的位,决不能是该范围之外的任何单元的任何位。
3.要访问专用寄存器和片外数据寄存器,应采用什么寻址方式?举例说明。
访问专用寄存器:可采用直接寻址或寄存器寻址。
访问片外数据寄存器:寄存器间接寻址
4.什么是堆栈?其主要作用是什么?
堆栈是后进先出的数据存储区
一般用于中断处理过程中,若需要保护现场数据(如内部RAM单元的内容),可使用入栈指令,将数据压入堆栈,中断处理过程执行完后,再使用出栈指令恢复现场数据。
5.编程将内部RAM的20H单元的内容传送给外部RAM的2000H单元。
MOVA,20H
MOVDPTR,#2000H
MOVX@DPTR,A
6.编程将内部数据存储器20H~30H单元内容清零。
MOVR0,#20H
MOVA,#0
MOVR3,#17
LOP:MOV@R0,A
INCR0
DJNZR3,LOP
7.编程查找内部RAM的32H~41H单元中是否有0AAH这个数据,若有这一数据,则将50H单元置为0FFH,否则清50H单元为0。
MOVR3,#10H
MOVA,#0AAH
MOVR0,#31H
LOP:INCR0
SUBBA,@R0
JZLOP1
DJNZR3,LOP
MOV50H,#0H
AJMPLOP3
LOP1:MOV50H,#0FFH
LOP3:AJMP1OP3
8.查找20H~4FH单元中出现00H的次数,并将查找结果存入50H单元。
MOVR3,#30H
MOVR0,#20H
MOVA,#0
LOP:MOVA,@R0
JZLOP1
LOP3:INCR0
DJNZR3,LOP
AJMPLOP2
LOP1:INC50H
AJMPLOP3
LOP2:AJMPLOP2
9.已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行完后的A中的内容。
ANL
ORL
XRL
CPLA,#17H17H,AA,A@R0
(A)=11001011B=0CBH
10.已知单片机的fosc=12MHz,分别设计延时0.1s、1s、1min的子程序。
设晶振频率为12MHz,一个机器周期为1µs,
延时1ms的子程序:
DELAY:MOVR7,#0FFH
LOOP:NOP
NOP
DJNZR7,LOOP
RET执行时间(机器周期)11122
该程序段的总的执行时间为:
(1+4×255+2)µs=1023µs≈1ms
延时时间为100ms的子程序:
DELAY:MOV
LOP1:MOVR5,#64HR7,#0FFH对延时1ms的子程序循环100次。
LOOP:NOP
NOP
DJNZ
DJNZ
RETR7,LOOPR5,LOP1
延时时间为1s的子程序:
DELAY1:MOVR3,#0AH对延时100ms的子程序循环10次
。DELAY:MOVR5,#64H
LOP1:MOVR7,#0FFH
LOOP:NOP
NOP
DJNZR7,LOOP
DJNZR5,LOP1
DJNZR3,DELAY
RET
延时时间为60s的子程序:对延时1s的子程序循环60次
11.MCS-51汇编语言中有哪些常用的伪指令?各起什么作用?
BIT(地址符号命令)
END(结束汇编)
EQU(等值)
DB(定义字节)
DW(定义字)
DS(定义存储单元)
ORG(汇编起始地址)
12.比较下列各题中的两条指令有什么异同?
①MOVA,R1;MOV0E0H,R1指令功能相同,寻址方式表示不同
②MOVA,P0;MOVA,80H指令功能相同,寻址方式表示不同
③LOOP:SJMPLOOP;SJMP$指令功能相同
13.下列程序段汇编后,从3000H开始各有关存储单元的内容是什么?
TAB1:
TAB2:ORGEQUEQU
DB
DW3000H1234H5678H65,13,
3000H:65
3001H:13
3002H:‘a’
3003H:‘b’
3004H:‘c’
3005H:‘A’
3006H:’B’
3007H:‘C’
3009H:12H
300AH:78H
300BH:56H
300CH:0BCH
300DH:9AH
14.为了提高汇编语言程序的效率,在编写时应注意哪些问题?
(1)把要解决的问题化成一个个具有一定独立性的功能模块,各模块尽量采用子程序完成其功能。
(2)力求少用无条件转移指令,尽量采用循环结构。
(3)对主要的程序段要下功夫精心设计,这样会收到事半功倍的效果。
(4)能用8位数据解决问题的就不要使用16位数据。
(5)累加器是信息传递的枢纽,在调用子程序时应通过累加器传送子程序的参数,通过累加器向主程序传送返回参数。所以,在子程序中一般不把累加器推入堆栈。若需保护累加器的内容时,应先把累加器的内容存入其他寄存器单元,然后再调用子程序。
(6)为了保证程序运行的安全可靠,应考虑使用软件抗干扰技术,如数字滤波技术、指令冗余技术、软件陷井技术,用汇编语言程序实现这些技术,不需要增加硬件成本,可靠性高,稳定性好,方便灵活。
15.试编写8字节外部数据存储器到内部数据存储器的数据块传送程序,外部数据存储器地址范围为40H~47H,内部数据存储器地址范围为30H~37H。
MOVR3,#8
MOVR0,#40H
MOVR1,#30H
LOP1:MOVXA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR3,LOP1
16.试编写8字节外部程序存储器到内部数据RAM的传送程序,外部程序存储器地址为2040H~2047H,内部RAM地址为30H~37H。
参看15题答案(提示:外部程序存储器地址为16位地址:2040H~2047H,间接寻址采用DPTR)
17.试编程使内部RAM的20H~4FH单元的数据块按降序排列。
参看23题答案(提示:本题对20H~4FH单元(48个)数据降序排列)。
18.内部RAM的20H单元开始有一个数据块,以0DH为结束标志,试统计该数据块长度,将该数据块传送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。
MOVR0,#20H
MOVDPTR,#7E01H
LOP:MOVA,@R0
MOV60H,A
SUBBA,#0DH
JZLOP1
MOVX@DPTR,A
INCR3
INCR0
INCDPTR
AJMPLOP
LOP1:MOVDPTR,#7E00H
MOVA,R3
MOVX@DPTR,A
END
19.试编写一个用查表法查0~9字形7段码(假设表的首地址为TABLE)的子程序,调用子程序前,待查表的数据存放在累加器A中,子程序返回后,查表的结果也存放在累加器A中。
SQR1:MOVDPTR,#TABLE
MOVCA,@A+DPTR
RET
TABLE:DB0C0H,0F9H,0A4H,0B0H,99H;0~9的字形显示段码(LED共阳极。
DB92H,82H,F8H,80H,90H
20.内部RAM的DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。
MOVR0,#DATA
MOVR3,#0AH
MOVA,#0
LOP:ADDA,@R0
MOVR4,A
ADDCA,#0
MOVR5,A
INCR0
DJNZR3,LOP
MOVSUM,R4
MOVSUM+1,R5
END
21.内部RAM的DATA1和DATA2单元开始存放着两个等长的数据块,数据块的长度在LEN单元中。请编程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。
MOVR0,#DATA1
MOVR3,LEN
LOP:MOVA,@R0
CJNZA,DATA2,LOP1
INCR0
INCDATA2
DJNZR3,LOP
MOVA,#0FFH
MOVRESULT,A
AJMPLOP2
LOP1:MOVA,#0
MOVRESULT,A
LOP2:AJMPLOP2
END
22.有一输入设备,其端口地址为20H,要求在1秒钟时间内连续采样10次读取该端口数据,求其算术平均值,结果存放在内部RAM区20H单元。
MOVR0,#20H
MOVR2,#0
MOVA,#0
MOVR4,#0
LOP:MOVR3,#0AH
IN:ACALLDELAY
MOVXA,@R0
MOVR2,A
MOVA,R4
ADDA,R2
MOVR4,A
DJNZR3,IN
MOVB,#0AH
DIVAB
MOV20H,A
AJMPLOP
DELAY:MOVR5,#64H
LOP1:MOVR7,#0FFH
LOOP:NOP
NOP
DJNZR7,LOOP
DJNZR5,LOP1
RET
END延时时间为0.1s的子程序:
23.编写子程序,将内部RAM区以30H为起始地址的连续10个存储单元中的数据,按照从小到大的顺序排序,排序结果仍存放在原数据区。
采用冒泡法排序:
冒泡排序法的基本算法是:N个数排序,从数据存放单元的一端(如起始单元)开始,将相邻二个数依次进行比较,如果相邻两个数的大小次序和排序要求一致,则不改变它们的存放次序,否则相互交换两数位置,使其符合排序要求,这样逐次比较,直至将最小(降序)或最大(升序)的数移至最后。然后,再将n-1个数继续比较,重复上面操作,直至比较完毕。可采用双重循环实现冒泡法排序,外循环控制进行比较的次数,内循环实现依次比较交换数据。
程序如下:
ORGBLOCK
NEXT:
COMP:
LESS:
0000HEQU30H
MOVR7,#9HMOVA,R7MOV80H,AMOVR6,AMOVR0,#30HMOVA,@R0MOVR2,AINCR0CLRC
SUBBA,@R0JCLESSMOVA,R2XCHA,@R0DECR0MOV@R0,AINCR0DJNZR6,COMPMOVR0,#30HDEC80HMOVR6,80hDJNZR7,COMPRETEND
;设BLOCK为30H单元;设置外循环计数器
;设置外循环计数器;设置数据指针
;(R6)-1不等于0,转COMP继续内循环
第4章
1.MCS-51系列单片机能提供几个中断源、几个中断优先级?各个中断源的优先级怎样确
定?在同一优先级中,各个中断源的优先顺序怎样确定?
答:MCS-51系列单片机能提供5个中断源,2个中断优先级。各个中断源的优先级是由特殊功能寄存器IP来确定,IP中和各个中断源对应位为1时,此中断源为高优先级,否则为低优先级。在同一优先级中,各个中断源的优先顺序是由自然优先级来确定的。
2.简述MCS-51系列单片机的中断响应过程。
答:MCS-51系列单片机的中断响应过程是按照以下顺序执行的:开中断-----中断请求------中断判断-------中断响应-------中断返回。
3.MCS-51系列单片机的外部中断有哪两种触发方式?如何设置?对外部中断源的中断请求信号有何要求?
答:MCS-51系列单片机的外部中断有电平触发和边沿触发两种方式。是由特殊功能寄存器TCON中IT0,IT1的状态确定的,如:IT0为1时外部中断0为边沿触发方式,当INT0外部引脚出现下降沿时向CPU提出中断请求,否则为电平触发方式,当INT0外部引脚出现低电
平时向CPU提出中断请求。
4.MCS-51单片机中断响应时间是否固定?为什么?
答:MCS-51单片机中断响应时间不固定,因为当中断源向CPU提出中断请求时,CPU正在执行的指令的指令周期是不一样的。
5.MCS-51单片机如果扩展6个中断源,可采用哪些方法?如何确定它们的优先级?
答:一般可采取中断加查询方式,软件先查询到的为高优先级,最后查询到的为低优先级。6.当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求?
答:当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,当新中断源中断级别比正在执行中断源的中断级别高时可响应新的中断请求,否则不能响应新的中断请求。7.8051单片机有5个中断源,但只能设置两个中断优先级,因此,在中断优先级安排上受到一定的限制。问以下几种中断优先级顺序的安排(级别由高到低)是否可能?如可能,则应如何设置中断源的中断级别?否则,请叙述不可能的理由。(1)定时器0,定时器1,外中断0,外中断1,串行口中断。可能。其中:定时器0,定时器1为高优先级。
(2)串行口中断,外中断0,定时器0,外中断1,定时器1。可能。其中:串行口中断为高优先级。
(3)外中断0,定时器1,外中断1,定时器0,串行口中断。不可能。
(4)外中断0,外中断1,串行口中断,定时器0,定时器1。可能。其中:外中断0,外中断1,串行口中断为高优先级。(5)串行口中断,定时器0,外中断0,外中断1,定时器1。不可能。
(6)外中断0,外中断1,定时器0,串行口中断,定时器1。不可能。
(7)外中断0,定时器1,定时器0,外中断1,串行口中断。可能。其中:外中断0,定时器1为高优先级。
第5章
1.8051定时器/计数器有哪几种工作模式?各有什么特点?
答:8051定时器/计数器有0,1,2,3四种工作模式。模式0为13位1定时器/计数器,模式1为16位1定时器/计数器,模式2为自动赋初值的8位定时器/计数器,模式3可以增加一个8位定时器(T1没有模式3)。2.8051定时器作定时和计数时,其计数脉冲分别由谁提供?
答:8051定时器作定时器时,输入的记数脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器可看作是对单片机机器周期的计数器。8051定时器作计数器时,则对外部事件
进行计数。
3.8051定时器的门控信号GATE为1时,定时器如何启动?
答:8051定时器的门控信号GATE为1时,只有INT0(或INT1)引脚为高电平且TR0(或TR1)置1时,相应的T0或T1才能选通工作。
4.定时器/计数器0已预置为156,且选定用于模式2的计数方式,现在T0引脚上输入周期为1ms的脉冲,问:
(1)此时定时器/计数器0的实际用途是什么?(2)在什么情况下,定时器/计数器0溢出?答:(1)此时定时器/计数器0的实际用途是0。1S脉冲信号发生器。
(2)当T0每记数100次后定时器/计数器0溢出。5.设fosc=12MHz,定时器0的初始化程序和中断服务程序如下:
MAIN:
MOVMOVMOVSETB
…
TH0,#9DHTL0,#0D0HTMOD,#01HTR0
中断服务程序:
MOVTH0,#9DHMOVTL0,#0D0H
…RETI
问:(1)该定时器工作于什么方式?
(2)相应的定时时间或计数值是多少?答:(1)该定时器以模式1工作于定时方式。
(2)相应的定时时间为25。136ms.
6.8051单片机的fosc=6MHz,如果要求定时时间分别位0.1ms和5ms,当T0工作在模式0、模式1和模式2时,分别求出定时器的初值。答:(1)定时时间分别位0.1ms时:模式0初值为8142、模式1初值为65486,模式2初值206。
(2)定时时间分别位5ms时:模式0初值为5692、模式1初值为63036,模式2此时定时时间不够。
7.以定时器1进行外部事件计数,每计数1000个脉冲后,定时器1转为定时工作方式。定时10ms后,又转为计数方式,如此循环不止。设fosc=6MHz,试用模式1编程。解:先确定T1作为计数器时初值为:64536(0FC68H)
T1作为定时器时初值为:60536(0EC78H)程序:SETBTR1
LOOP:MOVTMOD,#50H
MOVTH1,#0FCHMOVTL1,#68H
AA:JBCTF1,AA
MOVTMOD,#10H
BB:
MOVTH1,#0E0HMOVTL1,#78HJBCTF1,BBSJMPLOOPEND
8.已知8051单片机的fosc=6MHz,试利用T0和P1.0输出矩形波。矩形波高电平宽100μs,低电平宽300μs。
解:先确定T0作为定时器工作于模式2时初值为:高电平为50,低电平为150。
采用中断方式编程。
ORG0000HAJMPMAINORG001BHAJMPTIM0ORG0030H
MAIN:MOVSP,#30H;设置栈底
MOVTMOD,#02HMOVTL0,#50MOVIE,#82HSETBP1.0SETBTR0SJMP$
ORGJNBCLRMOVRETISETBMOVRETIEND
0100HP1.0,AAP1.0
TL0,#150P1.0TL0,#50
TIM0:
AA:
9.设fosc=12MHz,试编写一段程序,功能为:对定时器T0初始化,使之工作在模式2,产生200μs定时,并用查询T0溢出标志的方法,控制P1.1输出周期为2ms的方波。解:先确定T0作为定时器时初值为:56
程序:MOVTMOD,#02H
MOVTL0,#56MOVTH0,#56MOVR7,#5;设置循环次数SETBTR0AA:JBCTF0,AA
DJNZR7,AACPLP1.1MOVR7,#5SJMPAAEND10.已知8051单片机系统时钟频率为6MHz,利用其定时器测量某正脉冲宽度时,采用哪种
工作模式可以获得最大的量程?能够测量的最大脉宽是多少?
答:首先设置TMOD中GATE为1,以定时方式工作在模式1,外部正脉冲从外部中断引脚引入,可获得最大的量程。
能够测量的最大脉宽为:131ms.
第6章
1.异步通信和同步通信的主要区别是什么?MCS-51串行口有没有同步通信功能?答案:
异步通信因为每帧数据都有起始位和停止位,所以传送数据的速率受到限制。但异步通信不需要传送同步脉冲,字符帧的长度不受限制,对硬件要求较低,因而在数据传送量不很大。同步通信一次可以连续传送几个数据,每个数据不需起始位和停止位,数据之间不留间隙,因而数据传输速率高于异步通信。但同步通信要求用准确的时钟来实现发送端与接收端之间的严格同步。
MCS-51串行口有同步通信功能。2.解释下列概念:
(1)并行通信、串行通信。(2)波特率。
(3)单工、半双工、全双工。(4)奇偶校验。答案:
(1)并行通信:数据的各位同时进行传送。其特点是传送速度快、效率高,数据有多少位,就需要有多少根传输线。当数据位数较多和传送距离较远时,就会导致通信线路成本提高,因此它适合于短距离传输。
串行通信:数据一位一位地按顺序进行传送。其特点是只需一对传输线就可实现通信,当传输的数据较多、距离较远时,它可以显著减少传输线,降低通信成本,但是串行传送的速度慢。
(2)波特率:每秒钟传送的二进制数码的位数称为波特率(也称比特数),单位是bps(bitpersecond),即位/秒。
(3)单工:只允许数据向一个方向传送,即一方只能发送,另一方只能接收。
半双工:允许数据双向传送,但由于只有一根传输线,在同一时刻只能一方发送,另一方接收。
全双工:允许数据同时双向传送,由于有两根传输线,在A站将数据发送到B站的同时,也允许B站将数据发送到A站。
(4)奇偶校验:为保证通信质量,需要对传送的数据进行校验。对于异步通信,常用的校验方法是奇偶校验法。
采用奇偶校验法,发送时在每个字符(或字节)之后附加一位校验位,这个校验位可以是“0”或“1”,以便使校验位和所发送的字符(或字节)中“1”的个数为奇数——称为奇校验,或为偶数——称为偶校验。接收时,检查所接收的字符(或字节)连同奇偶校验位中“1”的个数是否符合规定。若不符合,就证明传送数据受到干扰发生了变化,CPU可进行相应处理。3.MCS-51串行口控制寄存器SCON中SM2、TB8、RB8有何作用?主要在哪几种方式下使用?答案:
SM2:多机通信控制位,主要在方式1、2、3下使用;TB8:存放发送数据的第9位,主要在方式2、3下使用;
RB8:存放接收数据的第9位或停止位,主要在方式1、2、3下使用。4.试分析比较MCS-51串行口在四种工作方式下发送和接收数据的基本条件和波特率的产生方法。答案:
发送数据的基本条件:
方式0、1、2、3:CPU执行一条将数据写入发送缓冲器SBUF的指令;接收数据的基本条件:
方式0:用软件使REN=1(同时RI=0);方式1:用软件使REN=1,一帧数据接收完毕后,必须同时满足以下两个条件:①RI=0;②SM2=0或接收到的停止位为1,这次接收才真正有效,将8位数据送入SBUF,停止位送RB8,置位RI。否则,这次接收到的数据将因不能装入SBUF而丢失。方式2、3:软件使REN=1,同时满足以下两个条件:①RI=0;②SM2=0或接收到的第9位数据为1(SM2=1),则这次接收有效,8位数据装入SBUF,第9位数据装入RB8,并由硬件置位RI。否则,接收的这一帧数据将丢失。波特率的产生方法:
在方式0下,串行口的波特率是固定的,即波特率=fosc/12;在方式1、3下,串行口波特
SMOD
率由定时器T1的溢出率和SMOD值同时决定。相应公式为:波特率=2×T1溢出率/32;在方式2下,串行口的波特率可由PCON中的SMOD位控制:若使SMOD=0,则所选波特率为fosc/64;若使SMOD=1,则波特率为fosc/32。即
×f
osc
64
5.为何T1用作串行口波特率发生器时常用模式2?若fosc=6MHz,试求出T1在模式2下可能产生的波特率的变化范围。
答案:定时器T1作为波特率发生器可工作于模式0、模式1和模式2。其中模式2在T1溢出后可自动装入时间常数,避免了重装参数,因而在实际应用中除非波特率很低,一般都采用模式2。
若fosc=6MHz,T1在模式2下可能产生的波特率的变化范围为:61.04bps~15625bps。6.简述多机通信原理。
答案:当主机选中与其通信的从机后,只有该从机能够与主机通信,其他从机不能与主机进行数据交换,而只能准备接收主机发来的地址帧。上述要求是通过SCON寄存器中的SM2和TB8来实现的。当主机发送地址帧时使TB8=1,发送数据帧时使TB8=0,TB8是发送的一帧数据的第9位,从机接收后将第9位数据作为RB8,这样就知道主机发来的这一帧数据是地址还是数据。另外,当一台从机的SM2=0时,可以接收地址帧或数据帧,而当SM2=1时只能接收地址帧,这就能实现主机与所选从机之间的单独通信。
7.试用8051串行口扩展I/O口,控制16个发光二极管自右向左以一定速度轮流发光,画出电路并编写程序。答案:电路如下:
波特率=
2SMOD
程序如下:
ORG0000HAJMPMAINORG0023HAJMPSBSORG2000HMOVSCON,#00HMOVA,#01HCLRP1.0CLRP1.1MOVSBUF,ASJMPLOOP
INCR0CJNER0,#11H,DSPMOVR0,#01HCJNER0,#08H,DSPRSETBP1.1SETBP1.0ACALLDELYCLRTIRLACLRP1.0CLRP1.1MOVSBUF,ARETIMOVR2,#05HMOVR3,#0C8HMOVR4,#0F8HNOPDJNZR4,DELY2DJNZR3,DELY1DJNZR2,DELY0RETEND
;转向串行口中断服务程序;串行口设置为方式0
;最右边一位发光二极管先亮
;关闭并行输出,熄灭显示;开始串行输出;等待中断
MAIN:
LOOP:SBS:
DSP:DSPR:
;启动高8位并行输出;启动低8位并行输出;显示延迟1s;清发送中断标志;准备点亮下一位
;关闭并行输出,熄灭显示;串行输出
;延时1s子程序(fosc=6MHz)
ZDFH:DELY:DELY0:DELY1:DELY2:
8.试设计一个8051单片机的双机通信系统,串行口工作在方式1,波特率为2400bps,编程将甲机片内RAM中40H~4FH的数据块通过串行口传送到乙机片内RAM的40H~4FH单元中。答案:
双方约定的通信协议如下:
甲机先发送请求乙机接收信号“0AAH”,乙机收到该信号后,若为准备好状态,一个则发送数据“0BBH”作为应答信号,表示同意接收。当甲机发送完16个字节后,再向乙机发送一个累加校验和。校验和是针对数据块进行的,即在数据发送时,发送方对块中的数据简单求和,产生一个单字节校验字符(校验和),附加到数据块结尾。在数据接收时,接收方每接
收一个数据也计算一次校验和;接收完数据块后,再接收甲机发送的校验和,并将接收到的校验和与乙机求出的校验和进行比较,向甲机发送一个状态字,表示正确(00H)或出错(0FFH),出错则要求甲机重发。甲机收到收到乙机发送的接收正确应答信号(00H)后,即结束发送,否则,就重发一次数据。甲机采用查询方式进行数据发送,乙机采用中断方式进行数据接收。双方约定传输波特率为2400bps,两机主频均为11.059MHz,双机串行口都工作于方式1,查表6-2可知SMOD=0,定时器T1采用工作模式2,初值为F4H。甲机发送子程序:
ORGSEND:
MOVMOVMOVSETBMOVMOVTLLS:MOVWFS1:JBCSJMPRYD1:JBCSJMPRYD2:
MOVXRLJNZSDD1:
MOVMOVMOVSDD2:
MOVMOVADDMOVINCWFS2:JBCSJMPSDD3:DJNZMOVWFS3:JBCSJMPRYD3:JBCSJMPRYD4:
MOVJNZRET乙机接收子程序:
ORGRECV:
MOVMOVMOVSETBMOVMOV
2000H
TMOD,#20HTL1,#0F4HTH1,#0F4HTR1
SCON,#50HPCON,#00HSBUF,#0AAH
TI,RYD1WFS1
RI,RYD2RYD1A,SBUFA,#0BBHTLLSR0,#40HR1,#10HR2,#00HSBUF,@R0A,R2A,@R0R2,AR0
TI,SDD3WFS2R1,SDD2SBUF,R2TI,RYD3WFS3RI,RYD4RYD3A,SBUFSDD1
2000H
TMOD,#20HTL1,#0F4HTH1,#0F4HTR1
SCON,#50HPCON,#00H
;定时器1设为模式2;置定时器初值;启动T1
;设串行口为方式2;SMOD=0
;
发送请求接收信号
;等待发送
;等待乙机回答;接收应答信号
;乙机未准备好,继续联络;首地址40H→R0;数据个数→R1;清校验和寄存器;发送一个数据;求校验和;保存校验和
;等待发送;数据块是否发送完;发送校验和
;等待乙机回答
;回答出错则重发
;定时器1设为模式2;置定时器初值;启动T1
;设串行口为方式2;
SMOD=0
MOVR0,#40HMOVR1,#10HMOV50H,#00HSETB7FHSETB7EHSETBESSETBEA
LOOP:SJMPLOOP
中断服务子程序:
CLREACLRRIJB7FH,RCMDJB7EH,DATAMOVA,SBUFCJNEA,50H,ERRMOVA,#00HMOVSBUF,A
WFS1:JNBTI,WFS1
CLRTISJMPRETN
ERR:MOVA,#0FFH
MOVSBUF,A
WFS2:JNBTI,WFS2
CLRTISJMPAGAN
RCMD:MOVA,SBUF
XRLA,#0AAHJZTYDXSJMPRETN
TYDX:MOVSBUF,#0BBHWFS3:JNBTI,WFS3
CLRTICLR7FHSJMPRETN
DATA:MOVA,SBUF
MOVR0,AINCDPTRADDA,50HMOV50H,ADJNZR1,RETNCLR7EHSJMPRETN
AGAN:SETB7FH
SETB7EHMOVDPTR,#2000HMOVR1,#10MOV50H,#00H
RETN:SETBEA
RETI
;首地址40H→R0;数据个数→R1;清校验和寄存器;标志位初始置1
;允许接收中断;开中断;等待中断
;;;;
;清中断
是请求接收信号吗是数据块吗接收校验和
判断发送是否正确
;正确,发00H
;等待发送
;出错,发0FFH
;等待发送
;接收甲机请求信号
;发送应答信号0BBH
;等待发送
;接收数据
;求校验和;保存校验和
;数据接收完后清数据标志位
;恢复标志位
;首地址2000H→DPTR;数据个数→R1
;清校验和寄存器;开中断
9.8051以方式2进行串行通信,假定波特率为1200bps,第9位作奇偶校验位,以中断方式发送。请编写程序。答案:
主程序:
MAIN:
ORGMOVMOVMOVMOVMOVSETBSETBSJMP
2000H
SCON,#80HPCON,#00HR0,#30HR1,#50HR2,#20ESEALOOP
;将串行口设置为方式2,REN=1;SMOD=0
;发送数据区首地址→R0;接收数据区首地址→R1;置发送数据个数→R2;开中断;等待中断
LOOP:
中断服务子程序:
ORG0023HAJMPSOUTORG0200H
SOUT:CLRTI
DJNZR2,LOOP1SJMPRR1
LOOP1:MOVA,@R0
MOVC,PSW.0MOVTB8,CMOVSBUF,AINCR0
RR1:RETI
;转至中断服务程序;清发送中断标志
;数据未发送完,继续发送;发送完返回
;取发送数据到A
;发送数据
;指向下一个数据
10.8051以方式3进行串行通信,假定波特率为1200bps,第9位作奇偶验位,以查询方式接收。请编写程序。答案:
ORG2000H
RECV:MOVTMOD,#20H;定时器1设为模式2
MOVTL1,#0E8HMOVTH1,#0E8H;置定时器初值SETBTR1;启动T1MOVSCON,#0D0H;将串行口设置为方式3,REN=1MOVPCON,#00H;SMOD=0MOVR1,#20H;接收数据区首地址→R1MOVR2,#16;置发送数据个数→R2
WAIT:JBCRI,PRI;等待接收到数据
SJMPWAIT
PRI:MOVA,SBUF;读接收数据
JNBPSW.0,PZEO;P=0则跳转JNBRB8,ERR;P=1,RB8=0转至出错SJMPRIGHT;P=1,RB8=1转至正确
PZEO:JBRB8,ERR;P=0,RB8=1转至出错RIGHT:MOV@R1,A;存放数据
INCR1;指向下一个存储单元DJNZR2,WAIT;未接收完则继续接收CLRF0;F0=0RET
ERR:CLRREN
SETBF0;置F0=1RET
11.RS-232C总线标准是如何定义其逻辑电平的?实际应用中可以将MCS-51单片机串行口和PC机的串行口直接相连吗?为什么?
答案:
RS-232C采用负逻辑,即逻辑1用-5V~-15V表示,逻辑0用+5V~+15V表示。
PC机配置的是RS-232C标准接口,与MCS-51单片机输入、输出电平不兼容。因此实际应用中不能将MCS-51单片机串行口和PC机的串行口直接相连。
12.为什么RS-485总线比RS-232C总线具有更高的通信速率和更远的通信距离?答案:
RS-232C由于发送器和接收器之间具有公共信号地,不可能使用双端信号,因此共模噪声会耦合到信号系统中,从而限制了RS-232C的信号传输速率和通信距离。而RS-485总线无论发送还是接收数据,均用两条线传送双端(差分)信号,因而大大提高了通信速率和通信距离。
第7章
1.通常8031给用户提供的I/O口有哪几个?为什么?答案:
MCS-51系列单片机虽然有4个8位I/O口P0、P1、P2、P3,但4个I/O口实际应用时,并不能全部留给用户作系统的I/O口。因为当单片机在外部扩展了程序存储器、数据存储器时,就要用P0和P2口作为地址/数据总线,而留给用户使用的I/O口只有P1口和一部分P3口。2.在MCS-51单片机应用系统中,外接程序存储器和数据存储器的地址空间允许重叠而不会发生冲突,为什么?外部I/O接口地址是否允许与存储器地址重叠?为什么?答案:
因为单片机访问外部程序存储器与访问外部数据存储器(包括外部I/O口)时,会分别产生与RD/两类不同的控制信号,因此外接程序存储器和数据存储器的地址空间允许重叠而不会发生冲突。
外部扩展I/O口占用数据存储器地址空间,与外部数据存储器统一编址,单片机用访问外部数据存储器的指令来访问外部扩展I/O口。因此外部I/O接口地址是否允许与程序存储器地址重叠不允许与数据数据存储器地址重叠。
3.外部存储器的片选方式有几种?各有哪些特点?答案:
外部存储器的片选方式有线选法和译码法两种。线选法的特点是连接简单,不必专门设计逻辑电路,但是各个扩展芯片占有的空间地址不连续,因而地址空间利用率低。适用于扩展地址空间容量不太大的场合。译码法的特点是在P2口未被扩展芯片地址线占用的地址总线数量相同的情况下,可以比线选法扩展更多的芯片,而且可以使各个扩展芯片占有的空间地址连续,因而适用于扩展芯片数量多、地址空间容量大的复杂系统。4.简述MCS-51单片机CPU访问外部扩展程序存储器的过程。答案:
P0口作为地址/数据复用的双向三态总线,用于输出程序存储器的低8位地址或输入指令,P2口具有输出锁存功能,用于输出程序存储器的高8位地址。当ALE有效(高电平)时,高8位地址从P2口输出,低8位地址从P0口输出,在ALE的下降沿把P0口输出的低8位地址锁存起来,然后在PSEN有效(低电平)期间,选通外部程序存储器,将相应单元的数据送到P0口,CPU在PSEN上升沿完成对P0口数据的采样。5.简述MCS-51单片机CPU访问外部扩展数据存储器的过程。答案:
第一个机器周期是从外部程序存储器读取MOVX指令操作码,第二个机器周期才是执行MOVX指令访问外部数据存储器。在该周期中,若是读操作,则RD信号有效(低电平),P0口变为输入方式,被地址信号选通的外部RAM某个单元中的数据通过P0口输入CPU;若是写操作,则WR信号有效(低电平),P0口变为输出方式,CPU内部数据通过P0口写入地址信号选通的外部RAM的某个单元中。
6.现要求为8031扩展2片2732作为外部程序存储器,试画出电路图,并指出各芯片的地址范围。答案:
电路图如下:
各芯片的地址范围:2732(1):0B800H~0BFFFH;2732(2):7800H~7FFFH。
7.现要求为8031外扩1片2864A,兼作程序存储器和数据存储器,请画出硬件连接图。答案:
电路图如下:
8.设某一8031单片机系统,拟扩展2片2764EPROM芯片和2片6264SRAM芯片,试画出电路图,并说明存储器地址分配情况。答案:
电路图如下:
存储器地址分配:
2764(1):C000H~DFFFH;2764(2):A000H~BFFFH;6264(1):C000H~DFFFH;6264(2):A000H~BFFFH。
9.试用1片74LS244和1片74LS273为8031扩展8位输入端口和8位输出端口,8位输入端口各接1个开关,8位输出端口各接1个发光二极管,要求按下1个开关,相对应的发光二极管发光。试画出硬件连接图并编制程序。答案:
电路图如下:
程序如下:
STAR:
ORGMOVMOVMOVMOVXSJMP
2000H
DPTR,#0EFFFHA,@DPTR
DPTR,#0FEFFH@DPTR,ASTAR
;读按键值
;驱动相应发光二极管发光
END
10.一个8031应用系统扩展了1片8155,晶振为12MHz,具有上电复位功能,P2.1~P2.7作为I/O口线使用,8155的PA口、PB口为输入口,PC口为输出口。试画出该系统的逻辑图,并编写初始化程序。答案:
系统逻辑图如下:
初始化程序:
MOVDPTR,#0FFF8HMOVA,#0CHMOVXDPTR,A
11.8155TIN端输入脉冲频率为1MHz,请编写能在TOUT引脚输出周期为8ms方波的程序。答案:
程序如下:
MOVDPTR,#7F04H;指向定时器低8位MOVA,#40HMOVX@DPTR,A;计数常数低8位装入定时器INCDPTR;指向定时器高8位MOVA,#5FH;设定时器输出方式为连续方波输出MOVX@DPTR,A;装入定时器高8位MOVDPTR,#7F00H;指向命令/状态口MOVA,#0C2H;命令字设定PA口为基本输入方式,
PB口为基本输出方式,并启动定时器
MOVX@DPTR,A
12.现要求8155的A口基本输入,B口、C口基本输出,启动定时器工作,输出连续方波,请编写8155的初始化程序。答案:
程序如下:
MOVDPTR,#data1;指向定时器低8位MOVA,#data2MOVX@DPTR,A;计数常数低8位装入定时器INCDPTR;指向定时器高8位MOVA,#40H;设定时器输出方式为连续方波输出MOVX@DPTR,A;装入定时器高8位MOVDPTR,#data3;指向命令/状态口MOVA,#0CEH;命令字设定PA口为基本输入方式,
PB、PC口为基本输出方式,并启动定时器
MOVX@DPTR,A
13.试设计一个8031应用系统,使该系统扩展1片27256、1片6264和1片8155。请画出系统电路图,并分别写出各芯片的地址。答案:
电路图如下:
各芯片的地址如下:27256:0000H~7FFFH;6264:A000H~BFFFH;
8155:RAM地址:7E00H~7EFFH
命令/状态口:7F00H
PA口:7F01HPB口:7F02HPC口:7F03H
定时器低8位:7F04H定时器高8位:7F05H
14.试用6264为8051单片机扩展24K数据存储器,画出系统电路图,并分别写出各芯片的地址。答案:
电路图如下:
各芯片的地址如下:6264(1):C000H~DFFFH;6264(2):A000H~BFFFH;6264(3):6000H~7FFFH。
15.试用2764为8031单片机扩展64K程序存储器,画出系统电路图,并分别写出各芯片的地址。答案:
电路图如下:
各芯片的地址如下:2764(1):0000H~1FFFH;2764(2):2000H~3FFFH;2764(3):4000H~5FFFH;2764(4):6000H~7FFFH;2764(5):8000H~9FFFH;2764(6):0A000H~0BFFFH;2764(7):0C000H~0DFFFH;2764(8):0E000H~0FFFFH;
第8章
1.简述键盘扫描的主要思路。答案:
键盘扫描的主要思路:首先确定是否有键按下,消除抖动,若有键按下,输出逐行或列的扫描字,读取列或行的状态,确定按键键值,然后再判断按键是否释放,若释放,即可返回。2.简述软件消除键盘抖动的原理。
答案:
软件消除键盘抖动的原理:当CPU发现有键按下的情况下,为了防止是机械抖动的误动作,可以采用软件延时10ms,然后再次检测按键是否仍然为闭合状态,若仍然闭合,则确定有键按下,否则就是键盘抖动,不予理睬。
3.什么叫LED的动态显示和静态显示。答案:
静态显示形式,即七段LED数码管在显示某一个字符时,相应的段(发光二极管)恒定的导通或截至,直至换显其他字符为止。
动态显示是将所有数码管的段码线对应并联在一起,由一个8位的输出口控制,每位数码管的公共端(称位选线)分别由一位I/O口线控制,以实现各位的分时选通。
4.要求利用8031的P1口扩展一个2×2行列式键盘电路,画出电路图,并根据所绘电路编写键扫描子程序。答案:
设行线H1~H2连接到51单片机P1口的P1.0~P1.1,列线L1~L2连接到P1口的P1.4~P1.5。电路图如下:
键扫描子程序:KEY:MOVP1,#0FH;列输出低电平,行输出高电平
MOVA,P1;读P1口状态ANLA,#0FH;保留行状态CJNEA,#0FH,KEY0;有键按下转KEY0SJMPKEY;无键按下等待,转键检测
KEY0:LCALLDELAY10;调10mS延时取抖
MOVA,P1ANLA,#0FHCJNEA,#0FH,KEY1;不是抖动转键值判断SJMPKEY;是抖动到键检测
KEY1:MOVP1,#11101111B;第一列键被按下判断
MOVA,P1ANLA,#0FHCJNEA,#0FH,KEYC1;第一列键被按下转KEYC1处理MOVP1,#11011111B
;第二列键被按下判断
MOVA,P1ANLA,#0FHCJNEA,#0FH,KEYC2;第二列键被按下转KEYC2处理LJMPKEY;均不是转到键检测
KEYC1:MOVA,P1;读键值键值处理
JBE0H,KEYC11LCALLK1;K1键处理SJMPFANH
KEYC11:LCALLK3;K3键处理
SJMPFANH
KEYC2:MOVA,P1;读键值键值处理
JBE0H,KEYC21LCALLK2;K2键处理SJMPFANH
KEYC21:LCALLK4;K4键处理FANH:RET
5.请在图8-1的基础上,设计一个以中断方式工作的开关式键盘,并编写其中断键处理程序。答案:
电路图如下:
中断键处理程序:
KINT:
KEY1:
LCALLMOVANLCJNESJMPMOVJBLCALLSJMP
DELAY10;调10mS延时取抖A,P1A,#0FH
A,#0FH,KEY1;不是抖动转键值判断FANH;是抖动返回A,P1;读键值键值处理0E0H,KEY2K1;K1键处理FANH
KEY2:
KEY3:
KEY4:FANH:
JBLCALLSJMPJNBLCALLSJMPLCALLRETI
0E1H,KEY3K2FANH
0E2H,KEY4K3FANHK4
;K2键处理
;K3键处理;K4键处理
6.矩阵式键盘如何实现中断方式?请在图8-4的基础上设计中断式键盘,并编写相应中断处理子程序。答案:
电路图如下:
中断处理子程序:KINT:ACALLDELAY10
ACALLKS1JNZLK2AJMPKEY_1
LK2:MOVR2,#0FEH
MOVR4,#00H
LK4:MOVDPTR,#7F01H
MOVA,R2MOVX@DPTR,AINCDPTRINCDPTRMOVXA,@DPTRJBACC.0,LONEMOVA,#00HAJMPLKP
LONE:JBACC.1,LTWO
;延时消抖
;再次判断有无键按下
;确实有键按下,转列扫描;是键抖动,重新扫描
;首列扫描字;首列号
;列扫描字送PA口;指向PC口;读入行状态
;第0行有键按下?;有键按下,行号送A;转键值处理
;第1
行有键按下?
LTWO:
LTHR:
LKP:
LK3:
NEXT:
KND:
KS1:
DELAY12:
TM:
TM6:MOVA,#08H;有键按下,行号送AAJMPLKP;转键值处理JBACC.2,LTHR;第2行有键按下?MOVA,#10H;有键按下,行号送AAJMPLKP;转键值处理JBACC.3,NEXT;第3行有键按下?MOVA,#18H;有键按下,行号送AADDA,R4;键值处理PUSHACCACALLKS1;判断按键是否释放JNZLK3POPACCRETINCR4;列号加1MOVA,R2;判断是否8列扫描完毕JNBACC.7,KND;扫描完,返回RLA;转下列扫描MOVR2,AAJMPLK4AJMPKEY_1MOVDPTR,#7F01H;判断有无键按下子程序MOVA,#00HMOVX@DPTR,AINCDPTRINCDPTRMOVXA,@DPTRCPLAANLA,#0FHRETMOVR7,#18H;延时12ms子程序MOVR6,#0FFHDJNZR6,TM6
DJNZR7,TM
RETI
7.状态或数码显示时,对LED的驱动可采用低电平驱动,也可以采用高电平驱动,二者各有什么特点?
答案:
高电平驱动要采用共阴极数码管,必须外接上拉电阻;低电平驱动要采用共阳极数码管,电源效率相对较高。
8.用DAC0832进行D/A转换时,当输出电压的范围在0~5V时,每变化一个二进制数其输出电压跳变约20mV,即输出是锯齿状的,采取何种措施可使输出信号比较平滑?答案:
两种方法:(1)可以计算移动平均值;(2)可以设计滤波器的办法。
9.当系统的主频为6MHz时,请计算图8-18中DAC0832产生锯齿波信号的周期。答案:
T=2μs×8×256=4096μs
10.请编写图8-18中用DAC0832产生三角波的应用程序。
答案:
START:MOVDPTR,#7FFFH
MOVA,#00H
LOOP:MOVX@DPTR,A
INCA
CJNEA,#0FFH,L1
L2:DECA
MOVX@DPTR,A
CJNEA,#00H,L2
L1:AJMPLOOP
11.对图8-25的A/D转换电路,若采用中断方式,请编写相应程序。
答案:
在硬件电路上,应当将EOC引脚接到单片机的外部中断引脚上面,如INT1;
初始化程序:
MAIN:SETB
SETB
SETB
MOV
MOV
MOV
MOVX
SJMPIT1EAEX1R1,#dataDPTR,#7FF8HR7,#08H@DPTR,A$LOOP:;R1指向数据存储区首地址;DPTR指向通道0;通道数8;启动A/D转换
;中断服务程序:
PINT1:MOVX
MOV
INC
INC
RETIA,@DPTR@R1,ADPTRR1;转换结果读入累加器A;存储数据;修改指针
12.当图8-25的ADC0809对8路模拟信号进行A/D转换时,请编写用查询方式工作的采样程序,8路采样值存放在30H~37H单元。
答案:
MAIN:MOVR1,#30H
MOVDPTR,#7FF8H
LOOP:
DELAY:MOVMOVXMOVNOP
NOP
NOP
NOP
DJNZ
MOVX
MOV
INC
INC
DJNZ
ENDR7,#08H@DPTR,AR6,#0AHR6,DELAYA,@DPTR@R1,ADPTRR1R7,LOOP
第九章C-51
1.答案
sbitsfrsfr16bit
2.答案
code只读存储区
data、idata、bdata快速读写存储区
xdatapdata随机读写存储区
3.答案
1.在中断函数中不能使用参数。
2.在中断函数中不能存在返回值。
3.不能对中断函数产生明显的调用。
4.答案
#include
#include
unsignedcharlightdata[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
voiddelay()
{
unsignedintm;
for(m=0;m
}
intmain(void)
{
inti;
while(1)
{
for(i=0;i
{
P1=lightdata[i];
delay();
}
}
return0;
}
5.答案
#include
#include
sbitCLK=P1^0;
unsignedcharcount;
voidInitTimer()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
}
voidTimer0(void)interrupt1using1
{
TR0=0;
TH0=0x3c;
TL0=0xB0;
if(count
{
count++;
}
else
{
count=0;
CLK=~CLK;
}
TR0=1;
}
intmain(void)
{
count=0;
InitTimer();
while(1);
return0;
}
第10章
1、那些场合适合使用单片机系统?
参考答案:
单片机系统的使用有一个上下限的问题。下限方面,过于简单的控制需求而又没有数字化的必要时完全可以使用普通的电子手段解决而不一定非要使用单片机。上限方面,单片机作为微控制器不太适合做大吞吐量的计算和数据处理工作,比如图像处理,音视频的编解码等。但是对于以流程控制为主的快速实时控制系统,就显得非常合适。对于应用虽然简单但是有数字化需求的场合,比如简单的温度采集后数字远传的场合也比较合适。
2、从事单片机系统开发需要具备哪些基础知识
参考答案:
从事单片机开发,在目前的国情下,一般要求开发者具有很扎实的单片机mcu本身的应用知识,外围电路设计有要求有数字电路或CPLD\FPGA设计能力,进而需要一定的模拟电路、传感器电路、数字通信知识,各种元器件的使用经验,甚至可能还要有各种机械设计,外观设计加上目标系统的工艺要求等综合性的广泛的知识。
3、单片机系统分析中自顶向下法和自下向上法各有什么优缺点?
参考答案:
自顶向下法具有通观全局的优势,可以合理的安排系统的各个子系统之间的功能划分与相互支撑关系。可以有较好的开发节奏和开发周期的控制。在有经验的系统分析师的带领下可以实现非常理想的开发效果。但是,一旦设计需求发生改变——这在相互之间有行业差异的开发者和需求者之间经常发生——就需要重新从源头改变设计和调整进度,对于有较大硬件成本开销的控制系统这就有可能是灾难性的。
自下向上法,相当于先准备好建材再盖高楼的思路。先进行底层硬件设备、器件驱动程序的开发,再一步步从纯技术的角度完善这些低层和中层软件。硬件则由一个经过调试的子系统组装而成。最后可以专注的对付应用的逻辑层问题。但是这样一来,往往工期会被拖长。而且也会产生一些可能从不会被调用的程序片段。由于缺乏统一调度,各个工种之间的时间安排可能会有麻烦而产生浪费。
4、从本节实例分析部分来看,单片机开发中,用到的单片机本身的知识量占整个实用系统
开发的总知识量的比重如何,有何感受?
参考答案:
一个事实是,在很多单片机项目开发工作中,由于单片机本身的知识是一个有限的闭集,而开发工作所要面临的挑战却是丰富多彩,涉及到人类社会和科学范畴的方方面面。所以在开发中单片机知识本身的比重实际上并不大。更多的倒是对实际控制对象的深刻认识。认识的越深刻,越可能设计出出色的产品。这就需要我们不仅掌握好单片机技术本身还要广泛的培养自己的兴趣与能力。
《单片机原理及应用》习题参考答案
第一章
1.为什么计算机要采用二进制数?学习十六进制数的目的是什么?
在计算机中,由于所采用的电子逻辑器件仅能存储和识别两种状态的特点,计算机内部一切信息存储、处理和传送均采用二进制数的形式。可以说,二进制数是计算机硬件能直接识别并进行处理的惟一形式。十六进制数可以简化表示二进制数。
2.
(1)0111100179H(2)0.110.CH(3)01111001.1179.CH
(4)11101010.1010EA.AH(5)0110000161H(6)0011000131H
3.
(1)0B3H(2)80H(3)17.AH(4)0C.CH
4.
(1)01000001B65(2)110101111B431
5.
(1)[***********]100100(2)[***********]011100
(5)[***********]111111
6.
00100101B00110111BCD25H
7.
13711989
8.什么是总线?总线主要有哪几部分组成?各部分的作用是什么?
总线是连接计算机各部件之间的一组公共的信号线。一般情况下,可分为系统总线和外总线。系统总线应包括:
地址总线(AB)
控制总线(CB)
数据总线(DB)
地址总线(AB):CPU根据指令的功能需要访问某一存储器单元或外部设备时,其地址信息由地址总线输出,然后经地址译码单元处理。地址总线为16位时,可寻址范围为216=64K,地址总线的位数决定了所寻址存储器容量或外设数量的范围。在任一时刻,地址总线上的地址信息是惟一对应某一存储单元或外部设备。
控制总线(CB):由CPU产生的控制信号是通过控制总线向存储器或外部设备发出控制命令的,以使在传送信息时协调一致的工作。CPU还可以接收由外部设备发来的中断请求信号和状态信号,所以控制总线可以是输入、输出或双向的。
数据总线(DB):CPU是通过数据总线与存储单元或外部设备交换数据信息的,故数据总线应为双向总线。在CPU进行读操作时,存储单元或外设的数据信息通过数据总线传送给CPU;在CPU进行写操作时,CPU把数据通过数据总线传送给存储单元或外设
9.什么是接口电路?CPU与接口电路连接一般应具有哪些信号线?外部设备与接口电路连接一般应具有哪些信号线?
CPU通过接口电路与外部输入、输出设备交换信息,
一般情况下,外部设备种类、数量较多,而且各种参量(如运行速度、数据格式及物理量)也不尽相同。CPU为了实现选取目标外部设备并与其交换信息,必须借助接口电路。一般情况下,接口电路通过地址总线、控制总线和数据总线与CPU连接;通过数据线(D)、控制线
(C)和状态线(S)与外部设备连接。
10.存储器的作用是什么?只读存储器和随机存储器有什么不同?
存储器具有记忆功能,用来存放数据和程序。计算机中的存储器主要有随机存储器(RAM)
和只读存储器(ROM)两种。随机存储器一般用来存放程序运行过程中的中间数据,计算机掉电时数据不再保存。只读存储器一般用来存放程序,计算机掉电时信息不会丢失。
11.某存储器的存储容量为64KB,它表示多少个存储单元?
64×1024
12.简述微型计算机硬件系统组成。
一台计算机的基本结构由运算器、控制器、存储器、输入设备和输出设备五部分组成。
13.什么是单片机?单片机与微机相比有何特点?
单片机(Single-Chip-Microcomputer)又称单片微控制器,其基本结构是将微型计算机的基本功能部件:中央处理机(CPU)、存储器、输入接口、输出接口、定时器/计数器、中断系统等全部集成在一个半导体芯片上,因此,单片机其体积小、功耗低、价格低廉,且具有逻辑判断、定时计数、程序控制等多种功能。
单片机结构上的设计,在硬件、指令系统及I/O能力等方面都有独到之处,具有较强而有效的控制功能。虽然单片机只是一个芯片,但无论从组成还是从其逻辑功能上来看,都具有微机系统的含义。另一方面,单片机毕竟是一个芯片,只有外加所需的输入、输出设备,才可以构成实用的单片机应用系统。
14.单片机主要应用于哪些领域?
(1)智能仪器。智能仪器是含有微处理器的测量仪器。单片机广泛应用于各种仪器仪表,使仪器仪表智能化取得了令人瞩目的进展。
(2)工业控制。单片机广泛应用于各种工业控制系统中,如数控机床、温度控制、可编程顺序控制等。
(3)家用电器。目前各种家用电器普遍采用单片机取代传统的控制电路,如洗衣机、电冰箱、空调、彩电、微波炉、电风扇及高级电子玩具等。由于配上了单片机,使其功能增强而身价倍增,深受用户的欢迎。
(4)机电一体化。机电一体化是机械工业发展的方向,机电一体化产品是指集机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品。
单片机除以上各方面应用之外,还广泛应用于办公自动化领域(如复印机)、汽车电路、通信系统(如手机)、计算机外围设备等,成为计算机发展和应用的一个重要方向。
15.什么是嵌入式系统?嵌入式系统有哪些重要特征?
所谓嵌入式系统,是“以应用为中心、以计算机技术为基础、软件硬件可裁减、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”。即以嵌入式应用为目的计算机系统。嵌入式系统的重要特征:
⑴、系统内核小
⑵、专用性强。
⑶、系统精简
嵌入式系统一般没有系统软件和应用软件的明显区分,其功能设计及实现上不要
求过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。
⑷、高实时性
。
第二章
1.举例说明MCS-51有哪些典型产品,它们有何区别?
MCS-51系列单片机可分为两大系列:51子系列和52子系列。
51子系列单片机的典型产品有8051、8751、8031、80C51、80C31等。它们的结构基本相同,其主要差别反映在片内存储器的配置上有所不同
2.8051单片机内部包含哪些主要功能部件?各功能部件的主要作用是什么?
8051单片机内部由CPU、4KB的ROM、128B的RAM、4个8位的I/O并行端口、一个串行口、两个16位定时/计数器及中断系统等组成。
3.程序状态字寄存器PSW各位的定义是什么?
PSW是一个8位寄存器,用于寄存当前指令执行后的某些状态,即反映指令执行结果的一些特征信息。
Cy(PSW.7):即PSW的D7位,进位/借位标志。
AC(PSW.6):即PSW的D6位,辅助进位标志。
F0(PSW.5)及F1(PSE.1):即PSW的D5位、D1位,用户标志位。
RS1及RS0(PSW.4及PSW.3):即PSW的D4位、D3位,寄存器组选择控制位。
OV(PSW.2):即PSW的D2位,溢出标志。
4.MCS-51存储器结构的主要特点是什么?程序存储器和数据存储器各有何不同?
MCS-51单片机的存储器结构与一般微机存储器的配置方法不同,一般微机把程序和数据共存同一存储空间,各存储单元对应惟一的地址。而MCS-51的存储器把程序和数据的存储空间严格区分开。
数据存储器用于存放程序运算的中间结果、状态标志位等。
程序存储器用于存放已编制好的程序及程序中用到的常数。
5.MCS-51单片机内部RAM可分为几个区?各区的主要作用是什么?
内部数据存储器分为高、低128B两大部分。
低128B为RAM区,地址空间为00H~7FH,可分为:寄存器区、位寻址区、堆栈及数据存储区。存放程序运算的中间结果、状态标志位等。
高128B为特殊功能寄存器(SFR)区,地址空间为80H~FFH,其中仅有21个字节单元是有定义的。
6.MCS-51单片机的P0~P3四个I/O端口在结构上有何异同?使用时应注意哪些事项?P0口是一个8位漏极开路型双向I/O端口。
P1口是一个内部带上拉电阻的8位准双向I/O端口。
P2口也是一个内部带上拉电阻的8位准双向I/O端口
P3口是一个内部带上拉电阻的8位多功能双向I/O端口。
在使用时应注意以下方面:
①P0~P3都是准双向I/O口,即CPU在读取数据时,必须先向相应端口的锁存器写入“1”。各端口名称与锁存器名称在编程时相同,均可用P0~P3表示。当系统复位时,P0~P3端口锁存器全为“1”,故可直接对其进行读取数据。
②P0口每一输出位可驱动8个LS型TTL负载,P0口可作通用输入、输出端口使用,此时,若要驱动NMOS或其他拉电流负载时,需外接上拉电阻,才能使该位高电平输出有效。
在单片机进行外部存储器扩展时,P0口必须作为地址/数据复用线使用,此时,不必外接上拉电阻,P0也不能作通用I/O口使用。
③P1、P2、P3口输出均接有内部上拉电阻,输入端无需外接上拉电阻,每一位输出可以驱动4个LS型TTL电路。
④P0、P2口除可以作通用I/O端口、以实现与外部进行数据交换外,更主要的是,当CPU访问外部存储器时,CPU将自动地把外部存储器的地址线信号(16位)送P0、P2口,作为地址总线(P0口输出低8位地址,P2口输出高8位地址),向外部存储器输出16位存储单元地址。在控制信号作用下,该地址低8位被锁存后,P0口自动切换为数据总线,这时经P0口可向外部存储器进行读、写数据操作。此时,P2口不再作通用I/O端口,P0口为地址/数据复用口。
7.在什么情况下,P3口作为第二功能使用?
P3口的第二功能是作为控制端口使用的。由于单片机没有专设的控制信号引脚,单片机在进行外部存储器和I/O端口扩展时所需要的控制信号必须由P3口提供,P3口第二功能相当于PC机中CPU的控制线引脚。
8.为什么说单片机具有较强的位处理能力?
对于许多控制系统,开关量控制是控制系统的主要对象之一。作为传统的CPU,对于简单的个别开关量进行控制却显得不那么方便,而让MCS-51值得骄傲的正是它有效地解决了单一位的控制。
MCS-51片内CPU还是一个性能优异的位处理器,也就是说MCS-51实际上又是一个完整而独立的1位单片机(也称布尔处理机)。该布尔处理机除了有自己的CPU、位寄存器、位累加器(即进位标志Cy)、I/O口和位寻址空间外,还有专供位操作的指令系统,可以直接寻址对位存储单元和SFR的某一位进行操作。MCS-51单片机对于位操作(布尔处理)有置位、复位、取反、测试转移、传送、逻辑与和逻辑或运算等功能。所以,单片机具有较强的位处理能力。
9.指出8051可进行位寻址的存储空间。
00~7FH(即20H.0~2FH.7)及SFR地址能被8整除的寄存器中的各位。
10.位地址90H和字节地址90H及P1.0有何异同?如何区别?
位地址90H表示P1.0位
字节地址90H表示P1口
11.在访问外部ROM或RAM时,P0和P2口各用来传送什么信号?P0口为什么要采用片外地址锁存器?
P0口传送地址低八位后可复用数据线,所以,P0口要采用片外地址锁存器。P2口传送地址高八位。
12.什么是时钟周期?什么是机器周期?什么是指令周期?当振荡频率为12MHz时,一个机器周期为多少微秒?
时钟周期:也称振荡周期,即振荡器的振荡频率fosc的倒数,是时序中最小的时间单位。
机器周期:执行一条指令的过程可分为若干个阶段,每一阶段完成一规定的操作,完成一个规定操作所需要的时间称为一个机器周期,一个机器周期包含12个时钟周期。当振荡频率为12MHz时,一个机器周期为12/(12×1000000)秒=1微秒
指令周期:定义为执行一条指令所用的时间。
13.MCS-51单片机有几种复位方法?复位后,CPU从程序存储器的哪一个单元开始执行程序?
MCS-51的复位电路包括上电复位电路和按键(外部)复位电路
0000H
14.8051系统掉电时如何保存内部RAM中的数据?
单片机在运行过程中,如果发生掉电,片内RAM和SFR中的信息将会丢失。为防止信息丢失,可以把一组备用电源加到RST/VPD端,当VCC上的电压低于VPD上的电压时,备用电源通过VPD端,以低功耗保持内部RAM和SFR中的数据。
15.8051单片机引脚ALE的作用是什么?当8051不外接RAM和ROM时,ALE上输出的脉冲频率是多少?其作用是什么?
地址锁存使能输出ALE:当单片机访问外部存储器时,外部存储器的16位地址信号由P0口输出低8位,P2口输出高8位,ALE可用作低8位地址锁存控制信号;当不用作外部存储器地址锁存控制信号时,该引脚仍以时钟振荡频率的1/6固定地输出正脉冲,可以驱动8个LS型TTL负载。
第三章
1.MCS-51有哪几种寻址方式?举例说明它们是怎样寻址的?
MCS-51指令系统的寻址方式有以下7种:
立即寻址方式:操作数直接出现在指令中。
直接寻址方式中:操作数的单元地址直接出现在指令中。
寄存器寻址方式中:寄存器中的内容就是操作数。
寄存器间接寻址方式中,指定寄存器中的内容是操作数的地址,该地址对应存储单元的内容才是操作数。
变址寻址方式是以程序指针PC或数据指针DPTR为基址寄存器,以累加器A作为变址寄存器,两者内容相加(即基地址+偏移量)形成16位的操作数地址,
相对寻址是以程序计数器PC的当前值作为基地址,与指令中的第二字节给出的相对偏移量rel进行相加,所得和为程序的转移地址。
位地址:内部RAM地址空间的可进行位寻址的128位和SFR地址空间的可位寻址的11个8位寄存器的88位。位寻址给出的是直接地址。
2.位寻址和字节寻址如何区分?在使用时有何不同?
由寻址方式可以看出,不同的寻址方式所寻址的存储空间是不同的。正确地使用寻址方式不仅取决于寻址方式的形式,而且取决于寻址方式所对应的存储空间。字节寻址必须是对8位存储单元,位寻址的存储空间只能是片内RAM的20H~2FH字节地址中的所有位(位地址为00H~7FH)和部分SFR的位,决不能是该范围之外的任何单元的任何位。
3.要访问专用寄存器和片外数据寄存器,应采用什么寻址方式?举例说明。
访问专用寄存器:可采用直接寻址或寄存器寻址。
访问片外数据寄存器:寄存器间接寻址
4.什么是堆栈?其主要作用是什么?
堆栈是后进先出的数据存储区
一般用于中断处理过程中,若需要保护现场数据(如内部RAM单元的内容),可使用入栈指令,将数据压入堆栈,中断处理过程执行完后,再使用出栈指令恢复现场数据。
5.编程将内部RAM的20H单元的内容传送给外部RAM的2000H单元。
MOVA,20H
MOVDPTR,#2000H
MOVX@DPTR,A
6.编程将内部数据存储器20H~30H单元内容清零。
MOVR0,#20H
MOVA,#0
MOVR3,#17
LOP:MOV@R0,A
INCR0
DJNZR3,LOP
7.编程查找内部RAM的32H~41H单元中是否有0AAH这个数据,若有这一数据,则将50H单元置为0FFH,否则清50H单元为0。
MOVR3,#10H
MOVA,#0AAH
MOVR0,#31H
LOP:INCR0
SUBBA,@R0
JZLOP1
DJNZR3,LOP
MOV50H,#0H
AJMPLOP3
LOP1:MOV50H,#0FFH
LOP3:AJMP1OP3
8.查找20H~4FH单元中出现00H的次数,并将查找结果存入50H单元。
MOVR3,#30H
MOVR0,#20H
MOVA,#0
LOP:MOVA,@R0
JZLOP1
LOP3:INCR0
DJNZR3,LOP
AJMPLOP2
LOP1:INC50H
AJMPLOP3
LOP2:AJMPLOP2
9.已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行完后的A中的内容。
ANL
ORL
XRL
CPLA,#17H17H,AA,A@R0
(A)=11001011B=0CBH
10.已知单片机的fosc=12MHz,分别设计延时0.1s、1s、1min的子程序。
设晶振频率为12MHz,一个机器周期为1µs,
延时1ms的子程序:
DELAY:MOVR7,#0FFH
LOOP:NOP
NOP
DJNZR7,LOOP
RET执行时间(机器周期)11122
该程序段的总的执行时间为:
(1+4×255+2)µs=1023µs≈1ms
延时时间为100ms的子程序:
DELAY:MOV
LOP1:MOVR5,#64HR7,#0FFH对延时1ms的子程序循环100次。
LOOP:NOP
NOP
DJNZ
DJNZ
RETR7,LOOPR5,LOP1
延时时间为1s的子程序:
DELAY1:MOVR3,#0AH对延时100ms的子程序循环10次
。DELAY:MOVR5,#64H
LOP1:MOVR7,#0FFH
LOOP:NOP
NOP
DJNZR7,LOOP
DJNZR5,LOP1
DJNZR3,DELAY
RET
延时时间为60s的子程序:对延时1s的子程序循环60次
11.MCS-51汇编语言中有哪些常用的伪指令?各起什么作用?
BIT(地址符号命令)
END(结束汇编)
EQU(等值)
DB(定义字节)
DW(定义字)
DS(定义存储单元)
ORG(汇编起始地址)
12.比较下列各题中的两条指令有什么异同?
①MOVA,R1;MOV0E0H,R1指令功能相同,寻址方式表示不同
②MOVA,P0;MOVA,80H指令功能相同,寻址方式表示不同
③LOOP:SJMPLOOP;SJMP$指令功能相同
13.下列程序段汇编后,从3000H开始各有关存储单元的内容是什么?
TAB1:
TAB2:ORGEQUEQU
DB
DW3000H1234H5678H65,13,
3000H:65
3001H:13
3002H:‘a’
3003H:‘b’
3004H:‘c’
3005H:‘A’
3006H:’B’
3007H:‘C’
3009H:12H
300AH:78H
300BH:56H
300CH:0BCH
300DH:9AH
14.为了提高汇编语言程序的效率,在编写时应注意哪些问题?
(1)把要解决的问题化成一个个具有一定独立性的功能模块,各模块尽量采用子程序完成其功能。
(2)力求少用无条件转移指令,尽量采用循环结构。
(3)对主要的程序段要下功夫精心设计,这样会收到事半功倍的效果。
(4)能用8位数据解决问题的就不要使用16位数据。
(5)累加器是信息传递的枢纽,在调用子程序时应通过累加器传送子程序的参数,通过累加器向主程序传送返回参数。所以,在子程序中一般不把累加器推入堆栈。若需保护累加器的内容时,应先把累加器的内容存入其他寄存器单元,然后再调用子程序。
(6)为了保证程序运行的安全可靠,应考虑使用软件抗干扰技术,如数字滤波技术、指令冗余技术、软件陷井技术,用汇编语言程序实现这些技术,不需要增加硬件成本,可靠性高,稳定性好,方便灵活。
15.试编写8字节外部数据存储器到内部数据存储器的数据块传送程序,外部数据存储器地址范围为40H~47H,内部数据存储器地址范围为30H~37H。
MOVR3,#8
MOVR0,#40H
MOVR1,#30H
LOP1:MOVXA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR3,LOP1
16.试编写8字节外部程序存储器到内部数据RAM的传送程序,外部程序存储器地址为2040H~2047H,内部RAM地址为30H~37H。
参看15题答案(提示:外部程序存储器地址为16位地址:2040H~2047H,间接寻址采用DPTR)
17.试编程使内部RAM的20H~4FH单元的数据块按降序排列。
参看23题答案(提示:本题对20H~4FH单元(48个)数据降序排列)。
18.内部RAM的20H单元开始有一个数据块,以0DH为结束标志,试统计该数据块长度,将该数据块传送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。
MOVR0,#20H
MOVDPTR,#7E01H
LOP:MOVA,@R0
MOV60H,A
SUBBA,#0DH
JZLOP1
MOVX@DPTR,A
INCR3
INCR0
INCDPTR
AJMPLOP
LOP1:MOVDPTR,#7E00H
MOVA,R3
MOVX@DPTR,A
END
19.试编写一个用查表法查0~9字形7段码(假设表的首地址为TABLE)的子程序,调用子程序前,待查表的数据存放在累加器A中,子程序返回后,查表的结果也存放在累加器A中。
SQR1:MOVDPTR,#TABLE
MOVCA,@A+DPTR
RET
TABLE:DB0C0H,0F9H,0A4H,0B0H,99H;0~9的字形显示段码(LED共阳极。
DB92H,82H,F8H,80H,90H
20.内部RAM的DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。
MOVR0,#DATA
MOVR3,#0AH
MOVA,#0
LOP:ADDA,@R0
MOVR4,A
ADDCA,#0
MOVR5,A
INCR0
DJNZR3,LOP
MOVSUM,R4
MOVSUM+1,R5
END
21.内部RAM的DATA1和DATA2单元开始存放着两个等长的数据块,数据块的长度在LEN单元中。请编程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。
MOVR0,#DATA1
MOVR3,LEN
LOP:MOVA,@R0
CJNZA,DATA2,LOP1
INCR0
INCDATA2
DJNZR3,LOP
MOVA,#0FFH
MOVRESULT,A
AJMPLOP2
LOP1:MOVA,#0
MOVRESULT,A
LOP2:AJMPLOP2
END
22.有一输入设备,其端口地址为20H,要求在1秒钟时间内连续采样10次读取该端口数据,求其算术平均值,结果存放在内部RAM区20H单元。
MOVR0,#20H
MOVR2,#0
MOVA,#0
MOVR4,#0
LOP:MOVR3,#0AH
IN:ACALLDELAY
MOVXA,@R0
MOVR2,A
MOVA,R4
ADDA,R2
MOVR4,A
DJNZR3,IN
MOVB,#0AH
DIVAB
MOV20H,A
AJMPLOP
DELAY:MOVR5,#64H
LOP1:MOVR7,#0FFH
LOOP:NOP
NOP
DJNZR7,LOOP
DJNZR5,LOP1
RET
END延时时间为0.1s的子程序:
23.编写子程序,将内部RAM区以30H为起始地址的连续10个存储单元中的数据,按照从小到大的顺序排序,排序结果仍存放在原数据区。
采用冒泡法排序:
冒泡排序法的基本算法是:N个数排序,从数据存放单元的一端(如起始单元)开始,将相邻二个数依次进行比较,如果相邻两个数的大小次序和排序要求一致,则不改变它们的存放次序,否则相互交换两数位置,使其符合排序要求,这样逐次比较,直至将最小(降序)或最大(升序)的数移至最后。然后,再将n-1个数继续比较,重复上面操作,直至比较完毕。可采用双重循环实现冒泡法排序,外循环控制进行比较的次数,内循环实现依次比较交换数据。
程序如下:
ORGBLOCK
NEXT:
COMP:
LESS:
0000HEQU30H
MOVR7,#9HMOVA,R7MOV80H,AMOVR6,AMOVR0,#30HMOVA,@R0MOVR2,AINCR0CLRC
SUBBA,@R0JCLESSMOVA,R2XCHA,@R0DECR0MOV@R0,AINCR0DJNZR6,COMPMOVR0,#30HDEC80HMOVR6,80hDJNZR7,COMPRETEND
;设BLOCK为30H单元;设置外循环计数器
;设置外循环计数器;设置数据指针
;(R6)-1不等于0,转COMP继续内循环
第4章
1.MCS-51系列单片机能提供几个中断源、几个中断优先级?各个中断源的优先级怎样确
定?在同一优先级中,各个中断源的优先顺序怎样确定?
答:MCS-51系列单片机能提供5个中断源,2个中断优先级。各个中断源的优先级是由特殊功能寄存器IP来确定,IP中和各个中断源对应位为1时,此中断源为高优先级,否则为低优先级。在同一优先级中,各个中断源的优先顺序是由自然优先级来确定的。
2.简述MCS-51系列单片机的中断响应过程。
答:MCS-51系列单片机的中断响应过程是按照以下顺序执行的:开中断-----中断请求------中断判断-------中断响应-------中断返回。
3.MCS-51系列单片机的外部中断有哪两种触发方式?如何设置?对外部中断源的中断请求信号有何要求?
答:MCS-51系列单片机的外部中断有电平触发和边沿触发两种方式。是由特殊功能寄存器TCON中IT0,IT1的状态确定的,如:IT0为1时外部中断0为边沿触发方式,当INT0外部引脚出现下降沿时向CPU提出中断请求,否则为电平触发方式,当INT0外部引脚出现低电
平时向CPU提出中断请求。
4.MCS-51单片机中断响应时间是否固定?为什么?
答:MCS-51单片机中断响应时间不固定,因为当中断源向CPU提出中断请求时,CPU正在执行的指令的指令周期是不一样的。
5.MCS-51单片机如果扩展6个中断源,可采用哪些方法?如何确定它们的优先级?
答:一般可采取中断加查询方式,软件先查询到的为高优先级,最后查询到的为低优先级。6.当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求?
答:当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,当新中断源中断级别比正在执行中断源的中断级别高时可响应新的中断请求,否则不能响应新的中断请求。7.8051单片机有5个中断源,但只能设置两个中断优先级,因此,在中断优先级安排上受到一定的限制。问以下几种中断优先级顺序的安排(级别由高到低)是否可能?如可能,则应如何设置中断源的中断级别?否则,请叙述不可能的理由。(1)定时器0,定时器1,外中断0,外中断1,串行口中断。可能。其中:定时器0,定时器1为高优先级。
(2)串行口中断,外中断0,定时器0,外中断1,定时器1。可能。其中:串行口中断为高优先级。
(3)外中断0,定时器1,外中断1,定时器0,串行口中断。不可能。
(4)外中断0,外中断1,串行口中断,定时器0,定时器1。可能。其中:外中断0,外中断1,串行口中断为高优先级。(5)串行口中断,定时器0,外中断0,外中断1,定时器1。不可能。
(6)外中断0,外中断1,定时器0,串行口中断,定时器1。不可能。
(7)外中断0,定时器1,定时器0,外中断1,串行口中断。可能。其中:外中断0,定时器1为高优先级。
第5章
1.8051定时器/计数器有哪几种工作模式?各有什么特点?
答:8051定时器/计数器有0,1,2,3四种工作模式。模式0为13位1定时器/计数器,模式1为16位1定时器/计数器,模式2为自动赋初值的8位定时器/计数器,模式3可以增加一个8位定时器(T1没有模式3)。2.8051定时器作定时和计数时,其计数脉冲分别由谁提供?
答:8051定时器作定时器时,输入的记数脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器可看作是对单片机机器周期的计数器。8051定时器作计数器时,则对外部事件
进行计数。
3.8051定时器的门控信号GATE为1时,定时器如何启动?
答:8051定时器的门控信号GATE为1时,只有INT0(或INT1)引脚为高电平且TR0(或TR1)置1时,相应的T0或T1才能选通工作。
4.定时器/计数器0已预置为156,且选定用于模式2的计数方式,现在T0引脚上输入周期为1ms的脉冲,问:
(1)此时定时器/计数器0的实际用途是什么?(2)在什么情况下,定时器/计数器0溢出?答:(1)此时定时器/计数器0的实际用途是0。1S脉冲信号发生器。
(2)当T0每记数100次后定时器/计数器0溢出。5.设fosc=12MHz,定时器0的初始化程序和中断服务程序如下:
MAIN:
MOVMOVMOVSETB
…
TH0,#9DHTL0,#0D0HTMOD,#01HTR0
中断服务程序:
MOVTH0,#9DHMOVTL0,#0D0H
…RETI
问:(1)该定时器工作于什么方式?
(2)相应的定时时间或计数值是多少?答:(1)该定时器以模式1工作于定时方式。
(2)相应的定时时间为25。136ms.
6.8051单片机的fosc=6MHz,如果要求定时时间分别位0.1ms和5ms,当T0工作在模式0、模式1和模式2时,分别求出定时器的初值。答:(1)定时时间分别位0.1ms时:模式0初值为8142、模式1初值为65486,模式2初值206。
(2)定时时间分别位5ms时:模式0初值为5692、模式1初值为63036,模式2此时定时时间不够。
7.以定时器1进行外部事件计数,每计数1000个脉冲后,定时器1转为定时工作方式。定时10ms后,又转为计数方式,如此循环不止。设fosc=6MHz,试用模式1编程。解:先确定T1作为计数器时初值为:64536(0FC68H)
T1作为定时器时初值为:60536(0EC78H)程序:SETBTR1
LOOP:MOVTMOD,#50H
MOVTH1,#0FCHMOVTL1,#68H
AA:JBCTF1,AA
MOVTMOD,#10H
BB:
MOVTH1,#0E0HMOVTL1,#78HJBCTF1,BBSJMPLOOPEND
8.已知8051单片机的fosc=6MHz,试利用T0和P1.0输出矩形波。矩形波高电平宽100μs,低电平宽300μs。
解:先确定T0作为定时器工作于模式2时初值为:高电平为50,低电平为150。
采用中断方式编程。
ORG0000HAJMPMAINORG001BHAJMPTIM0ORG0030H
MAIN:MOVSP,#30H;设置栈底
MOVTMOD,#02HMOVTL0,#50MOVIE,#82HSETBP1.0SETBTR0SJMP$
ORGJNBCLRMOVRETISETBMOVRETIEND
0100HP1.0,AAP1.0
TL0,#150P1.0TL0,#50
TIM0:
AA:
9.设fosc=12MHz,试编写一段程序,功能为:对定时器T0初始化,使之工作在模式2,产生200μs定时,并用查询T0溢出标志的方法,控制P1.1输出周期为2ms的方波。解:先确定T0作为定时器时初值为:56
程序:MOVTMOD,#02H
MOVTL0,#56MOVTH0,#56MOVR7,#5;设置循环次数SETBTR0AA:JBCTF0,AA
DJNZR7,AACPLP1.1MOVR7,#5SJMPAAEND10.已知8051单片机系统时钟频率为6MHz,利用其定时器测量某正脉冲宽度时,采用哪种
工作模式可以获得最大的量程?能够测量的最大脉宽是多少?
答:首先设置TMOD中GATE为1,以定时方式工作在模式1,外部正脉冲从外部中断引脚引入,可获得最大的量程。
能够测量的最大脉宽为:131ms.
第6章
1.异步通信和同步通信的主要区别是什么?MCS-51串行口有没有同步通信功能?答案:
异步通信因为每帧数据都有起始位和停止位,所以传送数据的速率受到限制。但异步通信不需要传送同步脉冲,字符帧的长度不受限制,对硬件要求较低,因而在数据传送量不很大。同步通信一次可以连续传送几个数据,每个数据不需起始位和停止位,数据之间不留间隙,因而数据传输速率高于异步通信。但同步通信要求用准确的时钟来实现发送端与接收端之间的严格同步。
MCS-51串行口有同步通信功能。2.解释下列概念:
(1)并行通信、串行通信。(2)波特率。
(3)单工、半双工、全双工。(4)奇偶校验。答案:
(1)并行通信:数据的各位同时进行传送。其特点是传送速度快、效率高,数据有多少位,就需要有多少根传输线。当数据位数较多和传送距离较远时,就会导致通信线路成本提高,因此它适合于短距离传输。
串行通信:数据一位一位地按顺序进行传送。其特点是只需一对传输线就可实现通信,当传输的数据较多、距离较远时,它可以显著减少传输线,降低通信成本,但是串行传送的速度慢。
(2)波特率:每秒钟传送的二进制数码的位数称为波特率(也称比特数),单位是bps(bitpersecond),即位/秒。
(3)单工:只允许数据向一个方向传送,即一方只能发送,另一方只能接收。
半双工:允许数据双向传送,但由于只有一根传输线,在同一时刻只能一方发送,另一方接收。
全双工:允许数据同时双向传送,由于有两根传输线,在A站将数据发送到B站的同时,也允许B站将数据发送到A站。
(4)奇偶校验:为保证通信质量,需要对传送的数据进行校验。对于异步通信,常用的校验方法是奇偶校验法。
采用奇偶校验法,发送时在每个字符(或字节)之后附加一位校验位,这个校验位可以是“0”或“1”,以便使校验位和所发送的字符(或字节)中“1”的个数为奇数——称为奇校验,或为偶数——称为偶校验。接收时,检查所接收的字符(或字节)连同奇偶校验位中“1”的个数是否符合规定。若不符合,就证明传送数据受到干扰发生了变化,CPU可进行相应处理。3.MCS-51串行口控制寄存器SCON中SM2、TB8、RB8有何作用?主要在哪几种方式下使用?答案:
SM2:多机通信控制位,主要在方式1、2、3下使用;TB8:存放发送数据的第9位,主要在方式2、3下使用;
RB8:存放接收数据的第9位或停止位,主要在方式1、2、3下使用。4.试分析比较MCS-51串行口在四种工作方式下发送和接收数据的基本条件和波特率的产生方法。答案:
发送数据的基本条件:
方式0、1、2、3:CPU执行一条将数据写入发送缓冲器SBUF的指令;接收数据的基本条件:
方式0:用软件使REN=1(同时RI=0);方式1:用软件使REN=1,一帧数据接收完毕后,必须同时满足以下两个条件:①RI=0;②SM2=0或接收到的停止位为1,这次接收才真正有效,将8位数据送入SBUF,停止位送RB8,置位RI。否则,这次接收到的数据将因不能装入SBUF而丢失。方式2、3:软件使REN=1,同时满足以下两个条件:①RI=0;②SM2=0或接收到的第9位数据为1(SM2=1),则这次接收有效,8位数据装入SBUF,第9位数据装入RB8,并由硬件置位RI。否则,接收的这一帧数据将丢失。波特率的产生方法:
在方式0下,串行口的波特率是固定的,即波特率=fosc/12;在方式1、3下,串行口波特
SMOD
率由定时器T1的溢出率和SMOD值同时决定。相应公式为:波特率=2×T1溢出率/32;在方式2下,串行口的波特率可由PCON中的SMOD位控制:若使SMOD=0,则所选波特率为fosc/64;若使SMOD=1,则波特率为fosc/32。即
×f
osc
64
5.为何T1用作串行口波特率发生器时常用模式2?若fosc=6MHz,试求出T1在模式2下可能产生的波特率的变化范围。
答案:定时器T1作为波特率发生器可工作于模式0、模式1和模式2。其中模式2在T1溢出后可自动装入时间常数,避免了重装参数,因而在实际应用中除非波特率很低,一般都采用模式2。
若fosc=6MHz,T1在模式2下可能产生的波特率的变化范围为:61.04bps~15625bps。6.简述多机通信原理。
答案:当主机选中与其通信的从机后,只有该从机能够与主机通信,其他从机不能与主机进行数据交换,而只能准备接收主机发来的地址帧。上述要求是通过SCON寄存器中的SM2和TB8来实现的。当主机发送地址帧时使TB8=1,发送数据帧时使TB8=0,TB8是发送的一帧数据的第9位,从机接收后将第9位数据作为RB8,这样就知道主机发来的这一帧数据是地址还是数据。另外,当一台从机的SM2=0时,可以接收地址帧或数据帧,而当SM2=1时只能接收地址帧,这就能实现主机与所选从机之间的单独通信。
7.试用8051串行口扩展I/O口,控制16个发光二极管自右向左以一定速度轮流发光,画出电路并编写程序。答案:电路如下:
波特率=
2SMOD
程序如下:
ORG0000HAJMPMAINORG0023HAJMPSBSORG2000HMOVSCON,#00HMOVA,#01HCLRP1.0CLRP1.1MOVSBUF,ASJMPLOOP
INCR0CJNER0,#11H,DSPMOVR0,#01HCJNER0,#08H,DSPRSETBP1.1SETBP1.0ACALLDELYCLRTIRLACLRP1.0CLRP1.1MOVSBUF,ARETIMOVR2,#05HMOVR3,#0C8HMOVR4,#0F8HNOPDJNZR4,DELY2DJNZR3,DELY1DJNZR2,DELY0RETEND
;转向串行口中断服务程序;串行口设置为方式0
;最右边一位发光二极管先亮
;关闭并行输出,熄灭显示;开始串行输出;等待中断
MAIN:
LOOP:SBS:
DSP:DSPR:
;启动高8位并行输出;启动低8位并行输出;显示延迟1s;清发送中断标志;准备点亮下一位
;关闭并行输出,熄灭显示;串行输出
;延时1s子程序(fosc=6MHz)
ZDFH:DELY:DELY0:DELY1:DELY2:
8.试设计一个8051单片机的双机通信系统,串行口工作在方式1,波特率为2400bps,编程将甲机片内RAM中40H~4FH的数据块通过串行口传送到乙机片内RAM的40H~4FH单元中。答案:
双方约定的通信协议如下:
甲机先发送请求乙机接收信号“0AAH”,乙机收到该信号后,若为准备好状态,一个则发送数据“0BBH”作为应答信号,表示同意接收。当甲机发送完16个字节后,再向乙机发送一个累加校验和。校验和是针对数据块进行的,即在数据发送时,发送方对块中的数据简单求和,产生一个单字节校验字符(校验和),附加到数据块结尾。在数据接收时,接收方每接
收一个数据也计算一次校验和;接收完数据块后,再接收甲机发送的校验和,并将接收到的校验和与乙机求出的校验和进行比较,向甲机发送一个状态字,表示正确(00H)或出错(0FFH),出错则要求甲机重发。甲机收到收到乙机发送的接收正确应答信号(00H)后,即结束发送,否则,就重发一次数据。甲机采用查询方式进行数据发送,乙机采用中断方式进行数据接收。双方约定传输波特率为2400bps,两机主频均为11.059MHz,双机串行口都工作于方式1,查表6-2可知SMOD=0,定时器T1采用工作模式2,初值为F4H。甲机发送子程序:
ORGSEND:
MOVMOVMOVSETBMOVMOVTLLS:MOVWFS1:JBCSJMPRYD1:JBCSJMPRYD2:
MOVXRLJNZSDD1:
MOVMOVMOVSDD2:
MOVMOVADDMOVINCWFS2:JBCSJMPSDD3:DJNZMOVWFS3:JBCSJMPRYD3:JBCSJMPRYD4:
MOVJNZRET乙机接收子程序:
ORGRECV:
MOVMOVMOVSETBMOVMOV
2000H
TMOD,#20HTL1,#0F4HTH1,#0F4HTR1
SCON,#50HPCON,#00HSBUF,#0AAH
TI,RYD1WFS1
RI,RYD2RYD1A,SBUFA,#0BBHTLLSR0,#40HR1,#10HR2,#00HSBUF,@R0A,R2A,@R0R2,AR0
TI,SDD3WFS2R1,SDD2SBUF,R2TI,RYD3WFS3RI,RYD4RYD3A,SBUFSDD1
2000H
TMOD,#20HTL1,#0F4HTH1,#0F4HTR1
SCON,#50HPCON,#00H
;定时器1设为模式2;置定时器初值;启动T1
;设串行口为方式2;SMOD=0
;
发送请求接收信号
;等待发送
;等待乙机回答;接收应答信号
;乙机未准备好,继续联络;首地址40H→R0;数据个数→R1;清校验和寄存器;发送一个数据;求校验和;保存校验和
;等待发送;数据块是否发送完;发送校验和
;等待乙机回答
;回答出错则重发
;定时器1设为模式2;置定时器初值;启动T1
;设串行口为方式2;
SMOD=0
MOVR0,#40HMOVR1,#10HMOV50H,#00HSETB7FHSETB7EHSETBESSETBEA
LOOP:SJMPLOOP
中断服务子程序:
CLREACLRRIJB7FH,RCMDJB7EH,DATAMOVA,SBUFCJNEA,50H,ERRMOVA,#00HMOVSBUF,A
WFS1:JNBTI,WFS1
CLRTISJMPRETN
ERR:MOVA,#0FFH
MOVSBUF,A
WFS2:JNBTI,WFS2
CLRTISJMPAGAN
RCMD:MOVA,SBUF
XRLA,#0AAHJZTYDXSJMPRETN
TYDX:MOVSBUF,#0BBHWFS3:JNBTI,WFS3
CLRTICLR7FHSJMPRETN
DATA:MOVA,SBUF
MOVR0,AINCDPTRADDA,50HMOV50H,ADJNZR1,RETNCLR7EHSJMPRETN
AGAN:SETB7FH
SETB7EHMOVDPTR,#2000HMOVR1,#10MOV50H,#00H
RETN:SETBEA
RETI
;首地址40H→R0;数据个数→R1;清校验和寄存器;标志位初始置1
;允许接收中断;开中断;等待中断
;;;;
;清中断
是请求接收信号吗是数据块吗接收校验和
判断发送是否正确
;正确,发00H
;等待发送
;出错,发0FFH
;等待发送
;接收甲机请求信号
;发送应答信号0BBH
;等待发送
;接收数据
;求校验和;保存校验和
;数据接收完后清数据标志位
;恢复标志位
;首地址2000H→DPTR;数据个数→R1
;清校验和寄存器;开中断
9.8051以方式2进行串行通信,假定波特率为1200bps,第9位作奇偶校验位,以中断方式发送。请编写程序。答案:
主程序:
MAIN:
ORGMOVMOVMOVMOVMOVSETBSETBSJMP
2000H
SCON,#80HPCON,#00HR0,#30HR1,#50HR2,#20ESEALOOP
;将串行口设置为方式2,REN=1;SMOD=0
;发送数据区首地址→R0;接收数据区首地址→R1;置发送数据个数→R2;开中断;等待中断
LOOP:
中断服务子程序:
ORG0023HAJMPSOUTORG0200H
SOUT:CLRTI
DJNZR2,LOOP1SJMPRR1
LOOP1:MOVA,@R0
MOVC,PSW.0MOVTB8,CMOVSBUF,AINCR0
RR1:RETI
;转至中断服务程序;清发送中断标志
;数据未发送完,继续发送;发送完返回
;取发送数据到A
;发送数据
;指向下一个数据
10.8051以方式3进行串行通信,假定波特率为1200bps,第9位作奇偶验位,以查询方式接收。请编写程序。答案:
ORG2000H
RECV:MOVTMOD,#20H;定时器1设为模式2
MOVTL1,#0E8HMOVTH1,#0E8H;置定时器初值SETBTR1;启动T1MOVSCON,#0D0H;将串行口设置为方式3,REN=1MOVPCON,#00H;SMOD=0MOVR1,#20H;接收数据区首地址→R1MOVR2,#16;置发送数据个数→R2
WAIT:JBCRI,PRI;等待接收到数据
SJMPWAIT
PRI:MOVA,SBUF;读接收数据
JNBPSW.0,PZEO;P=0则跳转JNBRB8,ERR;P=1,RB8=0转至出错SJMPRIGHT;P=1,RB8=1转至正确
PZEO:JBRB8,ERR;P=0,RB8=1转至出错RIGHT:MOV@R1,A;存放数据
INCR1;指向下一个存储单元DJNZR2,WAIT;未接收完则继续接收CLRF0;F0=0RET
ERR:CLRREN
SETBF0;置F0=1RET
11.RS-232C总线标准是如何定义其逻辑电平的?实际应用中可以将MCS-51单片机串行口和PC机的串行口直接相连吗?为什么?
答案:
RS-232C采用负逻辑,即逻辑1用-5V~-15V表示,逻辑0用+5V~+15V表示。
PC机配置的是RS-232C标准接口,与MCS-51单片机输入、输出电平不兼容。因此实际应用中不能将MCS-51单片机串行口和PC机的串行口直接相连。
12.为什么RS-485总线比RS-232C总线具有更高的通信速率和更远的通信距离?答案:
RS-232C由于发送器和接收器之间具有公共信号地,不可能使用双端信号,因此共模噪声会耦合到信号系统中,从而限制了RS-232C的信号传输速率和通信距离。而RS-485总线无论发送还是接收数据,均用两条线传送双端(差分)信号,因而大大提高了通信速率和通信距离。
第7章
1.通常8031给用户提供的I/O口有哪几个?为什么?答案:
MCS-51系列单片机虽然有4个8位I/O口P0、P1、P2、P3,但4个I/O口实际应用时,并不能全部留给用户作系统的I/O口。因为当单片机在外部扩展了程序存储器、数据存储器时,就要用P0和P2口作为地址/数据总线,而留给用户使用的I/O口只有P1口和一部分P3口。2.在MCS-51单片机应用系统中,外接程序存储器和数据存储器的地址空间允许重叠而不会发生冲突,为什么?外部I/O接口地址是否允许与存储器地址重叠?为什么?答案:
因为单片机访问外部程序存储器与访问外部数据存储器(包括外部I/O口)时,会分别产生与RD/两类不同的控制信号,因此外接程序存储器和数据存储器的地址空间允许重叠而不会发生冲突。
外部扩展I/O口占用数据存储器地址空间,与外部数据存储器统一编址,单片机用访问外部数据存储器的指令来访问外部扩展I/O口。因此外部I/O接口地址是否允许与程序存储器地址重叠不允许与数据数据存储器地址重叠。
3.外部存储器的片选方式有几种?各有哪些特点?答案:
外部存储器的片选方式有线选法和译码法两种。线选法的特点是连接简单,不必专门设计逻辑电路,但是各个扩展芯片占有的空间地址不连续,因而地址空间利用率低。适用于扩展地址空间容量不太大的场合。译码法的特点是在P2口未被扩展芯片地址线占用的地址总线数量相同的情况下,可以比线选法扩展更多的芯片,而且可以使各个扩展芯片占有的空间地址连续,因而适用于扩展芯片数量多、地址空间容量大的复杂系统。4.简述MCS-51单片机CPU访问外部扩展程序存储器的过程。答案:
P0口作为地址/数据复用的双向三态总线,用于输出程序存储器的低8位地址或输入指令,P2口具有输出锁存功能,用于输出程序存储器的高8位地址。当ALE有效(高电平)时,高8位地址从P2口输出,低8位地址从P0口输出,在ALE的下降沿把P0口输出的低8位地址锁存起来,然后在PSEN有效(低电平)期间,选通外部程序存储器,将相应单元的数据送到P0口,CPU在PSEN上升沿完成对P0口数据的采样。5.简述MCS-51单片机CPU访问外部扩展数据存储器的过程。答案:
第一个机器周期是从外部程序存储器读取MOVX指令操作码,第二个机器周期才是执行MOVX指令访问外部数据存储器。在该周期中,若是读操作,则RD信号有效(低电平),P0口变为输入方式,被地址信号选通的外部RAM某个单元中的数据通过P0口输入CPU;若是写操作,则WR信号有效(低电平),P0口变为输出方式,CPU内部数据通过P0口写入地址信号选通的外部RAM的某个单元中。
6.现要求为8031扩展2片2732作为外部程序存储器,试画出电路图,并指出各芯片的地址范围。答案:
电路图如下:
各芯片的地址范围:2732(1):0B800H~0BFFFH;2732(2):7800H~7FFFH。
7.现要求为8031外扩1片2864A,兼作程序存储器和数据存储器,请画出硬件连接图。答案:
电路图如下:
8.设某一8031单片机系统,拟扩展2片2764EPROM芯片和2片6264SRAM芯片,试画出电路图,并说明存储器地址分配情况。答案:
电路图如下:
存储器地址分配:
2764(1):C000H~DFFFH;2764(2):A000H~BFFFH;6264(1):C000H~DFFFH;6264(2):A000H~BFFFH。
9.试用1片74LS244和1片74LS273为8031扩展8位输入端口和8位输出端口,8位输入端口各接1个开关,8位输出端口各接1个发光二极管,要求按下1个开关,相对应的发光二极管发光。试画出硬件连接图并编制程序。答案:
电路图如下:
程序如下:
STAR:
ORGMOVMOVMOVMOVXSJMP
2000H
DPTR,#0EFFFHA,@DPTR
DPTR,#0FEFFH@DPTR,ASTAR
;读按键值
;驱动相应发光二极管发光
END
10.一个8031应用系统扩展了1片8155,晶振为12MHz,具有上电复位功能,P2.1~P2.7作为I/O口线使用,8155的PA口、PB口为输入口,PC口为输出口。试画出该系统的逻辑图,并编写初始化程序。答案:
系统逻辑图如下:
初始化程序:
MOVDPTR,#0FFF8HMOVA,#0CHMOVXDPTR,A
11.8155TIN端输入脉冲频率为1MHz,请编写能在TOUT引脚输出周期为8ms方波的程序。答案:
程序如下:
MOVDPTR,#7F04H;指向定时器低8位MOVA,#40HMOVX@DPTR,A;计数常数低8位装入定时器INCDPTR;指向定时器高8位MOVA,#5FH;设定时器输出方式为连续方波输出MOVX@DPTR,A;装入定时器高8位MOVDPTR,#7F00H;指向命令/状态口MOVA,#0C2H;命令字设定PA口为基本输入方式,
PB口为基本输出方式,并启动定时器
MOVX@DPTR,A
12.现要求8155的A口基本输入,B口、C口基本输出,启动定时器工作,输出连续方波,请编写8155的初始化程序。答案:
程序如下:
MOVDPTR,#data1;指向定时器低8位MOVA,#data2MOVX@DPTR,A;计数常数低8位装入定时器INCDPTR;指向定时器高8位MOVA,#40H;设定时器输出方式为连续方波输出MOVX@DPTR,A;装入定时器高8位MOVDPTR,#data3;指向命令/状态口MOVA,#0CEH;命令字设定PA口为基本输入方式,
PB、PC口为基本输出方式,并启动定时器
MOVX@DPTR,A
13.试设计一个8031应用系统,使该系统扩展1片27256、1片6264和1片8155。请画出系统电路图,并分别写出各芯片的地址。答案:
电路图如下:
各芯片的地址如下:27256:0000H~7FFFH;6264:A000H~BFFFH;
8155:RAM地址:7E00H~7EFFH
命令/状态口:7F00H
PA口:7F01HPB口:7F02HPC口:7F03H
定时器低8位:7F04H定时器高8位:7F05H
14.试用6264为8051单片机扩展24K数据存储器,画出系统电路图,并分别写出各芯片的地址。答案:
电路图如下:
各芯片的地址如下:6264(1):C000H~DFFFH;6264(2):A000H~BFFFH;6264(3):6000H~7FFFH。
15.试用2764为8031单片机扩展64K程序存储器,画出系统电路图,并分别写出各芯片的地址。答案:
电路图如下:
各芯片的地址如下:2764(1):0000H~1FFFH;2764(2):2000H~3FFFH;2764(3):4000H~5FFFH;2764(4):6000H~7FFFH;2764(5):8000H~9FFFH;2764(6):0A000H~0BFFFH;2764(7):0C000H~0DFFFH;2764(8):0E000H~0FFFFH;
第8章
1.简述键盘扫描的主要思路。答案:
键盘扫描的主要思路:首先确定是否有键按下,消除抖动,若有键按下,输出逐行或列的扫描字,读取列或行的状态,确定按键键值,然后再判断按键是否释放,若释放,即可返回。2.简述软件消除键盘抖动的原理。
答案:
软件消除键盘抖动的原理:当CPU发现有键按下的情况下,为了防止是机械抖动的误动作,可以采用软件延时10ms,然后再次检测按键是否仍然为闭合状态,若仍然闭合,则确定有键按下,否则就是键盘抖动,不予理睬。
3.什么叫LED的动态显示和静态显示。答案:
静态显示形式,即七段LED数码管在显示某一个字符时,相应的段(发光二极管)恒定的导通或截至,直至换显其他字符为止。
动态显示是将所有数码管的段码线对应并联在一起,由一个8位的输出口控制,每位数码管的公共端(称位选线)分别由一位I/O口线控制,以实现各位的分时选通。
4.要求利用8031的P1口扩展一个2×2行列式键盘电路,画出电路图,并根据所绘电路编写键扫描子程序。答案:
设行线H1~H2连接到51单片机P1口的P1.0~P1.1,列线L1~L2连接到P1口的P1.4~P1.5。电路图如下:
键扫描子程序:KEY:MOVP1,#0FH;列输出低电平,行输出高电平
MOVA,P1;读P1口状态ANLA,#0FH;保留行状态CJNEA,#0FH,KEY0;有键按下转KEY0SJMPKEY;无键按下等待,转键检测
KEY0:LCALLDELAY10;调10mS延时取抖
MOVA,P1ANLA,#0FHCJNEA,#0FH,KEY1;不是抖动转键值判断SJMPKEY;是抖动到键检测
KEY1:MOVP1,#11101111B;第一列键被按下判断
MOVA,P1ANLA,#0FHCJNEA,#0FH,KEYC1;第一列键被按下转KEYC1处理MOVP1,#11011111B
;第二列键被按下判断
MOVA,P1ANLA,#0FHCJNEA,#0FH,KEYC2;第二列键被按下转KEYC2处理LJMPKEY;均不是转到键检测
KEYC1:MOVA,P1;读键值键值处理
JBE0H,KEYC11LCALLK1;K1键处理SJMPFANH
KEYC11:LCALLK3;K3键处理
SJMPFANH
KEYC2:MOVA,P1;读键值键值处理
JBE0H,KEYC21LCALLK2;K2键处理SJMPFANH
KEYC21:LCALLK4;K4键处理FANH:RET
5.请在图8-1的基础上,设计一个以中断方式工作的开关式键盘,并编写其中断键处理程序。答案:
电路图如下:
中断键处理程序:
KINT:
KEY1:
LCALLMOVANLCJNESJMPMOVJBLCALLSJMP
DELAY10;调10mS延时取抖A,P1A,#0FH
A,#0FH,KEY1;不是抖动转键值判断FANH;是抖动返回A,P1;读键值键值处理0E0H,KEY2K1;K1键处理FANH
KEY2:
KEY3:
KEY4:FANH:
JBLCALLSJMPJNBLCALLSJMPLCALLRETI
0E1H,KEY3K2FANH
0E2H,KEY4K3FANHK4
;K2键处理
;K3键处理;K4键处理
6.矩阵式键盘如何实现中断方式?请在图8-4的基础上设计中断式键盘,并编写相应中断处理子程序。答案:
电路图如下:
中断处理子程序:KINT:ACALLDELAY10
ACALLKS1JNZLK2AJMPKEY_1
LK2:MOVR2,#0FEH
MOVR4,#00H
LK4:MOVDPTR,#7F01H
MOVA,R2MOVX@DPTR,AINCDPTRINCDPTRMOVXA,@DPTRJBACC.0,LONEMOVA,#00HAJMPLKP
LONE:JBACC.1,LTWO
;延时消抖
;再次判断有无键按下
;确实有键按下,转列扫描;是键抖动,重新扫描
;首列扫描字;首列号
;列扫描字送PA口;指向PC口;读入行状态
;第0行有键按下?;有键按下,行号送A;转键值处理
;第1
行有键按下?
LTWO:
LTHR:
LKP:
LK3:
NEXT:
KND:
KS1:
DELAY12:
TM:
TM6:MOVA,#08H;有键按下,行号送AAJMPLKP;转键值处理JBACC.2,LTHR;第2行有键按下?MOVA,#10H;有键按下,行号送AAJMPLKP;转键值处理JBACC.3,NEXT;第3行有键按下?MOVA,#18H;有键按下,行号送AADDA,R4;键值处理PUSHACCACALLKS1;判断按键是否释放JNZLK3POPACCRETINCR4;列号加1MOVA,R2;判断是否8列扫描完毕JNBACC.7,KND;扫描完,返回RLA;转下列扫描MOVR2,AAJMPLK4AJMPKEY_1MOVDPTR,#7F01H;判断有无键按下子程序MOVA,#00HMOVX@DPTR,AINCDPTRINCDPTRMOVXA,@DPTRCPLAANLA,#0FHRETMOVR7,#18H;延时12ms子程序MOVR6,#0FFHDJNZR6,TM6
DJNZR7,TM
RETI
7.状态或数码显示时,对LED的驱动可采用低电平驱动,也可以采用高电平驱动,二者各有什么特点?
答案:
高电平驱动要采用共阴极数码管,必须外接上拉电阻;低电平驱动要采用共阳极数码管,电源效率相对较高。
8.用DAC0832进行D/A转换时,当输出电压的范围在0~5V时,每变化一个二进制数其输出电压跳变约20mV,即输出是锯齿状的,采取何种措施可使输出信号比较平滑?答案:
两种方法:(1)可以计算移动平均值;(2)可以设计滤波器的办法。
9.当系统的主频为6MHz时,请计算图8-18中DAC0832产生锯齿波信号的周期。答案:
T=2μs×8×256=4096μs
10.请编写图8-18中用DAC0832产生三角波的应用程序。
答案:
START:MOVDPTR,#7FFFH
MOVA,#00H
LOOP:MOVX@DPTR,A
INCA
CJNEA,#0FFH,L1
L2:DECA
MOVX@DPTR,A
CJNEA,#00H,L2
L1:AJMPLOOP
11.对图8-25的A/D转换电路,若采用中断方式,请编写相应程序。
答案:
在硬件电路上,应当将EOC引脚接到单片机的外部中断引脚上面,如INT1;
初始化程序:
MAIN:SETB
SETB
SETB
MOV
MOV
MOV
MOVX
SJMPIT1EAEX1R1,#dataDPTR,#7FF8HR7,#08H@DPTR,A$LOOP:;R1指向数据存储区首地址;DPTR指向通道0;通道数8;启动A/D转换
;中断服务程序:
PINT1:MOVX
MOV
INC
INC
RETIA,@DPTR@R1,ADPTRR1;转换结果读入累加器A;存储数据;修改指针
12.当图8-25的ADC0809对8路模拟信号进行A/D转换时,请编写用查询方式工作的采样程序,8路采样值存放在30H~37H单元。
答案:
MAIN:MOVR1,#30H
MOVDPTR,#7FF8H
LOOP:
DELAY:MOVMOVXMOVNOP
NOP
NOP
NOP
DJNZ
MOVX
MOV
INC
INC
DJNZ
ENDR7,#08H@DPTR,AR6,#0AHR6,DELAYA,@DPTR@R1,ADPTRR1R7,LOOP
第九章C-51
1.答案
sbitsfrsfr16bit
2.答案
code只读存储区
data、idata、bdata快速读写存储区
xdatapdata随机读写存储区
3.答案
1.在中断函数中不能使用参数。
2.在中断函数中不能存在返回值。
3.不能对中断函数产生明显的调用。
4.答案
#include
#include
unsignedcharlightdata[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
voiddelay()
{
unsignedintm;
for(m=0;m
}
intmain(void)
{
inti;
while(1)
{
for(i=0;i
{
P1=lightdata[i];
delay();
}
}
return0;
}
5.答案
#include
#include
sbitCLK=P1^0;
unsignedcharcount;
voidInitTimer()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
}
voidTimer0(void)interrupt1using1
{
TR0=0;
TH0=0x3c;
TL0=0xB0;
if(count
{
count++;
}
else
{
count=0;
CLK=~CLK;
}
TR0=1;
}
intmain(void)
{
count=0;
InitTimer();
while(1);
return0;
}
第10章
1、那些场合适合使用单片机系统?
参考答案:
单片机系统的使用有一个上下限的问题。下限方面,过于简单的控制需求而又没有数字化的必要时完全可以使用普通的电子手段解决而不一定非要使用单片机。上限方面,单片机作为微控制器不太适合做大吞吐量的计算和数据处理工作,比如图像处理,音视频的编解码等。但是对于以流程控制为主的快速实时控制系统,就显得非常合适。对于应用虽然简单但是有数字化需求的场合,比如简单的温度采集后数字远传的场合也比较合适。
2、从事单片机系统开发需要具备哪些基础知识
参考答案:
从事单片机开发,在目前的国情下,一般要求开发者具有很扎实的单片机mcu本身的应用知识,外围电路设计有要求有数字电路或CPLD\FPGA设计能力,进而需要一定的模拟电路、传感器电路、数字通信知识,各种元器件的使用经验,甚至可能还要有各种机械设计,外观设计加上目标系统的工艺要求等综合性的广泛的知识。
3、单片机系统分析中自顶向下法和自下向上法各有什么优缺点?
参考答案:
自顶向下法具有通观全局的优势,可以合理的安排系统的各个子系统之间的功能划分与相互支撑关系。可以有较好的开发节奏和开发周期的控制。在有经验的系统分析师的带领下可以实现非常理想的开发效果。但是,一旦设计需求发生改变——这在相互之间有行业差异的开发者和需求者之间经常发生——就需要重新从源头改变设计和调整进度,对于有较大硬件成本开销的控制系统这就有可能是灾难性的。
自下向上法,相当于先准备好建材再盖高楼的思路。先进行底层硬件设备、器件驱动程序的开发,再一步步从纯技术的角度完善这些低层和中层软件。硬件则由一个经过调试的子系统组装而成。最后可以专注的对付应用的逻辑层问题。但是这样一来,往往工期会被拖长。而且也会产生一些可能从不会被调用的程序片段。由于缺乏统一调度,各个工种之间的时间安排可能会有麻烦而产生浪费。
4、从本节实例分析部分来看,单片机开发中,用到的单片机本身的知识量占整个实用系统
开发的总知识量的比重如何,有何感受?
参考答案:
一个事实是,在很多单片机项目开发工作中,由于单片机本身的知识是一个有限的闭集,而开发工作所要面临的挑战却是丰富多彩,涉及到人类社会和科学范畴的方方面面。所以在开发中单片机知识本身的比重实际上并不大。更多的倒是对实际控制对象的深刻认识。认识的越深刻,越可能设计出出色的产品。这就需要我们不仅掌握好单片机技术本身还要广泛的培养自己的兴趣与能力。