串行通信的传输方式:
单工,半双工,全双工。
51单片机的串口属于全双工通信
异步通信:使用各自的时钟
同步通信:使用相同的时钟
采用8N1模式(8个数据位,n0个校验位,一个停止位,一个起始位,其中起始位是通信标准,必须要有)
使用串口定时器1不能被使用
其中俩个SBUF的名字相同,地址不同,物理上是独立的。
波特率 = (2^SMOD * fosc)/(32 * 12*(256-x))
SMOD默认为0
写串口的工作
1.设置串口工作方式
2.打开ENA
3.设置发送 接收波特率
1)设置定时器1工作方式为8位自动重装方式,即方式2
2)填初值(TH1)
3)打开定时器
#include <reg52.h>
#include "./delay/delay.h"
// #include <stdio.h>
//初始化
void uart_init()
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xfd;
TR1 = 1;
}
//发送字节
void uart_send_byte(unsigned char byte)
{
SBUF = byte;
while(!TI);
TI = 0;
}
//发送字符串
void uart_send_string(unsigned char *s)
{
while(*s != '\0')
{
uart_send_byte(*s);
s++;
}
}
//调用主函数
void main()
{
unsigned char s[10];
unsigned char i = 0;
uart_init();
uart_send_string("please input the char:\n");
while(1)
{
if(RI)
{
if(i >= 10)
{
break;
}
if(SBUF == ' ')
{
break;
}
s[i] = SBUF;
i++;
RI = 0;
}
delay_ms(5);
}
uart_send_string(s);
uart_send_string("\t\n");
}