📄 straincollector.lst
字号:
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE STRAINCOLLECTOR
OBJECT MODULE PLACED IN StrainCollector.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE StrainCollector.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /* 应变采集器单片机程序 */
2 /* 16路数据采集,采用P4口控制*/
3 /* Writed by: yg*/
4 /* Date: 2008-7-24 */
5 #pragma small
6 #include <stdio.h>
7 #include <reg52.h>
8 #include <string.h>
9 #include <intrins.h>
10 #include "StrainCollector.h"
11
12
13 #include "timer.c"
14 #include "gprs.c"
15
16 uchar g_totimes;
17 // todo: 发送数据的时候需要取消sleep
18
19 // todo: 休眠功能改造,深度休眠醒来后,改定时器为定时
20 // 深度休眠前,改定时器为报警
21 // todo: 取消应变采集中的调试信息:0X55 etc.
22 /******************************************
23 Init the Chip
24 初始化单片机内容
25 *****************************************/
26 void Init_Chip()
27 {
28 1 // P1_5 = 0;
29 1 P1_0 = 0; // 非省电模式
30 1 //P1_2 = 1; 温度
31 1 P1_7 = 0;
32 1 //P1_3 = 1; //89c52
33 1 P1_3 = 0; //89c54
34 1 P1_4 = 1; //89c54
35 1 // P1_1 = 1;
36 1 P0_0 = 1;
37 1 P0_1 = 1;
38 1 P0_2 = 1;
39 1 P0_3 = 1;
40 1 P0_4 = 1;
41 1 P0_5 = 0;
42 1 P0_6 = 0;
43 1 P0_7 = 0;
44 1 P3_5 = 0;
45 1 P2 = 0; //8.23 new add
46 1 // P4 = 0;
47 1
48 1 // yg add
49 1 statusFlag = 0;
50 1 BSLPFLG = 1;
51 1
52 1 // init the timer value
53 1 g_dslpTime[SEC] = 0;
54 1 g_dslpTime[MIN] = 0;
55 1 g_dslpTime[HOUR] = 1;
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 2
56 1 g_dslpTime[DAY] = 0;
57 1 g_dslpTime[MONTH] = 0;
58 1 g_dslpTime[YEAR] = 0;
59 1
60 1 // todo: close the timer0, timer1 interrupt.
61 1 // todo: open the serial interrupt.
62 1 }
63
64 /******************************************
65 Init the Timer0 INT
66 初始化定时器0
67 *****************************************/
68 void Init_Timer0INT()
69 {
70 1 TMOD = 0x11;
71 1 // TCON = 0xAF; //NEW ADD 中断
72 1 TH0 = 0xFB; //400HZ方波
73 1 TL0 = 0xA2;
74 1 TR0 = 1; //启动T0
75 1 ET0 = 1; //允许定时器0中断
76 1
77 1 // 初始化激励信号相关变量
78 1 BSWOVER = 0;
79 1 BSDGOT = 0;
80 1 }
81
82 /******************************************
83 Init the Serial INT
84 初始化串口
85 *****************************************/
86 void Init_SerialINT()
87 {
88 1 T2CON = 0x34;
89 1 RCAP2H = 0xFE; //11.0592M晶振
90 1 TH2 = 0xFE;
91 1 RCAP2L = 0xE0;
92 1 TL2 = 0xE0;
93 1 /*
94 1 RCAP2H = 0xFE; //12M晶振
95 1 TH2 = 0xFE;
96 1 RCAP2L = 0xC8;
97 1 TL2 = 0xC8;
98 1 */
99 1 SCON = 0x50;
100 1 ES = 0; //串行口中断使能位
101 1 ET2 = 0;
102 1 TR2 = 1;
103 1 // TI = 1;
104 1 }
105
106 void Init_Interrupt()
107 {
108 1 Init_Timer0INT();
109 1 Init_SerialINT();
110 1
111 1 //cpu开中断
112 1 EX0 = 1; //开外部中断
113 1 EX1 = 1;
114 1 IT0 = 1;
115 1 IT1 = 0;
116 1 // TI = 1;
117 1 EA = 1;
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 3
118 1 }
119 /******************************************
120 Init the Strainors
121 初始化应变计
122 *****************************************/
123 void Init_Strainor()
124 {
125 1 uchar i;
126 1 uchar f = 1;
127 1 g_strainflag = 0;
128 1 // todo 开采集电路电源
129 1 P3_6 = 0;
130 1 // 是串口发
131 1 for (i=0; i<STNORNUM; i++, f <<= 1)
132 1 {
133 2 // 选择相应的通道
134 2 P4 = i;
135 2 P1_5 = 0; //new change
136 2 BSWOVER = 0;
137 2 delay10ms();
138 2 // 开始发方波.
139 2 Init_Timer0INT();
140 2 while (!BSWOVER);
141 2
142 2 // 设置timeout时间
143 2 set_timeout(40);
144 2 BSDGOT = 0;
145 2 // 等待timeout,或者外部中断。
146 2 while (!BSDGOT)
147 2 {
148 3 if (BTIMEOUT)
149 3 break;
150 3 }
151 2 if(!BSDGOT)
152 2 {
153 3 // timeout时,用0改写数据。
154 3 g_strainData[i][0] = 0;
155 3 g_strainData[i][1] = 0;
156 3 g_strainData[i][2] = 0;
157 3 g_strainData[i][3] = 0;
158 3 g_strainData[i][4] = 0;
159 3 }
160 2 else
161 2 {
162 3 g_strainflag |= f;
163 3
164 3 g_strainData[i][0] = g_sdata[0];
165 3 g_strainData[i][1] = g_sdata[1];
166 3 g_strainData[i][2] = g_sdata[2];
167 3 g_strainData[i][3] = g_sdata[3];
168 3 g_strainData[i][4] = g_sdata[4];
169 3 }
170 2 count++;
171 2 ET0 = 1;
172 2 // 找到下一个有效的应变计,设置选通,再开始发方波
173 2 }
174 1 // todo: 关采集电路电源
175 1 //TODO: 初始化16个应变计的读数
176 1 }
177
178 ////////////////////////////////////////////////////
179 // Interrupt functions
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 4
180 //
181
182 /******************************************
183 EXTERNAL INT 0, using 2 grouped registers
184 外部中断0,使用第2组寄存器
185 用来读取应变计的读数
186 *****************************************/
187 void External0_INT(void) interrupt 0 using 2
188 {
189 1 //
190 1 unsigned char x_h,x_m,x_l,y_h,y_l;
191 1
192 1 // TR1 = 0;
193 1 ET1 = 0;
194 1
195 1 P2 = 0;
196 1 P0_1 = 0; //选通第1个计数器
197 1 y_l = P2; //取出待测频率低8位
198 1 P0_1 = 1;
199 1 P2 = 0;
200 1 P0_0 = 0; //选通第2个计数器
201 1 y_h = P2; //取出待测频率高4位
202 1 P0_0 = 1;
203 1 P2 = 0;
204 1 P0_2 = 0; //选通第3个计数器
205 1 x_l = P2; //取出时基频率低8位
206 1 P0_2 = 1;
207 1 P2 = 0; //8.23 new add
208 1 P0_3 = 0; //选通第4个计数器
209 1 x_m = P2; //取出时基频率中间8位
210 1 P0_3 = 1;
211 1 P2 = 0; //8.23 new add
212 1 P0_4 = 0; //选通第5个计数器
213 1 x_h = P2; //取出时基频率高8位
214 1 P0_4 = 1;
215 1 // P2 = 0;
216 1
217 1
218 1 delay500ms();//8.23change delay200ms();
219 1
220 1 // TR1 = 0;
221 1 //printf("%c%c",TH1,TL1);
222 1
223 1 //8.23change delay200ms();
224 1 P0_5 = 0; //关断D触发器
225 1 P1_4 = 1; //关断多路选择器
226 1 P1_5 = 1; //清零计数器
227 1 // delay1ms();
228 1 // delay200ms();
229 1 // P1_3 = 1; //new change 89c52 8.27
230 1 // P1_2 = 1;
231 1
232 1 // yg mod for del temperature @ 08-7-31.
233 1 //sign =! sign;
234 1 sign = 0;
235 1 // end yg mod
236 1
237 1 flag = 0;
238 1 // P1_1 =! P1_1; //控制继电器 89c51
239 1 //P1_2 =! P1_2; //89c54 温度
240 1 /*6.25 new add 16路*/
241 1 g_sdata[0] = x_h;
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 5
242 1 g_sdata[1] = x_m;
243 1 g_sdata[2] = x_l;
244 1 g_sdata[3] = y_h;
245 1 g_sdata[4] = y_l;
246 1 // yg add
247 1 BSDGOT = 1;
248 1 count++;
249 1 // P4 = count;
250 1
251 1 P1_5 = 0; //new change
252 1 // ET0 = 1;
253 1 if(count==0x8)
254 1 {
255 2 // PCON = 0x02; //单片机进入掉电模式
256 2 // P4 = 0;
257 2 //EX0 = 0;
258 2 count = 0;
259 2 ET0 = 0;
260 2 }
261 1
262 1 /*6.259 new add 16路 end*/
263 1 }
264
265 /******************************************
266 Timer 0, using 1 grouped registers
267 定时器0,使用第1组寄存器
268 用来产生应变计的激振信号
269 *****************************************/
270 void Timer0_INT (void) interrupt 1 using 1
271 {
272 1 if(sign==0)
273 1 {
274 2 if(sign1==0)
275 2 {
276 3 if(flag<30)
277 3 {
278 4 time0();
279 4 }
280 3 else if(flag>=30&&flag<60)
281 3 {
282 4 time1();
283 4 }
284 3 else if(flag>=60&&flag<90)
285 3 {
286 4 time2();
287 4 }
288 3 else if(flag>=90&&flag<120)
289 3 {
290 4 time3();
291 4 }
292 3 else if(flag>=120&&flag<150)
293 3 {
294 4 time4();
295 4 }
296 3 else if(flag>=150&&flag<180)
297 3 {
298 4 time5();
299 4 }
300 3 else if(flag>=180&&flag<210)
301 3 {
302 4 time6();
303 4 }
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 6
304 3 else if(flag>=210&&flag<240)
305 3 {
306 4 time7();
307 4 }
308 3 else if(flag>=240&&flag<270)
309 3 {
310 4 time8();
311 4 }
312 3 else if(flag>=270&&flag<300)
313 3 {
314 4 time9();
315 4 }
316 3 else
317 3 {
318 4 flag = 0;
319 4 sign1 = 1;
320 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -