## 串行口通信原理及操作
(1)并行通信方式:简单的来说,就是一次性传输8位数据(1字节),需要8条数据线。并行通信控制简单、相对传输速度快,但由于传输线较多,长距离传输的成本高且收、发方的各位同时接收存在困难
(2)串行通信方式:将数据字节分成一位一位的形式在一条传输线上逐个传输。必要过程——发送时把并行数据变成串行数据发送到线路上,接收时再把串行信号改变成并行数据,这样才能被计算机及其他设备处理,串行通信传输线少,长距离传输时成本低。串行通信两种方式:异步串行通信、同步串行通信(时间同步)。
串行通信的制式:
1.单工:指数据传输仅能沿一个方向,不能实现反向传输
2.半双工:指数据传输可以沿两个方向,但需要分时进行
3.全双工:指数据可以同时进行双向传输
波特率
单片机或计算机在串口通信时的速率用波特率来表示,收发双方要一致。
波特率计算
通过编程可以对单片机串行口设定为四种工作方式,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
计算公式如下:
51的波特率如果不想手算可以通过软件来进行TH1,TL1的初值计算。
PCON寄存器只需要了解最高位SMOD,如果SMOD=1则表示波特率加倍,SMOD=0表示波特率不加倍。
51单片机串行口结构
51单片机串行口是一个可编程的全双工的通信接口。
51单片机的串行口主要由两个独立的串行数据缓冲器SBUF(一个发送,一个接收)等各种寄存器及若干控制门电路组成。
串行口控制寄存器SCON
用来设定串行口的工作方式,接收/发送控制以及设置状态标志等。
SM0,SM1——工作方式选择位。通过对SM0,SM1设定,来对工作方式进行设定。
TI——发送中断标志位。串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断申请。在中断服务程序中,必须用软件清0,取消此中断申请。
RI——接收中断标志位。串行接收停止位的中间时,由内部硬件使RI置1,向CPU发出中断申请。在中断服务程序中,必须用软件清0,取消此中断申请。
REN——允许串行口接收数据设置为1
串口方式1编程与实现
(1)确定T1工作方式(编程TMOD寄存器)
(2)计算T1的初值,装载TH1,TL1;
(3)启动T1(编程TCON中的TR1位)
(4)确定串行口在中断方式工作时,要进行中断设置
串口初始化代码
void init()
{
TMOD=0x20; //T1工作方式,8位重装载
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
EA=1;
ES=1;
}
串口中断服务函数代码
void usart()interrupt 4
{
u8 receive_data=SBUF;//接收缓冲器
RI=0;//接收到停止位时,软件清零
SBUF=receive_data;//发送
while(!TI);//当发送完TI=1,跳出循环
TI=0;
}
发送字符串案例
/**发送字符串代码**/
void send_byte(char c)
{
SBUF=c;
while(!TI);//当发送完TI=1,跳出循环
TI=0;
}
void send_string(char *p)
{
while(*p!='\0')
{
send_byte(*p);
p++;
}
}
void usart()interrupt 4
{
if(RI==1)
{
RI=0;
command=SBUF;//获取接收到的信息赋值给command
}
}