简单的串口程序

串口:

关于对串口的问题:
串口寄存器有什么功能?
TI,RI是什么?
SBUF又是啥?
为什么使用定时器1作为串口?
什么是波特率?
波特率怎么算?

请带着这些问题移步:蓝桥杯之单片机设计与开发(13)——UART串口通信 作者:小默haa

功能:

  1. 打开串口助手,发送数据成功后 L2 亮
  2. 接收数据+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();		//[email protected]
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()		//[email protected]
{
		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;
}