蓝桥杯备赛——串口通信

波特率

在这里插入图片描述

串口中断

中断号为4

UART通信

UART通信的初始化

初始化TF1

  1. TMOD 配置前四位为0010
  2. TH1 = 0xfd
  3. TL1 = 0xfd
  4. TR1 = 1

初始化SCON寄存器

SCON = 0x50

初始化AUXR寄存器

AUXR 最后一位配置为0

初始化IE寄存器

  1. ES = 1
  2. EA = 1

UART数据发送与接收

在这里插入图片描述
注:

1.通过RI TI 来判断数据是否发送或接收完成

SCON寄存器配置

在这里插入图片描述

代码实现

/*
usrt串口通信  电脑向CPU发送数据
*/
#include <STC15F2K60S2.H>


void UartInit();
void UartSend(unsigned char byte);


void main()
{
	UartInit();
	UartSend(0xa5);
	UartSend(0x5a);
	while(1){
		
	}
}

/**
  *@brief  串口中断函数,用于发送用户输入的数据
  *@param  无
  *@retval 无
  */
unsigned char urdat;
void ServiceUart()  interrupt 4
{
	if(RI == 1){
		urdat = SBUF;
		UartSend(urdat);
		RI = 0;
	}
	
}	


/**
  *@brief  uart串口向单片机发送数据 
  *@param  byte [0, 255]
  *@retval 无
  */
void UartSend(unsigned char byte){
	
	SBUF = byte; 
	while(TI == 0);  // 等待其发送完成
	TI = 0;
}


/**
  *@brief  Uart串口通信初始化  
  *@param  无
  *@retval 无
  */
void UartInit(){
// TF1配置
	TMOD = (TMOD & 0x0f) | 0x20;
	TH1 = 0xfd;
	TL1 = 0xfd;
	TR1 = 1;
// SCON和AUXR配置	
	SCON = 0x50;
	AUXR &= 0xfe;
// IE配置
	ES = 1;
	EA = 1;
}

/*
串口通信实现LED灯控制及输入输出字符串
*/
#include <STC15F2K60S2.H>


void UartInit(void);
void UartSendByt(unsigned char byte);
void UartSendStr(unsigned char *str);


void main()
{
	UartInit();
	UartSendStr("Welcome to Norman's system!\r\n");
	while(1){
		
	}
}


unsigned char udat;
void ServiceUart()  interrupt 4
{
	if(RI == 1){
		udat = SBUF;
		
		P2 = (P2 & 0x1f) | 0x80;
		P0 = udat;
		P2 = 0xff;
		
		UartSendStr("System is running!\r\n");
		// \r 回车符,将光标移到最左端
		
		RI = 0;
		
	}
	
}


void UartSendByt(unsigned char byte){
	SBUF = byte;
	while(TI == 0);
	TI = 0;
}


void UartSendStr(unsigned char *str){
	while(*str != '\0'){
		UartSendByt(*str);
		str ++;
	}
}


void UartInit(void)		//9600bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器1时钟为Fosc,即1T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设定定时器1为16位自动重装方式
	TL1 = 0xE0;		//设定定时初值
	TH1 = 0xFE;		//设定定时初值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	
	EA = 1;
	ES = 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Norman_wen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值