📄 gsm-
字号:
C51 COMPILER V7.06 TC35 06/13/2010 15:40:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TC35
OBJECT MODULE PLACED IN TC35.OBJ
COMPILER INVOKED BY: E:\WorkSpace\Keil\C51\BIN\C51.EXE TC35.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "common.h"
2
3 char RxBuf[RxBuf_N]={0}; //定义串口接收数据缓冲区
4 uchar RxPoint; //Rx缓冲区指针
5 bit flag=0; //用来等待发送信息结束后,接收TC35响应的标志
6 uchar PhoneNum[15]="+8613760602242"; //手机号码
7 const uchar *MsContent="I Love You !"; //短信内容
8
9
10 //查找字符串,在s中查找t
11 //返 回 值: s_temp(t在s中的位置)成功 0失败
12 char *LookFor_Str(uchar *s, uchar *t)
13 {
14 1 uchar *s_temp;
15 1 uchar *m_temp;
16 1 uchar *t_temp;
17 1 if (s == 0 ||t == 0) return 0;
18 1 for (s_temp = s; *s_temp != '\0'; s_temp++)
19 1 {
20 2 m_temp = s_temp;
21 2 for (t_temp = t; *t_temp == *m_temp; t_temp++, m_temp++);
22 2 if (*t_temp == '\0') return s_temp;
23 2 }
24 1 return 0;
25 1 }
26
27
28 //发送"AT"联机指令,测试是否连接正确
29 void Send_AT(void)
30 {
31 1 uchar *p;
32 1 uchar i=10;
33 1 while(i--) //测试10次,在某一次成功就退出
34 1 {
35 2 RxPoint=0; //buffer指针清0
36 2 SendString("AT\r"); //发送AT回车
37 2 ES=1; //必须中断 串口中断应许 等待应答"OK"
38 2 //delay_ms(100); //等待接受数据完成
39 2 while(flag==0);
40 2 flag=0;
41 2 delay_ms(300);
42 2 p=LookFor_Str(RxBuf,"OK"); //接收到的数据存在RsBuf
43 2 if(p!=0) //接收到"OK"
44 2 {
45 3 PutStr(0,0,"GSM 模块正常 ");
46 3 delay_ms(1000);
47 3 break;
48 3 }
49 2 PutStr(0,0,"没检测到GSM 模块");
50 2 delay_ms(500);
51 2 }
52 1 }
53
54 //设置短信模式 1:text模式 0:PDU模式
55 //串口发送数组命令到TC35,AT+CMGF=1
C51 COMPILER V7.06 TC35 06/13/2010 15:40:37 PAGE 2
56 void Set_Mode(uchar mode)
57 {
58 1 uchar *p,i=10;
59 1 while(i--) //测试10次,在某一次成功就退出
60 1 {
61 2 RxPoint=0; //buffer指针清0
62 2 if(mode) SendString("AT+CMGF=1\r"); //设置短消息模式 1 TEXT
63 2 else SendString("AT+CMGF=0\r"); //设置短消息模式 PDU模式
64 2 ES=1; //必须中断 串口中断应许 等待应答"OK"
65 2 //delay_ms(300); //等待接受数据完成
66 2 while(flag==0);
67 2 flag=0;
68 2 delay_ms(300);
69 2 p=LookFor_Str(RxBuf,"OK"); //接收到的数据存在RsBuf
70 2 if(p!=0) //接收到"OK"
71 2 {
72 3 PutStr(1,0,"短信模式:text");
73 3 delay_ms(1000);
74 3 break;
75 3 }
76 2 PutStr(1,0,"短信模式设置失败");
77 2 delay_ms(500);
78 2 }
79 1 }
80
81 //发送号码
82 void Send_PhoneNum(uchar *str)
83 {
84 1 uchar i=0;
85 1 while(*str)
86 1 {
87 2 SendASC(*str) ;
88 2 str++;
89 2 i++;
90 2 if(i==14) break; //只发送14个
91 2 }
92 1 }
93
94 //发送TEXT短信 AT+CMGS="+8613760602242"
95 //*dialnum 目的号码 *text短信内容
96 //返回:1 发送成功 0 发送失败
97 uchar TransmitText(uchar *dialnum,uchar *text)
98 {
99 1 uchar i=10,j=10;
100 1 uchar *p;
101 1 while(i--)
102 1 {
103 2 RxPoint=0; //buffer指针清0
104 2 SendString("AT+CMGS="); //信息发送指令 AT+CMGS="+8613760602242"
105 2 SendASC('"');
106 2 Send_PhoneNum(dialnum); //号码
107 2 SendASC('"');
108 2 SendASC('\r'); //回车
109 2 while(flag==0);
110 2 flag=0;
111 2 delay_ms(300);
112 2 p=LookFor_Str(RxBuf,">"); //">"
113 2 if(p!=0) //如果接受到 > 发送text
114 2 {
115 3 RxPoint=0; //清空接收缓冲区
116 3 SendString(text); //发送短信内容
117 3 SendString("\x1a\r"); //'\x1a'结束符(相当CTRL+Z) '\r'回车符
C51 COMPILER V7.06 TC35 06/13/2010 15:40:37 PAGE 3
118 3 while(flag==0);
119 3 flag=0;
120 3 delay_ms(5000); //这里要延时足够长时间,否则会读取错误
121 3 p=LookFor_Str(RxBuf,"OK"); //查找OK
122 3 if(p!=0) //发送成功
123 3 {
124 4 PutStr(2,0,"To: ");
125 4 PutStr(2,2,dialnum+3);
126 4 PutStr(3,0,"发送成功 ^_^");
127 4 return 1;
128 4 }
129 3 else
130 3 {
131 4 PutStr(2,0,"发送失败");
132 4 delay_ms(1000);
133 4 PutStr(2,0,"正在重发");
134 4 }
135 3 }
136 2 }
137 1 PutStr(2,0,"多次重发失败");
138 1 return 0;
139 1 }
140
141 //完整的短信发送函数
142 //dialnum:手机号码 text:短信内容
143 void Send_Message(uchar *dialnum,uchar *text)
144 {
145 1 Send_AT(); //发送AT
146 1 Set_Mode(1); //设置短信模式:text
147 1 TransmitText(dialnum,text); //设置
148 1 }
149
150
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 651 ----
CONSTANT SIZE = 168 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 39
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -