蓝桥杯串口2应用

本文介绍了一个基于51单片机的串口2配置实例,详细讲解了如何利用定时器2作为波特率发生器,并给出了具体的初始化设置和收发数据的流程。通过宏定义计算定时器的初值,确保串口能在指定波特率下工作。
#include<reg51.h>

/* 串口2只能选定时器2作为波特率发生器 */

//注意串口2:RXD2~P1^0,TXD2~P1^1

//根据芯片手册说明,在单片机1T模式下(不12分频)串口在模式0(8位USART)波特率 = Sysclk/(65536-[T2H,T2L])/4
//这个宏定义就是根据波特率来就算定时器应该设定的初值
#define Baud_Rate(baud) (65536 - 11059200/4/baud) 

//定义寄存器
sfr AUXR = 0x8e; //辅助寄存器
sfr T2H = 0xD6;	 //定时器2的高八位寄存器
sfr T2L = 0xD7;	 //定时器2的低八位寄存器
sfr S2CON = 0x9a; //USART2控制寄存器
sfr S2BUF = 0x9b; //USART2数据寄存器

void usart2_Init(unsigned int baud){
	/*
	S2CON:(只介绍和这里相关的)
		最高位:模式选择位,0为模式0(默认),1为模式1
		第五位:允许串行口接受位
		最低位(S2RI):接收中断请求标志位
		第二位(S2TI):发送中断请求标志位
	*/
	S2CON=0x10;
	T2L = (unsigned char)(Baud_Rate(baud));
	T2H = (unsigned char)(Baud_Rate(baud)>>8);
	//开启定时器2 AUXR第五位是定时器2的开启位,第三位就是选择(当为1时)1T模式/12T模式
	//这里选择的是1T模式(不12分频),如果要用12T模式,模特率就要在后面的式子再除以12
	AUXR |= 0x14; 
}


void main(){
	//定义变量
	unsigned char dat;
	//初始化
	usart2_Init(9600);
	while(1){
	
			//S2CON最低位是接收标志位
			if(S2CON&0x01){
			S2CON&=0xfe; //清除接收标志位
			dat = S2BUF;
			S2BUF = dat;
			while((S2CON&0x02)==0); //等待发送完毕
			S2CON&=0xfd; //清除发送标志位
		}
		
	}

}















### 蓝桥杯竞赛中的串口通信实例教程 #### 了解基本概念 在参与蓝桥杯竞赛前,理解串口通信的基础知识至关重要。这涉及到数据如何通过串行接口传输以及不同设备间的数据交换方式[^1]。 #### 准备开发环境 为了实现有效的串口编程,在准备阶段应确保拥有合适的硬件平台和支持软件工具链。对于大多数参赛者而言,这意味着配置好微控制器单元(MCU),安装必要的IDE(集成开发环境),并熟悉所选MCU的SDK或库函数集合。 #### 编写简单的发送接收程序 当掌握了基础理论之后,可以尝试构建最简易版本的应用来验证学习成果。下面是一个基于STM32系列单片机使用标准外设库完成字符回显功能的例子: ```c #include "stm32f10x.h" void UART_Configuration(void); int main(void) { char ch; /* System Clocks Configuration */ SystemInit(); /* Configure the UART peripheral */ UART_Configuration(); while (1) { if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET){ ch = USART_ReceiveData(USART1); USART_SendData(USART1,ch); // Wait until data has been physically written to the register. while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){} } } } // 初始化UART设置 void UART_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 , ENABLE ); // PA9 TX,PA10 RX GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1,&USART⚗📐📐 📐📐📐
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布鲁格若门

对你有用的话真是太好了

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

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

打赏作者

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

抵扣说明:

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

余额充值