用蓝牙模块通信,和开发学习板。板子和单片机都没有坏。烧录也成功了。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++);
- }
- }
复制代码
|