亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機與esp8266聯手控制電機和led程序 調試出現問題
[打印本頁]
作者:
gyzgyz
時間:
2017-9-15 00:08
標題:
51單片機與esp8266聯手控制電機和led程序 調試出現問題
我用stc89單片機與esp8266聯手控制led和電機,發現必須直接在串口或者對esp8266發送兩次同樣信息才能讓panduan()選擇另一分支,如果只發一次信息,無變化;但是當我把panduan()中每個分支下的data_cls();刪除了,就只發一次信息就可以改變分支了。試了好久始終不得要領,不知到是什么原因。懇請大神解惑。程序如下:
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#define uint unsigned int
#define uchar unsigned char
#define RELOAD_COUNT 0xFA
uchar Receive;
uchar Recive_table[15];
static uchar i=0;
sbit LED0=P2^1;
sbit LED1=P2^2;
sbit ji0=P0^0;
sbit ji1=P0^1;
sbit ji2=P0^2;
sbit ji3=P0^3;
void ms_delay(uint z)
{
uint x,j;
for(x=z;x>0;x--)
for(j=110;j>0;j--);
}
void Uart_Init()//使用定時器1作為波特率發生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)
{
SCON=0x50; //設置為串行口以方式1工作,8位異步通訊,允許接收中斷。//一幀信息為10位,1位起始位,8位數據位(低位在先),1位停止位。
PCON=0x80; //SMOD波特率選擇位為1,SMOD=1.
TMOD=0x21; //設置定時器1為波特率發生器,工作在模式2,8位自動裝載
TH1=RELOAD_COUNT;//波特率9600 ,TH1=256-FOSC/16/12/波特率
TL1=TH1;
EA=1; //總中斷打開
ES=0; //關閉串口中斷
TR1=1; //啟動定時器1
}
void led(void)
{
LED0=0;
LED1=0;
ms_delay(100);
LED0=1;
LED1=1;
}
void SendString(char *s) //串口發送程序
{
while(*s != '\0')
{
SBUF = *(s++);
while(!TI);
TI = 0;
}
}
void zhengzhuan() //用的是電機驅動模塊
{
ji0=0;
ji1=0; //先停電機
ji0=1; //
ji1=0;
ji2=0; //第二個控制沒用
ji3=0;
}
void fanzhuan()
{
ji0=0;
ji1=0; //先停電機
ji0=0;
ji1=1;
ji2=0; //第二個控制沒用
ji3=0;
}
void stop() //停電機
{
ji0=0;
ji1=0;
ji2=0;
ji3=0;
LED0=1;
LED1=1;
}
void data_cls() //數組清零
{
uint l;
for(l = 0; l < 15; l ++)
Recive_table[l]=0;
}
void panduan() //根據信息判斷采用哪個分支
{
if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的數據為+IPD時進入判斷控制0\1來使小燈亮與滅
{
//if((Recive_table[3]=='1')&&(Recive_table[4]=='2'))
uint s;
s=Recive_table[10];
switch(s)
{
case '1':
{
data_cls();
LED0=0;
LED1=1;//1 燈滅
zhengzhuan();
break;
}
case '2':
{
data_cls();
LED0=1;
LED1=0; //1 燈亮
fanzhuan();
break;
}
case '3':
{
data_cls();
stop();
break;
}
default:
{
data_cls();
stop();
LED0=0;
LED1=0;
break;
}
}
}
else
{}
}
void main()
{
Uart_Init();//使用獨立的波特率發生器
led();
ms_delay(1000);
SendString("AT+CIPMUX=1");
SendString("\r\n");
led();
ms_delay(1000);
SendString("AT+CIPSERVER=1,8080");
SendString("\r\n");
EA=1;
ES=1; //允許串口中斷
while(1)
{
EA=1;
ES=1;
panduan();
}
}
void Uart_Interrupt() interrupt 4
{
if(RI==1)
{
RI=0;
Receive=SBUF; //MCU接收wifi模塊反饋回來的數據
Recive_table[i]=Receive;
i++;
if(Recive_table[i-1]=='\n')
{
i=0; //遇到換行 重新裝值
}
else
{}
}
else
{}
}
復制代碼
作者:
yzwzfyz
時間:
2017-9-15 23:57
畫個流程圖或許能看出問題
作者:
gyzgyz
時間:
2017-9-16 10:32
yzwzfyz 發表于 2017-9-15 23:57
畫個流程圖或許能看出問題
謝謝。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1