欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
我用51單片機(jī)連接esp8266,建立TCP連接,在發(fā)送數(shù)據(jù)時(shí),如果控制的外設(shè)超過一個(gè)就出錯(cuò)
[打印本頁]
作者:
Spoiled.
時(shí)間:
2021-5-26 20:08
標(biāo)題:
我用51單片機(jī)連接esp8266,建立TCP連接,在發(fā)送數(shù)據(jù)時(shí),如果控制的外設(shè)超過一個(gè)就出錯(cuò)
我用51單片機(jī)連接8266,然后建立TCP連接,在發(fā)送數(shù)據(jù)時(shí),如果控制的外設(shè)只有一個(gè)的話工作正常,但加入兩個(gè)后,比如我這兒又加了一個(gè)蜂鳴器,當(dāng)控制燈的時(shí)候,蜂鳴器當(dāng)前的狀態(tài)會(huì)取反,同理,控制蜂鳴器的時(shí)候,燈的狀態(tài)也會(huì)取反。不是蜂鳴器接線的問題,我把蜂鳴器換成LED也是出現(xiàn)這種問題,我實(shí)在想不明白,我先謝謝大家了,跪求原因
單片機(jī)源程序如下:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep = P2^3;
sbit LED1 = P2^4;
sbit LED2 = P2^5;
#define MAIN_Fosc 11059200UL //宏定義主時(shí)鐘HZ
uchar Recive_date[40]="";//接受數(shù)據(jù)
uchar Recive_flag = 0;//接收完成標(biāo)志
//1s延時(shí)
void delay1s(void)
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_();
}
//us級(jí)延時(shí)
void us_delay(uchar t)
{
while(t--);
}
//串口中斷函數(shù)
void Uart_Interrupt(void) interrupt 4
{
static uchar i=0;
if(RI==1)
{
RI=0;
ES = 0;//關(guān)閉串口中斷
Recive_date[i]=[/i]SBUF;
[i] if((Recive_date=='\n'))
{
i=0; //遇到換行 重新裝值
Recive_flag = 1;//接收數(shù)據(jù)完畢
}
else i++;
ES = 1;//打開串口中斷
}
else TI=0;
}
//發(fā)送一個(gè)字節(jié)
void sendByte(uchar b)
{
ES=0; //關(guān)閉串口中斷
TI=0; //清發(fā)送完畢中斷請(qǐng)求標(biāo)志位
SBUF=b; //發(fā)送
while(TI==0); //等待發(fā)送完畢
TI=0; //清發(fā)送完畢中斷請(qǐng)求標(biāo)志位
ES=1;
}
//發(fā)送字符串
void sendString(uchar *s)
{
while(*s!='\0') //遇到空格跳出循環(huán)
{
sendByte(*s); //向WIFI模塊發(fā)送控制指令。
us_delay(5);
s++;
}
us_delay(5);
sendByte('\r'); //回車
us_delay(5);
sendByte('\n');
}
//串口初始化
void Init_Uart(void)
{
TMOD = 0x20;//8位自動(dòng)重裝
SCON = 0x50;//8位數(shù)據(jù),波特率可變,方式1
TH1 = 0xFD;
TL1 = TH1; //9600波特率
PCON = 0x00;//波特率不加倍
TR1 = 1; //打開定時(shí)器1
EA = 1; //打開總中斷
ES = 1; //打開串口中斷
}
//8266初始化
void esp_init(void)
{
delay1s();
sendString("AT");
delay1s();
delay1s();
sendString("AT+CWMODE=3");
delay1s();
delay1s();
sendString("AT+RST");
delay1s();
delay1s();
sendString("AT+CWJAP=\"HONOR X10\",\"sxzwn.0717\"");
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
sendString("AT+CIPMUX=1");
delay1s();
delay1s();
sendString("AT+CIPSERVER=1,8080");
delay1s();
delay1s();
}
void main()
{
uchar LED_status=0;
uchar beep_status=0;
LED1 = 0;
LED2 = 0;
Init_Uart();
delay1s();
delay1s();
esp_init();
LED1 = 1;
delay1s();
LED1 = 0;
while(1)
{
if(Recive_flag==1&&Recive_date[0]=='+'&&Recive_date[1]=='I')
{
if(Recive_date[9]=='0')LED_status=1;
if(Recive_date[9]=='1')LED_status=0;
if(Recive_date[9]=='2')beep_status=0;
if(Recive_date[9]=='3')beep_status=1;
Recive_flag = 0;
}
if(LED_status==1)LED2 = 1;
else LED2 = 0;
if(beep_status==1)beep = 0;
else beep = 1;
}
}
復(fù)制代碼
作者:
Spoiled.
時(shí)間:
2021-5-26 22:22
我上面的格式不對(duì),重新發(fā)一下
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//sbit beep = P2^3;
sbit LED1 = P2^4;
sbit LED2 = P2^5;
#define MAIN_Fosc 11059200UL //宏定義主時(shí)鐘HZ
uchar Recive_date[40]="";//接受數(shù)據(jù)
uchar Recive_flag = 0;//接收完成標(biāo)志
//1s延時(shí)
void delay1s(void)
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_();
}
//us級(jí)延時(shí)
void us_delay(uchar t)
{
while(t--);
}
//串口中斷函數(shù)
void Uart_Interrupt(void) interrupt 4
{
/* static char i=0; //因?yàn)槭且晃灰晃唤邮眨杂胹tatic
if(RI)
{
ES = 0;//關(guān)閉串口中斷
RI = 0;//接收標(biāo)志位置零
Recive_date[i] = SBUF;
i++;
if(Recive_date[i-1] == '\n')
{
Recive_date[i] = '\0';
i = 0;
Recive_flag = 1;
}
ES = 1;//打開串口中斷
}
else
TI = 0;//響應(yīng)中斷后必須由軟件置零 */
static uchar i=0;
if(RI==1)
{
RI=0;
ES = 0;//關(guān)閉串口中斷
Recive_date[i]=SBUF;
if((Recive_date[i]=='\n'))
{
i=0; //遇到換行 重新裝值
Recive_flag = 1;//接收數(shù)據(jù)完畢
}
else i++;
ES = 1;//打開串口中斷
}
else TI=0;
}
//發(fā)送一個(gè)字節(jié)
void sendByte(uchar b)
{
ES=0; //關(guān)閉串口中斷
TI=0; //清發(fā)送完畢中斷請(qǐng)求標(biāo)志位
SBUF=b; //發(fā)送
while(TI==0); //等待發(fā)送完畢
TI=0; //清發(fā)送完畢中斷請(qǐng)求標(biāo)志位
ES=1;
}
//發(fā)送字符串
void sendString(uchar *s)
{
while(*s!='\0') //遇到空格跳出循環(huán)
{
sendByte(*s); //向WIFI模塊發(fā)送控制指令。
us_delay(5);
s++;
}
us_delay(5);
sendByte('\r'); //回車
us_delay(5);
sendByte('\n');
}
//串口初始化
void Init_Uart(void)
{
TMOD = 0x20;//8位自動(dòng)重裝
SCON = 0x50;//8位數(shù)據(jù),波特率可變,方式1
TH1 = 0xFD;
TL1 = TH1; //9600波特率
PCON = 0x00;//波特率不加倍
TR1 = 1; //打開定時(shí)器1
EA = 1; //打開總中斷
ES = 1; //打開串口中斷
}
//8266初始化
void esp_init(void)
{
delay1s();
sendString("AT");
delay1s();
delay1s();
sendString("AT+CWMODE=3");
delay1s();
delay1s();
sendString("AT+RST");
delay1s();
delay1s();
sendString("AT+CWJAP=\"HONOR X10\",\"sxzwn.0717\"");
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
delay1s();
sendString("AT+CIPMUX=1");
delay1s();
delay1s();
sendString("AT+CIPSERVER=1,8080");
delay1s();
delay1s();
}
void main()
{
uchar LED_status=0;
uchar beep_status=0;
LED1 = 0;
LED2 = 0;
Init_Uart();
delay1s();
delay1s();
esp_init();
LED1 = 1;
delay1s();
LED1 = 0;
while(1)
{
if(Recive_flag==1&&Recive_date[0]=='+'&&Recive_date[1]=='I')
{
if(Recive_date[9]=='0')LED_status=1;
if(Recive_date[9]=='1')LED_status=0;
if(Recive_date[9]=='2')beep_status=0;
if(Recive_date[9]=='3')beep_status=1;
Recive_flag = 0;
}
if(LED_status==1)LED2 = 1;
else LED2 = 0;
if(beep_status==1)LED1 = 0;
else LED1 = 1;
}
}
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1