📄 410rt.lst
字号:
C51 COMPILER V7.06 410RT 04/05/2008 12:08:22 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 410RT
OBJECT MODULE PLACED IN 410rt.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 410rt.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <c8051F410.h>
2 #include <string.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define buf_len 120
6 #define SYSCLK 24500000
7 #define uart_rate 9600
8
9 #define C_TMR1 -((SYSCLK/48)/2)/uart_rate
10 #define C_TMR0 -((SYSCLK/48)/1000)*20
11 /*
12 struct location
13 {
14 uchar high;
15 uchar low;
16 }location;
17 */
18 sbit TC35_IGT = P1^6;
19 sbit TC35_PD = P1^5;
20 sbit PC_using=P2^6;
21
22 void ENA_WDT (void);
23 void SYSCLK_Init (void);
24 void GSM_PORT_Init (void);
25 void CKCON_Init (void);
26 void Uart0_Init (void);
27 void Port_Init (void);
28
29 void GSM_Init (void);
30 void delay_20ms (void);
31
32 void transmitte (void); //send information
33 void Read_sms(void); //read a message
34 void Process_sms(void); //process a message;
35 void Send_sms(void); //send a message;
36 void Del_sms(void); //delete a message
37 void ini_buf(void); //initial rec_buff put_buf=get_buff;
38 void addbuffer(void); //add buffer;
39 uchar getbuffer(void); //get from buffer;
40
41 uchar code tr_buf[] = {"atd13488716723;\r\0"};
42 //uchar code del_msm[]={"AT+CMGD=10\r\0"}; //删短信
43 uchar code sd_ms[]={"AT+CMGS=\""}; //发信息
44 uchar code pho[]={"13488716723"}; //管理员号码
45 uchar data loca[12]={"AT+CMGR="}; //接信息
46 uchar xdata rec_buf[buf_len]; //循环数组
47 uchar xdata *get_pt=rec_buf; //循环数组操作指针
48 uchar xdata *put_pt=rec_buf; //循环数组加数值指针
49 uchar *data tr_point; //发送指针
50 uchar xdata privacy[]={"123456 \0"}; //校验密码
51 uchar xdata content[30]; //存储管理员发来的信息
52 //uchar xdata content1[]=""; //存储管理员发来的信息
53
54 uchar data alarms[32]=""; //要发的警报信息
55 uchar data send_buff[25]="AT+CMGS=\""; //发送缓冲区
C51 COMPILER V7.06 410RT 04/05/2008 12:08:22 PAGE 2
56
57 bit TRANS_NEXT_BYTE_OK=0;
58 bit Recving_SMS=0; //正在接受短信
59 bit SMS_EN=0; //来短信头已接完;
60 bit IS_sending=0; //正在发送信息
61 bit SMS_OK=0; //消息内容已接完
62 bit CM_CMD=0; //content已接到管理员的信息,通知主机取值
63 bit DEL_MS=0; //删除短信
64 bit ALARM=0; //有报警
65 bit CSD=0; //标记 发送AT+CMGS="13488716723"<cr>后 接受到'>'
66 uint Rec_status=0; //switch 接收状态
67 unsigned int num=0; //接受消息头+CMTI: ,"SM",1的计数;
68 uchar temp; //接收媒介;
69 void main (void)
70 {
71 1
72 1 ENA_WDT ();
73 1 GSM_PORT_Init ();
74 1 SYSCLK_Init ();
75 1 CKCON_Init ();
76 1 Uart0_Init ();
77 1 Port_Init ();
78 1
79 1 GSM_Init ();
80 1
81 1 // tr_point = tr_buf;
82 1
83 1 // TRANS_NEXT_BYTE_OK = 1;
84 1
85 1 ES0 = 1;
86 1
87 1 EA = 1;
88 1 // loca[0]='1';
89 1 // loca[1]='9';
90 1 // test
91 1 // DEL_MS=1;
92 1 IS_sending=0;
93 1 PC_using=0;
94 1 /// ALARM=1;
95 1 while (1)
96 1 {
97 2 if(!PC_using)
98 2 {
99 3 if (TRANS_NEXT_BYTE_OK) transmitte ();
100 3
101 3 if (SMS_EN) Read_sms(); //read a message
102 3 if (SMS_OK) Process_sms();
103 3 // if (CM_CMD) ; //加主机调用函数;
104 3 if (DEL_MS) Del_sms(); //del a message
105 3 //if(! Recving_SMS&&ALARM)Send_sms();
106 3 }
107 2 }
108 1 }
109
110 void GSM_Init (void)
111 {
112 1 uchar data i;
113 1 TMOD |= 0x01; //定时器0为模式1,16位
114 1 TC35_IGT = 0;
115 1 delay_20ms ();
116 1 TC35_IGT = 1;
117 1 delay_20ms ();
C51 COMPILER V7.06 410RT 04/05/2008 12:08:22 PAGE 3
118 1 TC35_IGT = 0;
119 1 for (i=0;i<6;i++) delay_20ms ();
120 1 TC35_IGT = 1;
121 1 TR0 = 0;
122 1 while (!TC35_PD);
123 1 while (TC35_PD);
124 1 while (!TC35_PD);
125 1 }
126
127 void delay_20ms (void)
128 {
129 1 TR0 = 0;
130 1 TH0 = C_TMR0 >> 8; //设置定时器0的初始值,
131 1 TL0 = C_TMR0;
132 1 TR0 = 1; //启动定时器0
133 1 TF0 = 0;
134 1 while (!TF0);
135 1 }
136
137 void SYSCLK_Init (void)
138 {
139 1 OSCICN |= 0x07; //24500000hz
140 1 }
141
142 void GSM_PORT_Init (void)
143 {
144 1 XBR1 |= 0x80; //关闭弱上拉
145 1 }
146
147 void Port_Init (void)
148 {
149 1 XBR1 |= 0x40; //使能交叉矩阵,弱上拉
150 1 }
151
152 void ENA_WDT (void)
153 {
154 1 PCA0MD &= ~0x40;
155 1 }
156
157 void CKCON_Init (void)
158 {
159 1 CKCON |= 0x02; //定时器1和2的触发时钟为 sysclk/48
160 1 }
161
162 void Uart0_Init (void)
163 {
164 1 SCON0 = 0x50; //8位数据,允许接收
165 1 XBR0 |= 0x01; //uart的tx,rx分配至p0.4及p0.5
166 1 P0MDOUT |= 0x10; //uart的tx为推挽输出
167 1 TMOD |= 0x20; //定时器1为模式2,8位自动重装
168 1 TH1 = C_TMR1; //设置定时器1的重装值,
169 1 TL1 = C_TMR1;
170 1 TR1 = 1; //启动定时器1
171 1 ES0 = 1; //允许UART中断
172 1 }
173
174 void Uart0_ISR (void) interrupt 4
175 {
176 1 if (RI0)
177 1 {
178 2 RI0 = 0;
179 2 switch(Rec_status)
C51 COMPILER V7.06 410RT 04/05/2008 12:08:22 PAGE 4
180 2 {
181 3 case 0:
182 3 temp=SBUF0;
183 3 switch(num)
184 3 {
185 4 case 0:
186 4 if(temp=='+')
187 4 {
188 5 ++num;
189 5 Recving_SMS=1; //index receiving a message
190 5 }else
191 4 num=0;
192 4 break;
193 4 case 1:
194 4 num=(temp=='C') ? ++num : 0;break;
195 4 case 2:
196 4 num=(temp=='M') ? ++num : 0;break;
197 4 case 3:
198 4 num=(temp=='T') ? ++num : 0;break;
199 4 case 4:
200 4 num=(temp=='I') ? ++num : 0;break;
201 4 case 5:
202 4 num=(temp==':') ? ++num : 0;break;
203 4 case 6:
204 4 if(temp==',')
205 4 ++num ;
206 4 break;
207 4 case 7:
208 4 num++;
209 4 loca[8]=temp;
210 4 break;
211 4 case 8:
212 4 if(temp!=0x0d)
213 4 {
214 5 loca[9]=temp;
215 5 loca[10]='\r';
216 5 loca[11]='\0';
217 5 }
218 4 else
219 4 {
220 5 loca[9]='\r';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -