本帖最后由 asd998877 于 2017-6-16 15:11 编辑
用蓝牙模块通信,和开发学习板。板子和单片机都没有坏。烧录也成功了。RXT对的单片机的RXT,TXD对单片机的TDXD.ER脚通了VCC的电。用KEil模拟仿真,手机可以的到Success.
可是换成RXD对单片机的RTXD.TXD对单片机的RXD.仿真也没有数据是怎么回事?
刚自学。不知道那有问题。求教各位大神
#include "reg52.h"
#include "intrins.h"
unsigned char SenData,Flag;
char code str1[]="Success";
char code str2[]="Error";
void send_str();
void InitUART(void);
void send_str2();
void delayms(unsigned char ms);
void send_char(unsigned char txd);
void InitUART(void)
{
/*******************设定串口**********************/
SCON=0x50; //设置为工作方式1
TMOD=0x20; //设置计数器工作方式2
PCON =0x80; //波特率加倍
TH1=0xFA; //计数器初始值设置,注意波特率是9600的
TL1=TH1;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
/******************设定中断**********************/
}
void main() //主函数
{
InitUART();
while(1){
if(Flag==1)
{
ES = 0;
delayms(50);
//----------------------该段即对接收的数据进行处理
if(SenData==97)//97为字符a的ascii
{
delayms(10);//延时去抖动
send_str();//发送数据
}
else
{
delayms(10);
send_str2();
}
Flag=0;//数据处理完毕后将标志位置0,表示没有新数据要处理
}
ES = 1;
}
}
void ser_int()interrupt 4//接收字符串
{
if(RI==1)//RI接受中断标志
{
SenData = SBUF ;
RI=0;//清除标志.
Flag =1;//标志位置1表示有新数据进来
}
else
TI = 0;
}
void send_str()//发送字串
{
unsigned char i=0;
while(str1!='\0')
{
SBUF =str1;
while(!TI);//等待数据传送
TI=0;//清除数据传输标志
i++;//下一个字符串
}
}
void send_str2()//发送字串
{
unsigned char i=0;
while(str2!='\0')
{
SBUF =str2;
while(!TI);//等待数据传送
TI=0;//清除数据传输标志
i++;//下一个字符串
}
}
void delayms( unsigned char ms)//延时子程序
{
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
|