找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ESP8266+STC89C52单片机通讯 并向串口发送数据

[复制链接]
跳转到指定楼层
楼主
ID:137121 发表于 2019-2-17 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想实现 用手机连接WIFI模块来控制红外模块(向串口发送数据就可以),通过捕捉WiFi收到的数据,来调用写好的16进制数组。可下面的程序,只要上电就不断运行DYMS();还会影响向ESP8266发送初始化的命令。不知道问题出在哪了,代码都是我东拼西凑来的,希望大神给指正

单片机源码:
  1. #include <reg52.h>              
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit been=P2^5; // 蜂鸣器
  5. uchar code diannaoKG[] = {0x86,0x00,0x00,0x00,0x86};
  6. void delay(int i)           //延时函数
  7. {
  8.         int j,k;
  9.         for(j=0;j<i;j++)
  10.         for(k=0;k<j;k++);
  11. }
  12. void Delay10ms(uint c)
  13. {
  14.     unsigned char a, b;
  15.     for (;c>0;c--)
  16.         {
  17.                 for (b=38;b>0;b--)
  18.                 {
  19.                    for (a=130;a>0;a--);
  20.                 }         
  21.         }      
  22. }
  23. // 蜂鸣器发声函数
  24. void di()
  25. {
  26.      been=0;
  27.      Delay10ms(40);
  28.      been=1;
  29. }
  30. void Out_Data (uchar Data[])        
  31. {
  32.         uchar i,j;
  33.         for (i=0;i<j;i++)
  34.         {
  35.                 SBUF = Data[i];
  36.                while (!TI);
  37.                 TI = 0;
  38.         }
  39. }

  40. void DYMS()
  41. {                    
  42.                 uchar j;
  43.                 j=sizeof(diannaoKG);
  44.                 Out_Data(diannaoKG);
  45.                                 di();
  46. }
  47. void init_serial()                  //串口初始化,设置波特率115200
  48. {
  49.         TMOD=0x20;  
  50.     TH1=0xFF;           
  51.     TL1=0xFD;
  52.         SCON=0x50;   
  53.     RCAP2H=0xFF;   
  54.     RCAP2L=0xFD;
  55.         TCLK=1;   
  56.         RCLK=1;   
  57.     C_T2=0;   
  58.     EXEN2=0;         
  59.     TR2=1 ;
  60.         TI=0;        
  61. }
  62. void Send_Uart(uchar value)         //单片机数据发送
  63. {
  64.         ES=0;                            //串口中断关闭
  65.         TI=0;                           
  66.         SBUF=value;                   //将数据放入串口寄存器中
  67.         while(TI==0);   
  68.         TI=0;  
  69.         ES=1;   
  70. }        
  71. void ESP8266_Set(uchar *puf)     // WIFI模块接收到单片机的AT指令         
  72. {   
  73.         while(*puf!='\0')   
  74.         {   
  75.                 Send_Uart(*puf);     
  76.                 Delay10ms(50);  
  77.                 puf++;
  78.                 delay(50);   
  79.         }   
  80.         delay(500);  
  81. }
  82. void ControlCar(unsigned char ConType)    //选择小车运行的模式
  83. {

  84.         switch(ConType)                       
  85.         {
  86.                 case 1:                          
  87.                 {         
  88.                     DYMS();
  89.                         break;
  90.                 }
  91.                 case 2:                              
  92.                 {                 

  93.                         break;
  94.                 }

  95.         }
  96. }

  97. void main()                       
  98. {
  99.         init_serial();            //串口初始化           
  100.         ES=1;                     //串口中断打开      
  101.         REN=1;                    //单片机接收允许位        
  102.         EA=1;                                     //总中断打开
  103.         delay(1000);
  104.         ESP8266_Set("AT+CWMODE=1\r\n");//SAT模式 就是路由器模式
  105.         ESP8266_Set("AT+CWJAP=\"banana\",\"123456789\"\r\n");//连接路由器
  106.         delay(1000);
  107.         ESP8266_Set("AT+CIPMUX=1\r\n");//开启多连接
  108.         ESP8266_Set("AT+CIPSERVER=1,5000\r\n"); //连接端口号5000
  109.     delay(1000);   
  110.         P1=0xfe;                       
  111.         while(1)                          
  112.         {                 
  113.         }
  114. }
  115. void ComBreak() interrupt 4     //中断函数,单片机判断串口接收到的数据   
  116. {
  117.         unsigned char RecvData;         
  118.         if(RI==1)                        
  119.         {
  120.                 RecvData=SBUF;          //从串口寄存器中读取数据        

  121.                 if(RecvData=='S')              
  122.                 {
  123.                         ControlCar(1);
  124.                         
  125.                 }
  126.                 if(RecvData=='X')              
  127.                 {
  128.                         ControlCar(2);
  129.                 }
  130.                 //SBUF=RecvData;                 
  131.                 RI=0;        //把RI至0                    
  132.         }
  133.         if(TI==1)        //把TI至0              
  134.         {
  135.                 TI=0;                           
  136.         }
  137. }
复制代码


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

使用道具 举报

沙发
ID:303383 发表于 2019-2-18 08:55 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:137121 发表于 2019-2-18 17:35 | 只看该作者
小猫猫爱吃鱼 发表于 2019-2-18 08:55
你好!
1、你的代码拼凑的有点乱
2、是要控制一个成品的红外模块吗?

我是用手机 给ESP8266发送数据,ESP8266连接在STC89C52上。只要能达到接受数据后 能调用相应的数组到串口就可以了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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