标题: 求大神指点,51单片机蓝牙模块串口通信一直发送00 [打印本页]

作者: 觉觉    时间: 2022-4-5 08:19
标题: 求大神指点,51单片机蓝牙模块串口通信一直发送00
51单片机和hc蓝牙模块波特率都是9600,蓝牙模块在电脑和手机端正常通信,51单片机+蓝牙模块发送到手机上一直接收到16进制的00,这是什么原因啊
作者: 兴安xa    时间: 2022-4-5 11:06
不是程序有错误就是线接反了,得仔细排查
作者: 觉觉    时间: 2022-4-5 20:30
兴安xa 发表于 2022-4-5 11:06
不是程序有错误就是线接反了,得仔细排查

线没有接反,具体程序是这样的,求大神指点
#include“STC12C5A60S2.h"
#include“hc04.h
//串口初始化,晶振11.0592,波特率9600
void UartInit(void //9600bps@11.0592MHz
{SCON =0x50: //8位数据,可变波特率
AUXR=0×40: //定时器1时钟为Fosc,即1T
AUXR &= OxFE: /第口1选择定时器1为波特率发生器
TMOD&= 0x0F; //设定定时器1为16位自动重装方式
TL1 0xE0: /设定定时初值
TH1 =OxFE; /设定定时初值
ET1 = 0· //禁止定时器1中断
TR1=1; //启动定时器1

EA=1://开总中断
ES=1://开串口中断

//向串口发送一个字符
void putchar(char ch)
{SBUF = ch;
while(!TI):TI=0;
//向串口发送一段字符串

void prints(char *s)
{
while(*s!='\0')//发送字符串,直到遇到0才结束
SBUF =*S++;
while(!TI);
TI =0;

//串口中断处理函数
void uart_Interrupt() interrupt 4
{unsigned char UartData://单字节串口数据 if(RI)
RI = 0;
UartData = SBUF;
SBIF = UartData:
TI=0;//向PC返回接收的数据



作者: 觉觉    时间: 2022-4-5 20:36
兴安xa 发表于 2022-4-5 11:06
不是程序有错误就是线接反了,得仔细排查

线没接反,程序具体是这样的,求大神指点
#include“STC12C5A60S2.h"
#include“hc04.h
//串口初始化,晶振11.0592,波特率9600
void UartInit(void //9600bps@11.0592MHz
{SCON =0x50: //8位数据,可变波特率
AUXR=0×40: //定时器1时钟为Fosc,即1T
AUXR &= OxFE: /第口1选择定时器1为波特率发生器
TMOD&= 0x0F; //设定定时器1为16位自动重装方式
TL1 0xE0: /设定定时初值
TH1 =OxFE; /设定定时初值
ET1 = 0· //禁止定时器1中断
TR1=1; //启动定时器1

EA=1://开总中断
ES=1://开串口中断

//向串口发送一个字符
void putchar(char ch)
{SBUF = ch;
while(!TI):TI=0;
//向串口发送一段字符串

void prints(char *s)
{
while(*s!='\0')//发送字符串,直到遇到0才结束
SBUF =*S++;
while(!TI);
TI =0;

//串口中断处理函数
void uart_Interrupt() interrupt 4
{unsigned char UartData://单字节串口数据 if(RI)
RI = 0;
UartData = SBUF;
SBIF = UartData:
TI=0;//向PC返回接收的数据



作者: lkc8210    时间: 2022-4-5 21:59
可能是STC的输出电压太高,加個10k的可变电阻把STC TxD讯号电压由5V分压为3.3V
作者: DoneDone    时间: 2022-4-6 07:15
单片机波特率计算错了吧
作者: 觉觉    时间: 2022-4-6 07:40
lkc8210 发表于 2022-4-5 21:59
可能是STC的输出电压太高,加個10k的可变电阻把STC TxD讯号电压由5V分压为3.3V

好,我今晚试试,感谢给的可能性
作者: 觉觉    时间: 2022-4-6 12:17
DoneDone 发表于 2022-4-6 07:15
单片机波特率计算错了吧

我是用ISP烧录程序里的波特率计算器生成的头文件,应该没错,我的单片机用的是STC12c5a60s2
作者: hhh402    时间: 2022-4-11 17:10
检查一下“;”。有很多处错误。例如:while(*s!='\0')//发送字符串,直到遇到0才结束;ET1 = 0· //禁止定时器1中断;
{SCON =0x50: //8位数据,可变波特率
AUXR=0×40: //定时器1时钟为Fosc,即1T
AUXR &= OxFE: /第口1选择定时器1为波特率发生器




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1