第8章串行口精编.ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TI?=1,表示一帧数据发送结束。TI的状态可供软件查询,也可申请中断。CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须由软件清“0”。 (8)RI——接收中断标志位 方式0时,接收完第8位数据时,RI由硬件置“1”。在其他工作方式中,串行接收到停止位时,该位置“1”。RI?=?1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。该位的状态也可供软件查询。RI必须由软件清“0”。 (1)从机接收到的主机发来的第9位数据RB8=1时,前8位数据才装入SBUF,并置中断标志RI?=?1,向CPU发出中断请求。 在中断服务程序中,从机把接收到的SBUF中的数据存入数据缓冲区中。 (2)如果从机接收到的第9位数据RB8=0时,则不产生中断标志RI=1,不引起中断,从机不接收主机发来的数据。 若SM2?=?0,则接收的第9位数据不论是0还是1,从机都将产生RI?=?1中断标志,接收到的数据装入SBUF中。 发来的数据帧。从而保证主机与从机间通信的正确性。此时主机与建立联系的从机已经设置为单机通信模式,即在整个通信中,通信的双方都要保持发送数据的第9位(即TB8位)为0,防止其他的从机误接收数据。 (4)结束数据通信并为下一次的多机通信做好准备。在多机系统,每个从机都被赋予唯一的地址。例如,图8-16三个从机的地址可设为:01H、02H、03H。 还要预留1~2个“广播地址”,它是所有从机共有的地址,例如将“广播地址”设为00H。当主机与从机的数据通信结束后,一定要将从机再设置为多机通信模式,以便进行下一次的多机通信。 A~H:并行数据输入端。 SER(serial input 串行输入):串行输入端,用于扩展多个74LS165的首尾连接端。 QH(serial output):串行数据输出端。 /QH:也是串行数据输出端,它与QH是反相的关系。 VCC:+5V电源输入端。 GND:接地端。 在使用时,CLKINH接低电平,74LS165串行输出端QH连接单片机RXD引脚,CLK连接单片机TXD引脚。开始移位时,先置SH/LD为低电平,把并行口输入数据植入内部移位寄存器,然后使SH/LD为高电平,此时h已被移出到QH,之后开始移位操作,数据移位时按a→b→ … h的顺序进行,即先移出h,最后移出a. 8.7.2 用74LS595扩展并行输入口 74LS595的引脚功能如下: QA~QH:八位并行输出端,可以直接控制数码管的8个段。 QH1(9脚):级联输出端。多个74LS595级联时,接下一个74LS595的SI端。 SER(14脚):串行数据输入端。 /SRCLK(10脚):清零端,低点平时将移位寄存器的输出数据清零。通常接Vcc。 SRCK(11脚):数据移位时钟输入端,上升沿时数据寄存器的数据移位。QA→QB→QC→……→QH;下降沿移位寄存器数据不变。 RCK(12脚):输出数据锁存端,上升沿时移位寄存器的数据进入输出存储器锁存,下降沿时输出存储器数据不变。 /G(13脚):使能端,高电平时禁止输出(高阻态)。 在使用时,74HC595串行输入端SER连接单片机RXD引脚,SRCK连接单片机TXD引脚,/SRCLK端接高电平,/G端接低电平。数据移位时次序QA→QB→QC→…→QH;移位完成后,先置RCK为高电平,再置RCK为低电平,把并行数据锁存到输出端。 8.7.3 串行口扩展并行口应用 例8-3:如图8-11所示,74LS165外接8个开关,74HC595外接8个LED指示灯。要求用8个LED指示灯显示8个开关的状态,即Sx开关合,对应Dx灯亮;其余灯灭。 程序如下: #include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit SPL=P1^4; sbit RCK=P1^3; sbit DAT=P3^7; sbit CLK=P3^5; uchar vabl; void delay (uint x) //延时函数 { uint i; while (x--) for(i=0;i1100;i++); } uchar read_165 () //读74LS165函数 { uchar j,vabl; SPL=0; //置数,读入键值 SPL=1; //并口输入被封锁,串行移位开始 vabl=0xff; for(j=0;j7;j++) { if(DAT==1) vabl|=0x80; else va

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档