⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baudandveridet.c

📁 自编的波特率自动检测c语言例子
💻 C
字号:
////////////////////////////////////////////////////////////////////////
// 模 块 名:波特率和校验位的自动识别
// 版    本:-----------------------
// 程序设计:张清华
// 日    期:-----------------------
////////////////////////////////////////////////////////////////////////

//----------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------//
//1:在串行中断程序中,如果正确接收到数据帧,把BaudFlag设置成检测到的波特率位置,    //
//   表示正确接受,不需要检测波特率                                                 //
//2:发生串口中断即设置有无数据标识位DataFlag=1, 表示有串口中断来                    //                                                      //
//3:在两秒钟内没有数据显示"no-dAt",把BaudFlag设置默认值7,表示波特率可能有误       //
//   并把DataFlag=0;                                                               //
//4:在两秒钟内没有数据显示"no-dAt"之前加条件判断语句,如果BaudFlag==7,且DataFlag=1 //
//  则需要检测波特率                                                                // 
//if((BaudFlag==7)&&(DataFlag=1))                                                   //
//{                                                                                 //
//  	//循环检测                                                                  //
//}                                                                                 //
//----------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------//

///////////////////////////////////////////////////////////////
///名称:dl_ms(x)
///功能:软件延迟
//////////////////////////////////////////////////////////////
void dl_ms(unsigned int n)//延迟1ms
{
	unsigned int i,j;
	for(j=n;j>0;j--)
	for(i=112;i>0;i--);
}

////////////////////////////////////////////////////////////////////
// 名称:BaudVeriDet(void)
// 功能:波特率和校验自动识别
////////////////////////////////////////////////////////////////////
typedef struct
{
	unsigned char BaudTH1;//波特率初值
	unsigned char BaudSMOD;//SMOD设置
}baudreg;
//f==11.0592
const baudreg baudregs[5]=
{
	{0xE8,0x00},//baud1200
	{0xF4,0x00},//baud2400
	{0xFA,0x00},//baud4800
	{0xFD,0x00},//baud9600
	{0xFD,0x80}//baud19200
};
unsigned char BaudFlag;//波特率匹配,用来存储baudregs中已匹配波特率的位置
unsigned char i;
BaudFlag=3;//默认值为3
unsigned char VeriFlag;//校验标识
//波特率识别
void BaudVeriDet(void)
{
	if((BaudFlag==7)&&(DataFlag==1))
	{
		for(i=0;i<5;i++)
		{
		
			TH1=baudregs[i].BaudTH1;
			PCON=baudregs[i].BaudSMOD;
			ACC=SBUF;
			BaudFlag=i;
			VeriFlag=P;
			dl_ms(1000);//延迟1s,要大于数据帧发送频率
		}
	}
}
				
			
					
				
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -