⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE main.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <Reg931.h>
   2          #include <Meter_def.h>
   3          #include <Rscomm.h>
   4          #include <General.h>
   5          
   6          #ifdef    uchar 
   7            #define READYDEF 1     //宏uchar已定义
   8          #else  
                #define uchar unsigned char 
              #endif
  11          
  12          
  13          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  14          //                                              变量定义
  15          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  16          uchar bdata MeterFlag;                                                          //电表运行状态字
  17           sbit Battery           = MeterFlag^0;                                  //电池状态
  18           sbit Hardware          = MeterFlag^1;                                  //硬件状态
  19           sbit RsComm            = MeterFlag^2;                                  //通讯状态
  20           sbit AdjTime           = MeterFlag^3;                                  //时钟状态
  21           sbit EryRev            = MeterFlag^4;                                  //电能方向
  22           sbit AdjDate           = MeterFlag^5;                                  //校时期允许
  23           sbit Fee0              = MeterFlag^6;                                  //费率位0
  24           sbit Fee1              = MeterFlag^7;                                  //费率位1
  25           
  26          uchar bdata Flag;                                                                       //状态标志位1
  27           sbit TimeAdj           = Flag^0;                                               //校时时间
  28           sbit TimeProg          = Flag^1;                                               //编程时间
  29           sbit RxdFlag           = Flag^2;                                               //接收结束
  30           sbit TxdFlag           = Flag^3;                                               //应答开关
  31           sbit TxdWork           = Flag^4;                                               //发送状态
  32           sbit DspType           = Flag^5;                                               //显示类型
  33           sbit DspPage           = Flag^6;                                               //显示页
  34           sbit DspFlag           = Flag^7;                                               //显示刷新
  35          
  36          uchar bdata SystemStates;                                                       //状态标志位2
  37           sbit Comm_RTC_Err      = SystemStates^0;                               //实时时钟通讯错误
  38           sbit Comm_EPM_Err      = SystemStates^1;                               //EEPROM通讯错误
  39           sbit Data_RTC_Err      = SystemStates^2;                               //实时时钟数据错误
  40           sbit Data_EPM_Err      = SystemStates^3;                               //EEPROM数据错误
  41           sbit EryBln_Flag       = SystemStates^4;                               //电量结算标志
  42           sbit Prog_Flag         = SystemStates^5;                               //编程允许开关
  43           sbit Fee_Flag          = SystemStates^6;                               //时段费率检查标志
  44           sbit CommFlag          = SystemStates^7;                               //通讯标志
  45                  
  46          uchar DspSec;                                                                           //轮显时间秒计数
  47          uchar RevSec;                                                           //反向时间秒计数
  48          uchar CommSec;                                                                          //通讯指示灯显示时间
  49          
  50          uchar DspPtr;                                                           //轮显指针
  51          uchar ComPtr;                                                                           //通信缓冲区指针
  52          uchar CommTimer;                                                                        //通讯帧间隔时间计数
  53          
  54          uchar Addr[2];                                                  //地址数据
  55          uchar Len[2];                                                   //地址空间、数据空间长度
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 2   

  56          
  57          uchar PulseTmp[6];                                              //剩余脉冲数+校验
  58          uchar EryTmp[6];                                                //电量小数+校验
  59          uchar Ptr[8];                                                   //缓存区指针
  60          uchar RTC[8];                                                                           //时间数据+校验
  61          
  62          uchar DspPara[4];                                                                       //3位显示控制+1位检验和
  63          uchar DspExch[6];                                               //显示交换区
  64          
  65          uchar idata ComBuf[RS_MaxSize];                                         //通信缓冲区
  66           
  67          unsigned int MSSum;                                                                     //毫秒和
  68          unsigned int ProgTimer;                                                         //编程状态计时
  69          
  70          
  71          
  72          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  73          //                                              函数定义、引用
  74          //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
  75          void McuInit(void);                                                                     //MCU系统配置及初始化
  76          void MeterInit(void);                                                           //电表系统初始化
  77          
  78          void Int1_isr(void);                                                            //外部中断1服务程序(电能脉冲输入处理)
  79          void CMP_isr(void);                                                                     //比较器中断服务程序(电源和电池电压检测)
  80          void Timer0_isr(void);                                                          //Timer0服务程序(通讯超时监测)
  81          void Keyboard_isr(void);                                                        //键盘中断服务程序(RS485通讯触发)
  82          void UART_isr(void);                                                            //串行中断通讯服务程序
  83          void Watchdogrtc_isr(void);                                                     //RTC中断服务程序
  84          
  85          //Measure.c
  86          extern void Resume(void);                                                       //电表数据恢复
  87          extern void Measure(void);                                                      //电能计量
  88          extern void WriteEPMData(uchar idata *ptr);                     //写数据
  89          extern bit  ReadData(uchar idata *ptr);
  90          
  91          //RTC_DSP.C
  92          extern void DspPara_Read(void);                                         //读显示控制参数
  93          extern void RTC_Dsp_Proc(void);                                         //时间、显示处理
  94          extern void RTC_Init(void);                                                     //RTC初始化设置
  95          extern void RTC_Read(void);                                                     //读时间
  96          extern void Fee_CHK(void);                                                      //时段、费率检查
  97          extern void Ery_Balance(void);                                          //电量结算
  98          extern void Display(uchar idata *ptr);                          //数据显示
  99          extern void RTC_Set(uchar staddr,uchar idata *ptr,uchar len);//实时时钟设置
 100          extern bit  DateTerm(void);                                                     //日期条件判断 
 101          
 102          //RSCOMM.C 
 103          extern void Comm_Proc(void);                                            //通讯处理
 104          
 105          
 106          
 107          //**********************************************************
 108          //名称:main()
 109          //功能:
 110          //说明:主函数
 111          //**********************************************************
 112          void main(void)
 113          {       
 114   1              McuInit();                                                                      //MCU初始化
 115   1              MeterInit();                                                                    //电表初始化 
 116   1              
 117   1              while(1)        
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 3   

 118   1              { 
 119   2                      Measure();                                                                      //计量处理      
 120   2                      RTC_Dsp_Proc();                                                         //时钟、显示处理                   
 121   2              Comm_Proc();                                                            //通讯处理              
 122   2              }
 123   1      }
 124          
 125          
 126          
 127          //**********************************************************
 128          //名称:McuInit()
 129          //功能:
 130          //说明:MCU初始化
 131          //**********************************************************
 132          void McuInit(void)
 133          {
 134   1              uchar i;        
 135   1              
 136   1              //======================================================
 137   1              //配置I/O口工作模式
 138   1              //======================================================
 139   1              P0M1=0xCA;              //11001010
 140   1              P0M2=0xB5;              //10110101      
 141   1      
 142   1              //P0.7开漏          :38K载波
 143   1              //P0.6输入              :RS485通讯唤醒    
 144   1              //P0.5推挽输出  :RS485收发控制
 145   1              //P0.4推挽输出  :PDA
 146   1              //P0.3输入              :电源检测
 147   1              //P0.2推挽输出  :LED_COMM
 148   1              //P0.1输入              :电池检测       
 149   1              //P0.0推挽输出  :LED_G
 150   1                              
 151   1              P1M1=0x3F;              //00111111
 152   1              P1M2=0xCD;              //11001101    
 153   1              //P1.7推挽输出  :LED_F
 154   1              //P1.6推挽输出  :通讯信道选择 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -