微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机不停地发送数据,无法停止

单片机不停地发送数据,无法停止

时间:10-02 整理:3721RD 点击:
#include "lcd.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char buff[2]=0;
void SendASC(uchar d);//发送一个数据
void SendString(uchar *str);//发送一组数据
void delay(uint xms);//延时函数,有参函数
void Init_ESP8266();
void Receive_Handle(uchar Value);//打开led灯
void Uart_init();//初始化定时器
void main()
{
P0=0x00;
P1=0x00;
LcdInit();
Uart_init();
Init_ESP8266();
P0=0xff;
while(1);
}
void uart_rx(void)  interrupt 4        using 3          //放在这里 和放在main()里面是一样的
{
           unsigned char i;
        unsigned char flag;
        unsigned char dat;
    if(RI)                         //是否接收中断
    {
           RI=0;
       dat=SBUF;
       if(dat==':'&&(i==0)) //接收数据第一帧
       {
            buff=dat;
            flag=1;        //开始接收数据
       }
       else
              if(flag==1)
              {
                           i++;
                      buff=dat;        
                      if(i>=2)
                  {
                           i=0;
                           flag=0;
        Receive_Handle(buff[0]);
         LcdWriteCom(0x08);
        LcdWriteData(buff[0]);
}
}
}
   }
void Uart_init()
{
        TMOD= 0X21;                //T1工作方式2,8位自动重装; T0工作方式1   
        TH1=0Xfd;
        TL1=0Xfd;            //波特率设置为9600
        TR1=1;                     // 定时器1启动  
        SM0=0;            // 设置串口的工作模式
        SM1=1;             //方式1
        ET0=1;                   //打开中断允许开关
        TR0=1;                   //打开定时器开关
        REN=1;                  // 允许串口接收数据         
        ES=1;              // 串口中断应许
        EA=1;                 // 开启中断        
}
void SendASC(uchar d)
{        
        SBUF=d;                                   //将待发送的数据放到发送缓冲器中
        while(!TI);                           //等待发送完毕(硬件置“1”)
        TI=0;                                   //硬件置“1”,则需软件清零
}
void SendString(uchar *str)        
{
        while(*str)
        {
                SendASC(*str) ;
                str++;                                  //这两句等价于SendASC(*str++);
        }
}
void delay(uint xms)//延时函数,有参函数
{
        uint x,y;
        for(x=xms;x>0;x--)
        for(y=110;y>0;y--);
}
void Init_ESP8266()
{         
        SendString("AT+RST\r\n");
        delay(1500);
        SendString("AT+CWMODE=1\r\n");
        delay(1500);
        SendString("AT+CWJAP=\"PE\",\"12345678910\"\r\n");                         //在这里填入你的路由器名称和密码 分别替代205和 cug205502 双引号和斜杠不能删除                                                        //我的路由是205 密码是cug205502
        delay(10000);
        SendString("AT+CIPMODE=0\r\n");
        delay(1500);
        SendString("AT+CIPMUX=1\r\n");
        delay(1500);
        SendString("AT+CIPSERVER=1,5050\r\n");
        delay(1500);
}
void  Receive_Handle(uchar Value)
{
    switch(Value)//具体发送过来的是什么数据  需要自己自己通过串口调试助手查看
//改变这里面对应的数据即可  
{
case  0x00:P1=0xff;break;
case  0x01:P1=0xfe;break;
case  '3':P1=0xfd;break;
case  '4':P1=0xfb;break;
default:P2=0x00;break;
}
}
一运行wifi模块就不停复位,也不会执行下一条指令,请问怎么解决


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top