完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
在做毕业设计:基于WLAN的电源监控终端。使用的是AT89C51单片机,将单片机和RM04模块 之间进行串口通信时,程序有些问题。
在keil 3编译时显示 求大神赐教!!! #include #include #include ***it LED_Flashing=P2^1;//表示第3个LED,P2.1; 表示系统起来了,系统指示灯 ***it RECV_LED_Flashing=P2^7;//表示第7个LED,P2.7; 闪烁表示串口有收到数据 ***it WIFI_LED_Status=P2^6; //WIFI连接状态指示灯 ***it RELAY_LED_Status=P2^5; //继电器状态指示灯 ***it RELAY_Switch=P1^4; //继电器开关 #define LED_Open() (LED_Flashing=OPEN) #define LED_Close() (LED_Flashing=CLOSE) #define RECV_LED_Open() (RECV_LED_Flashing=OPEN) #define RECV_LED_Close() (RECV_LED_Flashing=CLOSE) #define RECV_LED_Status() (RECV_LED_Flashing) #define WIFI_CONT_OK() (WIFI_LED_Status=OPEN) #define WIFI_CONT_DISCNT() (WIFI_LED_Status=CLOSE) #define RELAY_LED_Open() (RELAY_LED_Status=OPEN) #define RELAY_LED_Close() (RELAY_LED_Status=CLOSE) #define RELAY_Open() (RELAY_Switch=OPEN) #define RELAY_Close() (RELAY_Switch=CLOSE) #define Get_Relay_Status() (RELAY_Switch) /*51与PC之间通过WIFI的通讯协议*/ typedef struct WIFI_PC_PKT{ uchar head; //固定为0xAA uchar cmd; //// 1,代仅仅查询状态2代表修改状态 uchar relay_status; //0代表继电器关闭,1代表开启 uchar bell_status; //蜂鸣器0:关,1: 开 uchar endline; //结束符固定为0xBB }WIFI_PC_PKT_T; RECV_STATUS recv_sta=RECV_WAIT; //串口接收状态 WIFI_STATUS wifi_sta=WIFI_DISCNT; //WIFI状态 uchar idata buffer[MAX_BUF_SIZE]; //串口缓冲区 uchar num=0; //函数声明 void init(void); void send_char_com(unsigned char ch); void send_string_com(unsigned char *str,unsigned int strlen); void delay(uint z); unsigned int app_strlen(uchar * str); uchar app_strcmp(uchar *dst, uchar *src); uchar app_strstr(uchar *dst, uchar *src); void init_wifi(void); void app_adjust_wifi_is_ok(void); main() { WIFI_PC_PKT_T *pkt=(uchar *)&buffer; init(); // SBUF=0; // LED_Open(); // init_wifi(); LED_Open(); SBUF=0; while(1) { if(recv_sta==RECV_OK) //回车换行作为结束标志 { // RECV_LED_Open(); // send_string_com("Pig Said:",sizeof("Pig Said:")); // send_string_com(buffer,num); if(CMD_REQUES==pkt->cmd) { pkt->head=0xAA; pkt->cmd=CMD_REQUES; pkt->relay_status=(Get_Relay_Status()==OPEN?1:0); pkt->endline=0xBB; send_string_com(pkt,sizeof(WIFI_PC_PKT_T)); } else if(CMD_MODIFY==pkt->cmd) { pkt->head=0xAA; pkt->cmd=CMD_MODIFY; if(pkt->relay_status==1) { RELAY_Open(); RELAY_LED_Open(); } else { RELAY_Close(); RELAY_LED_Close(); } pkt->endline=0xBB; send_string_com(pkt,sizeof(WIFI_PC_PKT_T)); } num=0; recv_sta=RECV_WAIT; } delay(5); RECV_LED_Close(); /* if(WIFI_DISCNT==wifi_sta) { WIFI_CONT_DISCNT(); // init_wifi(); app_adjust_wifi_is_ok(); } else WIFI_CONT_OK(); */ } } /*------------------------------------------------------- 功能:串口初始化,波特率2400 方式1 8 UART -------------------------------------------------------*/ void init(void) //串口初始化 { TMOD = 0x20; //定时器1工作在方式2,定时器0工作在方式1 PCON = 0x00; SCON = 0x50; //选择串口工作方式1,打开接收允许 TH1 = 0xF3; TL1 = 0xF3; TR1=1; //启动定时器/计数器,还与GATE位状态有关 ES=1; //允许串行中断 EA=1; //总中断开 } //查询方式向串口发送一个字符 void send_char_com(unsigned char ch) { SBUF=ch; while(ti==0); TI=0; } //向串口发送一个字符串,strlen为该字符串长度 void send_string_com(unsigned char *str,unsigned int strlen) { unsigned int k=0; if(strlen<=0) return; do { send_char_com(*(str + k)); k++; } while(k < strlen); } /**/ //中断方式从串口接收字符 void receive(void) interrupt 4 using 3 { // static uchar iEnter=0; // if(RECV_LED_Status()==CLOSE) // RECV_LED_Open(); // else // RECV_LED_Close(); if(RI) { if(RECV_WAIT==recv_sta) { /* buffer[num]=SBUF; if(SBUF=='r') iEnter=num; if(SBUF=='n'&&(num-iEnter==1)) { num+=1; recv_sta=RECV_OK;//连续的字节里面出现了回车换行,则认为是接收完成 iEnter=0; } else num+=1; if(num>=MAX_BUF_SIZE) { recv_sta=RECV_OK;//超过了缓冲区的大小,也认为接收完成 iEnter=0; } */ if(0xAA==SBUF/*&&WIFI_OK==wifi_sta*/) { buffer[0]=SBUF; num=1; } else { buffer[num]=SBUF; num+=1; } if(0xBB==SBUF/*&&WIFI_OK==wifi_sta*/) { // num+=1; recv_sta=RECV_OK; // RECV_LED_Close(); // iEnter=0; } } RECV_LED_Open(); RI=0; } } /* *延时 */ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /* *计算一个字符串的长度,遇到0x00则结束 *@Return string lenght */ unsigned int app_strlen(uchar * str) { unsigned int len=0; while(*str!=0x00) len+=1; return len; } uchar app_strcmp(uchar *dst, uchar *src) { uchar Dst_Len=0; uchar Src_Len=app_strlen(src); while(Src_Len<=255&&*src!=0x00) { if(*dst==*src) Dst_Len+=1; else { Dst_Len=0; break; } dst++; src++; } return Dst_Len; } uchar app_strstr(uchar *dst, uchar *src) { uchar Dst_Len=0; uchar Src_Len=app_strlen(src); while(*dst!=0x00) { if(*dst==*src) { if(Dst_Len==Src_Len) break; //匹配 Dst_Len+=1; src++; if(*dst!=*src) { Dst_Len=0;//不匹配 } } dst++; } return Dst_Len;//如果是0代表不匹配 } void app_adjust_wifi_is_ok(void) { send_string_com(&AT_Cmd, app_strlen(&AT_Cmd)); send_string_com(&End_Line, app_strlen(&End_Line)); delay(1); if(SBUF=='F'||SBUF=='0'||SBUF=='u'||SBUF=='n'||SBUF=='d') wifi_sta=WIFI_OK; } /* *初始化WIFI模块,将其配置成一个客户端的模式,能自动连接到客户端 * */ void init_wifi(void) { uchar i=0; //Search WIFI Mode where is power on and starting to service for us send_string_com(&AT_Cmd, app_strlen(&AT_Cmd)); send_string_com(&End_Line, app_strlen(&End_Line)); while(1) //查询WIFI模块是否起来了,是否可以正常工作 { LED_Close(); if(RECV_WAIT==recv_sta) { delay(5); LED_Open(); } else break; if(255==i) { if(*buffer!=0x00) break; else return; } i+=1; } if(app_strstr(&buffer,"Found Device")==0) return;//比较后,返回的信息不 匹配 //上面的信息都匹配,那么开始配置WIFI了 for(i=0;*WIFI_Client_Defualt_Config!=0x00;i++) { send_string_com(&AT_Cmd, app_strlen(&AT_Cmd)); send_string_com(&ADD_Sig,app_strlen(&ADD_Sig)); send_string_com(WIFI_Client_Defualt_Config,app_strlen(WIFI_Client_Defualt_Config)); send_string_com(&End_Line, app_strlen(&End_Line)); delay(10); } wifi_sta=WIFI_OK; } |
|
相关推荐
5个回答
|
|
|
同意楼上的,建议看一下!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
发现了, RECV_STATUS recv_sta=RECV_WAIT; //串口接收状态 WIFI_STATUS wifi_sta=WIFI_DISCNT; //WIFI状态 这两句话都有问题,改了几遍都不行,该怎么改啊 |
|
|
|
|
打洞小地鼠 发表于 2015-5-13 13:16 WIFI_STATUS这个是个结构体还是什么?这个你要自己知道啊!对不! |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16903 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 16:59 , Processed in 0.856764 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1722