sim300c模块at命令分析通信系统设计(编辑修改稿)内容摘要:

n=0。 timesendflag=1。 } } } //采用定时扫描方式 reg_code = 1。 //先消隐显示 Font_code = Display_Buffer[bit_con]。 //送字形码 reg_code = S_Tab[bit_con]。 //送字位 bit_con++。 if(bit_con 7) { bit_con = 0。 } } void main() { uchar keyval。 bit Temp_Insert_Flag。 uchar tmp[2]。 uchar i=0。 InitTimer0()。 reg_code = 0xff。 //关闭显示 for(bit_con=0。 bit_con8。 bit_con++) Display_Buffer[bit_con] = Show_Tab[0]。 bit_con = 0。 timesendflag=0。 SerialIni()。 Sim300Ini()。 temperature=0。 Alarm_Temp = 0。 while(1) { keyval=keyscan()。 if(keyval==7) { Sim300Tx1()。 } if(keyval==6) { Sim300Tx2()。 } } } : include include include define uchar unsigned char define uint unsigned int define FOSC_12M//设置晶振 define Font_code P0 //字符码写地址 define reg_code P2 //字位码写地址 code uchar Show_Tab[]={ 0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0x88,/*A*/ 0x83,/*b*/ 0xC6,/*C*/ 0xA1,/*d*/ 0x86,/*E*/ 0x8E /*F*/ }。 code uchar S_Tab[8]={ 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }。 uchar Display_Buffer[8]。 //显示缓冲区 uchar bit_con。 //字位码扫描计数器 //uchar code AT[]=AT。 //握手信号 //uchar code ATE[]=ATE。 //关回显 //uchar code AT_CNMI[]=AT+CNMI=2,1。 //设置这组参数来了新信息存在 SIM 卡 //uchar code AT_CSCA[]=AT+CSCA=\+8613800516500\。 //设置徐州移动服务中心号码 //uchar code AT_CSCA[]=AT+CSCA=\+8613010350500\。 //设置徐州联通服务中心号码 //uchar code AT_CMGF[]=AT+CMGF=1。 //设置短信的格式为 text 格式 //uchar code AT_CMGR[]=AT+CMGR=。 //读取短信指令 //uchar code AT_CMGS[]=AT+CMGS=。 //发送短信指令 //uchar code AT_CMGD[]=AT+CMGD=。 //发送短信指令 //char RxBuf[RxBuf_N]={0}。 //定义串口接收数据缓冲 区 //uchar RxPoint。 //Rx 缓冲区指针 uchar code PhoneNum1[15]=+8618652148476。 //手机号码 uchar code PhoneNum2[15]=+8618652147478。 uchar GsmRcv[10] = {0}。 uchar GsmRcvAt[10] = {0}。 uchar GsmRcvCnt = 0。 bit GsmAtFlag=0。 bit sendflag。 //0 代表发送成功 ; 1 代表发送失败 bit timesendflag。 //定时发送短信 , 10 分钟 uchar Sms_Text[] = luheng sb。 uchar temperature。 uchar Alarm_Temp。 //报警温度 //uchar sms_temp[]={20,30,40,50,60,70}。 //uint ms_con,sec_con。 /******************************************************************/ void delayus(unsigned char us)//delay us { while(us)。 } /******************************************************************/ void delayms(unsigned char ms)//delay Ms { while(ms) { delayus(250)。 delayus(250)。 } } /******************************************************************/ void DelaySec(unsigned char s) { while(s) { delayms(250)。 delayms(250)。 delayms(250)。 delayms(250)。 } } void SerialIni()//初始化程序 { TMOD|=0x20。 //定时器 1 操作模式 2:8位自动重载定时器 ifdef FOSC_12M // 在这里根据晶振大小设置不同的数值初始化串口 TH1=0xf3。 //装入初值,波特率 2400 TL1=0xf3。 else TH1=0xfd。 //装入初值,波特率 9600 TL1=0xfd。 endif //end of SOC_12M TR1=1。 //打开定时器 SM0=0。 //设置串行通讯工作模式,( 10为一部发送,波特 率可变,由定时器 1 的溢出率控制) SM1=1。 //(同上 )在此模式下,定时器溢出一次就发送一个位的数据 REN=1。 //串行接收允许位(要先设置sm0sm1 再开串行允许) EA=1。 //开总中断 ES=1。 //开串行口中断 } void UartSendASC(uchar d) { SBUF=d。 while(!TI)。 TI=0。 } void UartSendString(uchar *str) { while(*str) { UartSendASC(*str)。 str++。 } } void Serial_interrupt() interrupt 4 using 1 { uchar i = 0。 if(RI == 1) //收到信息 { RI=0。 //接收中断信号清零,表示将继续接收 GsmRcv[GsmRcvCnt] = SBUF。 // Uart1Send(tmp)。 GsmRcvCnt++。 //收到了完整的 AT 指令,完整的AT 指令是以 0x0a 0x0d 结尾的。 故作此判断,在接收的过程中是否收到 0x0a 0x0d if(GsmRcv[GsmRcvCnt2] == 0x0d amp。 amp。 GsmRcv[GsmRcvCnt1] == 0x0a amp。 amp。 GsmRcvCnt = 2) { //一旦收到 0x0a 0x0d,就将数据保存起来。 用户主函数的判断。 for(i=0。 iGsmRcvCnt。 i++) { GsmRcvAt[i] = GsmRcv[i]。 GsmRcv[i] = 0。 } GsmRcvCnt = 0。 GsmAtFlag = 1。 //收到了完整的 at 指令,通过这个标志位置 1,这样主函数就知道去判断了。 } else if(GsmRcvCnt = 10)//因为内存有限,收到了 50 个字符还是没有看到0x0a 0x0d 的话,就重新开始接收吧。 { GsmRcvCnt = 0。 } } } void Sim300Ini() { while(GsmAtFlag == 0) { UartSendString(ati\r)。 // 设置sim300 波特率 DelaySec(1)。 //延时 1 秒 } GsmAtFlag = 0。 while(1) { UartSendString(AT+COPS?\r)。 DelaySec(1)。 //延时 1 秒 while(GsmAtFlag == 0)。 //if(strstr(GsmRcvAt, CHINA MOBILE) )// 检测是否收到 CHINA MOBILE 服务商信息。 如果收到证明是连接上网络了 if(strstr(GsmRcvAt, OK) )//检测是否收到 CHINA UNICOM 服务商信息。 如果收到证明是连接上网 络了 { break。 } } UartSendString(AT+CMGF=1\r)。 // 设置使用 TEXT 格式发送短信,短信有两种格式,另外一种是 UDP DelaySec(1)。 //延时 3 秒 UartSendString(AT+CSCS=\GSM\\r)。 //使用 GSM DelaySec(1)。 //延时 3 秒 // UartSendString(AT+CSMP=17,167,0,250\r)。 //设备短信模式(手机自动保存模式,平时我们手机发送的是这类) UartSendString(AT+CSMP=17,167,0,240\r)。 //设备短信模式(手机非自动保存模式) DelaySec(1)。 //延时 3 秒 P1_2=0。 } void Sim300Tx1() { UartSendString(AT+CMGS=)。 //设置发送的号码,自己修改成像发送的号码 UartSendASC(39。 39。 )。 UartSendString(PhoneNum1)。 UartSendASC(39。 39。 )。 UartSendASC(39。 \r39。 )。 DelaySec(1)。 //延时 3 秒 UartSendString(Sms_Text)。 // 发送的内容。 DelaySec(1)。 UartSendASC(temperature/10+0x30)。 UartSendASC(temperature%10+0x30)。 UartSendString(\x1a\r)。 // 告诉模块内容发送完了。 GsmAtFlag = 0。 while(GsmAtFlag == 0)。 if(strstr(GsmRcvAt, ERROR) )//检测是否收到 +CME ERROR ,如果是这是发送失败,退出重新发送 { UartSendString(0x1b)。 //发送退出指令 sendflag=1。 } else if(strstr(GsmRcvAt, OK) )//检测是否收到 +CMGS ,如果收到,表明发送成功了。 等待一会重新发送 { sendflag=0。 } } void Sim300Tx2() { UartSendString(AT+CMGS=)。 //设置发送的号码,自己修改成像发送的号码 UartSendASC(39。 39。 )。 UartSend。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。