找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3011|回复: 2
打印 上一主题 下一主题
收起左侧

程序在STC89C52RC单片机上不能运行

[复制链接]
跳转到指定楼层
楼主
用蓝牙模块通信,和开发学习板。板子和单片机都没有坏。烧录也成功了。RXT对的单片机的RXT,TXD对单片机的TDXD.ER脚通了VCC的电。用KEil模拟仿真,手机可以的到Success.
可是换成RXD对单片机的RTXD.TXD对单片机的RXD.仿真也没有数据是怎么回事?
刚自学。不知道那有问题。求教各位大神
  1. #include "reg52.h"
  2. #include "intrins.h"

  3. unsigned char SenData,Flag;

  4. char code str1[]="Success";
  5. char code str2[]="Error";

  6. void send_str();
  7. void InitUART(void);
  8. void send_str2();
  9. void delayms(unsigned char ms);
  10. void send_char(unsigned char txd);

  11. void InitUART(void)
  12. {
  13. /*******************设定串口**********************/
  14. SCON=0x50;                        //设置为工作方式1
  15. TMOD=0x20;                        //设置计数器工作方式2
  16. PCON =0x80;                        //波特率加倍
  17. TH1=0xFA;                                //计数器初始值设置,注意波特率是9600的
  18. TL1=TH1;
  19. ES=1;                                                //打开接收中断
  20. EA=1;                                                //打开总中断
  21. TR1=1;                                        //打开计数器
  22. /******************设定中断**********************/
  23. }
  24. void main()  //主函数
  25. {        
  26. InitUART();
  27. while(1){
  28. if(Flag==1)
  29. {
  30. ES = 0;
  31. delayms(50);
  32. //----------------------该段即对接收的数据进行处理
  33. if(SenData==97)//97为字符a的ascii
  34. {
  35. delayms(10);//延时去抖动
  36. send_str();//发送数据
  37. }
  38. else
  39. {
  40. delayms(10);
  41. send_str2();
  42. }
  43. Flag=0;//数据处理完毕后将标志位置0,表示没有新数据要处理
  44. }
  45. ES = 1;
  46. }
  47. }

  48. void ser_int()interrupt 4//接收字符串
  49. {  

  50. if(RI==1)//RI接受中断标志
  51. {
  52. SenData = SBUF ;
  53. RI=0;//清除标志.
  54. Flag =1;//标志位置1表示有新数据进来
  55. }
  56. else
  57. TI = 0;
  58. }


  59. void send_str()//发送字串
  60. {
  61. unsigned char i=0;
  62. while(str1[ i]!='\0')
  63. {
  64. SBUF =str1[ i];
  65. while(!TI);//等待数据传送
  66. TI=0;//清除数据传输标志
  67. i++;//下一个字符串
  68. }
  69. }

  70. void send_str2()//发送字串
  71. {
  72. unsigned char i=0;
  73. while(str2[ i]!='\0')
  74. {
  75. SBUF =str2[ i];
  76. while(!TI);//等待数据传送
  77. TI=0;//清除数据传输标志
  78. i++;//下一个字符串
  79. }
  80. }



  81. void delayms( unsigned char ms)//延时子程序
  82. {
  83. unsigned char i;
  84. while(ms--)
  85. {
  86. for(i=0;i<120;i++);
  87. }
  88. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:140371 发表于 2017-6-17 11:02 | 只看该作者
最少這裡SBUF =str1;SBUF =str2;要改成 SBUF =str1[];SBUF =str2[i];

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:164602 发表于 2017-6-17 15:18 | 只看该作者
“用蓝牙模块通信,和开发学习板。板子和单片机都没有坏。烧录也成功了。RXT对的单片机的RXT,TXD对单片机的TDXD.ER脚通了VCC的电。”
你说的。程序我就不看了,因为这里错了啊:蓝牙RXT是接收端,那么就应该对应单片机发送端TXD,同理,蓝牙TXD发送端应该对应单片机接收端。

1.jpg (9.77 KB, 下载次数: 110)

1.jpg

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表