找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1994|回复: 9
收起左侧

帮忙看看引用头文件stdio.h发送ESP8266 AT指令编译报错

[复制链接]
ID:516910 发表于 2019-5-9 10:07 | 显示全部楼层 |阅读模式
24黑币
#include <reg52.h>
#include <stdio.h>

sbit Mr0 = P1^0;
sbit Ml0 = P1^1;
sbit Mr1 = P1^2;
sbit Ml1 = P1^3;

#define uint unsigned int
#define uchar unsigned char

#define card_go    {Mr0=0,Ml0=1,Mr1=0,Ml1=1;}
#define card_back  {Mr0=1,Ml0=0,Mr1=1,Ml1=0;}
#define Left_card_go   {Mr0=0,Ml0=1,Mr1=1,Ml1=0;}
#define Right_card_go   { Mr0=1,Ml0=0,Mr1=0,Ml1=1;}
#define stop_card   { Mr0=0,Ml0=0,Mr1=0,Ml1=0;}
#define up       'A'
#define down     'B'
#define left     'C'
#define right    'D'
#define stop     'F'

uchar  i=0;
uchar  dat=0;
uchar  buff[3]=0;
bit  flag_REC=0;
bit  flag    =0;

void sint() interrupt 4
{
    if(RI)                  
    {
       RI=0;
    P1 = 0;
       dat=SBUF;
       if(dat=='O'&&(i==0))
         {
            buff[i]=dat;
            flag=1;        
         }
       else
      if(flag==1)
     {
      i++;
      buff[i]=dat;
      if(i>=2)
      {i=0;flag=0;flag_REC=1 ;}  
     }
  }
}

void sennd()
{
                TI = 1;
                puts("AT+CIPMUX=1\r");
                while(!TI);
                puts("AT+CIPSTART=0,"TCP","10.201.134.152",39727\r");
                while(!TI);
                TI = 0;
}

void UART_INIT()
{
        SM0 = 0; SM1 = 1;
        REN = 1;
        EA = 1;
        ES = 1;
        TMOD = 0x20;
        TH1 = 0xfd;
        TL1 = 0xfd;
        TR1 = 1;
}

void main()
{
        UART_INIT();
        while(1)
        {
                if(flag_REC==1)
                        {
                                flag_REC=0;
                                if(buff[0]=='O'&&buff[1]=='N')
                                switch(buff[2])
                                 {
                                                 case up : card_go; break;
                                                 case down : card_back; break;
                                                 case left : Left_card_go; break;
                                                 case right : Right_card_go; break;
                                                 case stop : stop_card; break;


                                }
                        }
        }
}

报错:C:\Users\Administrator\Desktop\HC-06card\M4card.c(57): error C141: syntax error near 'TCP'

是不是不能用stdio.h发送AT指令?

最佳答案

查看完整内容

puts是用于PC系统的不适用51单片机,如果你要发送字符串可以使用下面的函数。 void Sent_UART(u8 dat) { ES = 0; TI=0; SBUF = dat; while(!TI); TI = 0; ES = 1; } void Uart_Send_String(u8 *string) { while(*string) { Sent_UART(*string++); Delay_Us(5); } } void ESP8266_Init() { Uart_Sen ...
回复

使用道具 举报

ID:90663 发表于 2019-5-9 10:07 | 显示全部楼层
puts是用于PC系统的不适用51单片机,如果你要发送字符串可以使用下面的函数。

void Sent_UART(u8 dat)
{
        ES = 0;
        TI=0;
        SBUF = dat;
        while(!TI);
TI = 0;
ES = 1;
}

void Uart_Send_String(u8 *string)
{
        while(*string)
        {
                Sent_UART(*string++);
                Delay_Us(5);
        }

}

void ESP8266_Init()
{
        Uart_Send_String("AT\r\n");
        Delay_ms(3000);
        Uart_Send_String("AT\r\n");
        Delay_ms(3000);
                                Uart_Send_String("AT+CIPMUX=1\r\n");
        Delay_ms(3000);
                                Uart_Send_String("AT+CIPSERVER=1,8080\r\n");
}
回复

使用道具 举报

ID:516910 发表于 2019-5-9 10:08 | 显示全部楼层
可以建立一个数组然后puts数组吗?
回复

使用道具 举报

ID:516910 发表于 2019-5-9 10:59 | 显示全部楼层
搂猫睡觉的鱼 发表于 2019-5-9 10:47
puts是用于PC系统的不适用51单片机,如果你要发送字符串可以使用下面的函数。

void Sent_UART(u8 dat)

请教老师 您 发的回复最后一个函数中如果带有双引号的字符串该怎样处理呢?
列如: Uart_Send_String("AT+CIPSTART=0,"TCP","10.201.134.152",39727");
这种编译会报错 有多个双引号
回复

使用道具 举报

ID:531379 发表于 2019-5-9 11:09 | 显示全部楼层
学习了
回复

使用道具 举报

ID:516910 发表于 2019-5-9 13:38 | 显示全部楼层
已解决!使用转义字符:
回复

使用道具 举报

ID:516910 发表于 2019-5-9 13:41 | 显示全部楼层
找到方法了 !!!使用转义字符!!
下边是修改的代码供大家参考
谢谢 老师的回答 !非常感谢!
#include <reg52.h>
#include <stdio.h>

sbit Mr0 = P1^0;
sbit Ml0 = P1^1;
sbit Mr1 = P1^2;
sbit Ml1 = P1^3;

#define uint unsigned int
#define uchar unsigned char

#define card_go    {Mr0=0,Ml0=1,Mr1=0,Ml1=1;}
#define card_back  {Mr0=1,Ml0=0,Mr1=1,Ml1=0;}
#define Left_card_go   {Mr0=0,Ml0=1,Mr1=1,Ml1=0;}
#define Right_card_go   { Mr0=1,Ml0=0,Mr1=0,Ml1=1;}
#define stop_card   { Mr0=0,Ml0=0,Mr1=0,Ml1=0;}
#define up       'A'
#define down     'B'
#define left     'C'
#define right    'D'
#define stop     'F'

uchar  i=0;
uchar  dat=0;
uchar  buff[14]=0;
bit  flag_REC=0;
bit  flag    =0;

void sint() interrupt 4
{
    if(RI)                  
    {
       RI=0;
       dat=SBUF;
       if(dat=='+'&&(i==0))
         {
            buff[i]=dat;
            flag=1;        
         }
       else
      if(flag==1)
     {
      i++;
      buff[i]=dat;
      if(i>=14)
      {i=0;flag=0;flag_REC=1 ;}  
     }
  }
}

void delay(uint z)
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);                
}

void sennd()
        {
                TI = 1;
                puts("AT+CIPMUX=1\r");
                while(!TI);
                delay(2000);
                puts("AT+CIPSTART=0,\"TCP\",\"10.201.134.152\",36594\r");
                while(!TI);
                TI = 0;
                delay(3000);
        }

void UART_INIT()
{
        SM0 = 0; SM1 = 1;
        REN = 1;
        EA = 1;
        ES = 1;
        TMOD = 0x20;
        TH1 = 0xfd;
        TL1 = 0xfd;
        TR1 = 1;
}

void main()
{
        UART_INIT();
        EA = 0;
        delay(2000);
        sennd();
        EA = 1;
        while(1)
        {
                if(flag_REC==1)
                        {
                                flag_REC=0;
                                if(buff[0]=='+'&&buff[1]=='I')
                                switch(buff[10])
                                 {
                                                 case up : card_go; P1 = ~P1; break;
                                                 case down : card_back; break;
                                                 case left : Left_card_go; break;
                                                 case right : Right_card_go; break;
                                                 case stop : stop_card; break;      
                                }
                        }
        }
}
回复

使用道具 举报

ID:90663 发表于 2019-5-9 14:15 | 显示全部楼层
15775211617 发表于 2019-5-9 10:08
可以建立一个数组然后puts数组吗?

客气了互相学习,我发给你的上面有,分别发送就可以的,具体的你也可以看ESP8266官网的程序,里面有很多学习资料。
回复

使用道具 举报

ID:176854 发表于 2019-5-9 15:54 | 显示全部楼层
15775211617 发表于 2019-5-9 10:59
请教老师 您 发的回复最后一个函数中如果带有双引号的字符串该怎样处理呢?
列如: Uart_Send_String("A ...

Uart_Send_String("AT+CIPSTART=0,\"TCP\",\"10.201.134.152\",39727\r\n")
双引号前面加斜杠,我以前也用过GSM模块,用的是SIM808
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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