串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度
单工、半双工、全双工
单工数据传输只支持数据在一个方向上传输
半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信
全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力
奇/偶校验(ECC)
传输的一组二进制代码的数位中“1”的个数是奇数或偶数
传输距离与传输速率
当传输线使用每0.3m有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m
80C51串行口
有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H
SCON
功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志
SM0和SM1为工作方式选择位,可选择四种工作方式
SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信
在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1
REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收
TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位
在方式0和方式1中,该位未用
RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位
TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请
RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请
PCON
只有一位SMOD与串行口工作有关
SMOD波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0
中断源
举例
void initUART()
{
TMOD = 0x20; //TI计数器 方式2
TH1 = 0xf3; //初值 波特率4800 倍频
TL1 = 0xf3;
PCON = 0x80; //设置SMOD 倍频
TR1 = 1; //打开定时器
SCON = 0x50; //SCON寄存器
ES = 1; //打开串口中断
EA = 1; //打开总中断
}
void intUART() interrupt 4
{
u8 rdata;
rdata = SBUF;
RI = 0;
SBUF = rdata;
while(!TI);
TI = 0;
}
int main()
{
initUART();
return 0;
}