蓝桥杯串口2应用

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值