完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
8个回答
|
|
回帖奖励 +2 分积分
建议从该子函数名称前面看看有没有“;”没写的。这个只能你自己查出来。
|
|
|
|
全部发出来,我给你解答
|
|
|
|
查看这一行上面的代码又没有括号不配对,或者少 ; 的。
|
|
|
|
//延时函数 #include "delay.h" #include "intrins.h" void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } void delay_ms(u16 ms) { u16 i; for(i=0;i } #include "uart.h" #include "timer0.h" u16 USART1_RX_STA=0; u8 USART1_RX_REC_ATCOMMAD; u8 Flag_Rec_Call=0; xdata u8 USART1_RX_BUF[USART1_MAX_RECV_LEN]; // void Uart1Init(void) //9600bps@11.05926MHz { PCON &= 0x7F; // SCON = 0x50; // AUXR &= 0xBF; // AUXR &= 0xFE; // TMOD &= 0x0F; // TMOD |= 0x20; // TL1 = 0xFD; // TH1 = 0xFD; // ET1 = 0; // TR1 = 1; // ES=1; // } /*---------------------------- UART1 发送串口数据 -----------------------------*/ void UART1_SendData(u8 dat) { ES=0; //关串口中断 SBUF=dat; while(TI!=1); //等待发送成功 TI=0; //清除发送中断标志 ES=1; //开串口中断 } /*---------------------------- UART1 发送字符串 -----------------------------*/ void UART1_SendString(char *s) { while(*s)//检测字符串结束符 { UART1_SendData(*s++);//发送当前字符 } } ///*---------------------------- //UART1 发送字符串 //避免出现 软件报重复调用 //-----------------------------*/ //void UART1_SendString_other(char *s) //{ // while(*s)//检测字符串结束符 // { // UART1_SendData(*s++);//发送当前字符 // } //} /******************************************************************************* * 函数名 : Uart1 * 描述 : 串口1中断服务入口函数 * 输入 : * 输出 : * 返回 : * 注意 : ******************************/ void Uart1_INTER() interrupt 4 { if (RI) { RI = 0; //清除RI位 if(USART1_RX_STA TIM_SetCounter(); if(USART1_RX_STA==0) TR0=1; //开启定时器 USART1_RX_BUF[USART1_RX_STA++]=SBUF; //保存串口数据 } else { USART1_RX_STA|=1<<15; //????±ê???óê?íê3é } } if (TI) { TI = 0; //清除TI位 } } #include "SIMxxx.h" u8 SIM900_CSQ[4]; u8* sim900a_check_cmd(u8 *str) { char *strx=0; if(USART1_RX_STA&0X8000) // { USART1_RX_BUF[USART1_RX_STA&0X7FFF]=0;// strx=strstr((const char*)USART1_RX_BUF,(const char*)str); } return (u8*)strx; } u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime) { u8 res=0; USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=1; UART1_SendString(cmd); if(ack&&waittime) { while(--waittime) { delay_ms(10); if(USART1_RX_STA&0X8000) { if(sim900a_check_cmd(ack))break; USART1_RX_STA=0; } } if(waittime==0)res=1; } USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=0; return res; } u8 sim900a_work_test(void) { if(sim900a_send_cmd((u8 *)"ATrn",(u8 *)"OK",100)) { if(sim900a_send_cmd((u8 *)"ATrn",(u8 *)"OK",100))return SIM_COMMUNTION_ERR; //通信不上 } if(sim900a_send_cmd((u8 *)"AT+CPIN?rn",(u8 *)"READY",400))return SIM_CPIN_ERR; //没有SIM卡 if(sim900a_send_cmd((u8 *)"AT+CREG?rn",(u8 *)"0,1",400)) { if(strstr((const char*)USART1_RX_BUF,"0,5")==NULL) { if(!sim900a_send_cmd((u8 *)"AT+CSQrn",(u8 *)"OK",200)) { memcpy(SIM900_CSQ,USART1_RX_BUF+15,2); } return SIM_CREG_FAIL; //等待附着到网络 } } return SIM_OK; } u8 SIM900A_CONNECT_SERVER(u8 *IP_ADD,u8 *COM) { u8 dtbuf[50]; if(sim900a_send_cmd((u8 *)"AT+CGATT?rn",(u8 *)": 1",100)) return 1; if(sim900a_send_cmd((u8 *)"AT+CIPSHUTrn",(u8 *)"OK",500)) return 2; if(sim900a_send_cmd((u8 *)"AT+CSTTrn",(u8 *)"OK",200)) return 3; if(sim900a_send_cmd((u8 *)"AT+CIICRrn",(u8 *)"OK",600)) return 4; if(!sim900a_send_cmd((u8 *)"AT+CIFSRrn",(u8 *)"ERROR",200)) return 5; sprintf((char*)dtbuf,"AT+CIPSTART="TCP","%s","%s"rn",IP_ADD,COM); if(sim900a_send_cmd((u8 *)dtbuf,(u8 *)"CONNECT OK",200)) return 6; return 0; } u8 SIM900A_GPRS_SEND_DATA(u8 *temp_data) { u8 cmd[3]; //UART3SendString("启动数据发送,数据内容:",strlen("启动数据发送,数据内容:")); if(sim900a_send_cmd("AT+CIPSENDrn",">",100)) return 1; //UART3SendString((u8*)temp_data,strlen((u8*)temp_data)); UART3SendString("rn",2); if(sim900a_send_cmd(temp_data,NULL,0)) return 2; cmd[0]=0x1a;cmd[1]=0; if(sim900a_send_cmd(cmd,(u8 *)"SEND OK",1500)) return 3; //UART3SendString("数据发送成功",strlen("数据发送成功")); UART3SendString("rn",2); return 0; } #include "TIMER0.h" ***it RUNING_LED=P2^1; void Timer0Init(void) //10毫秒@115200 { AUXR &= 0x7F; TMOD &= 0xF0; TMOD |= 0x01; // TL0 = 0x00; // TH0 = 0xDC; // TF0 = 0; // ET0 = 1; // TR0 = 0; //停止计时 } void TIM_SetCounter(void) //重新装值 { TL0 = 0x00; // TH0 = 0xDC; // } /******************************************************************************* * 函数名 : Timer0_ISR * 描述 : 定时器0中断服务入口函数,20ms中断一次 * 输入 : * 输出 : * 返回 : * 注意 : *******************************************************************************/ void Timer0_ISR() interrupt 1 { TR0=0;//关定时器 USART1_RX_STA|=1<<15; // USART1_RX_BUF[USART1_RX_STA&0X7FFF]=0;//添加结束符 if(!USART1_RX_REC_ATCOMMAD) { USART1_RX_STA=0; if(strstr((char*)USART1_RX_BUF,"RING")!=NULL) Flag_Rec_Call=1;//检测是否是来电话了 } } #include typedef unsigned char uint8 ; typedef unsigned int uint16; ***it wd = P3^2; //定义数据单总线; ***it e =P1^5; // 定义1602液晶显示器数据使能端口; ***it rs=P1^0; // 定义数据/指令选择端口; ***it rw=P1^1; // 定义 读/写 选择端口; ***it BF=P0^7; // 定义繁忙位; bit w=0; //定义一个全局一位变量; //===========1602液晶显示器模块;=============== busy() //液晶屏繁忙检测函数; { e=0; rs=0; rw=0; P0=0xff; do { e=0; //使能位清零; rs=0; //指令; rw=1; //读; e=1; //数据传输启动; }while(BF); //如果BF==0;则液晶处于空闲状态; e=0; } play_data(uint8 wr) //液晶写入数据; { busy(); //繁忙检测; P0=wr; //装载数据; rs=1; //数据; rw=0; //写入; e=1; //传输开始; e=0; //传输结束; } play_cmd(uint8 cmd) //液晶写入指令; { busy(); //繁忙检测; P0=cmd; //装载数据; rs=0; //指令; rw=0; //写入; e=1; //传输开始; e=0; //传输结束; } reset_1602() //1602液晶显示器初始化函数; { play_cmd(0x38); play_cmd(0x0c); play_cmd(0x06); play_cmd(0x01); } //=========温度传感器延时模块============================ // ***it led= P1^0; delay(uint8 num ) //如果unm等于1;延时16.28微妙; { while(num--); //如果num大于一,则16.28+(num-1)*6.51. } delay2() //此函数延时3.26微秒; { uint8 j=0; j=9; } delay3() { uint16 s=60000; while(s--); } reset_1820() //========复位温度传感器; ======== { while(wd) { wd=1; delay(140); //拉高总线,延时大概921微妙左右;(延时值自定); wd=0; //总线由单片机拉低,下为延时函数,大概800微秒左右; delay(61); //1个此函数会延时400微妙左右; delay(61); //两个是800微妙左右; wd=1; //主机拉高总线,68微秒左右; delay(9); //延时68微妙左右 if(wd==0) //如果wd是0就终止复位;(代表复位成功); { while(wd==0); //总线一旦为低,那么就等待从机再将总线拉高. break; //终止while循环;(reset function end) } else { wd=1; delay(20); //延时140微妙; } } delay(30); //此时总线为高电平并延时205微妙,复位成功!; // if(wd)led=0;//此语句为检验是否复位成功;P1^0外接9012三极管接led小灯; } write_byte(uint8 dat) { uint8 i=0; for(i=0;i<8;i++) { wd=0; //A点; delay2(); //延时 wd=dat & 0x01; dat>>=1; delay(6); //A点到此处用时65.11微秒; wd=1; //总线释放; delay2(); //延时3.26微秒; } } //========此函数执行完成之后总线为高电平; uint8 read_byte() //=====读8位数据;=================== { uint8 j=0, dat =0; for(j=0;j<8;j++) { dat>>=1; wd=0; // A点 mcu拉低电平3.26微秒; delay2(); // 延时3.26微秒; wd=1; if(wd) { dat|=0x80; } //读完数据后A点到此处是11.93微秒,保持在15微秒之内; delay(9); // A点到此处80.29微秒; 理想时间范围是60--120微秒; wd=1; //释放总线; delay2(); //延时3.26微秒; } return dat; } start_sensor() //启动传感器; { reset_1820(); write_byte(0xcc); //跳跃命令; write_byte(0x44); //转换temperature(温度)命令; } uint8 read_temp() //从温度传感器度温度数据过程; { uint8 ak[2]; uint16 dat=0 , j=0; reset_1820(); //复位温度传感器 write_byte(0xcc); //跳跃rom命令; write_byte(0xbe) ; // 发出读数据命令; ak[0]=read_byte(); //读取第一个字节数据; ak[1]=read_byte(); //读取第二个字节数据; dat=ak[1]; //要把两个八位数据载入1个16位变量里; dat<<=8; dat|=ak[0]; j= dat; //==========以下是把温度传感器内部数据编译成16进制编码; if((j>>11)==0x1f) //此语句是负温度进入.0x1f是二进制5个全1; { dat=(~dat)+1; //负温度要取反加一操作; dat/=16; //传感器给的温度系数要除以16后,得到的数才是常规温度系数; w=0; //此语句是在主函数中用来判断是正温度还是负温度; return dat; //向主函数返回数据,并终止函数; } j=dat; if((j>>11)==0) //如果是零则是正温度; { dat/=16; //数据直接除以16,就得到了常规温度系数; w=1; //1代表正; return dat; //向主函数返回数据,并终止函数; } return 130; //向主函数返回数据,并终止函数; } delay_ms() //延时1秒; { uint8 i=250; uint16 j=608; while(j--) { while(i--); i=250; } } error() //测温出错; { uint8 i=5, j=0 ,ak[]="Error!"; while(i--) { play_cmd(0x82); while(ak[j]!=' |