计算机的数据交换有两种方式,分别是串行通信和并行通信。
并行通信:我们以8位(一个字节)的数据为例,在并行通信下,8位数据是同时传输的,同时发送,同时接受。所以通信的双方需要一个公共的时钟信号。并行传输速度快,效率高。但是传输需要的数据线多,传输距离近。
串行通信:仍然以8位的数据为例,每一位数据都是分时发送的,接收方也是一位一位的接受。串行通信只需要一根数据线就可以,成本低。适用于大规模和远距离的数据传输。
异步传输模式:每个传输的字符都用起始位和终止位包装起来,在字符间允许有长短不一的间隙。
同步传输模式:一个数据块包含着许多连续的字符,在字符之间没有空闲。同步传输可以方便的实现某一通信协议要求的格式。
波特率:在这里定义为串行通信每秒钟传送的“位”的个数。即n波特 = n b/s。在RS-232C标准中,串行通信的波特率规定如下:600,1200,2400,4800,9600等。
串行口的波特率计算:
在方式0下,波特率固定为:F/12 (F为晶振频率)
方式2下,波特率固定为:F/32或者F/64 (取决于PCON寄存器的SMOD位,若SMOD = 1,则是F/32;否则为F/64)。
方式1和方式3:采用了T1定时器的溢出率作为波特率的发生器,因此计算公式为:
K*F/[32*12*(2^n - X)]。
其中若SMOD = 1,则K = 2,否则K = 1,F为晶振频率,n为定时器的位数(即定时器处于哪种工作模式下),X是定时器填充的初值。
在串行通信中要求通信双方拥有一致的波特率,但是有时候我们无法精确的达到那个波特率,此时我们需要考量在SMOD = 1和SMOD = 0这两种情况下哪一个所产生的相对误差较小,我们就去选用哪一个。
相对误差 = (实际值 - 理论值 ) / 理论值 * 100%