• 180.00 KB
  • 2022-04-22 11:34:15 发布

单片机课后习题答案(《单片机应用技术》C语言版).doc

  • 19页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
' 习题1答案1.1单项选择题(1)A(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)1us、2us(9)上电复位电路、按键复位电路(10)2、高1.3答:单片微型计算机是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(CentralProcessingUnit)、随机存取存储器RAM(RandomAccessMemory)、只读存储器ROM(Read-onlyMemory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时器/计数器等都制作在一块集成芯片上,构成一个完整的微型计算机,可以实现微型计算机的基本功能。单片机应用系统是以单片机为核心,配以输入、输出、显示、控制等外围电路和软件,能实现一种或多种功能的实用系统。单片机应用系统是由硬件和软件组成的,硬件是应用系统的基础,软件则是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可。1.4答:P3口各引脚与第二功能表引脚第二功能信号名称P3.0RXD串行数据接收P3.1TXD串行数据发送P3.2外部中断0申请P3.3外部中断1申请P3.4T0定时/计数器0的外部输入P3.5T1定时/计数器1的外部输入P3.6外部RAM写选通P3.7外部RAM读选通 1.5 答:片内RAM低128单元的配置如下:地址功能30H~7FH数据缓冲区20H~2FH位寻址区(00H~7FH)18H~1FH第3组工作寄存器(R7~R0)10H~17H第2组工作寄存器(R7~R0)08H~0FH第1组工作寄存器(R7~R0)00H~07H第0组工作寄存器(R7~R0)寄存器常用于存放操作数及中间结果等;内部RAM的20H~2FH单元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作;在内部RAM低128单元中,通用寄存器占去了32个单元,位寻址区占去了16个单元,剩下80个单元,这就是供用户使用的一般RAM区,其单元地址为30H~7FH。片内RAM高128单元安排有21个特殊功能寄存器,其他空闲单元用户不能使用。1.6答:有21个可寻址的特殊功能寄存器,它们不连续地分布在片内RAM的高128单元中,尽管其中还有许多空闲地址,但用户不能使用。另外还有一个不可寻址的特殊功能寄存器,即程序计数器PC,它不占据RAM单元,在物理上是独立的。在可寻址的21个特殊功能寄存器中,有11个寄存器不仅可以字节寻址,也可以进行位寻址。1.7答:程序状态字是一个8位寄存器,用于存放程序运行中的各种状态信息。其中有些位的状态是根据程序执行结果,由硬件自动设置的,而有些位的状态则由软件方法设定。PSW的位状态可以用专门指令进行测试,也可以用指令读出。PSW的各位定义下表所示。PSW位定义位地址D7HD6HD5HD4HD3HD2HD1HD0H位名称CYACF0RS1RS0OVF1P·CY(PSW.7):进位标志位。CY是PWS中最常用的标志位,其功能有两个:一是存放算术运算的进位标志,在进行加或减运算时,如果操作结果最高位有进位或借位,则CY由硬件置“1”,否则被清“0”;二是在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一固定是进位标志位。·AC(PSW.6):辅助进位标志位。在进行加或减运算中,若低4位向高4位进位或借位,AC由硬件置“1”,否则被清“0”。在BCD码调整中也要用到AC位状态。·F0(PSW.5):用户标志位。这是一个供用户定义的标志位,需要利用软件方法置位或复位,用来控制程序的转向。·RS1和RS0(PSW.4,PSW.3):工作寄存器组选择位。它们被用于选择CPU当前使用的通用寄存器组。通用寄存器共有4组,其对应关系如下表所示。工作寄存器组选择RS1RS0寄存器组片内RAM地址 00第0组00H~07H01第1组08H~0FH10第2组10H~17H11第3组18H~1FH这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。但当单片机上电或复位后,RS1RS0=00。·OV(PSW.2):溢出标志位。在带符号数加减运算中,OV=1表示加减运算超出了累加器A所能表示的符号数有效范围(-128~+127),即产生了溢出,因此运算结果是错误的;OV=0表示运算正确,即无溢出产生。在乘法运算中,OV=1表示乘积超过255,即乘积分别在B与A中;否则,OV=0,表示乘积只在A中。在除法运算中,OV=1表示除数为0,除法不能进行;否则,OV=0,除数不为0,除法可正常进行。·F1(PSW.1):保留未使用。·P(PSW.0):奇偶标志位。P标志位表明累加器A中内容的奇偶性,如果A中有奇数个“1”,则P置“1”,否则置“0”。凡是改变累加器A中内容的指令均会影响P标志位。此标志位对串行通信中的数据传输有重要的意义。在串行通信中常采用奇偶校验的办法来校验数据传输的可靠性。1.8答:0003H~002AH这40个单元被均匀地分为5段,作为5个中断源的中断地址区。其中:0003H~000AH外部中断0中断地址区000BH~0012H定时器/计数器0中断地址区0013H~001AH外部中断1中断地址区001BH~0022H定时器/计数器1中断地址区0023H~002AH串行中断地址区中断响应后,按中断种类,自动转到各中断区的首地址去执行程序。因此在中断地址区中理应存放中断服务程序。但通常情况下,8个单元难以存下一个完整的中断服务程序,因此通常也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址。1.9答:当需要扩展存储器时,低8位地址A7~A0和8位数据D7~D0由P0口分时传送,高8位地址A15~A8由P2口传送。因此,只有在没有扩展片外存储器的系统中,P0口和P2口的每一位才可作为双向I/O端口使用。1.10答:单片机晶振电路一般地,电容C1和C2取30pF左右,晶体的振荡频率范围是1.2MHz~12MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就越快。 MCS-51在通常应用情况下,使用振荡频率为的6MHz或12MHz的晶振,如果系统中使用了单片机的串行口通信,则一般采用振荡频率为11.059MHz的晶振。1.11答:规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。当振荡脉冲频率为12MHz时,一个机器周期为1µs;当振荡脉冲频率为6MHz时,一个机器周期为2µs。1.12答: (a)上电复位电路(b)按键复位电路单片机常见的复位电路图(a)为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。图(b)为按键复位电路。该电路除具有上电复位功能外,若要复位,只需按图(b)中的RESET键,此时电源VCC经电阻R1、R2分压,在RST端产生一个复位高电平。 习题2答案2.1单项选择题(1)C(2)A(3)B(4)A(5)D2.2答:单片机开发过程所用的设备与软件称为单片机开发系统或开发工具。单片机开发系统包括计算机、单片机在线仿真器、开发工具软件、编程器等。连接方法如下图所示。单片机开发系统连接方法示意图2.3答:单片机应用系统的开发过程如下:设计电路图→制作电路板→程序设计→硬软件联调→程序下载→产品测试2.4答:1.在线仿真功能在线仿真器(InCircuitEmulator,简称ICE)是由一系列硬件构成的设备,它能仿真用户系统中的单片机,并能模拟用户系统的ROM、RAM和I/O口。因此,在线仿真状态下,用户系统的运行环境和脱机运行的环境完全“逼真”。2.调试功能1)运行控制功能开发系统应能使用户有效地控制目标程序的运行,以便检查程序运行的结果,对存在的硬件故障和软件错误进行定位。2)单片机状态查看修改功能 当CPU停止执行程序运行后,开发系统允许用户方便地读出或修改目标系统资源的状态,以便检查程序运行的结果、设置断点条件以及设置程序的初始参数。任务2中图2.13给出了在Medwin调试环境下查看单片机内部资源的菜单。3.程序编译功能1)程序设计语言单片机程序设计语言包括机器语言、汇编语言和高级语言。机器语言是单片机唯一能够识别的语言。汇编语言具有使用灵活、实时性好的特点。目前,在实际项目开发中较少使用汇编语言。高级语言通用性好,且具有较好的可读性和可移植性,是目前单片机编程语言的主流。2)程序编译单片机开发系统能够提供源程序的编辑、编译和下载功能以及工程管理功能。4.程序固化功能编程器是完成这种任务的专用设备,它也是单片机开发系统的重要组成部分。  习题3答案3.1单项选择题(1)A(2)A(3)C(4)C(5)A(6)B(7)D(8)D(9)A(10)A(11)B(12)C(13)D(14)D(15)C 3.2填空题(1)P3口(2)字节,位(3)主函数main()(4)sbitFLAG=P3^1;(5)sfr(6)顺序结构、选择结构和循环结构(7)表达式加上分号“;”(8)if,switch(9)do-while,while(10)无限次(11)10000(12)unsignedchar(13)变量在MCS-51硬件系统中所使用的存储区域(14)""(15)程序存储器ROM中 3.3上机操作题(1)//xiti3_3_1.c——第三章习题3.3上机操作题(1) #includevoiddelay(unsignedchari);//延时函数声明voidmain()//主函数{while(1){P1=0x55;//按状态1的方式点亮8个LEDdelay(200);//延时P1=0xaa;//按状态2的方式点亮8个LEDdelay(200);//延时}}voiddelay(unsignedchari)//延时函数参见任务1程序ex1_1.c (2)//xiti3_3_2.c——第三章习题3.3上机操作题(2)#include//包含头文件REG51.Hvoiddelay(unsignedchari);//延时函数声明voidmain()//主函数{unsignedchari,l,r;while(1){l=0x10;//高4位灯的位置初值为00010000Br=0x08;//低4位灯的位置初值为00001000Bfor(i=0;i<4;i++){P1=~(l|r);//循环点亮灯l<<=1;//高4位灯的位置移动r>>=1;//低4位灯的位置移动delay(200);//延时}}}voiddelay(unsignedchari)//延时函数参见任务1程序ex1_1.c (3)//xiti3_3_3.c——第三章习题3.3上机操作题(3)#include//包含头文件REG51.Hvoiddelay(unsignedchari);//延时函数声明voidmain()//主函数{unsignedchari;unsignedchardisplay[]={0x89,0xff,0x86,0xff,0xc7,0xff,0xc7,0xff,0xc0,0xff};while(1){for(i=0;i<10;i++){ P1=display[i];//显示字送P1口delay(200);//延时}}}voiddelay(unsignedchari)//延时函数参见任务1程序ex1_1.c 习题4答案4.1单项选择题(1)B(2)A(3)C(4)A(5)A(6)B(7)A(8)A(9)D(10)A(11)C(12)C(13)A(14)D4.2填空题(1)①定时器T0②定时器T1③定时器方式寄存器TMOD④定时器控制寄存器TCON(2)GATE=0(3)TMOD=0x05(4)选择定时器T0/T1的工作方式(5)控制定时器的启动、停止,标志定时器的溢出和中断情况。(6)定时控制寄存器TCON、串行口控制寄存器SCON、中断允许寄存器IE、中断优先权寄存器IP(7)外部中断0、定时器0、外部中断1、定时器1、串行口(8)电平触发方式(9)硬件自动清除、软件清除、硬件配合软件共同清除(10)04.3答:当定时/计数器设置为定时工作方式时,计数器对内部机器周期计数,每过一个机器周期,计数器增1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,如果单片机系统采用12M晶振,则计数周期为:,这是最短的定时周期,适当选择定时器的初值可获取各种定时时间。当定时/计数器设置为计数工作方式时,计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数,检测一个由1到0的负跳变需要两个机器周期,所以,最高检测频率为振荡频率的1/24。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。当需要准确计算时间时往往采用定时器的定时方式,而当要对一些外部事件计数时则采用定时器的计数方式。4.4答: 软件定时是通过编写一段延时程序来实现定时,这段延时程序不完成任何操作,只是通过一些空操作浪费掉一段时间。这样的软件定时往往浪费CPU的工作效率,并且定时不够准确,前面三章的各个任务中均采用了这种方法。硬件定时是通过单片机的定时器来实现时间的计算,用户只需要对定时器的工作方式、初始值赋予合适的数值,启动定时器后,定时器将自动按照机器周期定时。这种由定时器实现的定时方式,定时时间准确、CPU的工作效率高。4.5答:MCS-51系列单片机的定时/计数器是增1计数器。对于增1计数器,计数初值应等于最大计数值减去所需要的计数值。而减1计数器,计数初值就等于所需要的计数值。例如:假设需要计数50000次。对于增1计数器的单片机,若采用方式1的定时器,最大计数值为65536,则初值应为:65536-50000=15536。而对于减1计数器,则计数初值将为50000。4.6答:在定时/计数器工作于方式1下,最大计数值为65536。若晶振频率为6MHz,则一个机器周期为2μS,所以最短定时时间为2μS(计数初值为65535),最长定时时间为2μS×65536=131072μS(计数初值为0)4.7答:定时/计数器的4种工作方式由方式寄存器TMOD中的M1、M0来进行选择,具体如下:M1M0工作方式功能说明00方式013位计数器01方式116位计数器10方式2自动再装入8位计数器11 方式3定时器0:分成两个8位计数器定时器1:停止计数4.8答:中断是通过硬件来改变CPU的运行方向。计算机在执行程序的过程中,当出现CPU以外的某种情况,由服务对象向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的;而何时调用中断服务程序事先却无法确定,因为“中断”的发生是由外部因素决定的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。中断的特点:分时操作、实时处理、故障处理4.9答: MCS-51系列单片机有5个中断源,分别是外部中断0、定时器0、外部中断1、定时器1、串行口。它们的优先级别通过寄存器IP实现。4.10答:外部中断有低电平触发和下降沿触发两种方式。通过定时器控制寄存器TCON中的IT0、IT1来选择和设定。IT1为中断触发方式控制位,当IT1=0,外部中断1控制为电平触发方式。当IT1=1,外部中断1控制为下降沿触发方式。4.11答:常用的中断函数定义语法如下:void函数名()interruptn其中n为中断类型号,C51编译器允许0~31个中断,n取值范围0~31。 习题5答案5.1单项选择题(1)C(2)A(3)C(4)B(5)B(6)D(7)B(8)C(9)A5.2(1)led[k](2)delay()5.3答:不能,因为共阴极和共阳极数码管com段接的电平不一样,点亮段码所需的电平也不同。应该将共阴极数码管的com端接至GND上,P1口和8个段之间接上非门。5.4答:LED静态显示时各位数码管相对独立,公共端恒定接地(共阴极)或正电源(共阳极),每个数码管的8个字段分别与一个8位I/O口地址相连,适合于2个及其以下的数码管显示。动态显示时各位数码管的段选线相应并联在一起,由一个8位的I/O口控制,各位的段选线由另外的I/O口控制。5.5答:每次只能点亮一行。其采用的为动态显示,具体原理为:从第一行开始点亮,每行点亮之间延时1ms,第八行结束后再从第一行开始循环显示。利用人体的视觉驻留现象,所以看到的是一个稳定的图形,好像8行同时点亮。5.6答:可以采用硬件和软件两种方式,硬件上可在键输出端加RS触发器或单稳态触发器构成去抖电路,软件上可以在检测到有按键按下时,执行一个10ms左右的延时程序,然后确认该键是否仍保持闭合状态的电平。5.7 答:独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,适合于八键以下使用;矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口,适合于八个键以上使用。 习题6答案6.1单项选择题(1)D(2)C(3)A(4)A(5)B(6)D6.2填空题(1)分辨率和建立时间(2)ILE、、、、(3)模拟,数字;数字,模拟6.3答:DAC0832与8051单片机接口时,主要有如下控制信号:ILE、/CS、/WR1、/WR2、/XFER,作用分别是:(1):转入寄存器片选信号,低电平有效。(2)ILE:输入寄存器的数据锁存允许信号,高电平有效。(3):输入寄存器的数据写信号,低电平有效。(4):DAC寄存器写信号,并启动转换。低电平有效。(5):数据向DAC寄存器传送控制信号,传送后即启动转换,低电平有效。ADC0809与8051单片机接口时,控制信号主要有:ALE、START、EOC、OE。作用分别是:(1)ALE:地址锁存允许信号在ALE上升沿,ADDA、ADDB、ADDC地址状态被送入地址锁存器中。(2)START:转换启动信号。START上跳沿时,所有内部寄存器清0;START下跳沿时,开始进行A/D转换;在A/D转换期间,START应保持低电平。(3)OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1,输出转换得到的数据。(4)EOC——转换结束状态信号。启动转换后,系统自动设置EOC=0,转换完成后,EOC=1。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。6.4答:所谓单缓冲方式就是使0832的两个输入寄存器中有一个处于直通方式,而另一个处于受控的锁存方式,或者两个输入寄存器同时受相同的信号控制的方式。在实际应用中,如果只有一路模拟量输出,或虽有几路模拟量但并不要求同步输出的情况,就可采用单缓冲方式。所谓双缓冲方式,就是把DAC0832的两个锁存器都接成受控锁存方式。6.5 答:判断A/D转换是否结束一般可采用3种方式,即EOC信号和单片机相连可有3种方式:①      延时方式:EOC悬空,启动转换后,延时100μs后读入转换结果。②      查询方式:EOC接单片机端口线,查得EOC变高,读入转换结果,作为查询信号。③      中断方式:ROC经非门接单片机的中断请求端,转换结束作为中断请求信号向单片机提出中断申请,在中断服务中读入转换结果。其中延时方式和查询方式均占用单片机CPU,即在这段时间,CPU只能做延时或查询的工作,而采用中断方式时,CPU可先执行主程序,一旦产生中断,才去处理数据接收的工作,使得CPU利用率较前面两种要高。6.6答:(1)周期为25ms的锯齿波发生器C语言源程序如下:#include#include#defineDA0832XBYTE[0x7fff]#defineucharunsignedchar#defineuintunsignedintuchari;voiddelay_100us(){TH1=0xff;//置定时器初值0xff9c,即65436,定时0.1msTL1=0x9c;TR1=1;//启动定时器1while(!TF1);//查询计数是否溢出,即定时0.1ms时间到,TF1=1TF1=0;//0.1ms时间到,将定时器溢出标志位TF清零}voidmain(void){TMOD=0x10;//置定时器1为方式1while(1){for(i=0;i<=255;i++)//形成锯齿波输出值,最大255{DA0832=i;//D/A转换输出delay_100us();}}} (2)周期为50ms的三角波C语言源程序如下:#include#include#defineDA0832XBYTE[0x7fff]#defineucharunsignedchar#defineuintunsignedintuchari,j; voiddelay_100us(){TH1=0xff;//置定时器初值0xff9c,即65436,定时0.1msTL1=0x9c;TR1=1;//启动定时器1while(!TF1);//查询计数是否溢出,即定时0.1ms时间到,TF1=1TF1=0;//0.1ms时间到,将定时器溢出标志位TF清零}voidmain(void){TMOD=0x10;//置定时器1为方式1while(1){for(i=0;i<=255;i++)//形成三角波输出值,最大255{DA0832=i;//D/A转换输出delay_100us();}for(j=255;j>=0;j--)//形成三角波输出值,最大255{DA0832=j;//D/A转换输出delay_100us();}}}(3)周期为50ms的方波C语言源程序如下:#include#include#defineDA0832XBYTE[0x7fff]#defineucharunsignedchar#defineuintunsignedintuchari,j;voiddelay_25ms(){TH1=0x9e;//置定时器初值TL1=0x58;TR1=1;//启动定时器1while(!TF1);//查询计数是否溢出,即定时25ms时间到,TF1=1TF1=0;//25ms时间到,将定时器溢出标志位TF清零}voidmain(void){TMOD=0x10;//置定时器1为方式1while(1){DA0832=255;//形成方波输出值,最大255,D/A转换输出delay_25ms();DA0832=0;//D/A转换输出delay_25ms(); }}6.7答:在选定转换通道后,ADC0809工作的主要有以下几个步骤:1.启动A/D转换,给START引脚一个下降沿;2.ALE信号与START信号一般连接在一起,这样使得在ALE信号的前沿写入地址信号,紧接着在其后沿就启动转换;3.查询EOC引脚状态,EOC引脚由0变1,表示A/D转换过程结束;4.允许读数,将OE引脚设置为1状态。5.读取A/D转换结果,从ADC0809的外部地址读取其转换结果。 习题7答案7.1单项选择题(1)A(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答:T1的溢出率取决于单片机定时器T1的计数速率和定时器的预置值。当定时器T1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8位定时器,此时TL1作计数用,自动重装载的值在TH1内。设计数的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免溢出而产生不必要的中断,此时应禁止T1中断。7.4答:参考程序如下:#include#defineucharunsignedcharcodeuchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f};ucharsend[]={0x04,0x03,0x02,0x01,0x08,0x07,0x06,0x05};inti,t;//延时函数,当t取值12000时,若晶振fosc=12MHz,大约延时1svoiddelay(t){for(i=0;i#include#include#include#include#defineucharunsignedcharucharFREQ;/*定时器计数变量*/voidmain(void){//以下是设置中断和定时器EA=1;PT0=1;ET0=1;TCON=0x08;TMOD=0x21;//定时器0为产生10ms的中断,定时器1为9600bit/s的波特率发生器TH0=-10000/256;TL0=-10000%256;TL1=0xfd; TH1=0xfd;SCON=0xd8;//串行口方式3发送PCON=0x00;TR1=1;//开定时器TR0=1;TI=1;while(1){}}//定时器0的中断服务程序,向串口发送“A”数据voidintsvr1(void)interrupt1{//重新装入定时器0的初值;TH0=-10000/256;TL0=-10000%256;FREQ=FREQ+1;//定时器T0的低四位赋值if(FREQ==100)//1秒判断{FREQ=0;printf("A");//发送字符}}乙机接收子程序参考如下:#include#defineucharunsignedcharvoidmain(void){ucharastring;//在11.059MHz晶振下,设置串行口波特率为9600bit/s,用串行口方式3接收TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SCON=0xdb;PCON=0x00;while(1){while(RI==0);RI=0;astring=SBUF;lcd_display();//液晶显示参考前面章节程序}}7.6答:参考程序如下: #include#defineINBUF_LEN4//数据长度unsignedcharinbuf1[INBUF_LEN];unsignedcharchecksum,count3;bitread_flag=0;//串行口初始化函数:init_serialcomm//函数功能:串行口初始化,设置波特率为4800bit/s,允许串口中断//形式参数:无//返回值:无voidinit_serialcomm(void){SCON=0x50;//SCON:串行口方式1,允许接收TMOD|=0x20;//设置定时器1为方式2定时PCON|=0x80;//SMOD=1;TH1=0xf4;//波特率4800bit/s,fosc=11.0592MHzTL1=0xf4;IE=0x90;//开串口中断TR1=1;//启动定时器1}//发送字符函数:send_char_com//函数功能:向串口发送一个字符//形式参数:存放字符的变量ch,unsignedchar类型//返回值:无voidsend_char_com(unsignedcharch){SBUF=ch;while(TI==0);TI=0;}//发送字符串函数:send_string_com//函数功能:向串口发送一个字符串,strlen为该字符串长度//形式参数:字符串变量*str,unsignedchar类型;字符串长度strlen,unsignedint//类型//返回值:无voidsend_string_com(unsignedchar*str,unsignedintstrlen){unsignedintk=0;do{send_char_com(*(str+k));k++;}while(k127){count3=0;inbuf1[count3]=ch;checksum=ch-128;}else{count3++;inbuf1[count3]=ch;checksum^=ch;if((count3==(INBUF_LEN-1))&&(!checksum))//最后一个字节是否为前几个字节//后7位的异或校验和{read_flag=1;//如果串口接收的数据达到INBUF_LEN个,且校验没错,//就置位取数标志}}}}voidmain()//主函数{init_serialcomm();//初始化串口while(1){if(read_flag)//如果取数标志已置位,就将读到的数从串口发出{read_flag=0;//取数标志清0send_string_com(inbuf1,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标志符,例如:unsignedcharcodetab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//将0~9的共阳极数码管字符码表定义到程序存储器中。在程序存储器中定义表格后,可以通过变量赋值实现从EPROM中读出所定义的表格数据。下面的程序段实现在程序存储器中查表、并将0~9显示字符码逐一送到P1口的操作:unsignedchari;for(i=0;i<=9;i++){P1=tab[i];//从程序存储器中取显示字符码送P1口delay();}8.5答:参考程序如下:#include"reg51.h"unsignedcharda[]={0xF9,0x80};voiddelay(unsignedinti);//延时函数声明main(){ unsignedchari;P1=0xff;//P1.0置1,允许串行移位SCON=0x00;//设串行口方式0while(1){for(i=0;i<2;i++){SBUF=da[i];//送显示TI=0;while(!TI);//等待发送完毕delay(2000);}}}voiddelay(unsignedinti){略}'