📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 8
415 //函数功能:初始化停电模块,
416 //
417 //============================================================
418 void ini_sleepmode(void)
419 { CfgInterrupt(0); //关所有中断
420 1 EA=0; //关总中断
421 1 time_jihuo=0;
422 1 time_lostiv=0;
423 1 port_init(); //禁止IO口输入输出
424 1 }
425
426
427 //=============================================================
428 //函数功能:停电激活初始化
429 //
430 //============================================================
431 void Init_jihuo(void)
432 {
433 1 Init_disp(); //初始化显示模块
434 1 sta_meterrun=5; //激活模式
435 1 time_jihuo=0;
436 1 }
437
438
439 //===============================================================
440 //函数功能:停电保存各类数据
441 //备注:包括:电量小数,CF脉冲位数,当月平均功率因数、停电时间
442 //===============================================================
443 void savedata_tingdian(void)
444 {unsigned int temp_addr;
445 1 //====================================================================电量小数部分
446 1 addr_baseonIDandtype(RAM,ID_POSENGSUM);
447 1 temp_addr=(*ID_coretalbpoint[0]).dataaddr;
448 1 wr_buff[0]=ram[temp_addr+3];
449 1 wr_buff[1]=wr_buff[0]+0x33;
450 1 data_addr.word[1]=EEP_Save_engdot;
451 1 Write_data(EEPROM,2);
452 1
453 1 //======================================================================CF
454 1 wr_buff[0]=sumCF_Z;
455 1 wr_buff[1]=wr_buff[0]+0x33;
456 1 data_addr.word[1]=EEP_Save_cf;
457 1 Write_data(EEPROM,2);
458 1 /*
459 1 //=======================================================================停电时间年,月 日 时 分 次数
460 1 wr_buff[0]=RTCTIME.rYear;
461 1 wr_buff[1]=RTCTIME.rMonth;
462 1 wr_buff[2]=RTCTIME.rDate;
463 1 wr_buff[3]=RTCTIME.rHour;
464 1 wr_buff[4]=RTCTIME.rMinute;
465 1 addr_baseonIDandtype(EEPROM,ID_CUTPOWTIME);
466 1 data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
467 1 Write_data(EEPROM,5);
468 1
469 1 addr_baseonIDandtype(EEPROM,ID_CUTPOWTIME);
470 1 data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
471 1 Read_data(EEPROM,2);
472 1 byte_x_bcd_addone(wr_buff,2); //停电总次数加1
473 1 Write_data(EEPROM,2);
474 1 */
475 1 }
476
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 9
477 //=========================================================================
478 //函数功能:开启CF脉冲输出
479 //
480 //=========================================================================
481 void Open_CF(void)
482 {unsigned char i;
483 1 if(count_opencftime==0)
484 1 { i=ReadMeterFunc();
485 2 if((i&0x10)!=0x10) //如果cf没有开
486 2 { i=ReadMeterFunc();
487 3 if((i&0x10)!=0x10)
488 3 { i&=0x7f; //关潜动
489 4 i|=0x10; //开CF
490 4 timocount_cf=0; //清CF间隔计时器
491 4 SetMeterFunc(i);
492 4 SetInterrupt(14); //开CF中断
493 4 }
494 3 }
495 2 }
496 1 }
497
498 //==============================================================
499 // 主函数
500 //
501 //==============================================================
502 void main(void)
503 {// uint8 xdata *p,i;
504 1
505 1 SetPLL(1); // 3M 工作频率
506 1 SetMeterFunc(0); // 关CF输出
507 1 if(Systate & BIT2) // rtc reset
508 1 {
509 2 }
510 1 // #ifdef DEBUG
511 1 // #else
512 1 else if(Systate & BIT4) // wdt reset
513 1 {
514 2 Init_System();
515 2 Recover_data(); // 恢复数据 re
516 2 Init_modul(); // 各功能模块初始化
517 2 // complet_zhuncun(); // N停电事件超过一个月,转存数据
518 2 EA = 1; // 开总中断
519 2 // i=ReadMeterFunc();
520 2 // SetMeterFunc(i|0x10); // 开CF中断
521 2 }
522 1
523 1 // #endif
524 1 else if(Systate & BIT3) // io reset
525 1 {
526 2 }
527 1 else // 正常上电复位
528 1 {
529 2 Init_System();
530 2 Recover_data(); // 恢复数据
531 2 Init_modul(); // 各功能模块初始化
532 2 // complet_zhuncun(); // N停电事件超过一个月,转存数据
533 2 EA = 1; // 开总中断
534 2 }
535 1 //========================================================================================正常运行部分
536 1 run_zhengchang:
537 1 while(check_powertype()==1) //市电供电
538 1 {
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 10
539 2 //test_enout=0;
540 2 //test_out=(~test_out);
541 2 //ClearWDT(); //喂狗
542 2 if(check_powertype()==0)
543 2 break;
544 2 Rtc_refreshmode(); //时钟刷新
545 2 if(check_powertype()==0)
546 2 break;
547 2 Open_CF();
548 2 //if(check_powertype()==0)
549 2 // break;
550 2 //keymode(); //按键事件
551 2 if(check_powertype()==0)
552 2 break;
553 2 display_mode(); //显示模块
554 2 if(check_powertype()==0)
555 2 break;
556 2 read_encount(); //读CF脉冲
557 2 if(check_powertype()==0)
558 2 break;
559 2 energ_addmode(); //能量计量模块
560 2 if(check_powertype()==0)
561 2 break;
562 2 realdata_mode(); //计算有效值
563 2 if(check_powertype()==0)
564 2 break;
565 2 commu_mode(); //通讯模块
566 2 if(check_powertype()==0)
567 2 break;
568 2 xuliangmode(); //需量模块
569 2 //if(check_powertype()==0)
570 2 // break;
571 2 //Switch_mode(); //拉合闸控制
572 2 // if(check_powertype()==0)
573 2 // break;
574 2 // zhuncun_mode(); //历书数据转存模块
575 2
576 2 }
577 1 //==============================================================================================停电处理部
-分
578 1 if(check_powertype()==0) //电池供电
579 1 { savedata_tingdian(); //停电保存数据
580 2 // Ene_lostenvent(); //结束窃电事件
581 2 // CfgRTC(0,0); //32768,1秒唤醒
582 2 ini_sleepmode(); //初始化停电模式
583 2 SetMeterFunc(0x00);
584 2 // CfgLCD(0x08);
585 2 CloseLCD(); //关lcd
586 2 sta_meterrun=4; //程序进入休眠模式
587 2 Sleep(); //进入睡眠模式
588 2 }
589 1 else
590 1 goto run_zhengchang;
591 1
592 1 //=========================================================================================停电激活
593 1 jihuo:
594 1 Init_jihuo(); //激活初始化
595 1 while(time_jihuo<=80) //电池供电,激活运行3分钟
596 1 { ClearWDT(); //喂狗
597 2 if(check_powertype()==1)
598 2 break;
599 2 Rtc_refreshmode(); //时钟刷新
C51 COMPILER V7.06 MAIN 11/24/2008 09:37:01 PAGE 11
600 2 //if(check_powertype()==1)
601 2 // break;
602 2 //keymode(); //按键事件
603 2 if(check_powertype()==1)
604 2 break;
605 2 display_mode(); //显示模块
606 2 if(check_powertype()==1)
607 2 break;
608 2 commu_mode(); //通讯模块
609 2 if(check_powertype()==1)
610 2 break;
611 2 }
612 1 if(check_powertype()==1) //来电处理
613 1 { Init_System();
614 2 Init_modul(); //各功能模块初始化
615 2 EA = 1; //开总中断
616 2 goto run_zhengchang;
617 2 }
618 1 if(time_jihuo>80) //激活时间到
619 1 { CloseLCD(); //关lcd
620 2 ini_sleepmode(); //初始化停电模式
621 2 Sleep(); //进入睡眠模式
622 2 }
623 1 }
624
625 #undef MAIN
C51 COMPILATION COMPLETE. 3 WARNING(S), 9 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -