标题:
程序在STC89C52RC单片机上不能运行
[打印本页]
作者:
asd9988775
时间:
2017-6-16 17:02
标题:
程序在STC89C52RC单片机上不能运行
用蓝牙模块通信,和开发学习板。板子和单片机都没有坏。烧录也成功了。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[ i]!='\0')
{
SBUF =str1[ i];
while(!TI);//等待数据传送
TI=0;//清除数据传输标志
i++;//下一个字符串
}
}
void send_str2()//发送字串
{
unsigned char i=0;
while(str2[ i]!='\0')
{
SBUF =str2[ i];
while(!TI);//等待数据传送
TI=0;//清除数据传输标志
i++;//下一个字符串
}
}
void delayms( unsigned char ms)//延时子程序
{
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
复制代码
作者:
a0931727149
时间:
2017-6-17 11:02
最少這裡SBUF =str1;SBUF =str2;要改成 SBUF =str1[];SBUF =str2[i];
作者:
HC6800-ES-V2.0
时间:
2017-6-17 15:18
“用蓝牙模块通信,和开发学习板。板子和单片机都没有坏。烧录也成功了。RXT对的单片机的RXT,TXD对单片机的TDXD.ER脚通了VCC的电。”
你说的。程序我就不看了,因为这里错了啊:蓝牙RXT是接收端,那么就应该对应单片机发送端TXD,同理,蓝牙TXD发送端应该对应单片机接收端。
1.jpg
(9.77 KB, 下载次数: 113)
下载附件
2017-6-17 15:18 上传
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1