📄 cms.lst
字号:
CX51 COMPILER V7.20 CMS 09/22/2006 14:21:05 PAGE 1
CX51 COMPILER V7.20, COMPILATION OF MODULE CMS
OBJECT MODULE PLACED IN cms.OBJ
COMPILER INVOKED BY: D:\program\keil\C51\BIN\CX51.EXE cms.c LARGE BROWSE DEBUG
line level source
1 #include <stdio.h>
2 #include <string.h>
3 #include <intrins.h>
4 #include <stdlib.h>
5
6 #include "REG669.H"
7 #include "cmsdata.h"
8
9 //串口0用于和CMS91通信,串口1用于和PC机进行通信
10
11 #define GPRS_OK 0 // 正确
12 #define GPRS_ERR 1 // 错误
13 #define GPRS_PWR_ON 1
14 #define GPRS_PWR_OFF 0
15
16
17
18 #define GPRS_RECV_CMD_MAX_BUF 1024
19
20
21 char Uart0_RX_buf[GPRS_RECV_CMD_MAX_BUF]; //串口0接收缓冲区
22 char Uart1_RX_buf[GPRS_RECV_CMD_MAX_BUF]; //串口1接收缓冲区
23 int receiver0; //串口0接收缓冲区中数据的长度
24 int receiver1; //串口1接收缓冲区中数据的长度
25 int read0;
26 int read1;
27
28 void Init_UART0()
29 {
30 1 //====设置波特率===================
31 1 /* tmod = 0x20;
32 1 th1 = 0xfd;
33 1 tl1 = 0xfd;
34 1 pcon = 0x00;
35 1 scon=0x50; //串口工作在方式1下,10位异步收发,允许接收
36 1 tcon = 0x40; //启动定时器1
37 1 ie=0x90; //允许串口中断*/
38 1
39 1 PCON=0x00;
40 1
41 1 S0STAT=0x20;
42 1 S0CON=0x50; /*设置Uart0工作模式为8位可变波特率(模式1)作DSP串口收发*/
43 1
44 1 TMOD=0x20; /*设置T1为8位重装定时器(模式2)*/
45 1
46 1 TH1=0xfd; /*设置Uart0波特率为9600Hz(时钟11.0592MHz)*/
47 1 TL1=0xfd;
48 1
49 1 TCON = 0x40; //启动定时器1
50 1
51 1 ES0R=1; //开放UART0接收中断
52 1
53 1 }
54
55 void Init_UART1()
CX51 COMPILER V7.20 CMS 09/22/2006 14:21:05 PAGE 2
56 {
57 1 S1STAT=0X20; //区分接受和发送中断.S1STAT.5=1
58 1 S1CON=0X00; //串口控制寄存器清零
59 1
60 1 REN_1=1; //允许接收中断
61 1 // TI_1=1;
62 1
63 1 SM0_1=0;
64 1 SM1_1=1; //串口通讯方式为1//S1CON=0x52;
65 1
66 1 BRGCON=0X00; //关闭波特率发生器,设置波特率9600
67 1 BRGR1=0X04;
68 1 BRGR0=0X70;
69 1 BRGCON=0X01; //开启波特率发生器
70 1
71 1 ES1R=1; //开放UART1接收中断
72 1
73 1
74 1 }
75
76 void IntUart0Rx(void) interrupt 6 //串口0接收中断函数
77 {
78 1
79 1 Uart0_RX_buf[receiver0++]=S0BUF;
80 1 if(receiver0>=GPRS_RECV_CMD_MAX_BUF)
81 1 receiver0=0;
82 1
83 1 RI_0=0;
84 1 }
85
86 void IntUart1Rx(void) interrupt 10 //串口1接收中断函数
87 {
88 1
89 1 Uart1_RX_buf[receiver1++]=S1BUF;
90 1 if(receiver1>=GPRS_RECV_CMD_MAX_BUF)
91 1 receiver1=0;
92 1
93 1 RI_1=0;
94 1 }
95
96 void Uart1SendCrt(unsigned char crt) //串口1发送函数
97 {
98 1 S1BUF=crt;
99 1 while(TI_1==0);
100 1 TI_1=0;
101 1 }
102
103 void Uart0SendCrt(unsigned char crt) //串口0发送函数
104 {
105 1 S0BUF=crt;
106 1 while(TI_0==0);
107 1 TI_0=0;
108 1 }
109
110 void Uart0_SendString(char *pt) //发送字符串到串口0
111 {
112 1 while(*pt)
113 1 Uart0SendCrt(*pt++);
114 1 }
115
116 void Uart1_SendString(char *pt) //发送字符串到串口1
117 {
CX51 COMPILER V7.20 CMS 09/22/2006 14:21:05 PAGE 3
118 1 while(*pt)
119 1 Uart1SendCrt(*pt++);
120 1 }
121
122 int IntUart0Rx_cmd(char *cmd) //串口0接收cms91发来的数据
123 {
124 1 int loopcnt = 0;
125 1 int ncount = 0;
126 1
127 1 while(1)
128 1 {
129 2 if(read0 == receiver0)
130 2 {
131 3 ncount ++;
132 3 if(ncount >= 10000)
133 3 {
134 4 cmd[loopcnt++] = 0;
135 4 return GPRS_ERR;
136 4 }
137 3 continue;
138 3 }
139 2 ncount = 0;
140 2 if( (Uart0_RX_buf[read0] == '\r') || (Uart0_RX_buf[read0] == '\n'))
141 2 {
142 3 cmd[loopcnt ++] = 0;
143 3 read0 ++;
144 3 if(read0 >= GPRS_RECV_CMD_MAX_BUF)
145 3 read0 = 0;
146 3
147 3 if(strlen(cmd))
148 3 {
149 4 Uart1_SendString("\nRecv <- ");
150 4 Uart1_SendString(cmd);
151 4 Uart1_SendString("\n");
152 4 }
153 3 return GPRS_OK;
154 3 }else
155 2 {
156 3 cmd[loopcnt ++] = Uart0_RX_buf[read0];
157 3 read0 ++;
158 3 if(read0 >= GPRS_RECV_CMD_MAX_BUF)
159 3 read0 = 0;
160 3 }
161 2 }
162 1 }
163
164 void delay_1mS(void)
165 {
166 1 unsigned char i;
167 1 _nop_();
168 1 _nop_();
169 1 for(i=248;i>0;i--)
170 1 {
171 2
172 2 _nop_();
173 2 _nop_();
174 2 }
175 1 }
176
177 void Delay(int time)
178 {
179 1 unsigned char i;
CX51 COMPILER V7.20 CMS 09/22/2006 14:21:05 PAGE 4
180 1 for(i=0;i<time;i++)
181 1 delay_1mS();
182 1 }
183
184 int gprsSendMessage(const SM_PARAM* pSrc)
185 {
186 1 int nPduLength; // PDU串长度
187 1 unsigned char nSmscLength; // SMSC串长度
188 1 int nResult; //
189 1 char cmd[16]; // 命令串
190 1 //char temp[16];
191 1 char pdu[512]; // PDU串
192 1 char ans[128]; // 应答串
193 1
194 1 nPduLength = gprsEncodePdu(pSrc, pdu); // 根据PDU参数,编码PDU串
195 1 pdu[nPduLength] = 0;
196 1
197 1 gprsString2Bytes(pdu, &nSmscLength, 2); // 取PDU串中的SMSC信息长度
198 1 nSmscLength++; // 加上长度字节本身
199 1
200 1 // 命令中的长度,不包括SMSC信息长度,以数据字节计
201 1 sprintf(cmd, "AT+CMGS=%d\r", nPduLength / 2 - nSmscLength); // 生成命令
202 1
203 1 Uart0_SendString(cmd); // 先输出命令串
204 1
205 1 Delay(500);
206 1
207 1 nResult = IntUart0Rx_cmd(ans); // 读应答数据
208 1 nResult = IntUart0Rx_cmd(ans);
209 1
210 1 // 根据能否找到"\r\n> "决定成功与否
211 1 if(nResult == GPRS_OK)
212 1 {
213 2 int loopcnt = 40;
214 2 nResult = IntUart0Rx_cmd(ans);
215 2 Uart0_SendString(pdu); // 得到肯定回答,继续输出PDU串
216 2
217 2 pdu[0] = 0x1a; // CTRL + Z = 0x1a
218 2 pdu[1] = 0x0;
219 2 Uart0_SendString(pdu);
220 2
221 2 while(1)
222 2 {
223 3 Delay(1000);
224 3 IntUart0Rx_cmd(ans); // 读应答数据
225 3
226 3 // 根据能否找到"+CMS ERROR"决定成功与否
227 3 if(strncmp(ans, "+CMS ERROR", 10) == 0)
228 3 {
229 4 Uart1_SendString("发送失败\n");
230 4 return 0;
231 4 }else if (strncmp(ans, "OK", 2) == 0)
232 3 {
233 4 Uart1_SendString("发送成功\n");
234 4 return 1;
235 4 }
236 3
237 3 if(loopcnt-- == 0)
238 3 return 0;
239 3 }
240 2 }
241 1 Uart1_SendString("发送失败\n");
CX51 COMPILER V7.20 CMS 09/22/2006 14:21:05 PAGE 5
242 1 IntUart0Rx_cmd(ans);
243 1 IntUart0Rx_cmd(ans);
244 1 return 0;
245 1 }
246
247 /********************************************************************
248 // Function name : gprs_print_msg
249 // Description : 打印短消息
250 // Return type : void
251 // Argument : SM_PARAM* pMsg
252 *********************************************************************/
253 void gprs_print_msg(SM_PARAM* pMsg)
254 {
255 1 char tmp[100];
256 1
257 1 Uart1_SendString("\n服务中心:");
258 1 Uart1_SendString(pMsg->SCA);
259 1 Uart1_SendString("\n来自:");
260 1 Uart1_SendString(pMsg->TPA);
261 1 Uart1_SendString("\n时间:");
262 1 sprintf(tmp, "20%c%c年%c%c月%c%c日%c%c时%c%c分%c%c秒", pMsg->TP_SCTS[0], pMsg->TP_SCTS[1], \
263 1 pMsg->TP_SCTS[2], pMsg->TP_SCTS[3], \
264 1 pMsg->TP_SCTS[4], pMsg->TP_SCTS[5], \
265 1 pMsg->TP_SCTS[6], pMsg->TP_SCTS[7], \
266 1 pMsg->TP_SCTS[8], pMsg->TP_SCTS[9], \
267 1 pMsg->TP_SCTS[10], pMsg->TP_SCTS[11]);
268 1 Uart1_SendString(tmp);
269 1 Uart1_SendString("\n内容:");
270 1 Uart1_SendString(pMsg->TP_UD);
271 1 Uart1_SendString("\n");
272 1 }
273
274 void gprs_pwr_on_off(int bon)
275 {
276 1 static status_pwr = GPRS_PWR_OFF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -