单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx
第4章思考和练习解答4.1什么叫串行通信和并行通信?各有什么特点?答:通信的基本方式可分为并行通信和串行通信:并行通信是数据的每位同时发送或同时接收;串行通信是数据的各位依次逐位发送或接收。8位数据并行传送,至少需要8条数据线和一条公共线,有时还需要状态、应答等控制线。长距离传送时,价格较贵且不方便,优点是传送速度快。串行通信只需要一到两根数据线,长距离传送时,比较济,但由于每次只能传送一位,传送速度较慢,随着通信信号频率的提高,传送速度较慢的矛盾已逐渐缓解。4.2 串行缓冲寄存器SBUF有什么作用?简述串行口接收和发送数据的过程。答:串行缓冲寄存器SBUF有两个:一个是串行发送缓冲寄存器,另一个是串行接收缓冲寄存器,用同一特殊功能寄存器名SBUF和同一单元地址99H。接收缓冲寄存器还具有双缓冲结构,以避免在数据接收过程中出现帧重叠错误。在完成串行初始化后,发送时只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读取接收数据。4.3 如何判断串行发送和接收一帧数据完毕?答:串行发送一帧数据完毕,CPU会将串行控制寄存器SCoN中的发送中断标志Tl自动置“1”,用户可软件查询TI位标志,也可以请求中断。串行接收一帧数据完毕,CPU会将串行控制寄存器SCON中的接收中断标志RI自动置“1”,用户可软件查询Rl位标志,也可以请求中断。需要说明的是,TI/RI必须由软件清Oo4.4 什么叫波特率?串行通信对波特率有什么基本要求?80C51单片机串行通信4种工作方式的波特率有什么不同?答:波特率是串行通信传输数据的速率。定义为每秒传输的数据位数,即:1波特=1位/秒(Ibps)串行通信对波特率的基本要求是互相通信的甲乙双方必须具有相同的波特率。80C51单片机串行通信4种工作方式的波特率:方式0波特率固定为sc12方式1波特率可变:Tl溢出率n(n=32或16);方式2波特率固定:用scn(n=64或32);方式3波特率可变:Tl溢出率n(n=32或16)。4.5 为什么80C51单片机串行通信时常采用11.0592MHz晶振?答:采用11.0592MHZ晶振,能得到波特率1200、2400>4800、9600、等规范整数值。因为若采用晶振12MHZ和6MHz等整数值,按80C51计算Tl定时初值的公式,反而不是一个规范整数值,双方通信时会产生波特率误差而影响串行通信的同步性能。4.6 RC总线只有二根连线(数据线和时钟线),如何识别扩展器件的地址?又如何识别相同器件的地址?答:具有Pc总线结构的器件在器件出厂时已经给定了这类器件的地址编码。另外,Pc总线器件还有3位引脚地址A2A1A0,可用硬件连接方式对3位引脚接VCC或接地,形成相同器件地址数据,如教材书图4-20所示。4.7 为什么80C51单片机PC总线串行扩展只能用于单主系统,且必须虚拟扩展?答:由于80C51芯片内部无I?c总线接口,因此只能采用虚拟Pc总线方式扩展,并且只能用于单主系统,即80C51只能作为FC总线主器件,不能作为从器件,从器件必须具有产(2总线接口,因此,80C51单片机不能用于多主系统。4.8 PC总线数据传送中,有哪些基本信号?一次完整的数据传送过程应包括哪些信号?答:有4个基本信号:起始信号S、终止信号P、应答信号A和入。另外,还需要用于同步的检查应答信号。一次完整的数据传送过程应包括起始S、发送寻址字节(SLAR/W)、应答、发送数据、应答、发送数据、应答、终止P。4.9 说明AT24CXX系列E2PROM页写缓冲器的作用,如何应用?答:由于E2PROM的半导体工艺特性,对E2PROM的写入时间要510ms,但AT24CXX系列串行E2PROM芯片内部设置了一个具有SRAM性质的输入缓冲器,称为页写缓冲器。CPU对该芯片写操作时,AT24CXX系列芯片先将CPU输入的数据暂存在页写缓冲器内,然后,慢慢写入E2PROM中。因此,CPU对AT24CXX系列E2PROM一次写入的字节数,受到该芯片页写缓冲器容量的限制。例如,A24C02页写缓冲器的容量为16B。写AT24CXX应用时,若CPU写入字节数超过芯片页写缓冲器容量,应在一页写完后,隔510ms重新启动一次写操作。其次,若不是从页写缓冲器页内零地址OOoo写起,一次写入不能超出页内最大地址1111。若超出,也应将超出部分,隔510ms重新启动一次写操作。4.10 参照图41电路,用2片74HC164,扩展16位并行输出,驱动16个发光二极管,如图426所示,从左至右每隔0.5s移动点亮,不断循环。试编制程序,画出PrOteUSISIS虚拟电路,并仿真调试。解:include<reg51.>头文件包含访问政库函数rcg5LhsbitP27=P27;定义位标识符P27为P2.7unsignedcharcodelcd32=定义彩灯循环码数组,存在ROM中0.0x80.0.0x40.0.0x20.0.0x10.0.0x08.0.0x04.0.Qx02.0.0x01./74HC164(I)先亮0x80,0,0x40,0,0x20,0,0x10,0,OXO8,0,OXO4,0,0x02,0,0x0L0:/74HC164(U)后亮void main ()unsigned char i;unsigned long t;SCON=O;ES=O;P27=l;while(l)fbr(i=O; i<32; i=i+2) SBUF=ledi;while (TI=O);TI=O;SBUF=lcdi+l;while (=0);TI=0;无类型主函数定义无符号字符型变量i定义无符号长整符型变量t置串行口方式0禁止串行中断开启74HC164并行输出无限循环彩灯循环输出依次串行发送彩灯数组元素等待串行发送完毕串行发送完毕,清发送中断标志依次串行发送彩灯数组元素等待串行发送完毕串行发送完毕,清发送中断标志fbr(t=0:t<11000:t+):延时0.5秒4.11 参照图42电路,用2片CC4094,扩展16位并行输出,控制16个发光二极管,如图427所示,要求按下列顺序每隔0.5秒驱动运行,不断循环。试编制程序,画出PrOtelISISIS虚拟电路,并仿真调试。从左向右依次点亮,每次2个;从左向右依次点亮,每次增加2个,直至全亮;从左向右依次暗灭,每次减少2个,直至全灭;返回,不断循环。解:C51编程如下:Winc Iude <reg51.h>sbit P10=P10;unsigned char code led48=头文件包含访问或库函数reg51,h定义位标识符PlO为PLO从左向右每次点亮2个从左向右每次增加2个从左向右每次减少2个定义彩灯循环码数组,存在ROM中0,0xc0,0,0x30,0,0x0c,0,0x03,0xc0,0,0x30,0,0x0c,Ot0x03,0,0.0xc0,0.OxfO.0.0xfc.0.0xfEOxcOjOxfCOxfOjOxftOxfcjOxfCOxfijOxff.OXff,0x3f,OxffjOxOfj0xff,0x03j0xff,0y0x3ff0,OxOfjOjOXo3,0,05OJ;void main ()unsigned char i;unsigned long t SCON=O;ES=O;whilc(l)for (i=0; i<48; i=i+2) P10=0:SBUF=lcdi;while (TI=0):TI=0;SBUF=ledi+l;while (TI=O);TI=0;P10=l;无类型主函数定义无符号字符型变量i(循环序号)定义无符号长整符型变量t(延时参数)置串行口方式0禁止串行中断无限循环彩灯循环输出关闭CC4094并行输出依次串行发送彩灯数组元素等待串行发送完毕串行发送完毕,清发送中断标志依次串行发送彩灯数组元素等待串行发送完毕串行发送完毕,清发送中断标志开启CC4094并行输出for(t=0;K11000;t+);/延时0.5秒4.12 参照任务11.2中4021“并入串出”程序,试编制4014“并入串出”程序,并在图4-8虚拟电路中仿真调试。解:参阅教材书任务1L2中提示:若选用CC4014,置入并行数据时需由TXD端CP脉冲上升沿触发,只需将“ps=l;PS=0;”程序行改为“ps=l;TXD=0;TXD=1;PS=0;",其余相同。include<rcg5l.h>sbites=P27:voidmain()SCObM);包含访问或库函数mg5Lh定义位标识符P鼠为P2.7主函数置串行方式0ES=O:禁止串行中断vhile(l)三=l;TXD=O;TXD=I:陛=0;REN=I;While(RI=O);REN=O;RI=O;Pl=-SBUF;)无限循环,不断输入输出数据信号允许锁存并行数据/TXD端发出上升沿脉冲,触发锁存允许串行移位操作启动8OC51串行移位接收等待串行接收完毕串行接收完毕,禁止接收清接收中断标志接收数据输出到PI口驱动发光二极管验证4.13 参照图45电路,用2片74HCl65,扩展16位键状态信号并行输入,如图428所示,要求将16位键信号数据存80C51内RAM30H、31H试编制程序,画出ProtelISISIS虚拟电路,并仿真调试。解:C51编程如下:include<reg5l.h>include<absacchsbitP27=P27:头文件包含访问或库函数reg51.h头文件包含绝对地址访问摩函数absaec.h定义位标识符P27为P2.7voidmain()SCON=0;无类型主函数置串行口方式0,禁止接收ES=O;while(l)P27=0;P27=l;REN=I;while(RI=O);REN=0;RI=O;DBYTE0x30=SBUF;REN=I;While(RI=O):禁止串行中断无限循环,不断读取键值锁存并行输入数据,允许串行移位操作允许并启动串行接收等待串行接收KOK7状态数据禁止接收清接收中断标志,即再次启动串行接收读入KoK7状态数据,存内RAM40H启动第2帧串行接收等待串行接收Ks-K15状态数据REN=0;RI=0;DBYTE0x31=SBUFJ禁止接收串行接收完毕,清接收中断标志读入KSKis状态数据,存内RAM41H需要注意的是,禁止接收REN=O指令必须紧跟在串行接收完毕Rl=I后,否则将发生帧串收数据畸变错误。4.14 参照图4-6电路,用2片CC4021,扩展16位键状态信号并行输入,如图429所示,要求将16位键信号数据存80C51内RAM40H、41H试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51编程如下:#include<rcg5l.b>in