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

📄 chongdianqi.lst

📁 用LPC915单片机做的一个脉冲充电器的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 159   3                                                      SCL=0;
 160   3                                                      Battery_On_Socket = 0; // 关闭AD转换, skip <115, <162, <176, until <38
 161   3                                                      RTC_Counter = 5000; //延时15's, 启动 RTC_Interrupt()
 162   3                                                      LED_Flash_Speed = LED_FLASH_FAST; // 显示错误状态
 163   3                                              }
 164   2                                      else if( AD1_1 <= 38 ) // If Vout <= 1V, <=(1/3.31*2)*256 = 256/6.66
 165   2                                              {
 166   3                                                      SCL=0; // p1.2 = 0, 关闭PWM
 167   3                                                      LED_Flash_Speed = LED_FLASH_FAST; // indicate error status
 168   3                                                      AD1_1 = 0; // LED关闭
 169   3                                              } // 电池损坏或插头没接
 170   2                                      else if( AD1_1 <= 115) // 如果电压<=115
 171   2                                              {
 172   3                                                      SCL=1; // 启动 P1.2 PWN
 173   3                                                      TH0 = 250; //预设充电电流为50V输入,约2A。
 174   3                                                      LED_Flash_Speed = LED_FLASH_SLOW; // 显示充电状态
 175   3                                                      if( Constant_Current_Charge == 0 ) Pre_Charge_Status = 1; // Set Precharge status
 176   3                                              }
 177   2                                      else if( AD1_1 < 162) // 输出电压 = 电池电压 + 0.35*0.75
 178   2                                      // for fullly charged bat,bat vol=4.24,I limit 20mA, 4.24+0.02*0.75=4.26v
 179   2                                      // 为保护电池, 设置输出电压 = 4.26v (162)
C51 COMPILER V7.50   CHONGDIANQI                                                           03/12/2009 16:20:17 PAGE 4   

 180   2                                              {   // if bat vol=4.2, 仅仅输出 1.5A, 4.2+0.08*0.75=4.26v
 181   3                                                      // if bat vol=4.15, 我仅仅是2A, 4.15 + 0.15*0.75 = 4.26v
 182   3                                                      // 为保护电池充电电流,4.26-0.35*0.75=4.00v, so Vbat>4.00v,enter cons-vol
 183   3                                                      // 第一波充电, charge I= min 20mA,Vbat= 4.26-0.02*0.75=4.24v
 184   3                                                      // ( 161-4.252, 162-4.267, 160-4.234 )
 185   3                                                      SCL=1;
 186   3                                                      LED_Flash_Speed = LED_FLASH_SLOW; // 显示充电状态
 187   3                                                      if( Constant_Voltage_Charge == 0)
 188   3                                                              {
 189   4                                                                      Constant_Current_Charge = 1; // 设置为恒流充电
 190   4                                                                      Pre_Charge_Status = 0; // 禁止预充电状态
 191   4                                                              }
 192   3                                              }
 193   2                                      else // If 4.26V < Vout <4.6V
 194   2                                              {
 195   3                                                      SCL=1;
 196   3                                                      LED_Flash_Speed = LED_FLASH_SLOW; // 显示充电状态
 197   3                                                      Constant_Voltage_Charge = 1; // 为恒压充电状态
 198   3                                                      Constant_Current_Charge = 0; // 禁止恒流充电
 199   3                                                      Pre_Charge_Status = 0; // 禁止预充电
 200   3                                              }
 201   2                                      temp = AD1_1;
 202   2                                      AD1_1 = 0; // 重启 AD1_1
 203   2                                      //-----------------------------------------------
 204   2                                      //AD12 检测温度
 205   2                                      //-----------------------------------------------
 206   2                                      // AD1_2 = AD1_2*83/64; // input x 3.31 x 100 / 256
 207   2                                      // First_Bit = AD1_2/100;
 208   2                                      // AD1_2 = AD1_2%100;
 209   2                                      // Second_Bit = AD1_2/10;
 210   2                                      // Third_Bit = AD1_2%10;
 211   2                                      // DP_Enable = 0;
 212   2                                      AD1_2 = 0; // reset AD1_2
 213   2                                      //-----------------------------------------------
 214   2                                      //AD13 检测电流
 215   2                                      //-----------------------------------------------
 216   2                                      if( Pre_Charge_Status == 1 )
 217   2                                              {
 218   3                                                      if( ( AD1_3 > 1 ) && ( TH0 < 250 ) ) // 确保预充电电流 < 65mA
 219   3                                                      { TH0++;}
 220   3                                              }
 221   2                                      else if( Constant_Current_Charge == 1 )
 222   2                                              {
 223   3                                      if( AD1_3 < 17 ) // 260mv,(充电电流 = 350mA)
 224   3                                              { // 如果充电电流 < 350mA, pwm++
 225   4                                                      if( TH0 < 2 )
 226   4                                                      {
 227   5                                                              TH0 = 1;
 228   5                                                              if( RTC_Counter == 0 ) //延时20min结束充电
 229   5                                                                      { RTC_Counter = 1; } //电池在这种情况下,if Vout < 2.6v
 230   5                                                              //无法实现电流 350mA,  PWM开最大
 231   5                                                      }
 232   4                                                      else
 233   4                                                              { TH0 = TH0 - 1; }
 234   4                                              }
 235   3                                      else if( AD1_3 > 17)
 236   3                                              { //如果充电电流 > 350mA, pwm--
 237   4                                                      if( TH0 > 253 )
 238   4                                                              { TH0 = 254; }
 239   4                                                      else
 240   4                                                              {
 241   5                                                              TH0 = TH0 + 1;
C51 COMPILER V7.50   CHONGDIANQI                                                           03/12/2009 16:20:17 PAGE 5   

 242   5                                                              }
 243   4                                              }
 244   3                                      }
 245   2                                      else if( Constant_Voltage_Charge == 1 )
 246   2                                              {
 247   3                                                      if( AD1_3 <= 1 ) // 充电电流 < 60mA
 248   3                                                              {
 249   4                                                                      if( RTC_Counter == 0 ) { RTC_Counter = 1; } //开始延时50分钟结束充电
 250   4                                                              }
 251   3                                                      if( temp > 160 ) //temp=AD1_1, if Vout is > 4.23v(达到 4.23v), -- PWM
 252   3                                                              {
 253   4                                                                      if( TH0 < 255)
 254   4                                                                              {
 255   5                                                                                      TH0++;
 256   5                                                                              }
 257   4                                                              }
 258   3                                                      else if( temp < 160 ) // if Vout is < 4.21v (达到 4.21v), ++PWM
 259   3                                                              {
 260   4                                                                      if( TH0 > 1 )
 261   4                                                                              {
 262   5                                                                                      TH0--;
 263   5                                                                              }
 264   4                                                              }
 265   3                                              }
 266   2                                      AD1_3 = 0; // 重启 AD1_3
 267   2                              }
 268   1                      else
 269   1                              {
 270   2                                      AD1_1 += AD1DAT1;
 271   2                                      AD1_2 += AD1DAT2;
 272   2                                      AD1_3 += AD1DAT3;
 273   2                              }
 274   1              }
 275          //***************************************************************************
 276          //* RTC_Interrupt
 277          //* Description :  RTC 中断
 278          //***************************************************************************
 279          void RTC_Interrupt (void) interrupt 10 using 1
 280                  {
 281   1                      if( RTC_Counter != 0 ) { RTC_Counter++; }
 282   1                              {
 283   2                                      RTC_Counter_LED++;
 284   2                                      RTC_Counter_AD++;
 285   2                              }
 286   1                      if ( RTC_Counter_LED == LED_Flash_Speed)
 287   1                              {
 288   2                                      LED_Flag = ~LED_Flag;
 289   2                                      RTC_Counter_LED = 0;
 290   2                              }
 291   1                      if ( RTC_Counter_AD == AD_Convert_Speed )
 292   1                              {
 293   2                                      AD_Flag = 1;
 294   2                                      RTC_Counter_AD = 0;
 295   2                              }
 296   1                      if ( RTC_Counter == 6750) // 延时1分钟
 297   1                              {
 298   2                                      RTC_Counter_Minute++;
 299   2                                      RTC_Counter = 1;
 300   2                                      if( Battery_On_Socket == 0) // 拔掉插座延时15S
 301   2                                              {
 302   3                                                      Battery_On_Socket = 1;
 303   3                                                      RTC_Counter = 0;
C51 COMPILER V7.50   CHONGDIANQI                                                           03/12/2009 16:20:17 PAGE 6   

 304   3                                              }
 305   2                              }
 306   1                      RTCCON = 0x63; //Clear RTCCON.7-RTCF
 307   1              }
 308          /*********************************************END***************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    656    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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