一、简介
串行口控制寄存器SCON (一般用01模式)
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
SM0和SM1设置工作方式;
SM0 | SM1 | 功能 | 波特率 |
0 | 0 | 8位同步移位寄存器 | 晶振频率/12 |
0 | 1 | 10位UART | 可变 |
1 | 0 | 11位 | f/64 or f/32 |
1 | 1 | 11位 | 可变 |
SM2与多机通信有关,用不到赋0;
REN使能;
TB8与RB8是配合方式2和方式3使用的;
TI为发送中断标志位,初始化时设置为0;
TI=1时会向CPU发送(串口)中断请求,须在(串口中断服务函数中或if判断数据发送完成后手动置0)。数据发送完成后TI会被自动置1;(串口中断服务函数一般用来对发来的数据进行处理)
RI同理
二、应用
1、将AUXR的地址赋值给某变量
sfr AUXR=0X8E; //NOTES:sbit是位操作,用于将某个sfr中具体位赋值给一个变量
2、用STC-IAP软件生成串口波特率发生函数(默认数据即可,无需更改)
3、手写相关函数(3个)
void SendBit(unsigned char i)
{
SBUF=i;
while(TI==0);
TI=0;
}
void SendString(unsigned char *i)
{
while(*i!='\0')
{
SendBit(*i++);
}
}
unsigned char ReserveBit(void)
{
unsigned char num=0;
while(RI==0);
num=SBUF;
RI=0;
return num;
}
char putchar(char i)
{
SendBit(i);
return i;
}
NOTES:
1、SBUF数据传输
通过KEIL直接给SBUF赋值(单片机发送);通过串口调试助手给SBUF赋值(单品机接收);
若TI=0,则单片机会不断的发送数据。
若RI=0,则单片机会不断的接受数据。
(二者没有冲突,SBUF有两个地址,一个存将发送的数据,一个存接收到的数据)
数据的发送通常采用查询的方式(if),而数据的接收常采用(串口)中断。
2、SBUF写入数据
SBUF可以写入16进制的数据(如SBUF=0X01),也可以写入ASKLL码(如SBUF='A')
若令SBUF=55,则MCU会将55判断为10进制,然后转化成16进制发送。
若想直接发送十进制的数据,可以将十进制数据赋值给变量,然后加上ASKLL码的0,如SBUF=dat+'0'
3、关于发送字符串
- 定义的字符数组应为unsigned char或char类型的数据。
- 发送的格式为:SendByte("hello");
▲文中不足之处请大家指正