打印
[51单片机]

esp8266+c51编程问题

[复制链接]
1185|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lnyaigsm0110|  楼主 | 2017-3-6 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
esp8266+c51编程问题,在WIFI_Init()里面用printf就好使,用自己写的ESP8266_Set()就不好使

求大神赐教!!!!!!!

#include <reg52.h>
#include <string.h>
#include <stdio.h>

char Recive_table[20]="";  //鐢ㄤ簬鎺ユ敹wifi妯″潡鍙嶉鍒癕CU涓婄殑鏁版嵁
char Recive_state = 0;

void ms_delay(int t)
{  
        int i,j;
         for(i=t;i>0;i--)   
                for(j=110;j>0;j--);
}

void us_delay(char t)
{  
        while(t--);
}

void LED(void)
{
                P1 = 0;
                ms_delay(100);
                P1 = 0xff;
                ms_delay(100);

}

void WIFI_Init(void)
{
        TI = 1;        
        //ESP8266_Set("AT+RST");
        printf("AT+RST\r\n");
        LED();
        ms_delay(1000) ;
        //ESP8266_Set("AT+CWMODE=3");
        printf("AT+CWMODE=3\r\n");
        LED();
        ms_delay(1000) ;
        //ESP8266_Set("AT+CIPMUX=1");
        printf("AT+CIPMUX=1\r\n");
        LED();
        ms_delay(1000) ;
        //ESP8266_Set("AT+CIPSERVER=1,8080");
        printf("AT+CIPSERVER=1,8080\r\n");
        LED();
        ms_delay(1000) ;
        while(!TI);
        TI = 0;
        ES = 1;
}

void Send_Uart(char value)
{  
        ES=0;  //关闭串口中断  
        TI=0;   //清发送完毕中断请求标志位   
        SBUF=value; //发送
         while(TI==0); //等待发送完毕   TI=0;   //清发送完毕中断请求标志位   
        ES=1;  //允许串口中断  
}

void ESP8266_Set(char *puf) // 数组指针*puf指向字符串数组               
{   
        while(*puf!='\0')    //遇到空格跳出循环  
        {   
                Send_Uart(*puf);  //向WIFI模块发送控制指令。  
                 us_delay(5);  
                 puf++;   
         }  
        us_delay(5);  
        Send_Uart('\r'); //回车
         us_delay(5);
         Send_Uart('\n');   //换行  
        ms_delay(1000);
}


void Uart_Init(void)//浣跨敤瀹氭椂鍣?浣滀负娉㈢壒鐜囧彂鐢熷櫒
{  
        TMOD=0x20;//设置定时器1为工作方式2
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=0;
}


int main (void)
{        
        int num = 0;
         Uart_Init();
        ms_delay(1000) ;
    WIFI_Init();
        
        while(1)
        {               
                if(Recive_state == 1)
                {
                        ES=0;  //鍏抽棴涓插彛涓柇        
//                        while(Recive_table[num] != '\0')  
//                        {
//                                TI=0;   //娓呭彂閫佸畬姣曚腑鏂姹傛爣蹇椾綅   
//                                SBUF=Recive_table[num]; //鍙戦//                                 
//                                 while(TI==0); //绛夊緟鍙戦
//                                TI=0;   //清发送完毕中断请求标志位
//                                num++;
//                        }
//                        num = 0;
//                        memset(Recive_table,'\0',20);
                        LED();
                        Recive_state = 0;
                        ES=1;  //允许串口中断
                }
        }
}

void Uart_Interrupt() interrupt 4         
{   
        static char i=0;
        if(RI==1)  
        {  
                RI=0;         
                Recive_table[i]=SBUF;        
                i++;
                if((Recive_table[i-1]=='\n'))
                {
                        i=0;
                        Recive_state = 1;
                }
                             
        }
        else
                TI = 0;     
}

相关帖子

沙发
dirtwillfly| | 2017-3-7 08:50 | 只看该作者
对比下时序,看有什么区别

使用特权

评论回复
板凳
ningling_21| | 2017-3-7 10:24 | 只看该作者
两种方式发送出去的数据完全一样吗

使用特权

评论回复
地板
流星石·| | 2017-3-22 00:11 | 只看该作者
void ESP8266_Set(char *puf) // 数组指针*puf指向字符串数组               
{   
        while(*puf!='\0')    //遇到空格跳出循环  
        {   
                Send_Uart(*puf++);  
         }  
}
这样就可以了,可printf应该一样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝