串口:
关于对串口的问题:
串口寄存器有什么功能?
TI,RI是什么?
SBUF又是啥?
为什么使用定时器1作为串口?
什么是波特率?
波特率怎么算?
请带着这些问题移步:蓝桥杯之单片机设计与开发(13)——UART串口通信 作者:小默haa
功能:
- 打开串口助手,发送数据成功后 L2 亮
- 接收数据+1,L1瞬间闪一次(L2同时灭一次)
波特率可以通过STC-ISP软件设置:
注意:定时器设置为12T模式,定时器1(8位自动重载)
代码:
******************************************************************************
* 文件名:串口
* 描 述:
* 作 者:思索与猫
* 日 期: 19/3/27
* 备 注:
*
******************************************************************************
#include<stc15f2k60s2.h>
typedef unsigned char uchar;
typedef unsigned int uint;
void CloseFucker();
void UartInit(); //9600bps@12.000MHz
void ShowLED(uchar temp);
void main()
{
CloseFucker();
UartInit();
EA = 1;
while(1)
{
;
}
}
void Uart_Interrupt() interrupt 4
{
if(RI == 1) //接收数据
{
RI = 0;
SBUF = SBUF+1;
ShowLED(0x01);
}
if(TI == 1) //发送数据
{
TI = 0;
ShowLED(0x02);
}
}
void UartInit() //9600bps@12.000MHz
{
PCON &= 0x7F;
SCON = 0x50;
AUXR &= 0xBF;
AUXR &= 0xFE;
TMOD &= 0x0F;
TMOD |= 0x20;
TL1 = 0xFD;
TH1 = 0xFD;
ET1 = 0;
TR1 = 1;
ES = 1; //打开串口中断
}
void ShowLED(uchar temp)
{
P2 = P2&0x1f|0x80;
P0 = ~temp;
P2 = P2&0x1f;
}
void CloseFucker()
{
P2 = P2&0x1f|0xa0;
P0 = 0xaf;
P2 = P2&0x1f;
}