久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
WIFI中國移動云平臺 EDP協(xié)議的點燈和上傳溫濕度單片機源程序
[打印本頁]
作者:
xiazhanyongyuan
時間:
2019-5-25 15:44
標(biāo)題:
WIFI中國移動云平臺 EDP協(xié)議的點燈和上傳溫濕度單片機源程序
WIFI EDP協(xié)議的點燈和上傳溫濕度
這個程序我自己改的是利用雙串口例程 EDP協(xié)議的例程 改成的
單片機源程序如下:
#define MAIN_Fosc 22118400L //定義主時鐘
#include "STC15Fxxxx.H"
#include <string.h>
#define Baudrate1 115200UL
#define Baudrate2 115200UL
bit B_TX1_Busy; //發(fā)送忙標(biāo)志
bit B_TX2_Busy; //發(fā)送忙標(biāo)志
void UART1_config(u8 brt); // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
void UART2_config(u8 brt); // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無效.
void PrintString1(u8 *puts);
void PrintString2(u8 *puts);
bit Haertbeat_Flag;
bit Haertbeat_Detection;
u8 Rec_Char;
void PrintString2(u8 *puts);
void PrintString_Text(u8 *puts);
void wifi_Inti();
void Delay10000ms() ;
void Delay3000ms();
void RH(void);
void COM(void);
void Delay18ms();
void Delay_10us() ;
void PrintString_Data(u8 *puts);
void Up_temperature();
void Up_humidity();
//----------------定義區(qū)--------------------//
//----------------------------------------------//
u8 U8FLAG;
u8 U8count,U8temp;
u8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
u8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
u8 U8comdata;
u8 disbuf_h[]={0,0};
u8 disbuf_t[]={0,0};
u8 code temperature_Data1[]={0X80,0X15,0X00,0X05,0X00,0X11,0X2C,0X3B,0X74,0X65,0X6D,0X70,0X65,0X72,0X61,0X74,0X75,0X72,0X65,0X20,0X2C,0xff};
u8 code humidity_Data2[]={0X80,0X12,0X00,0X05,0X00,0X0E,0X2C,0X3B,0X68,0X75,0X6D,0X69,0X64,0X69,0X74,0X79,0X20,0X2C,0xff};
bit Haertbeat_Flag;
bit Haertbeat_Detection;
u8 Rec_Char;
u8 Rec_Num;
u8 Com_Turn_Light ;
u8 Rec_Fax_Text[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char code Heartbeat[]={0xC0,0x00,0xff};
u8 code Connect_Com[]={0X10,0X32,0X00,0X03,0X45,0X44,0X50,0X01,0X40,0X01,0X2C,0X00,0X09,0X35,0X31,0X38,0X39,0X38,0X38,0X32,0X37,
0X31,0X00,0X1C,0X63,0X52,0X6E,0X67,0X4F,0X50,0X4B,0X3D,0X33,0X6C,0X4D,0X65,0X78,0X32,0X41,0X75,0X45,0X69,0X32,0X41,0X37,0X63,0X6D,0X58,0X58,0X38,0X63,0X3D,0xff};
u8 code Save_Data[]={0X80,0X63,0X00,0X01,0X00,0X5F,0X7B,0X0A,0X09,0X22,0X64,0X61,0X74,0X61,0X73,0X74,0X72,0X65,0X61,0X6D,0X73,0X22,0X3A,0X09,0X5B,0X7B,0X0A,0X09,0X09,0X09,
0X22,0X69,0X64,0X22,0X3A,0X09,0X22,0X74,0X65,0X6D,0X70,0X65,0X72,0X61,0X74,0X75,0X72,0X65,0X22,0X2C,0X0A,0X09,0X09,0X09,0X22,0X64,0X61,0X74,0X61,0X70,0X6F,0X69,0X6E, 0X74, 0X73,0X22,0X3A,
0X09,0X5B,0X7B,0X0A,0X09,0X09,0X09,0X09,0X09,0X22,0X76,0X61,0X6C,0X75,0X65,0X22,0X3A,0X09,0X38,0X30,0X0A,0X09,0X09,0X09,0X09,0X7D,0X5D,0X0A,0X09,0X09,0X7D,0X5D,0X0A,0X7D,0xff};
void Haertbeat_Response()
{
unsigned char j;
for(j=0;j<3;j++)
{
PrintString_Text(Heartbeat);
Delay3000ms();
Delay3000ms();
if( Haertbeat_Flag == 1)
break;
}
if( Haertbeat_Flag == 1)
Haertbeat_Flag = 0;
else
{
wifi_Inti();
Delay3000ms();
PrintString_Text(Connect_Com);
Delay3000ms();
}
}
//========================================================================
// 函數(shù): void main(void)
// 描述: 主函數(shù)。
// 參數(shù): none.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
int main(void)
{
P0M1 = 0; P0M0 = 0; //設(shè)置為準(zhǔn)雙向口
P1M1 = 0; P1M0 = 0; //設(shè)置為準(zhǔn)雙向口
P2M1 = 0; P2M0 = 0; //設(shè)置為準(zhǔn)雙向口
P3M1 = 0; P3M0 = 0; //設(shè)置為準(zhǔn)雙向口
P4M1 = 0; P4M0 = 0; //設(shè)置為準(zhǔn)雙向口
P5M1 = 0; P5M0 = 0; //設(shè)置為準(zhǔn)雙向口
P6M1 = 0; P6M0 = 0; //設(shè)置為準(zhǔn)雙向口
P7M1 = 0; P7M0 = 0; //設(shè)置為準(zhǔn)雙向口
UART1_config(1); // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
UART2_config(2); // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無效.
EA = 1; //允許全局中斷
wifi_Inti();
PrintString_Text(Connect_Com);
// Delay10000ms();
// PrintString_Text(Save_Data);
Delay3000ms();
while(1)
{
Haertbeat_Response();
Delay18ms();
RH();
Delay_10us() ;
Up_temperature();
Delay_10us() ;
Up_humidity();
Delay_10us() ;
}
}
//========================================================================
// 函數(shù): void PrintString1(u8 *puts)
// 描述: 串口1發(fā)送字符串函數(shù)。
// 參數(shù): puts: 字符串指針.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void PrintString1(u8 *puts)
{
for (; *puts != 0; puts++) //遇到停止符0結(jié)束
{
SBUF = *puts;
B_TX1_Busy = 1;
while(B_TX1_Busy);
}
}
//========================================================================
// 函數(shù): void PrintString2(u8 *puts)
// 描述: 串口2發(fā)送字符串函數(shù)。
// 參數(shù): puts: 字符串指針.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void PrintString2(u8 *puts)
{
for (;*puts != 0;puts++) //遇到停止符0結(jié)束
{
S2BUF = *puts;
B_TX2_Busy = 1;
while(B_TX2_Busy);
}
}
void PrintString_Text(u8 *puts)
{
for (;*puts != 0xff;puts++) //遇到停止符0結(jié)束
{
S2BUF = *puts;
B_TX2_Busy = 1;
while(B_TX2_Busy);
}
}
void PrintString_Data(u8 *puts)
{
for (;*puts != 0xff;puts++) //遇到停止符0結(jié)束
{
S2BUF = *puts;
B_TX2_Busy = 1;
while(B_TX2_Busy);
}
}
//========================================================================
// 函數(shù): SetTimer2Baudraye(u16 dat)
// 描述: 設(shè)置Timer2做波特率發(fā)生器。
// 參數(shù): dat: Timer2的重裝值.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void SetTimer2Baudraye(u16 dat)
{
AUXR &= ~(1<<4); //Timer stop
AUXR &= ~(1<<3); //Timer2 set As Timer
AUXR |= (1<<2); //Timer2 set as 1T mode
TH2 = dat / 256;
TL2 = dat % 256;
IE2 &= ~(1<<2); //禁止中斷
AUXR |= (1<<4); //Timer run enable
}
//========================================================================
// 函數(shù): void UART1_config(u8 brt)
// 描述: UART1初始化函數(shù)。
// 參數(shù): brt: 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void UART1_config(u8 brt)
{
/*********** 波特率使用定時器2 *****************/
if(brt == 2)
{
AUXR |= 0x01; //S1 BRT Use Timer2;
SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / Baudrate1);
}
/*********** 波特率使用定時器1 *****************/
else
{
TR1 = 0;
AUXR &= ~0x01; //S1 BRT Use Timer1;
AUXR |= (1<<6); //Timer1 set as 1T mode
TMOD &= ~(1<<6); //Timer1 set As Timer
TMOD &= ~0x30; //Timer1_16bitAutoReload;
TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);
TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);
ET1 = 0; //禁止中斷
INT_CLKO &= ~0x02; //不輸出時鐘
TR1 = 1;
}
/*************************************************/
SCON = (SCON & 0x3f) | 0x40; //UART1模式, 0x00: 同步移位輸出, 0x40: 8位數(shù)據(jù),可變波特率, 0x80: 9位數(shù)據(jù),固定波特率, 0xc0: 9位數(shù)據(jù),可變波特率
// PS = 1; //高優(yōu)先級中斷
ES = 1; //允許中斷
REN = 1; //允許接收
P_SW1 &= 0x3f;
//P_SW1 |= 0x00;
//P_SW1 |= 0x80; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7 (必須使用內(nèi)部時鐘)
// PCON2 |= (1<<4); //內(nèi)部短路RXD與TXD, 做中繼, ENABLE,DISABLE
B_TX1_Busy = 0;
}
//========================================================================
// 函數(shù): void UART2_config(u8 brt)
// 描述: UART2初始化函數(shù)。
// 參數(shù): brt: 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無效.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void UART2_config(u8 brt) // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無效.
{
if(brt == 2)
{
SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / Baudrate2);
S2CON &= ~(1<<7); // 8位數(shù)據(jù), 1位起始位, 1位停止位, 無校驗
IE2 |= 1; //允許中斷
S2CON |= (1<<4); //允許接收
P_SW2 &= ~0x01;
//P_SW2 |= 1; //UART2 switch to: 0: P1.0 P1.1, 1: P4.6 P4.7
B_TX2_Busy = 0;
}
}
//========================================================================
// 函數(shù): void UART1_int (void) interrupt UART1_VECTOR
// 描述: UART1中斷函數(shù)。
// 參數(shù): nine.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void UART1_int (void) interrupt UART1_VECTOR
{
if(RI)
{
RI = 0;
}
if(TI)
{
TI = 0;
B_TX1_Busy = 0;
}
}
//========================================================================
// 函數(shù): void UART2_int (void) interrupt UART2_VECTOR
// 描述: UART2中斷函數(shù)。
// 參數(shù): nine.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 備注:
//========================================================================
void UART2_int (void) interrupt UART2_VECTOR
{
if((S2CON & 1) != 0)
{
S2CON &= ~1; //Clear Rx flag
Rec_Char = S2BUF;
SBUF = Rec_Char;
//SBUF = S2BUF;
}
if(Rec_Char == 0xD0)
{
Haertbeat_Detection = 1;
}
else
{
if ((Rec_Char == 0x00) && (Haertbeat_Detection == 1))
{
Haertbeat_Flag=1;
}
else
Haertbeat_Detection = 0;
Rec_Fax_Text[Rec_Num] = Rec_Char;
if (Rec_Char=='{')
{
Com_Turn_Light = 1;
}
if (Com_Turn_Light == 1)
{
if (Rec_Fax_Text[Rec_Num] == '}')
{
Com_Turn_Light = 0;
Rec_Num=0;
if(strstr((const char*)Rec_Fax_Text,"LED01")!=NULL)
{
P00 = 0;
}
else
if (strstr((const char*)Rec_Fax_Text,"LED00")!=NULL)
{
P00 = 1;
}
}
else Rec_Num++;
}
}
if((S2CON & 2) !=0)
{
S2CON &= ~2; //Clear Tx flag
B_TX2_Busy = 0;
}
}
//========================================================================
// 函數(shù):
// 備注:
//========================================================================
void wifi_Inti()
{
PrintString2("+++");
Delay10000ms();
Delay10000ms();
PrintString2("AT\r\n");
Delay10000ms();
PrintString2("AT+CWMODE=3\r\n");
Delay10000ms();
PrintString2("AT+RST\r\n");
Delay10000ms();
PrintString2("AT+CWJAP=\"QQ_MI\",\"12345678\"\r\n");
// PrintString2("AT+CWJAP=\"iPhoneSE\",\"12345678\"\r\n");
Delay10000ms();
Delay10000ms();
Delay10000ms();
Delay10000ms();
Delay10000ms();
Delay10000ms();
PrintString2("AT+CIPSTART=\"TCP\",\"183.230.40.39\",876\r\n");
Delay10000ms();
Delay10000ms();
PrintString2("AT+CIPMODE=1\r\n");
Delay10000ms();
PrintString2("AT+CIPSEND\r\n");
Delay10000ms();
}
//========================================================================
// 函數(shù):
// 備注:
//========================================================================
void Delay10000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 165;
j = 59;
k = 28;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay3000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 127;
j = 18;
k = 107;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay_10us() //@22.1184MHz
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 52;
while (--i);
}
void Delay18ms() //@22.1184MHz
{
unsigned char i, j, k;
_nop_();
i = 2;
j = 132;
k = 67;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//========================================================================
// 函數(shù):
// 備注:
//========================================================================
void COM(void)
{
u8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!P20)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(P20)U8temp=1;
U8FLAG=2;
while((P20)&&U8FLAG++);
//超時則跳出for循環(huán)
if(U8FLAG==1)break;
//判斷數(shù)據(jù)位是0還是1
//如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rofc
}
//========================================================================
// 函數(shù):
// 備注:
//========================================================================
void RH(void)
{
//主機拉低18ms
P20=0;
Delay18ms();
P20=1;
//總線由上拉電阻拉高 主機延時20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主機設(shè)為輸入 判斷從機響應(yīng)信號
P20=1;
//判斷從機是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運行
if(!P20) //T !
{
U8FLAG=2;
//判斷從機是否發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束
while((!P20)&&U8FLAG++);
U8FLAG=2;
//判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
while((P20)&&U8FLAG++);
//數(shù)據(jù)接收狀態(tài)
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
P20=1;
//數(shù)據(jù)校驗
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
disbuf_h[0]=U8RH_data_H/10+0x30;
disbuf_h[1]=U8RH_data_H%10+0x30;
disbuf_t[0]=U8T_data_H/10+0x30;
disbuf_t[1]=U8T_data_H%10+0x30;
}//fi
}//fi
}
//========================================================================
// 函數(shù):
// 備注: (u8 *puts)
//========================================================================
void Up_humidity()
{
u8 i;
PrintString_Data(humidity_Data2);
for (i=0;i<2;i++)
{
S2BUF=disbuf_h[i];
B_TX2_Busy = 1;
while(B_TX2_Busy);
}
}
//========================================================================
// 函數(shù):
// 備注: (u8 *puts)
//========================================================================
void Up_temperature()
{
u8 i;
PrintString_Data(temperature_Data1);
for (i=0;i<2;i++)
{
S2BUF=disbuf_t[i];
B_TX2_Busy = 1;
while(B_TX2_Busy);
}
}
復(fù)制代碼
所有資料51hei提供下載:
08-雙串口中斷收發(fā).rar
(87.2 KB, 下載次數(shù): 26)
2019-5-25 15:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
13058240662
時間:
2019-5-31 23:47
能問一下樓主什么專業(yè)的嗎?
作者:
dyhrdy
時間:
2020-1-16 13:56
樓主,有沒有JSON在51上的應(yīng)用實例?
作者:
123321151
時間:
2020-2-23 14:13
樓主用什么軟件寫的啊?是51單片機嗎?
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久久国产精品午夜一区
|
99视频在线免费观看
|
国产视频久久久久
|
99成人
|
在线观看www高清视频
|
欧美中文字幕一区二区
|
久久精品国产一区二区
|
欧美a级网站
|
久久亚洲欧美日韩精品专区
|
国产91在线 | 欧美
|
羞羞视频在线观看
|
国产精品一区二区三区在线播放
|
一区二区av
|
天天操狠狠操
|
国产 日韩 欧美 中文 在线播放
|
欧美性猛交一区二区三区精品
|
99精品国产一区二区三区
|
日韩免费一区二区
|
在线成人精品视频
|
国产精品久久久久久久久久免费看
|
欧美一级久久精品
|
特级黄色毛片
|
欧美日韩专区
|
国产精品揄拍一区二区
|
999久久久
|
日韩一区二区福利
|
一二三四在线视频观看社区
|
国产一区二区视频在线
|
成人夜晚看av
|
国产精品久久二区
|
一级欧美
|
成人精品在线视频
|
久久国产视频网站
|
91久久久久久久久久久
|
www.国产一区
|
97精品超碰一区二区三区
|
中文字幕精品一区久久久久
|
免费看黄色国产
|
欧美一级久久久猛烈a大片 日韩av免费在线观看
|
亚洲国产aⅴ成人精品无吗 国产精品永久在线观看
|
亚洲视频免费在线看
|