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

📄 修改蓝牙波特率.txt

📁 蓝牙模块本身是将数据转换为虚拟串口传送的,此为为其修改波特率的初始化程序.
💻 TXT
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"


#define PCLOCK            8000000     //16Mhz晶振除以2得总线PCLOCK
#define Baud_9600  52
#define Baud_19200 26
#define Baud_38400 13

#define LF 0x0A
#define CR 0x0D

void SCI0_init(void);
void Write_To_SCI0_STRING(const char *text); 
void Write_To_SCI0_DATA(unsigned int data);
void Write_To_SCI0_UCHAR_ASCII(unsigned char data);
void NextLine(void);
void Write_To_SCI0_DATA_3_bit(unsigned char data);
void delay_1ms(void);
void delay_nms(unsigned int n);


//***********************START*******************************//
void main(){
  SCI0_init();
// 格式:  1、发送"AT"(发多几次直到返回OK,一秒左右发一次) 返回:OK; 
//        2、发送:AT+BAUDX    返回:OKY		  X代表0~C数值,Y代表下表中与X对应的各波特率
// 用AT命令设好波特率后,下次上电使用不需再设,可以掉电保存波特率。
//!!!!!!注意设置时需先断开蓝牙的串口连接!!!!!!!!!!

    Write_To_SCI0_STRING("AT");
    delay_nms(2000);
    Write_To_SCI0_STRING("AT");
    delay_nms(2000);
    Write_To_SCI0_STRING("AT");
    delay_nms(2000);
    Write_To_SCI0_STRING("AT");
    delay_nms(2000);
    Write_To_SCI0_STRING("AT");
    delay_nms(2000);
    Write_To_SCI0_STRING("AT");
    delay_nms(2000);
    Write_To_SCI0_STRING("AT");
    delay_nms(2000);
    Write_To_SCI0_STRING("AT+BAUD6");				//此处为修改波特率的设置                                                
                                             /* 1---------1200
                                                2---------2400
                                                3---------4800
                                                4---------9600
                                                5---------19200
                                                6---------38400
                                                7---------57600
                                                8---------115200
                                                9---------230400
                                                A---------460800
                                                B---------921600
                                                C---------1382400 */
    delay_nms(2000);
   
   //设置完后紧接着发送字符 用以检测
   while(1){
   	 Write_To_SCI0_STRING("hello!")
   	 ;
   }
}


//SCI0接了MAX232,接个串口便可与PC通讯,因此此处用SCI0,以免冲突
//SCI0******************************************************//START
void SCI0_init(void) 
{
	//SCI0CR1=0x00;//8位数据位1位停止位,无校验
	SCI0CR2=0x2c;//最高位(第7)为低表示关发送中断,第5位为高表示开接收中断,第3位为高表示发送使能,第2位为高表示接收使能
	
	//波特率SBR=PCLOCK/(16*波特率)
	SCI0BDH=0x00;
	SCI0BDL=Baud_38400;
	
}



/***************************************************************************
    FUNCTION: static void Write_To_SCI0_STRING(const char *text)

    PURPOSE: 串口0输出字符串
****************************************************************************/
void Write_To_SCI0_STRING(const char *text)//输出字符串
{
	while (*text != '\0')
	{
		SCI0DRL = *text++;
		
		while (!(SCI0SR1 & 0x80))	// wait for output buffer empty 
		{
		}  		
	}

//LKH:原程序中下面这部分,但会在末尾多出一个黑块..如果没下面这部分,则能正常运行.故去掉	
/*	SCI0DRL = '\0';           //在字符串最后输出一个NULL,表示字符串结束,并构成完整字符串
	while (!(SCI0SR1 & 0x80))	// wait for output buffer empty 
	{
	}
*/  
}

/***************************************************************************
    FUNCTION: void Write_To_SCI0_DATA(uint data)

    PURPOSE: 串口0输出16进制数
    
    0,1,2,...,9 ==> 48,49,50,...,57   把数字加上48得到其ASCII码
    10,11,12,...,15 ==> A,B,C,....,F  ==> 65,66,67,...,70    把数字加上55得到其ASCII码
    
    eg: 0xA1B5 输出为 A,1,B,5的ASCII码,LCD显示的是十六进制
****************************************************************************/
void Write_To_SCI0_DATA(unsigned int data)//把数字转化为数字字符
{
	char i,temp = 0;
	
	for(i=12;i>=0;i = i-4)
	{
		temp = (data>>i)&0x000F;
		SCI0DRL = (unsigned char)(temp<10 ? temp+48 : temp+55);
		
		while (!(SCI0SR1 & 0x80))	// wait for output buffer empty 
		{
		}  
	}	
}

void Write_To_SCI0_DATA_3_bit(unsigned char data)//把数字转化为数字字符
{
	char temp[4] = "000";
  
  temp[0] = data/100 +0x30;
  data = data%100;
  temp[1] = data/10 + 0x30;
  data = data%10;
  temp[2] = data + 0x30;
  	
  Write_To_SCI0_STRING(temp);
}


/***************************************************************************/

void Write_To_SCI0_UCHAR_ASCII(unsigned char data)//发送数字!!!先发送高8位
{
  //发送的数字以十六进制数表示
	SCI0DRL = data;
	
	while (!(SCI0SR1 & 0x80))	// wait for output buffer empty 
	{
	}  
}


/***************************************************************************/
void NextLine(void) {
  Write_To_SCI0_UCHAR_ASCII(LF);
  Write_To_SCI0_UCHAR_ASCII(CR);
}






/*************************延时函数**************************************************/  

void delay_1ms(void) //1ms延时函数  仅为近似值,由反复测试而得
{
  unsigned int i;
  //for (i=0;i<1140;i++);
  for (i=0;i<1300;i++);
}


void delay_nms(unsigned int n) //N ms延时函数
{
  unsigned int i=0;
  for (i=0;i<n;i++)
  delay_1ms();
};










⌨️ 快捷键说明

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