📄 修改蓝牙波特率.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 + -