📄 slave.lst
字号:
207 #define Channel14 0x0D
208 #define Channel15 0x0E
209 #define Channel16 0x0F
210 //外设数据长度信息。
211 #define LenRecvWsType1 0x38 //外设类型1的数据长度
212 #define LenRecvWsType2 0x04 //外设类型2的数据长度
213 /**********************************************外设信息***************************************************
-/
214
215 /**********************************************从机信息***************************************************
-/
216 //从机编号信息。
217 #define SlaveCode1 0x01 //从机1编号。
218 #define SlaveCode2 0x02 //从机2编号。
219 #define SlaveCode3 0x03 //从机3编号。
220 #define SlaveCode4 0x04 //从机4编号。
221 #define SlaveCode5 0x05 //从机5编号。
222 uchar SlaveCode = SlaveCode5; //当前从机编号。
223 //从机数据存储最大长度。
224 #define DataLen7053 560 //7053数据存储最大长度。
225 #define DataLen7017 280 //7017数据存储最大长度。
226 //从机串口信息。
227 #define InitState 0 //开始接收状态。
228 #define DataState 1 //数据接收状态。
229 #define SlaveStartFlag 0x3E //数据开始标志。
230 uchar n = 1; //当前处理的外设编号。
231 uchar FlagWsSend[5]={0,0,0,0,0}; //从机外设的数据返回状态。
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 5
232 char RecvDataCount=-1; //接收外设数据的计数器。
233 uint TimeCount = 0; //串口通讯的计数器。
234 uchar RecvState= InitState; //接收的状态,初始化为初始化接收状态。
235 uchar RecvDataSize; //接收外设数据的长度。
236 //从机参数信息。
237 #define SlaveParaLen 0x05 //从机默认参数长度。
238 uchar BodeRate; //从机与外设通讯的波特率。
239 uchar WsNumber; //从机的外设个数。
240 uint ReadDataRate; //读取外设数据的时间间隔。
241 uchar WsType; //外设的类型。
242 /**********************************************从机信息***************************************************
-/
243 /**************************************拷贝数据最大长度定义**************************************/
244 #define MaxOrderLen 0x6FD
245 #define MaxSlaveDataLen 0x230
246 #define MaxGetChannelParaLen 0x7ED
247 #define MaxAlarmLen 0xFD
248 /**************************************拷贝数据最大长度定义**************************************/
249
250 /**********************************************标识位定义信息*********************************************
-/
251 bit FlagMutex=0; //用于隔离外部中断,假如一次外部中断没有执行完,不能响应下一次外部中断。
252 bit FlagExt0=0; //外部中断0标识,也就是IIC使用标识。
253 bit FlagTime0=0; //定时器0中断标识。
254 bit FlagStartRecv=0; //开始接收标识。
255 bit FlagProcessRecvData=0; //处理接收数据标识。
256 bit FlagReInit = 0; //从机参数重置的命令被解析的标识,也是从机参数重置的标志位。
257 bit FlagProcessOrderStart = 0;//上位机的命令被从机拷贝的标志,也是处理命令的标志位。
258 bit FlagFirst = 1; //第一次定时器0中断标识。
259 bit FlagNewData = 0; //有新的外设数据标识。
260 bit FlagNewOrder = 0; //有新的服务器的命令标识。
261 bit FlagSendOrder = 1; //发送读取外设数据命令开始标识。
262 bit FlagExtInterrupt = 0;
263 /**********************************************标识位定义信息*********************************************
-/
264
265 /**********************************************定时器相关信息*********************************************
-/
266 #define WaitLen 10 //发送外设数据采集命令的等待时限。
267 #define MAX 20 //定时器的倍频。
268 #define SampleBase 1000 //Sample = ReadDataRate/SampleBase即为发送采集外设数据命令的间隔。
269 #define DelayTime 5
270 uchar Sample = 2; //发送采集外设数据命令的间隔。
271 uchar TimesNum = 0; //定时中断次数的计数器,用来判断等待的外设数据返回的时限的。
272 uchar TimesCount = 0; //定时中断次数的计数器,用来判断等待的外设数据返回的时限的。
273 /**********************************************定时器相关信息*********************************************
-/
274
275 /**********************************************从机IIC使用信息********************************************
-/
276 sbit P20=P2^0; //IIC使用完通知仲裁机的信号。
277 /**********************************************从机IIC使用信息********************************************
-/
278
279 /******************************************从机分配的数组*************************************************
-*/
280 #define COPYLEN 200 //I2C中转的缓冲区大小。
281 #define PROCESSLEN 20 //处理命令的暂存数组长度。
282 xdata uchar RecvDataBuff[60]; //外设数据的接收数组,应大于56。
283 xdata uchar SendBuff[4]; //发送读取外设数据的命令数组。
284 /******************************************从机分配的数组*************************************************
-*/
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 6
285
286 /*********************************************************************************************************
-**
287 功能:Delay
288 描述:延时函数
289 参数:t
290 返回:无
291 **********************************************************************************************************
-**/
292 void Delay(uint t) /*延时函数*/
293 {
294 1 while(t!=0)
295 1 t--;
296 1 }
297
298 /*********************************************************************************************************
-**
299 功能:InitSerialCom
300 描述:串口初始化
301 参数:无
302 返回:无
303 **********************************************************************************************************
-**/
304 void InitSerialCom(void)
305 {
306 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
307 1 TMOD |= 0x21; //TMOD: timer 1, mode 2, 8-bit reload
308 1 PCON |= 0x80; //SMOD=1;
309 1 TH1 = 0xF3; //Baud:4800 fosc=12MHz
310 1 IE |= 0x93; //Enable Serial Interrupt
311 1 TR1 = 1; // timer 1 run
312 1 IT0 = 1;
313 1 // TI=1;
314 1 }
315
316 /*********************************************************************************************************
-**
317 功能:Time0Initial()
318 描述:定时器0初始化,主要设定初值
319 参数:无
320 返回:无
321 **********************************************************************************************************
-**/
322 void Time0Initial()
323 {
324 1 TR0=0;
325 1 TH0=0x3C; //50ms
326 1 TL0=0xB0;
327 1 TR0=1;
328 1 }
329
330 /*********************************************************************************************************
-**
331 功能:Time0
332 描述:产生定时器0中断
333 参数:无
334 返回:无
335 **********************************************************************************************************
-**/
336 void Time0() interrupt 1 using 2
337 {
338 1 TimeCount++;
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 7
339 1 if(TimeCount >= MAX)
340 1 {
341 2 TimeCount=0;
342 2 FlagTime0=1;
343 2 }
344 1 Time0Initial();
345 1 }
346
347 /*********************************************************************************************************
-**
348 功能:SendCharCom
349 描述:向串口发送一个字符
350 参数:t
351 返回:无
352 **********************************************************************************************************
-**/
353 void SendCharCom(unsigned char ch)
354 {
355 1 SBUF=ch;
356 1 while(TI==0);
357 1 TI=0;
358 1 }
359
360 /*********************************************************************************************************
-**
361 功能:SendStringCom
362 描述:向串口发送一个字符串,strlen为该字符串长度
363 参数:str---要发送的字符串指针 strlen---字符串长度
364 返回:无
365 **********************************************************************************************************
-**/
366 void SendStringCom(unsigned char *str,unsigned int strlen)
367 {
368 1 unsigned int k=0;
369 1 while( (k < strlen) && (strlen > 0) )
370 1 {
371 2 SendCharCom(*(str + k));
372 2 k++;
373 2 }
374 1 }
375
376 /*********************************************************************************************************
-**
377 功能:Extern0;产生外部中断0,是仲裁机分配IIC使用权的。
378 描述:FlagMutex---用于隔离外部中断,假如一次外部中断没有执行完,不能响应下一次外部中断;
379 FlagExt0---外部中断期间标志;P20---保证IIC使用权已经完全释放才可以再次响应。
380 参数:无
381 返回:无
382 **********************************************************************************************************
-**/
383 void EXT0() interrupt 0 using 1
384 {
385 1 if((FlagExt0 == 0) && (P20 == 1))
386 1 {
387 2 FlagExt0 = 1;
388 2 }
389 1 }
390
391 /*********************************************************************************************************
-**
392 功能:ClearMyRom
393 描述:清零字节数存储地址
C51 COMPILER V7.50 SLAVE 03/17/2008 11:04:03 PAGE 8
394 参数:无
395 返回:无
396 **********************************************************************************************************
-**/
397 void ClearMyRam(uint address)
398 {
399 1 MyWriteOneByte(address,0x00);
400 1 MyWriteOneByte(address+1,0x00);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -