单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx

上传人:夺命阿水 文档编号:1100549 上传时间:2024-03-15 格式:DOCX 页数:12 大小:80.78KB
返回 下载 相关 举报
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx_第1页
第1页 / 共12页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx_第2页
第2页 / 共12页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx_第3页
第3页 / 共12页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx_第4页
第4页 / 共12页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx》由会员分享,可在线阅读,更多相关《单片机应用项目式教程——基于Keil和Proteus第2版习题答案第4章思考和练习解答.docx(12页珍藏版)》请在课桌文档上搜索。

1、第4章思考和练习解答4.1什么叫串行通信和并行通信?各有什么特点?答:通信的基本方式可分为并行通信和串行通信:并行通信是数据的每位同时发送或同时接收;串行通信是数据的各位依次逐位发送或接收。8位数据并行传送,至少需要8条数据线和一条公共线,有时还需要状态、应答等控制线。长距离传送时,价格较贵且不方便,优点是传送速度快。串行通信只需要一到两根数据线,长距离传送时,比较济,但由于每次只能传送一位,传送速度较慢,随着通信信号频率的提高,传送速度较慢的矛盾已逐渐缓解。4.2 串行缓冲寄存器SBUF有什么作用?简述串行口接收和发送数据的过程。答:串行缓冲寄存器SBUF有两个:一个是串行发送缓冲寄存器,另

2、一个是串行接收缓冲寄存器,用同一特殊功能寄存器名SBUF和同一单元地址99H。接收缓冲寄存器还具有双缓冲结构,以避免在数据接收过程中出现帧重叠错误。在完成串行初始化后,发送时只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读取接收数据。4.3 如何判断串行发送和接收一帧数据完毕?答:串行发送一帧数据完毕,CPU会将串行控制寄存器SCoN中的发送中断标志Tl自动置“1”,用户可软件查询TI位标志,也可以请求中断。串行接收一帧数据完毕,CPU会将串行控制寄存器SCON中的接收中断标志RI自动置“1”,用户可软件查询

3、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单片机串行通信时常

4、采用11.0592MHz晶振?答:采用11.0592MHZ晶振,能得到波特率1200、24004800、9600、等规范整数值。因为若采用晶振12MHZ和6MHz等整数值,按80C51计算Tl定时初值的公式,反而不是一个规范整数值,双方通信时会产生波特率误差而影响串行通信的同步性能。4.6 RC总线只有二根连线(数据线和时钟线),如何识别扩展器件的地址?又如何识别相同器件的地址?答:具有Pc总线结构的器件在器件出厂时已经给定了这类器件的地址编码。另外,Pc总线器件还有3位引脚地址A2A1A0,可用硬件连接方式对3位引脚接VCC或接地,形成相同器件地址数据,如教材书图4-20所示。4.7 为什么

5、80C51单片机PC总线串行扩展只能用于单主系统,且必须虚拟扩展?答:由于80C51芯片内部无I?c总线接口,因此只能采用虚拟Pc总线方式扩展,并且只能用于单主系统,即80C51只能作为FC总线主器件,不能作为从器件,从器件必须具有产(2总线接口,因此,80C51单片机不能用于多主系统。4.8 PC总线数据传送中,有哪些基本信号?一次完整的数据传送过程应包括哪些信号?答:有4个基本信号:起始信号S、终止信号P、应答信号A和入。另外,还需要用于同步的检查应答信号。一次完整的数据传送过程应包括起始S、发送寻址字节(SLAR/W)、应答、发送数据、应答、发送数据、应答、终止P。4.9 说明AT24C

6、XX系列E2PROM页写缓冲器的作用,如何应用?答:由于E2PROM的半导体工艺特性,对E2PROM的写入时间要510ms,但AT24CXX系列串行E2PROM芯片内部设置了一个具有SRAM性质的输入缓冲器,称为页写缓冲器。CPU对该芯片写操作时,AT24CXX系列芯片先将CPU输入的数据暂存在页写缓冲器内,然后,慢慢写入E2PROM中。因此,CPU对AT24CXX系列E2PROM一次写入的字节数,受到该芯片页写缓冲器容量的限制。例如,A24C02页写缓冲器的容量为16B。写AT24CXX应用时,若CPU写入字节数超过芯片页写缓冲器容量,应在一页写完后,隔510ms重新启动一次写操作。其次,若

7、不是从页写缓冲器页内零地址OOoo写起,一次写入不能超出页内最大地址1111。若超出,也应将超出部分,隔510ms重新启动一次写操作。4.10 参照图41电路,用2片74HC164,扩展16位并行输出,驱动16个发光二极管,如图426所示,从左至右每隔0.5s移动点亮,不断循环。试编制程序,画出PrOteUSISIS虚拟电路,并仿真调试。解:include头文件包含访问政库函数rcg5LhsbitP27=P27;定义位标识符P27为P2.7unsignedcharcodelcd32=定义彩灯循环码数组,存在ROM中0.0x80.0.0x40.0.0x20.0.0x10.0.0x08.0.0x0

8、4.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; i32; i=i+2) SBUF=ledi;while (TI=O);TI=O;SBUF=lcdi+l;while (=0);TI=0;无类型主函数定义无符号字符型变量i定义无符号长整符型变量t置串行口方式0禁止串行中断开启74HC164并行输出无

9、限循环彩灯循环输出依次串行发送彩灯数组元素等待串行发送完毕串行发送完毕,清发送中断标志依次串行发送彩灯数组元素等待串行发送完毕串行发送完毕,清发送中断标志fbr(t=0:t11000:t+):延时0.5秒4.11 参照图42电路,用2片CC4094,扩展16位并行输出,控制16个发光二极管,如图427所示,要求按下列顺序每隔0.5秒驱动运行,不断循环。试编制程序,画出PrOtelISISIS虚拟电路,并仿真调试。从左向右依次点亮,每次2个;从左向右依次点亮,每次增加2个,直至全亮;从左向右依次暗灭,每次减少2个,直至全灭;返回,不断循环。解:C51编程如下:Winc Iude sbit P10

10、=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

11、()unsigned char i;unsigned long t SCON=O;ES=O;whilc(l)for (i=0; i48; 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并行

12、输出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;,其余相同。includesbites=P27:voidmain()SCObM);包含访问或库函数mg5Lh定义位标识符P鼠为P2.7主函数置串行方式0ES=O:禁止串行中断vhile(l)三=l;TXD=O;TXD=I:陛=0;REN=I;

13、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编程如下:includeincludeabsacchsbitP27=P27:头文件包含访问或库函数r

14、eg51.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;DBY

15、TE0x31=SBUFJ禁止接收串行接收完毕,清接收中断标志读入KSKis状态数据,存内RAM41H需要注意的是,禁止接收REN=O指令必须紧跟在串行接收完毕Rl=I后,否则将发生帧串收数据畸变错误。4.14 参照图4-6电路,用2片CC4021,扩展16位键状态信号并行输入,如图429所示,要求将16位键信号数据存80C51内RAM40H、41H试编制程序,画出ProteusISIS虚拟电路,并仿真调试。解:C51编程如下:#includeincludesbitP27=P27;头文件包含访问出库函数reg51.h头文件包含绝对地址访问库函数absacc.h定义位标识符P27为P27voidm

16、ain()SCON=O;无类型主函数置串行口方式0,禁止接收ES=O;禁止串行中断while(l)P27=1;P27=0;REN=I;While(RI=O):REN=O;RI=O:无限循环,不断读取键值锁存并行输入数据,允许串行移位操作允许并启动串行接收等待串行接收K0-K7状态数据禁止接收清接收中断标志DBYTE0x40=SBUF:REN=I;while(RI=O);REN=O;RI=O;DBYTE0x41=SBUF;读入RK7状态数据,存内RAM40H。启动第2帧串行接收等待串行接收K8K5状态数据禁止接收串行接收完毕,清接收中断标志读入KgKi5状态数据,存内RAM41H4.15 设甲乙

17、机以串行方式2进行数据传送,bsc=12MHz,SMOD=Oo甲机共发送10帧数据(设为09共阳字段码,依次存在外RoM中),乙机接收后,存在以40H为首址的内RAM中,试分别编制甲乙机串行发送/接收程序,并在图49虚拟电路中仿真调试。解:串行方式2,波特率固定为)sc640甲机发送子程序:inclieunsignedcharcodec10=头文件包含访问血库函数reg51h定义发送数据数组,并赋值0xc0?0xf9;0xa4;0xb0;0x99;0x92;0x82?0xf8;0x80;0x90;voidmain()unsignedchari;SCON=0x90;PCON=O;ES=O:主函数

18、定义发送数据序号i置串行方式2,允许接收置SMOD=0,串口禁中fbr(i=O;i20;i+);适当延时,让乙机充分准备for(i=0;i10;i+)SBUF=ci;while(TI=O);TI=0;乙机接收C51程序:循环发送10个数据发送数据等待一帧数据串行发送完毕发完一帧,清串行发送中断标志includegincludeunsignedchari=0;voidmain()SCON=0x90;PCON=O;IE=OX90;Whne(1);voidins()intemt4RI=0;DBYTE0x4O+i=SBUF;i+;if(i=10)REN=O;ES=0;头文件包含访问政库函数rcg51,

19、h头文件包含绝对地址访问库函数absacc.h定义接收数据字号i主函数,置串行方式2,允许接收/置SMOD=O串口开中无限循环,等待串口中断乙机串行中断函数清串行接收中断标志依次存接收数据接收数据加序号1若10个数据收完,禁止接收,禁止串行中断4.16 设甲乙机以串行方式3进行数据传送,PrOtelISlSlS虚拟仿真电路如图43()所示。bsc=11.0592MHz,波特率为4800bs,SMOD=I,TB8/RB8作为奇偶校验位。按如下要求双机通信,试分别编制甲乙机串行发送/接收程序,画出ProtCUSlSlS虚拟电路,并仿真调试。甲机每发送一帧数据(设为O9共阳字段码,存在外ROM中),

20、同时在Pl口显示发送数据;用P2.7(驱动LED灯)显示奇偶校验位(1亮O暗)。接到乙机回复信号后,再暗0.5秒(作为帧间隔);然后发送下一数据,直至K)个数据串送完毕;显示再暗0.5秒(作为周期间隔),然后重新开始第二轮串送循环操作。乙机接收数据,送P2口显示;用PLl显示第9位数据(1亮。喑);奇偶校验后,乙机发送回复信号,用PLO显示校验标志(正确时亮灯,出错时灭灯)。解:串行方式3波特率取决于Tl溢出率,计算Tl定时初值:TlwF256一X=256-今X15=256-12=244=F4H3212X波特率32I248OO甲机发送子程序:*inclde头文件包含访问建L席函数reg51hs

21、bitP27=P27;定义奇偶标志灯驱动端bitf=0:定义乙机回复标志,并清0Luisignedchari=0:定义发送数据序号i,并赋值unsignedcharcodec10=定义发送数据数组,并赋值OXCo,0xf9.0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;voidmain()“甲机主函数unsignedlongj;定义延时参数jTMOD=0x20:ZSTl定时器工作方式2TH0=0xf4;TL0=0xf4;。置Tl计数初值TRl=1;/Tl启动SCON=OxdO;置串行方式3,允许接收PCON=0x80;置SMOD=IIE=0x90:串口开中,T

22、l禁中whilc(l)无限循环for(i=0;i10:i+)循环发送10个数据ACC=ci;取发送数据TB8=P;P27=!P;奇偶标志送TB8,并送P2.7显示SBUF=ACC;Pl=ACC;串行发送一帧数据,并送Pl口显示Whne(Q=0);原地等待乙机回复X;有回复,清乙机回复标志Pl=Oxff;P27=l;/ZPl停显示,奇偈标志灯灭fbr(j=0JH000d+);)停显示0.5秒后,返回循环,继续发送数据for(j=O5j27=!P;奇偶校验位送TB8,并送P2.7显示SBUF=ACC;Pl=ACC;)/.嚏发数据,并送Pl显示elseif(SBUF=O)若回复0,未出错,置乙机回复

23、标志乙机接收C51程序:include sbit P10=P10; sbit P11=P11; void main ()TMOD=0x20;TH0=0xf4: TLO=Oxf4;TR1=1;SCON=OxdO;PCON=0x80;IE=0x90;whUe(l)j)头文件包含访问血库函数reg5Lh定义校验标志灯驱动端定义奇偶标志灯驱动端乙机主函数置TI定时器工作方式2/置Tl计数初值/Tl启动置串行方式3,允许接收唱SMOD=I.串口开中,Tl禁中void ins() intemt 4 unsigned long j;if(TI=I) TI=O;else RI=O;ACC=SBUF;P2=AC

24、C;P11=! RB8: if(P=RB8) P10=0;for (j=0; jFFH、0)写入AT24C02首址为30H的连续单元中;再将其读出,存在80C51首址为50H的连续单元中。试编制程序,并在图41I虚拟电路中仿真调试。解:C51程序如下:indude三mcludesbjtSCLPsbitSDA=P11;voidSIAT()SDA三1;SCL-1;SDA-O;SeL-0;VoJdSTOP()SDA=O;SCL=1;SDA=I;SCL三OJvoidACK()(SDA-O;SCL-1;SCL=O;SDA=IJvoidNACK()SDA=1;SCL=I;SCL-O;SDA-0;bitCA

25、CK()SDA=1;SCL=1;FO=SDA;SCL=O;retum(Fo);头文件包含访问电库酶reg上头文件包含访问触屏酗三g三-h定义位标识符SCL为PLO定义位标识符SDA为PLl启动信号C51子函数SIAT取SDA高电平时牛将戈发出0寸钟脉冲在时*修戈高电平期间,SDA下变(启动信号规定动作)SCL低电平复位,与SCL=I组麻寸神脉;中终止信号C51子由数STOP取SDA低电平B彘够戋发出0寸钟脓冲在R苴恸高电平期间,SDA上跳变(终止信号规定动作)SCL低电平复位,与SCL=I组翻寸钟脉冲发送应答AC51子函数AcK数据戋低电平(发送数据0”)时寺椎发出0寸神脉冲.与SCL=I组成

26、a璐幡冲数殿高电平复位发送应答工C51子函数NACK效据关高电平(发送数据“1”)时年阴戋发出a寸钟脉冲与ScL=I组成H寸轴脉冲数墀戈低电平复位检查应箸C51子困数CACK数殿高电平(置SDA为输入态)时锵戋发的寸钟脉冲取应答信号FO与SCL=I组成a寸钟脉冲返回应答信号(FO为PSw5)voidWRlB(unsignedcharx)unsignedchari;for(i=0;i8;i+)if(xfc0x80)=0)SDA=0;elseSDA=1;SCL=1;SCL=O;x=l;unsignedcharRDlB()unsignedcharijc=O;SDA=I;for(i=0;i8;i+)S

27、CL=1;x=(xl)ISDA;SCL=0;retum(x);写一字节C51子函数WRlB,形参x(发送数据)定义无符号字符型变量序号i循环,逐位发送/最高位(发送位)为0,数据线发送0最高位(发送位)为1,数据线发送1时钟线发出时钟脉冲与SCL=I组成时钟脉冲,发送数据左移一位读一字节C51子函数RDIB,有返回值(接收数据)/定义无符号字符型变量i(序号)、X(返回值)数据线高电平(置SDA为输入态)循环,逐位接收时钟线发出时钟脉冲原接收数据左移一位后与新接收位(自动转型)逻辑或与SCL=I组成时钟脉冲返回值X(接收数据)void WR2B (unsigned char unsigned

28、char t;msmed mt j;sAT();NRIB (OxaO);CACK(XXRIBQa);CACK(Xf (i=O; r; r+) WRlB(ai);CACK ();STOP();fbr(j=0;j1000;j+);void RDXB (unsigned dar unsigned dar i;SiATO;WRlB (0xa0);CACK(X!BQa);CACK ();STAT();WRIB (0xal);CACK ();fbr(iO; in-l;t+)bW*DlBO;ACK();b(t-RDlB();NACK ();STOPOJvoid main ()unsigned char al

29、6=unsigned char b16;WRNB (aJ6f0x30);RDNB (bj 16,0x30);while(l);atn,礴。写n字节C51子函数定义无符号字符型变置序号i。定义无符号整型变触时缪数J发启浏a号发送写寻址字节检查应答发送写入AT24CXX片内子地址首地址。检查应管用翻写入n字节。写入一个字节;检查应答加个数据写入完毕,发终止信号.7页氨时5msb11JLsa)像n字节C51子函数定义无符号字符型变里序号i发启动信号发送写寻址字节检查应答发送读AT24CXX片内首地址检查应答再次发启动信号发送读寻址字节检查应答循环读出5-D个字节:按收一个字节。发送应管A掖收最后一个

30、字节“发送6Z管彳H个数据触完毕,发终止信号/无类型主函数。/定义写入数组a16,并赋值0xll.0x22.0x33.0x44.0x55.0x66.0x77.0x88.0x99.0xaa.0xbb.0xcc.0xdd.Oxee.Oxff.O);/定义存入数组b16写AT24CXX子函数读AT24CXX子函数,存入数组b16无限循环,原地踏步KeilC51软件调试和ProteUSISIS虚拟电路仿真见例9-16。建议读者试一试去除AT24CXX页写延时,会产生什麽后果?4.18 已知电路及条件同上例,要求将该16个数据写入AT24C024AH版H单元中;再将其读出,存在80C51内RAM中。解:

31、AT24C02一次写入字节不能超出页写缓冲器最大地址,即不能超出页内地址1111,否则会引起地址翻卷,导致出错。因此,需分二次写入。第一次写入4AH4FH单元,第二次写入50H59H单元,中间还必须有页写延时。据此,C51主函数修改如下,其余与上题相同。voidmain()unsignedcharal6J=无类型主函数/定义写入数组a16,并赋值0xl1.0x22.0x33.0x44.0x55.0x66.0x77.0x88.0x99.OxaafOxbbfOxccjOxdd.Oxcc.OxfEO;unsignedcharb16;WRNB(a,6,0x4a);WRNB(a+6),10,0x50);RDNB(bj1650x4a);while(l)j/定义存入数组b16写AT24CXX子函数,先写6个字节写AT24CXX子函数,再写10个字节读AT24CXX子函数,存入数组b8无限循环,原地踏步

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号