文章目录
一、通信的有关概念
1、什么是通信
1、人之间的通信:说话、写信、信号、手势、眼神、表情等;
2、人和物之间的通信:按键、显示器、鼠标、触摸屏、蜂鸣器等;
3、计算机和计算机之间的通信:UART、SPI、IIC、CAN、网络等。
2、通信的关键
1、事先约定:通信协议(格式、速率、时间);
2、基本信息单元:几个bit、几个字节;
3、有效信息的编码、传输和解码:数据代表的实际意义。
3、通信的专业概念
1、同步和异步:是否有时钟线;
2、单工、半双工、全双工:是否可以同时收发;
3、并行和串行:数据线有单根还是多根;
4、电平信号和差分信号:电平和差分信号。
二、什么是串行通信
1、串口通信
1、一种特定的通信协议;
2、别名:串行通信、串口通信、URAT、SURAT;
3、类型:异步、串行、全双工。
2、主要用途
1、早期用于计算机之间短距离通信;
2、现在大部分用于CPU之间近距离通信、以及CPU与其他外部设备的通信、调试程序运行信息输入输出。
3、工作方式
1、3根线(GND、RxD、TxD,数据线需要交叉)或者9根线 (DB9);
2、发送方有发送移位寄存器,接收方有接收移位寄存器;
3、数据在发送方和接收方的CPU中都以字节为单位整字节处理;
4、数据在通信线上以位为单位逐个bit的传输。
4、串行通信协议的基本概念
1、一帧数据:起始位、数据位、奇偶校验位、停止位;
2、波特率:一秒钟传输多少个bit位,发送方和接收方必须波特率设置为一样;
3、流控:速率协商,现在一般都要禁用掉。
三、STC51的串行通信相关寄存器
1、总览
2、SCON和PCON寄存器
说明:通常我们使用的工作模式是方式1,因此,PCON的SMOD0位必须配置成0,然后SCON寄存器的SM0位设置0,SM1位设置成1;
3、SBUF寄存器
4、与中断相关的寄存器IE、IPH、IP
四、代码示例
串口初始化函数
void Uatr_Init(void)
{
SCON = 0x50; //工作在模式1,允许接收
PCON = 0x80; //波特率加倍
TMOD = 0x20; //定时器1工作在模式1
TH1 = 250; //波特率设置成4800
TL1 = 250; //8位重载
TR1 = 1;
ES = 1;
EA = 1;
}
字节发送函数
void Uart_SendByte(unsigned char Byte)
{
SBUF = Byte; //发送数据
while(!TI); //等待发送
TI = 0; //标志位清零
}
字符串发送函数
void Uart_SendString(unsigned char *Str)
{
while(*Str != '\0')
{
Uart_SendByte(*Str);
Str++;
}
}
中断函数
void Uart_Isr(void) interrupt 4 using 1
{
unsigned char tmp;
if(RI)
{
tmp = SBUF;
RI = 0;
}
Uart_SendByte(tmp);
}
主函数
#include <reg51.h>
void Uatr_Init(void);
void Uart_SendByte(unsigned char Byte);
void Uart_SendString(unsigned char *Str);
void Delay_mS(unsigned int Tim);
void main(void)
{
Uatr_Init();
while(1);
}
函数实现了将接收到的字符串,回传出去。
总结
1、本节介绍了通信的相关概念;
2、主要介绍了51单片机串口通信的相关知识和编程方法;
3、涉及到了波特率的计算;