单片机课后习题答案3.pdf
习 题 1 答案1.1 单项选择题(DA(2)C(3)A(4)A(5)A(6)A(7)C(8)C(9)D(10)C1.2 填空题(1)硬件系统、软件系统(2)时钟、复位(3)XTAL1、XTAL2、RST、(4)片内数据存储器、片内程序存储器、片外数据存储器、片外程序存储器(5)时钟电路(6)程序存储器(7)工作寄存器组、位寻址区、用 户RAM区(8)lus 2us(9)上电复位电路、按键复位电路(10)2、高1.3(1)答:单片微型计算机是指集成在个芯片上的微型计算机,它的各种功能部件,包括 CPU(Central Processing Unit)随机存取存储器 RAM(Random AccessMemory)、只读存储器 ROM(Read-only Memory)、基本输入/输出(Input/Output,简 称DO)接口电路、定时器/计数器等都制作在一块集成芯片上,构成一个完整的微型计算机,可以实现微型计算机的基本功能。单片机应用系统是以单片机为核心,配以输入、输出、显示、控制等外围电路和软件,能实现一种或多种功能的实用系统。单片机应用系统是由硬件和软件组成的,硬件是应用系统的基础,软件则是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可。(2)答:P3 口各引脚与第二功能表引脚第二功能信号名称P3.0RXD串行数据接收P3.1TXD串行数据发送P3.2外部中断0 申请P3.3外部中断1 申请P3.4T0定时/计数器。的外部输入P3.5T1定时/计数器1 的外部输入P3.6外部RAM写选通P3.7外部RAM读选通(3)答:单片机晶振电路一般地,电容C1和 C2取 30pF左右,晶体的振荡频率范围是1.2MHz 12MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就越快。MCS-51在通常应用情况下,使用振荡频率为的6MHz或 12MHz的晶振,如果系统中使用了单片机的串行口通信,则般采用振荡频率为11.059MHz的晶振。(4)答:规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。当振荡脉冲频率为12 MHz时,一个机器周期为Ips;当振荡脉冲频率为6MHz时,一个机器周期为2 户。(5)答:(a)上电复位电路(b)按键复位电路单片机常见的复位电路图(a)为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。图(b)为按键复位电路。该电路除具有上电复位功能外,若要复位,只需按图(b)中的RESET键,此时电源VCC经电阻RI、R2分压,在 RST端产生一个复位高电平。(6)答:片内RAM低 128单元的配置如下:地 址功能30H 7FH数据缓冲区20H 2FH位寻址区(00H-7FH)18H-1FH第3组工作寄存器(R7R0)10H-17H第2组工作寄存器(R7-R0)08H 0FH第1组工作寄存器(R7-R0)OOH 07H第0组工作寄存器(R7R0)寄存器常用于存放操作数及中间结果等;内部RAM的20H 2FH单元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中每 位进行位操作;在内部RAM低 128单元中,通用寄存器占去了 32个单元,位寻址区占去了 16个单元,剩下80个单元,这就是供用户使用的一般RAM区,其单元地址为30H7FHo片内RAM高 128单元安排有21个特殊功能寄存器,其他空闲单元用户不能使用。(7)答:有21个可寻址的特殊功能寄存器,它们不连续地分布在片内RAM的高128单元中,尽管其中还有许多空闲地址,但用户不能使用。另外还有一个不可寻址的特殊功能寄存器,即程序计数器P C,它不占据RAM单元,在物理上是独立的。在可寻址的21个特殊功能寄存器中,有 11个寄存器不仅可以字节寻址,也可以进行位寻址。(8)答:程序状态字是个8 位寄存器,用于存放程序运行中的各种状态信息。其中有些位的状态是根据程序执行结果,由硬件自动设置的,而有些位的状态则由软件方法设定。PSW的位状态可以用专门指令进行测试,也可以用指令读出。PSW的各位定义下表所示。PSW位定义位地址D7HD6HD5HD4HD3HD2HD1HDOH位名称CYACF0RS1RSOOVFlP CY(PSW.7):进位标志位。CY是PWS中最常用的标志位,其功能有两个:是存放算术运算的进位标志,在进行加或减运算时,如果操作结果最高位有进位或借位,则CY 由硬件置“1”,否则被清“0”;二是在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一固定是进位标志位。AC(PSW.6):辅助进位标志位。在进行加或减运算中,若低4 位向高4位进位或借位,A C由硬件置“1”,否则被清“0”。在 BCD码调整中也要用到 AC位状态。F0(PSW.5):用户标志位。这是一个供用户定义的标志位,需要利用软件方法置位或复位,用来捽制程序的转向。RS1和 RSO(PSW.4,PSW.3):工作寄存器组选择位。它们被用于选择CPU当前使用的通用寄存器组。通用寄存器共有4 组,其对应关系如下表所示。工作寄存器组选择RSI RSO寄存器组片内RAM地址0 0第0组00H-07H0 1第1组08H-0FH1 0第2组I0H-17H1 1第3组18H-1FH这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。但当单片机上电或复位后,RSI RS0=00o OV(PSW.2):溢出标志位。在带符号数加减运算中,OV=1表示加减运算超出了累加器A 所能表示的符号数有效范围(-128+1 2 7),即产生了溢出,因此运算结果是错误的;OV=0表示运算正确,即无溢出产生。在乘法运算中,OV=1表示乘积超过2 5 5,即乘积分别在B 与 A 中;否则,OV=0,表刁;乘积只在A 中。在除法运算中,o v=i表示除数为0,除法不能进行;否则,o v=o,除数不为0,除法可正常进行。Fl(PSW.1):保留未使用。P(PSW.0):奇偶标志位。P 标志位表明累加器A 中内容的奇偶性,如果A 中有奇数个“1”,则P 置“1”,否则置“0”。凡是改变累加器A 中内容的指令均会影响P 标志位。此标志位对串行通信中的数据传输有重要的意义。在串行通信中常采用奇偶校验的办法来校验数据传输的可靠性。(10)答:当需要扩展存储器时,低 8 位地址A7 A0和 8 位数据D7D 0由P0 口分时传送,高 8 位地址A 15-A 8由P2 口传送。因此,只有在没有扩展片外存储器的系统中,P0 口和P2 口的每一位才可作为双向I/O端口使用。习题2 答 案2.1 单项选择题(1)C (2)A (3)B (4)A (5)D2.2(1)答:单片机开发过程所用的设备与软件称为单片机开发系统或开发工具。单片机开发系统包括计算机、单片机在线仿真器、开发工具软件、编程器等。(2)答:1.在线仿真功能在线 仿 真 器(I n C i r c u i t E m u l a t o r,简 称I C E)是由系列硬件构成的设备,它能仿真用户系统中的单片机,并能模拟用户系统的R O M、RAM和I/O 口。因此,在线仿真状态下,用户系统的运行环境和脱机运行的环境完全“逼真”。2.调试功能1)运行控制功能开发系统应能使用户有效地控制目标程序的运行,以便检查程序运行的结果,对存在的硬件故障和软件错误进行定位。2)单片机状态查看修改功能当C P U停止执行程序运行后,开发系统允许用户方便地读出或修改目标系统资源的状态,以便检查程序运行的结果、设置断点条件以及设置程序的初始参数。任 务2中图2.13给出了在Me d w i n调试环境下查看单片机内部资源的菜单。3.程序编译功能1)程序设计语言单片机程序设计语言包括机器语言、汇编语言和高级语言。机器语言是单片机唯能够识别的语言。汇编语言具有使用灵活、实时性好的特点。目前,在实际项目开发中较少使用汇编语言。高级语言通用性好,且具有较好的可读性和可移植性,是目前单片机编程语言的主流。2)程序编译单片机开发系统能够提供源程序的编辑、编译和下载功能以及工程管理功能。4.程序固化功能编程器是完成这种任务的专用设备,它也是单片机开发系统的重要组成部分。(3)答:单片机应用系统的开发过程如下:设计电路图-制作电路板一程序设计一硬软件联调一程序下载一产品测试习题3 答案3.1单项选择题(1)A (2)A(6)B (7)D(11)B (12)C(3)C(8)D(13)D(4)C (5)A(9)A (10)A(14)D (15)C3.2 填空题(1)P3 口(2)字节,位(3)主函数main()(4)sbit FLAG=P3A1;(5)sfr(6)顺序结构、选择结构和循环结构(7)表达式加上分号“;”(8)if,switch(9)do-while,while(1 0)无限次(11)10000(12)unsigned char(1 3)变量在MCS-51硬件系统中所使用的存储区域(14)0(1 5)程序存储器ROM中3.3 上机操作题(1)/xiti3_3_l.c第三章习题3.3上机操作题(1)#include void delay Unsigned char i);/延时函数声明void main。函数|while(1)Pl=0 x55;/按 状 态 1的方式点亮8个 LEDdelay Q0。;扬时Pl=0 xaa;按 状 态 2的方式点亮8个 LEDdelay(20Q);时void delay Unsigned char i)/延时函数参见任务1程 序 e(2)/xiti3_3_2.c第三章习题3.3上机操作题(2)#include 包含头文件 RBG51.Hvoid delay Unsigned char i);延时函数声明void main。主函数(unsigned char i,1,r;while(1)1=0 x10;高4 位灯的位置初值为00010000BL_l.cr=0 x0 8;0 0 0 0 1 0 0 0 Bfor(i=0;i4;i+)P l=(l r);1 =1;r =l;del ay QOQ;/低4位灯的位置初值为循环点亮灯/高4位灯的位置移动低4位灯的位置移动延时v oid del ay Uns igned char i)/延时函数参见任务1程 序e x O-c(3)/xit i3_3_3.c第三章习题3.3上机操作题(3)#inc 1 u de r eg51.2 包含头文件 RB351.Hv oid del ay Uns igned char i);延时函数声明v oid main 0 /主函数u ns igned char i;u ns igned char dis p l ayO xff,O xcO,O xff;w hil e(1)for(i=0;i 、(3)模拟,数字;数字,模拟6.3答:D A C 08 3 2 与 8 05 1单片机接口时,主要有如下控制信号:I L E、/C S、/WR 1、/W R 2、/X F E R,作用分别是:(1):转入寄存器片选信号,低电平有效。(2)I L E:输入寄存器的数据锁存允许信号,高电平有效。(3):输入寄存器的数据写信号,低电平有效。(4):DAC寄存器写信号,并启动转换。低电平有效。(5):数据向DAC寄存器传送控制信号,传送后即启动转换,低电平有效。A D C 08 09 与 8 05 1单片机接口时,控制信号主要有:A L E、S TA R T.E O C、0E。作用分别是:(1)A L E:地址锁存允许信号在A L E 上升沿,A D D A、A D D B、A D D C 地址状态被送入地址锁存器中。(2)S TA R T:转换启动信号。S TA R T上跳沿时,所有内部寄存器清0;S TA R T下跳沿时,开始进行A/D 转换;在 A/D 转换期间,S TA R T应保持低电平。(3)O E:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。O E=0,输出数据线呈高电阻;O E=1,输出转换得到的数据。(4)E O C 转换结束状态信号。启动转换后,系统自动设置E O C=0,转换完成后,E O C=l o 该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。6.4答:所谓单缓冲方式就是使08 3 2 的两个输入寄存器中有一个处于直通方式,而另一个处于受控的锁存方式,或者两个输入寄存器同时受相同的信号捽制的方式。在实际应用中,如果只有一路模拟量输出,或虽有儿路模拟量但并不要求同步输出的情况,就可采用单缓冲方式。所谓双缓冲方式,就是把D A C 08 3 2 的两个锁存器都接成受控锁存方式。6.5答:判断A/D 转换是否结束一般可采用3种方式,即 E O C 信号和单片机相连可有3 种方式:延时方式:E O C 悬空,启动转换后,延 时 100 us后读入转换结果。查询方式:E 0C 接单片机端口线,查得E O C 变高,读入转换结果,作为查询信号。%断方式:R O C 经非门接单片机的中断请求端,转换结束作为中断请求信号向单片机提出中断申请,在中断服务中读入转换结果。其中延时方式和查询方式均占用单片机CPU,即在这段时间,CPU 只能做延时或查询的工作,而采用中断方式时,CPU 可先执行主程序,一旦产生中断,才去处理数据接收的工作,使 得 CPU 利用率较前面两种要高。6.6答:(1)周期为2 5 m s 的锯齿波发生器C语言源程序如下:#i n c l u d e#i n c l u d e#d e f i ne D 0832 X B Y I E K)x7f f f#d e f i ne uc h a r unsi g ne d c h a r#d e f i ne ui nt unsi g ne d i ntuc h a r i;void delay_100us j|/IHlWxff;置定时器初值 0 x ff9 c,即 65436,定时 0.1ms1X1=0 x90;TR1=1;while(TF1);7F1=Qvoi d ma i n R o i d)T vC D=0 xl Q wh i l e (1)启 动 定 时 器 1,查询计数是否溢出,即 定 时 0.1ms时间到,1?1=10.1ms时间到,将定时器溢出标志位IF 清零 f or(0 i 055;i+W 832=i;d e l a y I QOus 0;夕 置 定 时 器 1为 方 式 1/形成锯齿波输出值,最 大 255转换输出(2)周期为50ms的三角波C语言源程序如下:#i nc l ud e#i nc l ud e#d e f i ne E A 0832 X B Y I E 0 x7f f f#d e f i ne uc h a r unsi g ne d c h a r#d e f i ne ui nt unsi g ne d i ntuc h a r i,j;voi d d e l a y I QOus 0T H l=Oxf f;T L l=0 x9qT R 1=1;vh i l e (1F 1);到,T F 1=1T F 1-0;零)voi d ma i n R o i d)TMMx lQ汕i l e (1)/置定时器初值0 xf f 9c,即65436,定 时0.1ms启动定时器1查询计数是否溢出,即定时0.1ms时间Z/0.1ms时间到,将定时器溢出标志位1 F清 置 定 时 器1为方式1 f or(i-Q i Q255;i+e /形成三角波输出值,最 大255 E A 0832=i;专 换输出d e l a y I QOus 0;f or(j=255;jXQ jT/形成三角波输出值,最 大255 rA 0832=j;/1)公转换输出d e l a y I QOus 0;(3)周期为5 0ms的方波C语言源程序如下:#i nc l ud e#i nc l ud e#d e f i ne D 0832 X B Y I E E)x7f f f#d e f i ne uc h a r unsi g ne d c h a r#d e f i ne ui nt unsi g ne d i ntuc h a r i,j;void delay_25ms 0 TH1=0X9G 置 定时器初值TL=0 x5TR1=1;while(7F1);TFhQvoi d ma i n(yoi(J)T M D=Oxl O;wh i l e (1)/启动定时器1“查询计数是否溢出,即定时25ms时间到,7F1=1425ms时间到,将定时器溢出标志位IF清零/置定时器1为方式1由 832=2 5 5;/形成方波输出值,最 大 255,D么转换输出d e l a y 25ms 0;M 832=Q N D&转换输出d e l a y 25ms 卜答:在选定转换通道后,A D C 0809工作的主要有以下几个步骤:1.启动A/D 转换,给 S T A R T 引脚一个下降沿;2.A L E 信号与S T A R T 信号一般连接在一起,这样使得在A L E 信号的前沿写入地址信号,紧接着在其后沿就启动转换;3.查询E OC 引脚状态,E OC 引脚由0 变 1,表示A/D 转换过程结束;4.允许读数,将 0E 引脚设置为1状态。5.读取A/D 转换结果,从A D C 0809的外部地址读取其转换结果。习题7 答案7.1 单项选择题(DA(2)B(3)D(4)C(5)B(6)C(7)B(8)C(9)C(10)A(11)C(12)D(13)A7.2答:在异步通信中,数据是不连续传送的,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧帧地发送,每帧数据是低位在前,高位在后,通过传输线被接收端帧 帧地接收。发送端和接收端可以由各白独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。异步通信的字符帧格式分为无空闲位帧格式和有空闲位帧格式。7.3答:T 1的溢出率取决于单片机定时器T 1的计数速率和定时器的预置值。当定时器 T 1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8 位定时器,此时TL 1作计数用,自动重装载的值在TH 1内。设计数的预置值(初始值)为X,那么每过2 5 6-X个机器周期,定时器溢出一次。为了避免溢出而产生不必要的中断,此时应禁止T1中断。7.4答:参考程序如下:Sinclu de Sdefine u char u ns igned charcode u chart ab=0 x 3 f,0 x 06,0 x 5 b,0 x 4 f,0 x 6 6,0 x 6 D,0 x 7 D,0 x 07,0 x 7 f,0 x 6 f;u char s end =0 x 04,0 x 03,0 x 02,0 x 01,0 x 08,0 x 07,0 x 06,0 x 05;int i,t;延时函数,当t 取值12 000时,若晶振fos c=12 M H z,大约延时1sv oid delay(t)for(i=0;i t;i+);)mainOu ns igned char i,j,k,m;SC 0N=0 x 00;串行口工作方式w hile(1)for(i=0;i 6;i+)SB UF=(t abs endi);/发送第 i 个数据w hile(TI=0);/等待发送是否完成TI=0;TI 清 0)delay(12 000);for(m=6;m 12;m+)SB UF=(t abs endm);/发送第 i 个数据w hile(TI=0);/等待发送是否完成TI=0;/TI 清 0)delay(12 000);)7.5答:参考程序如下:甲机发送发送子程序参考如下:#inclu deSinclu de Sinclu de Sinclu de Winclu de#define u char u ns igned charu char F RE Q;/*定时器计数变量*/v oid main(v oid)(/以下是设置中断和定时器E A=1;PTO=1;E TO=1;TC O N=0 x 08;TM 0D=0 x 2 1;定 时 器0为产生10ms的中断,定时器1为9 6 0 0 b i%的波特率发生器TH 0=-10000/2 5 6;TL 0=-10000%2 5 6;TL l=O x fd;TH l=O x fd;SC 0N=0 x d8;PC O N=O x O O;TR1=1;TRO=1;TI=1;w hile(1)/串行口方式3发送开定时器/定时器0的中断服务程序,向串口发送“A”数据v oid int s v r l(v oid)int er r u pt 1(重 新装入定时器0的初值;TH 0=-10000/2 5 6;TL 0=-10000%2 5 6;F RE Q=F RE Q+1;if(F RE Q=100)(F RE Q=O;pr int f(A );)乙机接收子程序参考如下:#inclu de#define u char u ns igned charv oid main(v oid)定 时 器TO的低四位赋值/1秒判断发送字符u char as t r ing;年 11.05分H z晶振下,设置串行口波特率为9 6 00bi”,用串行口方式3接收TM O D=0 x 2 0;TH l=0 x fd;TL l=0 x fd;TR1=1;SC O N=O x db;PC 0N=0 x 00;w hile(l)(w hile(RI=0);RI=0;as t r ing=SB UF;I ccL dis playO;液晶显示参考前而章节程序7.6答:参考程序如下:#include#define INBUF_LEN 4/数据长度unsigned char inbuflINBUF_LEN;unsigned char checksum,count3;bit read_flag=0;/串行口初始化函数:init_serialcomm/函数功能:串行口初始化,设置波特率为4800bi”,允许串口中断/形式参数:无/返回值:无void init_serialcomm(void)(SCON=0 x50;C E N 串行口方式L允许接收TMOD 1=0 x20;/设置定时器1为方式2定时PCON 1=0 x80;/SCD=1;TH1=0 xf4;波特率 4800bi%,fosc=ll.059ZVHzTL1=0 xf4;IE=0 x90;/升串口中断TRI=1 ;启动定时器1/发送字符函数:send_char_com/函数功能:向串口发送一个字符/形式参数:存放字符的变量ch,unsigned char类型/返回值:无void send_char_com(unsigned char ch)(SBUF=ch;while(TI=0);TI=0;)/发送字符串函数:send_string_com/函数功能:向串口发送一个字符串,strlen为该字符串长度/形式参数:字符串变量*str,unsigned char类型;字符串长度strlen,unsigned int公 型/返回值:无void send_string_com(unsigned char*str,unsigned int strlen)(unsigned int k=0;dosend_char_com(*(str+k);k+;while(k 127)(count3=0;inbuf 1 count3=ch;checksum=ch-128;)elsecount3+;inbufl count3=ch;checksum A=ch;if(count3=(INBUF_LEN-1 )&(Jchecksum)后一个字节是否为前几个字节/后7位的异或校验和(read_flag=l 口果串口接收的数据达到 眦 1叫郎 个,且校验没错,Z 就置位取数标志)void main()(init_serialcomm();主函数/初始化串口while(1 )(if(read_flag)/如果取数标志已置位,就将读到的数从串口发出read_flag=0;/取数标志清0send_string_com(inbufl,INBUF_LEN);习题8 答案8.1 单项选择题,在 A、B、C、D四个答案中只有一个正确答案。(1)B(2)D(3)C(4)D(5)A(6)A(7)B8.2 填空题(1)(2)双向数据线,P0 口(3)数据总线,地址总线(4)74LS165,74LS164(5)外接上拉电阻,由于AT24C01的SDA和 SCL为开漏输出(6)5128.3答:因为MCS-51系列单片机分别对程序存储器和数据存储器访问提供了不同的控制信号,对程序存储器的读操作和取指操作由信号控制,而对数据存储器的读写操作由控制信号和控制,而且,对二者的操作指令也不相同,因此不会发生冲突。8.4答:如果要在EPROM中定义表格,应在变量声明时使用code标志符,例如:unsigned char code tab=0 xC0,0 xF9,0 xA4,OxBO,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;将0 9 的共阳极数码管字符码表定义到程序存储器中。在程序存储器中定义表格后,可以通过变量赋值实现从EPROM中读出所定义的表格数据。下面的程序段实现在程序存储器中查表、并将0 9 显示字符码逐一送到P1 口的操作:unsigned char i;for(i=0;i=9;i+)(Pl=tabi;从程序存储器中取显示字符码送Pl 口delay();)8.5答:参考程序如下:#include”reg51.h”unsigned char da=0 xF9,0 x80;void delay(unsigned int i);延时函数声明main()u n s i g n e d c h ar i;P l=O x f f;S C O N=O x O O;w h i l e (1)f o r (i=0;i 2;i+)S B U F=d a i ;T I=0;w h i l e(!T I);d e l ay(2 0 0 0);)v o i d d e l ay (u n s i g n e d i n t(略 P L 0 置 1,允许串行移位设串行口方式0送显示等待发送完毕i)