📄 main.lst
字号:
316 1
317 1 //P0:
318 1 P0 |= 0xB5; //10110101
319 1 //HW38K = 1; //P0.7置高
320 1 //CTRL485 = 1; //RS485接收状态
321 1 //PDA = 1; //P0.4空->置高处理
322 1 //LED_COMM = 1; //通讯指示灯灭
323 1 //LED_G = 1; //谷时段指示灭
324 1
325 1 //P1:
326 1 LED_F = 1; //峰时段指示灭
327 1 COMMSEL = 0; //默认红外通讯方式
328 1
329 1 //P2:
330 1 P2 = 0xFF; //对于LPC931,P2口空->置高处理
331 1
332 1
333 1 MSSum = 0x0000; //时间补偿为零
334 1
335 1 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
336 1 //显示设置
337 1 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
338 1 if(RSTSRC&0x10) //上电满屏显示
339 1 {
340 2 RSTSRC &= ~0x10;
341 2 for(i=0;i<8;i++) RTC[i] = 0xFF;
342 2 Display(RTC);
343 2
344 2 }
345 1 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
346 1
347 1
348 1 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
349 1 RTC_Init(); //RTC初始化设置
350 1 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
351 1
352 1
353 1 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
354 1 Addr[0] = 0xA0;
355 1 Addr[1] = 0x00;
356 1 //Len[0] = 0x02;
357 1 Len[1] = 0x06;
358 1 ReadData(PulseTmp); //剩余脉冲数据恢复
359 1 if(PulseTmp[5]!=SumCHK(PulseTmp,5)) ArrayInit(PulseTmp,6);
360 1
361 1 Resume(); //电表电量数据恢复
362 1 RTC_Read(); //时钟读取
363 1 Fee_CHK(); //时段费率处理
364 1 //※※※※※※※※※※※※※※※※※※※※※※※※※※※
365 1 Watchdog_feed();
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 7
366 1
367 1 Ery_Balance(); //电量结算处理
368 1
369 1 DspPara_Read(); //显示控制参数检查
370 1
371 1 AdjDate=DateTerm(); //日期条件
372 1 }
373
374
375
376
377 //**********************************************************
378 // 名称:CMP_isr
379 // 功能:掉电数据保存
380 // 说明:
381 //**********************************************************
382 void CMP_isr(void) interrupt 8 using 1
383 {
384 1 uchar i;
385 1 uchar j;
386 1
387 1 i = 0xFF;
388 1 while(--i);
389 1
390 1 if(CMP1&0x01) //电源跃变中断(低->高,高->低)
391 1 {
392 2 CMP1 &= 0xFE; //清除比较器CMP2中断标志
393 2
394 2 if(TxdWork==0) //不在发送状态
395 2 {
396 3 if(CMP1&0x02) AUXR1 |= 0x08; //复位(用于电压低->高跃变过程)
397 3 else //掉电处理(用于电压高->低跃变过程)
398 3 {
399 4 //PulseTmp[5] = PulseTmp[0]+PulseTmp[1]+
400 4 // PulseTmp[2]+PulseTmp[3]+PulseTmp[4];
401 4
402 4 if( I2EN == 1 ) //I2C总线忙
403 4 {
404 5 I2CON = 0x54; //STO=1&AA=1 发送停止标志,结束其他I2C操作
405 5 while(STO == 1);
406 5 for(i=0;i<100;i++) //延时10mS
407 5 {
408 6 j = 184;
409 6 while(--j);
410 6 }
411 5 }
412 4
413 4 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
414 4 //屏蔽秒脉冲输出
415 4 /*
416 4 I2SCLH = 0x14; //设置SCL高电平的PCLK周期数
417 4 I2SCLL = 0x14; //设置SCL低电平的PCLK周期数
418 4 I2CON = 0x64; //申请成为主机,起动总线。使用内部SCL发生器,I2EN和AA置位
419 4 while( SI==0 ); //等待起始信号的发送,申请总线
420 4
421 4 I2DAT = RX_8025; //发送器件地址
422 4 I2CON = 0x44; //清除SI位等等
423 4 while( SI==0 ); //等待数据的发送
424 4
425 4 I2DAT = 0xE0; //发送从地址
426 4 I2CON = 0x44; //清除SI位等等
427 4 while( SI==0 ); //等待数据的发送
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 8
428 4
429 4 I2DAT = 0x20; //发送从地址
430 4 I2CON = 0x44; //清除SI位等等
431 4 while( SI==0 ); //等待数据的发送
432 4
433 4 I2CON = 0x54; //结束总线
434 4 while(STO == 1);
435 4 */
436 4 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
437 4
438 4
439 4
440 4 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
441 4 I2SCLH = 0x14; //设置SCL高电平的PCLK周期数
442 4 I2SCLL = 0x14; //设置SCL低电平的PCLK周期数
443 4 I2CON = 0x64; //申请成为主机,起动总线。使用内部SCL发生器,I2EN和AA置位
444 4 while( SI==0 ); //等待起始信号的发送,申请总线
445 4
446 4 I2DAT = 0xA0; //发送器件地址
447 4 I2CON = 0x44; //清除SI位等等
448 4 while( SI==0 ); //等待数据的发送
449 4
450 4 I2DAT = 0x00; //发送从地址
451 4 I2CON = 0x44; //清除SI位等等
452 4 while( SI==0 ); //等待数据的发送
453 4
454 4 for(i=0;i<6;i++) //发送数据
455 4 {
456 5 I2DAT = PulseTmp[i];
457 5 I2CON = 0x44; //清除SI位等等
458 5 while( SI==0 );
459 5 }
460 4 I2CON = 0x54; //结束总线
461 4
462 4 while((CMP1&0x02)==0x00); //检测上电(低->高)情况;等待
463 4 AUXR1 |= 0x08; //复位
464 4 }
465 3 }
466 2 }
467 1
468 1 if(CMP2&0x01) CMP2 &= 0xFE; //清除CMP1中断标志
469 1 }
470
471
472
473
474 //**********************************************************
475 // 名称:int1_isr
476 // 功能:外部中断1中断处理程序
477 // 说明:电能脉冲处理方法
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -