串行口编程首先与之联系紧密的是各种寄存器了。然后再整理各种串口通信模式下的通信方式。然后再将波特率的计算公式贴上。至于MAX232、TMOD、TCON等寄存器应该是另一块知识点。TMOD、TCON之前笔记过。还没有笔记的知识点在用到了之后就会使劲总结的。目前浅显的境界为:用 -- >学 -->用 ---> 总结,串行通信的路子也是这样的。
特殊功能寄存器,字节地址98H,可位寻址。
SCON用以设定串行口的工作方式,接收/发送控制以及设定状态标志等。复位时SCON全部被清0。
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
位符号 | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
SM0-SM1串行口工作方式设定:
SM0 | SM1 | 方式 | 功能说明 |
0 | 0 | 0 | 同步移位寄存器方式(通常用于扩展I/O口) |
0 | 1 | 1 | 10位异步收发( 8位数据),波特率可变(由定时器1的溢出率控制) |
1 | 0 | 2 | 11位异步收发( 9位数据),波特率固定 |
1 | 1 | 3 | 11为异步收发( 9位数据),波特率可变(由定时器1的溢出率控制) |
SM2--多位机控制位
主要用于SM0和SM1决定的方式2和方式3。当接收机的SM2=1时,可以利用收到的RB8来控制是否激活RI ( RB8= 0时不激活RI,收到的信息丢弃;RB8 = 1时收到的数据进入SBUF,并激活RI )。当SM2=0时,不论收到的RB8是0还是1,均可以使收到的数据进入SBUF,并激活RI(此时RB8不具有控制RI激活的功能 )。通过控制SM2,可以实现多级通信。在方式0时,SM2必须使0。在方式1时,若SM2=1时,若SM2=1,则只有接收到有效停止位时,RI才置1.
REN允许串行接收位
REN =1允许,REN = 0不允许
TB8--方式2,3中发送数据的第9位 | RB8--方式2,3中接收数据的第9位 |
在方式2或方式3中,是发送数据的第9位。可以用软件规定其作用,可以用做数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。 | 在方式2或方式3中,是接收数据的第9位,可作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2 = 0,则RB8是接收到的停止位。 |
一般情况下常使用方式1进行通信,若涉及到方式2或方式3时可再将其用到程序当中。
TI--发送中断标志位 | RI--接收中断标志位 |
在方式0时,当串行发送第8位数据结束时,或在其他方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断申请。在中断服务程序中,必须用软件将其清0,取消此中断的申请。 | 在方式0时,当串行接收第8为数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发出申请中断。必须在中断服务程序中,用软件代码将其清0,取消此中断。 |
特殊功能寄存器,字节地址为87H,不能位寻址。
PCON用来管理单片机电源部分,包括上电复位检测、掉电模式、空闲模式等。单片机复位时PCON全部被清0。
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
位符号 | SMOD | (SMOD0) | (LVDF) | (P0F) | GF1 | GF0 | PD | IDL |
SMOD--该位与串口通信波特率有关。
SMOD = 0:串口方式1,2,3时,波特率正常。
SMOD = 1:串口方式1,2,3时,比特率加倍。
(SMOD0) | (LVDF) | (P0F) |
这3个位为STC单片机中特有的功能位。
GF1,GF0--通用工作标志位,用户可以自由使用。
PD--掉电模式设定位。
PD = 0,单片机处于正常工作状态。
PD = 1,单片机进入(POWER DOWN)模式,可由外部中断低电平触发或由下降沿触发或者硬件复位模式唤醒,进入掉电模式后,外部晶振停振,CPU、定时器、串口全部停止工作,唯外部中断继续工作。
IDL--空闲模式设定位
IDL = 0:单片机处于正常工作状态。
IDL = 1:单片机进入空闲模式,除了CPU不工作外,其余任然继续工作,在空闲模式下可由任意一种中断或硬件复位唤醒。
1.方式0。方式0时,串行口为同步移位寄存器的输入/输出方式,主要用于扩展并行输入或输出口。数据由RXD( P3.0 )引脚输入或输出,同步移位脉冲由TXD( P3.1 )引脚输出。发送和接收均为8位数据,地位在先,高位在后,波特率固定为f(osc)/12。
2.方式1。方式1是10位数据的异步通信口,其中1位起始位,8位数据位,1位停止位。TXD( P3.1 )为数据发送引脚,RXD( P3.0 )为数据接收引脚。其传输波特率是可变的,对于51单片机,波特率由定时器1的溢出率决定。方式1在通信是通常用的。
3.方式2,3。方式2,3时为11位数据的异步通信口。TXD( P3.1 )为数据发送引脚,RXD( P3.0 )为数据接收引脚。在这两种方式下,起始位1位,数据位9位(含1位附加的第9位,发送时为SCON重的TB8,接收时为RB8)。停止位1位,一帧数据为11位。方式2的波特率固定为晶振率的1/64或1/32,方式3的波特率由定时器T1的溢出率决定。
(1)定义
单片机或计算机在串口通信时的速率用波特率表示,它定义为每秒传输二进制代码的位数。
实践 知识 点 | 串行接口或中断直接传送串行信息的最大距离与传输速率及传输线的电气特性也有关。当传输线使用每0.3m有50pf电容的非平衡屏蔽双绞线时,传输距离随传输速率的增大而减小。当比特率超过1000bps,时最大传输距离迅速下降,如9600bps时最大距离下降到只有76m。因此我们在做串行口通信实验选择较高速率传输数据时,尽量缩短数据线的长度,为了能使数据安全传输,计时在较低速率下也不要使用太长的数据线。一般来说,传输速率越大,线的最大传输距离越小。【 传输速率跟最大传输距离应该在传输线的说明书中】 |
(2)波特率的计算
51单片机串行口有4种工作方式,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的4种工作方式对应3种波特率。由于输入的移位时钟来源不同,所以各种波特率计算公式也不同:
方式0的波特率 = f(osc)/12
方式1的波特率 =(2^SMOD/32) * ( T1溢出率 )
方式2的波特率 = (2^SMOD/64) * f(osc)
方式3的波特率 = (2^SMOD/32) * ( T1溢出率 )
f(osc)为系统晶振频率,SMOD是PCOM寄存器的最高位,要么为0要么为1;T1溢出率即定时器T1溢出的频率。
所有的知识点笔记源头为《新概念 51单片机C语言教程》 作者 郭天祥
此次笔记记录完毕。