单片机原理及应用试题

《单片机原理及应用》习题参考答案
1. 为什么计算机要采用二进制数?学习十六进制数的目的是什么?
在计算机中,由于所采用的电子逻辑器件仅能存储和识别两种状态的特点,计算机内部一切信息存储、处理和传送均采用二进制数的形式。可以说,二进制数是计算机硬件能直接识别并进行处理的惟一形式。十六进制数可以简化表示二进制数。
2.什么是总线?总线主要有哪几部分组成?各部分的作用是什么?
总线是连接计算机各部件之间的一组公共的信号线。一般情况下,可分为系统总线和外总线。
系统总线应包括:
地址总线(ab)
控制总线(cb)
数据总线(db)
地址总线(ab):cpu根据指令的功能需要访问某一存储器单元或外部设备时,其地址信息由地址总线输出,然后经地址译码单元处理。地址总线为16位时,可寻址范围为216=64k,地址总线的位数决定了所寻址存储器容量或外设数量的范围。在任一时刻,地址总线上的地址信息是惟一对应某一存储单元或外部设备。
控制总线(cb):由cpu产生的控制信号是通过控制总线向存储器或外部设备发出控制命令的,以使在传送信息时协调一致的工作。cpu还可以接收由外部设备发来的中断请求信号和状态信号,所以控制总线可以是输入、输出或双向的。
数据总线(db):cpu是通过数据总线与存储单元或外部设备交换数据信息的,故数据总线应为双向总线。在cpu进行读操作时,存储单元或外设的数据信息通过数据总线传送给cpu;在cpu进行写操作时,cpu把数据通过数据总线传送给存储单元或外设
3.什么是接口电路? cpu与接口电路连接一般应具有哪些信号线?外部设备与接口电路连接一般应具有哪些信号线?
cpu通过接口电路与外部输入、输出设备交换信息,
一般情况下,外部设备种类、数量较多,而且各种参量(如运行速度、数据格式及物理量)也不尽相同。cpu为了实现选取目标外部设备并与其交换信息,必须借助接口电路。一般情况下,接口电路通过地址总线、控制总线和数据总线与cpu连接;通过数据线(d)、控制线(c)和状态线(s)与外部设备连接。
4. 存储器的作用是什么?只读存储器和随机存储器有什么不同?
存储器具有记忆功能,用来存放数据和程序。计算机中的存储器主要有随机存储器(ram)和只读存储器(rom)两种。随机存储器一般用来存放程序运行过程中的中间数据,计算机掉电时数据不再保存。只读存储器一般用来存放程序,计算机掉电时信息不会丢失。
5.某存储器的存储容量为64kb,它表示多少个存储单元?
64×1024
6. 简述微型计算机硬件系统组成。
一台计算机的基本结构由运算器、控制器、存储器、输入设备和输出设备五部分组成。
7. 什么是单片机?单片机与微机相比有何特点?
单片机(single-chip-microcomputer)又称单片微控制器,其基本结构是将微型计算机的基本功能部件:中央处理机(cpu)、存储器、输入接口、输出接口、定时器/计数器、中断系统等全部集成在一个半导体芯片上,因此,单片机其体积小、功耗低、价格低廉,且具有逻辑判断、定时计数、程序控制等多种功能。
单片机结构上的设计,在硬件、指令系统及i/o能力等方面都有独到之处,具有较强而有效的控制功能。虽然单片机只是一个芯片,但无论从组成还是从其逻辑功能上来看,都具有微机系统的含义。另一方面,单片机毕竟是一个芯片,只有外加所需的输入、输出设备,才可以构成实用的单片机应用系统。
8. 单片机主要应用于哪些领域?
(1) 智能仪器。智能仪器是含有微处理器的测量仪器。单片机广泛应用于各种仪器仪表,使仪器仪表智能化取得了令人瞩目的进展。
(2) 工业控制。单片机广泛应用于各种工业控制系统中,如数控机床、温度控制、可编程顺序控制等。
(3) 家用电器。目前各种家用电器普遍采用单片机取代传统的控制电路,如洗衣机、电冰箱、空调、彩电、微波炉、电风扇及高级电子玩具等。由于配上了单片机,使其功能增强而身价倍增,深受用户的欢迎。
(4) 机电一体化。机电一体化是机械工业发展的方向,机电一体化产品是指集机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品。
单片机除以上各方面应用之外,还广泛应用于办公自动化领域(如复印机)、汽车电路、通信系统(如手机)、计算机外围设备等,成为计算机发展和应用的一个重要方向。
9. 什么是嵌入式系统?嵌入式系统有哪些重要特征?
所谓嵌入式系统,是“以应用为中心、以计算机技术为基础、软件硬件可裁减、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”。即以嵌入式应用为目的计算机系统。
嵌入式系统的重要特征:
⑴、系统内核小
⑵、专用性强。
⑶、系统精简
嵌入式系统一般没有系统软件和应用软件的明显区分,其功能设计及实现上不要求过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。
⑷、高实时性
第二章
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单元。
mov a,20h
mov dptr,#2000h
movx @dptr,a
6.编程将内部数据存储器20h~30h单元内容清零。
mov r0,#20h
mov a,#0
mov r3,#17
lop :mov @r0,a
inc r0
djnz r3,lop
7.编程查找内部ram的32h~41h单元中是否有0aah这个数据,若有这一数据,则将50h单元置为0ffh,否则清50h单元为0。
mov r3, #10h
mov a,#0aah
mov r0,#31h
lop :inc r0
subb a,@r0
jz lop1
djnz r3,lop
mov 50h,#0h
ajmp lop3
lop1:mov 50h,#0ffh
lop3: ajmp 1op3
8.查找20h~4fh单元中出现00h的次数,并将查找结果存入50h单元。
mov r3,#30h
mov r0,#20h
mov a,#0
lop: mov a,@r0
jz lop1
lop3: inc r0
djnz r3,lop
ajmp lop2
lop1: inc 50h
ajmp lop3
lop2:ajmp lop2
9.已知a=83h,r0=17h,(17h)=34h,写出下列程序段执行完后的a中的内容。
anl a, #17h
orl 17h, a
xrl a, @r0
cpl a
(a)=11001011b=0cbh
10.已知单片机的fosc=12mhz,分别设计延时0.1s、1s、1min的子程序。
设晶振频率为12mhz,一个机器周期为1?s,
延时1ms的子程序: 执行时间(机器周期)
delay: mov r7, #0ffh 1
loop: nop 1
nop 1
djnz r7, loop 2
ret 2
该程序段的总的执行时间为:
(1+4×255+2)ms=1023?s≈1ms
延时时间为100ms的子程序:
delay: mov r5,#64h 对延时1ms的子程序循环100次。
lop1: mov r7, #0ffh
loop: nop
nop
djnz r7, loop
djnz r5,lop1
ret
延时时间为1s的子程序:
delay1: mov r3, #0ah 对延时100ms的子程序循环10次
delay: mov r5,#64h 。
lop1: mov r7, #0ffh
loop: nop
nop
djnz r7, loop
djnz r5,lop1
djnz r3, delay
ret
延时时间为60s的子程序: 对延时1s的子程序循环60次
11.mcs-51汇编语言中有哪些常用的伪指令?各起什么作用?
bit(地址符号命令)
end(结束汇编)
equ(等值)
db(定义字节)
dw(定义字)
ds(定义存储单元)
org(汇编起始地址)
12.比较下列各题中的两条指令有什么异同?
① mov a, r1; mov 0e0h, r1 指令功能相同,寻址方式表示不同
② mov a, p0; mov a, 80h 指令功能相同,寻址方式表示不同
③ loop:sjmp loop; sjmp $ 指令功能相同
13.下列程序段汇编后,从3000h开始各有关存储单元的内容是什么?
org 3000h
tab1: equ 1234h
tab2: equ 5678h
db 65,13,abcabc
dw tab1,tab2,9abch
3000h: 65
3001h: 13
3002h: ‘a’
3003h: ‘b’
3004h: ‘c’
3005h: ‘a’
3006h:’b’
3007h: ‘c’
3008h: 34h
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。
mov r3,#8
mov r0,#40h
mov r1,#30h
lop1:movx a,@r0
mov @r1,a
inc r0
inc r1
djnz r3,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单元。
mov r0, #20h
mov dptr, #7e01h
lop: mov a, @r0
mov 60h,a
subb a, #0dh
jz lop1
mov a,60h
movx @dptr, a
inc r3
inc r0
inc dptr
ajmp lop
lop1: mov dptr, #7e00h
mov a,r3
movx @dptr, a
end
19.试编写一个用查表法查0~9字形7段码(假设表的首地址为table)的子程序,调用子程序前,待查表的数据存放在累加器a中,子程序返回后,查表的结果也存放在累加器a中。
sqr1: mov dptr,#table
movc a, @a+dptr
ret
table: db 0c0h,0f9h,0a4h,0b0h,99h ; 0~9的字形显示段码(led共阳极。
db 92h,82h,f8h,80h,90h
20.内部ram的data开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入sum和sum+1单元。
mov r0,#data
mov r3,#0ah
mov a,#0
lop: add a,@r0
mov r4,a
addc a, #0
mov r5,a
inc r0
djnz r3, lop
mov sum,r4
mov sum+1,r5
end
21.内部ram的data1和data2单元开始存放着两个等长的数据块,数据块的长度在len单元中。请编程检查这两个数据块是否相等,若相等,将0ffh写入result单元,否则将0写入result单元。
mov r0,#data1
mov r3, len
lop: mov a, @r0
cjnz a,data2, lop1
inc r0
inc data2
djnz r3,lop
mov a,#0ffh
mov result,a
ajmp lop2
lop1:mov a,#0
mov result, a
lop2: ajmp lop2
end
22.有一输入设备,其端口地址为20h,要求在1秒钟时间内连续采样10次读取该端口数据,求其算术平均值,结果存放在内部ram区20h单元。
mov r0,#20h
mov r2,#0
mov a,#0
mov r4,#0
lop : mov r3,#0ah
in : acall delay
movx a, @r0
mov r2 , a
mov a, r4
add a, r2
mov r4, a
djnz r3, in
mov b,#0ah
div ab
mov 20h,a
ajmp lop
delay: mov r5,#64h 延时时间为0.1s的子程序:
lop1: mov r7, #0ffh
loop: nop
nop
djnz r7, loop
djnz r5,lop1
ret
end
23.编写子程序,将内部ram区以30h为起始地址的连续10个存储单元中的数据,按照从小到大的顺序排序,排序结果仍存放在原数据区。
采用冒泡法排序:
冒泡排序法的基本算法是:n个数排序,从数据存放单元的一端(如起始单元)开始,将相邻二个数依次进行比较,如果相邻两个数的大小次序和排序要求一致,则不改变它们的存放次序,否则相互交换两数位置,使其符合排序要求,这样逐次比较,直至将最小(降序)或最大(升序)的数移至最后。然后,再将n-1个数继续比较,重复上面操作,直至比较完毕。
可采用双重循环实现冒泡法排序,外循环控制进行比较的次数,内循环实现依次比较交换数据。
程序如下:
org 0000h
block equ 30h ;设block为30h单元
mov r7, #9h ;设置外循环计数器
next: mov a, r7
mov 80h, a
mov r6, a ;设置外循环计数器
mov r0, #30h ;设置数据指针
comp: mov a, @r0
mov r2, a
inc r0
clr c
subb a, @r0
jc less
mov a, r2
xch a, @r0
dec r0
mov @r0, a
inc r0
less: djnz r6,comp ;(r6)-1不等于0,转comp继续内循环
mov r0,#30h
dec 80h
mov r6, 80h
djnz r7, comp
ret
end
第四章
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时,只有 (或 )引脚为高电平且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: mov th0, #9dh
mov tl0, #0d0h
mov tmod, #01h
setb tr0

中断服务程序:
mov th0, #9dh
mov tl0, #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)
程序:setb tr1
loop: mov tmod,#50h
mov th1,#0fch
mov tl1,#68h
aa : jbc tf1,aa
mov tmod,#10h
mov th1,#0e0h
mov tl1,#78h
bb: jbc tf1,bb
sjmp loop
end
8.已知8051单片机的fosc=6mhz,试利用t0和p1.0输出矩形波。矩形波高电平宽100μs,低电平宽300μs。
解:先确定 t0作为定时器工作于模式2时初值为:高电平为50,低电平为150。
采用中断方式编程。
org 0000h
ajmp main
org 001bh
ajmp tim0
org 0030h
main: mov sp,#30h ; 设置栈底
mov tmod,#02h
mov tl0,#50
mov ie,#82h
setb p1.0
setb tr0
sjmp $
org 0100h
tim0: jnb p1.0, aa
clr p1.0
mov tl0,#150
reti
aa: setb p1.0
mov tl0,#50
reti
end
9.设fosc=12mhz,试编写一段程序,功能为:对定时器t0初始化,使之工作在模式2,产生200μs定时,并用查询t0溢出标志的方法,控制p1.1输出周期为2ms的方波。
解:先确定 t0作为定时器时初值为:56
程序: mov tmod,#02h
mov tl0,#56
mov th0,#56
mov r7,#5 ; 设置循环次数
setb tr0
aa: jbc tf0,aa
djnz r7,aa
cpl p1.1
mov r7,#5
sjmp aa
end
10.已知8051单片机系统时钟频率为6mhz,利用其定时器测量某正脉冲宽度时,采用哪种工作模式可以获得最大的量程?能够测量的最大脉宽是多少?
答:首先设置tmod中gate为1,以定时方式工作在模式1,外部正脉冲从外部中断引脚引入,可获得最大的量程。
能够测量的最大脉宽为:131ms.
第6章习题答案
1.异步通信和同步通信的主要区别是什么?mcs-51串行口有没有同步通信功能?
答案:
异步通信因为每帧数据都有起始位和停止位,所以传送数据的速率受到限制。但异步通信不需要传送同步脉冲,字符帧的长度不受限制,对硬件要求较低,因而在数据传送量不很大。同步通信一次可以连续传送几个数据,每个数据不需起始位和停止位,数据之间不留间隙,因而数据传输速率高于异步通信。但同步通信要求用准确的时钟来实现发送端与接收端之间的严格同步。
mcs-51串行口有同步通信功能。
2.解释下列概念:
(1) 并行通信、串行通信。
(2) 波特率。
(3) 单工、半双工、全双工。
(4) 奇偶校验。
答案:
(1)并行通信:数据的各位同时进行传送。其特点是传送速度快、效率高,数据有多少位,就需要有多少根传输线。当数据位数较多和传送距离较远时,就会导致通信线路成本提高, 因此它适合于短距离传输。
串行通信:数据一位一位地按顺序进行传送。其特点是只需一对传输线就可实现通信,当传输的数据较多、距离较远时,它可以显著减少传输线,降低通信成本,但是串行传送的速度慢。
(2)波特率:每秒钟传送的二进制数码的位数称为波特率(也称比特数),单位是bps(bit per second),即位/秒。
(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下,串行口波特率由定时器t1的溢出率和smod值同时决定。相应公式为:波特率=2smod×t1溢出率/32;在方式2下,串行口的波特率可由pcon中的smod位控制:若使smod=0,则所选波特率为fosc/64;若使smod=1,则波特率为fosc/32。即
2smod
64
×fosc
波特率=
5.为何t1用作串行口波特率发生器时常用模式2?若fosc=6mhz,试求出t1在模式2下可能产生的波特率的变化范围。
答案:定时器t1作为波特率发生器可工作于模式0、模式1和模式2。其中模式2在t1溢出后可自动装入时间常数,避免了重装参数,因而在实际应用中除非波特率很低,一般都采用模式2。
若fosc=6mhz,t1在模式2下可能产生的波特率的变化范围为:61.04 bps ~ 15625 bps。
6.简述多机通信原理。
答案:当主机选中与其通信的从机后,只有该从机能够与主机通信,其他从机不能与主机进行数据交换, 而只能准备接收主机发来的地址帧。上述要求是通过scon寄存器中的sm2和tb8来实现的。当主机发送地址帧时使tb8=1,发送数据帧时使tb8=0,tb8是发送的一帧数据的第9位,从机接收后将第9位数据作为rb8,这样就知道主机发来的这一帧数据是地址还是数据。另外,当一台从机的sm2=0时,可以接收地址帧或数据帧,而当sm2=1时只能接收地址帧,这就能实现主机与所选从机之间的单独通信。
7.试用8051串行口扩展i/o口,控制16个发光二极管自右向左以一定速度轮流发光,画出电路并编写程序。
答案:电路如下:
程序如下:
org 0000h
ajmp main
org 0023h
ajmp sbs ; 转向串行口中断服务程序
org 2000h
main: mov scon, #00h ; 串行口设置为方式0
mov a, #01h ; 最右边一位发光二极管先亮
clr p1.0 ; 关闭并行输出,熄灭显示
clr p1.1
mov sbuf,a ; 开始串行输出
loop: sjmp loop ; 等待中断
sbs: inc r0
cjne r0, #11h, dsp
mov r0, #01h
dsp : cjne r0, #08h, dspr
setb p1.1 ; 启动高8位并行输出
dspr: setb p1.0 ; 启动低8位并行输出
acall dely ; 显示延迟1s
clr ti ; 清发送中断标志
rl a ; 准备点亮下一位
clr p1.0 ; 关闭并行输出,熄灭显示
clr p1.1
mov sbuf, a ; 串行输出
zdfh: reti
dely: mov r2, #05h ; 延时1s子程序(fosc=6mhz)
dely0: mov r3, #0c8h
dely1: mov r4, #0f8h
nop
dely2: djnz r4, dely2
djnz r3, dely1
djnz r2, dely0
ret
end
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。
甲机发送子程序:
org 2000h
send: mov tmod, #20h ; 定时器1设为模式2
mov tl1, #0f4h
mov th1, #0f4h ; 置定时器初值
setb tr1 ; 启动t1
mov scon, #50h ; 设串行口为方式2
mov pcon, #00h ; smod=0
tlls: mov sbuf, #0aah ; 发送请求接收信号
wfs1: jbc ti, ryd1 ; 等待发送
sjmp wfs1
ryd1: jbc ri, ryd2 ; 等待乙机回答
sjmp ryd1
ryd2: mov a, sbuf ; 接收应答信号
xrl a, #0bbh
jnz tlls ; 乙机未准备好,继续联络
sdd1: mov r0, #40h ; 首地址40h→r0
mov r1, #10h ; 数据个数→r1
mov r2, #00h ; 清校验和寄存器
sdd2: mov sbuf, @r0 ; 发送一个数据
mov a, r2
add a, @r0 ; 求校验和
mov r2, a ; 保存校验和
inc r0
wfs2: jbc ti, sdd3 ; 等待发送
sjmp wfs2
sdd3: djnz r1, sdd2 ; 数据块是否发送完
mov sbuf, r2 ; 发送校验和
wfs3: jbc ti, ryd3
sjmp wfs3
ryd3: jbc ri, ryd4 ; 等待乙机回答
sjmp ryd3
ryd4: mov a, sbuf
jnz sdd1 ; 回答出错则重发
ret
乙机接收子程序:
org 2000h
recv: mov tmod, #20h ; 定时器1设为模式2
mov tl1, #0f4h
mov th1, #0f4h ; 置定时器初值
setb tr1 ; 启动t1
mov scon, #50h ; 设串行口为方式2
mov pcon, #00h ; smod=0
mov r0, #40h ; 首地址40h→r0
mov r1, #10h ; 数据个数→r1
mov 50h, #00h ; 清校验和寄存器
setb 7fh
setb 7eh ; 标志位初始置1
setb es ; 允许接收中断
setb ea ; 开中断
loop: sjmp loop ; 等待中断
中断服务子程序:
clr ea
clr ri ; 清中断
jb 7fh, rcmd ; 是请求接收信号吗
jb 7eh, data ; 是数据块吗
mov a, sbuf ; 接收校验和
cjne a, 50h, err ; 判断发送是否正确
mov a, #00h
mov sbuf, a ; 正确,发00h
wfs1: jnb ti, wfs1 ; 等待发送
clr ti
sjmp retn
err: mov a, #0ffh
mov sbuf, a ; 出错,发0ffh
wfs2: jnb ti, wfs2 ; 等待发送
clr ti
sjmp agan
rcmd: mov a, sbuf ; 接收甲机请求信号
xrl a, #0aah
jz tydx
sjmp retn
tydx: mov sbuf, #0bbh ; 发送应答信号0bbh
wfs3: jnb ti, wfs3 ; 等待发送
clr ti
clr 7fh
sjmp retn
data: mov a, sbuf ; 接收数据
mov r0, a
inc dptr
add a, 50h ; 求校验和
mov 50h, a&