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

📄 main.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 3 页
字号:
 155   1              //P1.5输入              :RST(不可配置,仅为输入模式)
 156   1              //P1.4输入              :PULSE(电能脉冲)  
 157   1              //P1.3开漏              :SDA
 158   1              //P1.2开漏              :SCL    
 159   1              //P1.1输入              :RXD
 160   1              //P1.0开漏              :TXD
 161   1                      
 162   1              P2M1=0x00;              //00000000
 163   1              P2M2=0xFF;              //11111111
 164   1              //P2.7推挽输出
 165   1              //P2.6推挽输出
 166   1              //P2.5推挽输出
 167   1              //P2.4推挽输出
 168   1              //P2.3推挽输出
 169   1              //P2.2推挽输出
 170   1              //P2.1推挽输出
 171   1              //P2.0推挽输出
 172   1              
 173   1              P3M1=0x03;              //00000011
 174   1              P3M2=0x00;              //00000000      
 175   1              //P3.1输入              :PROG 编程开关
 176   1              //P3.0输入              :REVP 电能方向
 177   1      
 178   1      
 179   1              DIVM  =  0x00;                                                          //振荡器初始化           
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 4   

 180   1              TRIM &= ~0x40;                                                          //P3.0无时钟输出        
 181   1              //TRIM |=  0x40;                                                        //P3.0  时钟输出        
 182   1              PT0AD =  0x0A;                                                          //P0.1(CIN2B)、P0.3(CIN1B)模拟输入使能
 183   1      
 184   1              DelayNms(200);                                                          //上电延时200mS
 185   1      
 186   1              //看门狗初始化(2S)      
 187   1              WDL    = 0xC2;  
 188   1              //EA     = 0;
 189   1              WDCON  = 0xE5;
 190   1              WFEED1 = 0xA5;
 191   1              WFEED2 = 0x5A;
 192   1          //EA     = 1;
 193   1          //EA     = 0; 
 194   1          
 195   1          
 196   1              //======================================================
 197   1              //外部中断1初始化,电能脉冲输入
 198   1              //======================================================
 199   1              IT1   = 1;                                                              //外部中断1为下降沿触发                             
 200   1              IP0H |= 0x04;                                                           //设置外部中断1的中断优先级 2级
 201   1              IP0  &=~0x04;   
 202   1              EX1   = 1;                                                              //外部中断1使能         
 203   1              
 204   1              //======================================================
 205   1              //电源检测、电池检测配置
 206   1              //======================================================        
 207   1              CMP1  = 0x38;                                                           //CE1,CP1,CN1,OE1 = 1110
 208   1                                                                                                      //正向输入为CIN1B(P0.3)
 209   1                                                                              //选择内部参考电压 
 210   1                              
 211   1              CMP2  = 0x38;                                                           //CE2,CP2,CN2,OE2 = 1110
 212   1                                                                                                      //正向输入为CIN2B(P0.1)
 213   1                                                                              //选择内部参考电压                      
 214   1              
 215   1              i = 0x18;                                                                       //延时13uS 
 216   1              while(--i);             
 217   1              
 218   1              CMP1 &= 0xFE;                                                           //清楚比较器1的中断标志         
 219   1              CMP2 &= 0xFE;                                                           //清楚比较器2的中断标志
 220   1                         
 221   1              IP1H |= 0x04;                                                           //设置中断优先级 2级
 222   1              IP1  &=~0x04; 
 223   1              
 224   1              EC    = 1;
 225   1              
 226   1              
 227   1              //======================================================
 228   1              //初始化Timer1定时器,使其P0.7发生翻转,输出38K的调制频率
 229   1              //N=PCLK/(2*38KHz)=3.686400/76000=0x30,定时值=0x100-0x30=0xD0
 230   1              //======================================================
 231   1              //HW38K = 1;                                                            //P0.7置高
 232   1              
 233   1              TMOD |= 0x21;                                                           //设置Timer0,选择定时器模式1--通讯超时检测
 234   1                                                                                                      //设置Timer1,选择定时器模式2--红外载波
 235   1                                                                                              
 236   1              TAMOD = 0x00;                                                           //T0M2=0,T1M1=0,T1M0=1
 237   1                                                                                                      //T1M2=0,T1M1=1,T1M0=0
 238   1          
 239   1              TH0   = 0x53;                                                           //Timer0定时12mS初值                    
 240   1              TL0   = 0x33;   
 241   1              
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 5   

 242   1          ET0   = 1;
 243   1          
 244   1              IP0H &=~0x04;                                                           //设置Timer0的中断优先级别为1级 
 245   1              IP0  |= 0x04;
 246   1              
 247   1              TH1   = 0xD0;                                                           //Timer1设置自动重装值                  
 248   1              TL1   = 0xD0;
 249   1       
 250   1              AUXR1|= 0x20;                                                           //ENT1=1,Timer1溢出使P0.7发生翻转 
 251   1              //AUXR1 |= 0x80;                                                        //选择时钟电路低功耗模式
 252   1              
 253   1              
 254   1              //======================================================
 255   1              //1000mS定时器初始化
 256   1              //======================================================
 257   1              RTCH    = 0xE1;                                                         //设置自动重装值
 258   1              RTCL    = 0x00;  
 259   1      
 260   1              RTCCON  = 0x62;                                                         //选择RTC时钟源,RTC中断使能
 261   1                                   
 262   1              IP0H   &=~0x40;                                                         //中断优先级为1级 
 263   1              IP0    |=~0x40;     
 264   1        
 265   1              EWDRT   = 1;                                                            //中断使能
 266   1       
 267   1              RTCCON |= 0x01;                                                         //RTC运行使能 
 268   1               
 269   1              
 270   1              //======================================================                        
 271   1              //UART_init
 272   1              //使用UART的模式3,波特率为1200bps       
 273   1              //使用内部波特率发生器
 274   1              //======================================================
 275   1              //PCON   = 0x80;                                                        //SMOD1=1,SMOD0=0   ???????
 276   1              //PCON   = 0x00;                                                        //SMOD1=0,SMOD0=0   
 277   1              SCON   = 0xD0;                                                          //SM0=1,SM1=1,REN=1     
 278   1              SSTAT  = 0x00;  
 279   1              
 280   1              BRGCON = 0x00;                                                          //配置内部波特率发生器
 281   1              BRGR0  = 0xF0;
 282   1              BRGR1  = 0x17;
 283   1              BRGCON = 0x03;  
 284   1                      
 285   1              IP0H  &=~0x10;                                                          //设置中断服务优先级为0  
 286   1              IP0   &=~0x10; 
 287   1      
 288   1              ES = 1;                                                                         //使能UART中断
 289   1              
 290   1              
 291   1              //======================================================
 292   1              //键盘中断初始化
 293   1              //======================================================    
 294   1          KBPATN  = 0xFF;
 295   1          KBCON   = 0x00;                                                     //PATN_SEL=0
 296   1          KBMASK  = 0x40;                                                     //P0.6:RS485通讯唤醒
 297   1                                      
 298   1              IP1    &=~0x02;                                                         //中断优先级为0级(最低) 
 299   1              IP1H   &=~0x02;    
 300   1      
 301   1          EKBI    = 1;                                                                //键盘中断使能
 302   1      }
 303          
C51 COMPILER V7.50   MAIN                                                                  04/13/2007 13:24:52 PAGE 6   

 304          
 305          
 306          
 307          
 308          //**********************************************************
 309          //名称:MeterInit
 310          //功能:
 311          //说明:
 312          //**********************************************************
 313          void MeterInit(void)
 314          {
 315   1              uchar i;

⌨️ 快捷键说明

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