STC15系列的UART串口基础
现在对串口的理解很浅,仅仅停留在会用的地步……
梳理一下大致用法
首先是串口的控制寄存器
可以看到该寄存器是可以进行位寻址的
我们主要操作的有SM0、SM1(控制串口的工作方式)
一般都采用方式1,并需要定时器产生波特率(baud)
若采用定时器1的模式2(8位自动重装),且SMOD为0,且12分频
则TH1=TL1=256-FOSC/12/32
这一位初始化的时候设1就行
关于TI和RI会在代码中用到
TI用来控制主机向单片机发送数据,发送成功后清零
RI则在单片机接收到数据进入中断程序中清零
PCON寄存器似乎只跟波特率有关?
给出串口初始化函数
//串口初始化函数
void Uart_Init()
{
TMOD=0x20; //定时器1确定工作方式2(8位自动重装)
TH1=0xfd; //装入初值,高八位低八位相同,根据波特率计算,此时为9600
TL1=0xfd;
TR1=1;
SCON=0x50; //确定工作方式1,并打开接收使能REN
AUXR=0x00; //12分频
EA=1;
ES=1;
}
SBUF其实有两个,但物理地址相同,为单片机内部的缓冲寄存器
写代码时应注意顺序
//数据发送(单片机发给主机)
void SentByte(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
//串口中断服务函数(单片机从主机接收)
void Uart_Service() interrupt 4
{
if(RI==1)
{
RI=0;
urdat=SBUF; //数据接收
SentByte(urdat+1); //将接受到的数据+1后发给主机
}
}
主机向单片机发送数据通过串口助手……
Reference:
STC15系列单片机用户手册
http://bbs.21ic.com/icview-2478488-1-1.html