简单的串口程序

串口:

关于对串口的问题:
串口寄存器有什么功能?
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();		//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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值