RS232串口通信 疑惑

2024-12-12 17:33:02
推荐回答(2个)
回答1:

一个字节确实是8位,是适应早期计算机硬件技术水平,数据总线是并行的8根,所以以8位数据为一个单位起名字叫“字节”,没有什么特别的奥妙。后来技术发展了,很容易制作16、32、64条 并行数据线的集成电路了,但是已经有了字节概念,为了技术的连贯性,就沿用了字节这个单位,其实早期还用过1位和4位为单位,不过应用不广泛,逐渐被放弃了。而串行通讯只用一条数据线,可以1位、2位、。。。任意位为单位传送,只要发送方和接收方都知道就没问题(为了保密中途还可以变位数)只要约定了(通信协议),技术上都可以实现。比如单纯传ASCII码,因为只有128种编码,所以7位二进制数就足够了,硬要8位一个单元,多传一个无效位就浪费传送时间。8位的就是标准的字节传输,9位的一般是8位数据加一位奇偶校验位。(简单的工业控制中还常用1位、4位为传输单位的数据)7位发送时只发送7位,第8位跳过,接着发送下一字节第一位;接收时一般最高位自动补0,凑成8位还原成字节结构。9位发送时第九位是计算所得的校验码,发完一个字节后插发这个校验码;接收时校验通过后就将最后的校验位“丢失”即可,保留的还是8位数据。总之既然是串行就可以随意约定(协议),非常灵活,软件很容易实现,当然标准协议有现成的子程序可以调用或有固化的硬件自动实现,只需要事先设定参数,使用起来省事。

回答2:

RS232、422、485、USB等都是串行通信,也就是通信时一次只能发一位二进制数。为了实现通信,在发送方和接受方是有通信协议的,涉及软件和硬件等方面的约定。硬件方面主要是接受高低电平的变化;软件方面,会约定,比如帧头、帧尾、波特率、奇偶校验、停止位等等。具体发送的时候,比如发1,对应的ASCII码就是0000001,可能需要发7次才能发完。不存在一次发7位或9位的说法,对于你想发的信息,先转化成ASCII码,在电脑看来都是一位一位的。
如果想深入了解RS232,可以买一个DB9 RS232公头,跟台式机的232接头,5针直连,2、3针分别交叉连接,再下载一个通信小软件,就能模拟通信了。 当然这个软件完全可以根据WIndows提供的串口通信函数自己编写,也很简单。