串行口通信(二)之串行口方式0 | 您所在的位置:网站首页 › 串行输入是什么意思 › 串行口通信(二)之串行口方式0 |
前言
上一篇就已经介绍串行口通信相关概念,寄存器。对串行口通信已经有一定的了解。还介绍串行口工作方式1,这个方式所用最多,务必会用。现在来介绍工作方式0,2,3。下面来了解一下。 串行口方式0串行口的工作方式0为移位寄存器I/O方式,可外接移位寄存器,一扩展I/O口,也可外接同步I/O设备。发送操作:当执行一条“SBUF=A”指令时,启动发送操作,由TXD输出移位脉冲,由RXD串行SBUF中的数据。发送完8位数据后自动置TI=1.请求中断。要继续发送时,TI必须有指令清零。接收操作:REN是串行口接收允许控制位。REN=0时禁止接收;REN=1时允许接收。当软件将REN置“1”时,即开始从RXD端口以fosc/12波特率输入数据,当接收到8位数据时,将中断标志RI置“1”。再次接收数据之前,必须用软件将RI清0。这个方式中,RXD为数据输入输出引脚,TXD为时钟输出引脚。主要用来拓展IO口。这个方式完成时需要借用外部移位寄存器。74ls164,74ls165两个移位寄存器与串行口方式0相得益彰。下面来介绍这两个寄存器与方式0的配合。 74ls164移位寄存器 概述74LS164是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA或DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。 引脚功能
真值表
数据通过DSA,DSB这两个输入端之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。当其中任意一个为低电平,则禁止新数据输入;当其中有一个为高电平,则另一个就允许输入数据。 因此两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。当 MR为低电平时,其它所有输入端都无效,同时所有输出端均为低电平。为高电平时,允许数据一直输出。 时序图
使用
#includesbit MR=P1^7; //位定义main(){ SCON=0X00; //串口方式0.禁止接收数据 IE=0X90; //打开总中断,串行口中断 MR=1; //一直允许数据传输, while(1) SBUF=0X0F; //发送数据}void interrupt_uart() interrupt 4{ TI=0; //软件置0} 上面给出简单的示范,看懂程序后就可以自行设计更复杂的程序,可以想一下用它驱动数码管。 74LS16574LS165芯片,它是 8 位并入串出移位寄存器 (使用移位寄存器芯片可以扩展一个或多个 8 位并行 I/O 口)。 引脚
使用
#includeunsigned int date;sbit SH=P1^7; //位定义main(){ SCON=0X10; //串口方式0.允许接收数据 IE=0X90; //打开总中断,串行口中断 while(1) { SH=0; //置位,将数据存进芯片 SH=1; // 移位,将芯片数据移入rxd date=SBUF; //读取数据 }} void interrupt_uart() interrupt 4{ RI=0; //软件置0 } 简单程序,看懂就行,简单入门,需要什么功能自行添加。 总结串行口方式0就只有这么多内容,主要使用来拓展IO口,和外部移位寄存器一起使用。上面的程序简单易懂,主要是为了能快速看懂,当然在实战中不可能这么简单,但会用了,开发就不成问题。方式2和3只在波特率上存在区别,它们主要用在单片机的多机通讯,下一篇将详细介绍。喜欢的朋友点个关注,转发一下吧。 |
CopyRight 2018-2019 实验室设备网 版权所有 |