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

📄 lzkfunc.lst

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 187                }
 188                else                               // EM Full Bridge,励磁为全桥形式. 
 189                {         
 190                   if( TrigOutSyncTimCNT == TrigOutPosiA_OnTim )   /* Trig Phase A+ ON */
 191                     PulseOutPut(0x7f & TrigOutPosiA_ON & TrigOutNegaB_ON);
 192                   if( TrigOutSyncTimCNT == TrigOutPosiA_OffTim )  /* Trig Phase A+ OFF*/
 193                     PulseOutPut(0x7f);
 194                   
 195                   if( TrigOutSyncTimCNT == TrigOutNegaC_OnTim )   /* Trig Phase C- ON */
 196                     PulseOutPut(0x7f & TrigOutPosiA_ON & TrigOutNegaC_ON);
 197                   if( TrigOutSyncTimCNT == TrigOutNegaC_OffTim )  /* Trig Phase C- OFF*/
 198                     PulseOutPut(0x7f);
 199                   
 200                   if( TrigOutSyncTimCNT == TrigOutPosiB_OnTim )   /* Trig Phase B+ ON */
 201                     PulseOutPut(0x7f & TrigOutNegaC_ON & TrigOutPosiB_ON);
 202                   if( TrigOutSyncTimCNT == TrigOutPosiB_OffTim )  /* Trig Phase B+ OFF*/
 203                     PulseOutPut(0x7f);
 204                   
 205                   if( TrigOutSyncTimCNT == TrigOutNegaA_OnTim )   /* Trig Phase A- ON */
 206                     PulseOutPut(0x7f & TrigOutPosiB_ON & TrigOutNegaA_ON);
 207                   if( TrigOutSyncTimCNT == TrigOutNegaA_OffTim )  /* Trig Phase A- OFF*/
 208                     PulseOutPut(0x7f);
 209                   
 210                   if( TrigOutSyncTimCNT == TrigOutPosiC_OnTim )   /* Trig Phase C+ ON */
 211                     PulseOutPut(0x7f & TrigOutNegaA_ON & TrigOutPosiC_ON);
 212                   if( TrigOutSyncTimCNT == TrigOutPosiC_OffTim )  /* Trig Phase C+ OFF*/
 213                     PulseOutPut(0x7f);
 214                   
 215                   if( TrigOutSyncTimCNT == TrigOutNegaB_OnTim )   /* Trig Phase B- ON */
 216                     PulseOutPut(0x7f & TrigOutPosiC_ON & TrigOutNegaB_ON);
 217                   if( TrigOutSyncTimCNT == TrigOutNegaB_OffTim )  /* Trig Phase B- OFF*/
 218                     PulseOutPut(0x7f);
 219                }
 220          
 221                if( TrigOutSyncTimCntEN == 1 )    
 222                     {
 223                        TrigOutSyncTimCNT++;
 224                        if( TrigOutSyncTimCNT >= 161 )
 225                        {
 226                           TrigOutSyncTimCNT = 0;
 227                      TrigOutSyncTimCntEN = 0;      // 防止因SYNCa错误导致触发脉冲错误
 228                        }
 229                     }
 230             }
 231             else                      
 232               PulseOutPut(0xff);                   // 输出保护,脉冲输出指示iLED熄灭.  
 233          
 234          
 235             /*****************************************************************
 236             *** 相差法测量电动机电源功率因数,PhasePole(DUxCO)为DUx的过零检测波形
 237             *****************************************************************/
 238             /*
 239             uint8 bdata PwrFact_MsrFLAG = 0x00;
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 5   

 240             sbit DUxCO_LastVal          = PwrFact_MsrFLAG ^ 7; // DUxCO历史状态
 241             sbit DUxCO_CurrVal          = PwrFact_MsrFLAG ^ 6; // DUxCO当前状态
 242             sbit PwrFact_CurLoopMsrOVER = PwrFact_MsrFLAG ^ 5; // 功率因数电流环法单次测量结束
 243             sbit PwrFact_CurLoopMsrEN   = PwrFact_MsrFLAG ^ 4; // 功率因数电流环法测量使能
 244             sbit PwrFact_CalcMsrOVER    = PwrFact_MsrFLAG ^ 3; // 功率因数计算法单次测量结束 
 245             sbit PwrFact_CalcMsrEN      = PwrFact_MsrFLAG ^ 2; // 功率因数计算法测量使能
 246             sbit PwrFact_PhaDiffMsrOVER = PwrFact_MsrFLAG ^ 1; // 功率因数相差法单次测量结束
 247             sbit PwrFact_PhaDiffMsrEN   = PwrFact_MsrFLAG ^ 0; // 功率因数相差法测量使能
 248          
 249             uint8  xdata DUxCO_RisTimCNT = 0;                   // DUxCO上升沿次数
 250             uint8  xdata PwrFact_PhaDiffMsrCNT = 0;             // 功率因数相差法测量次数
 251             INTUC  xdata PwrFact_PhaDiffMsrDATA[8];             // 功率因数相差法单次测量数据
 252                  uint16 xdata PwrFact_PhaDiffMsrResult;              // 功率因数相差法测量结果 
 253             */
 254             if( PwrFact_PhaDiffMsrEN == 1 )
 255             {
 256                DUxCO_LastVal = DUxCO_CurrVal;      // 保存DUxCO状态 
 257                DUxCO_CurrVal = PhasePole;          // 读取DUxCO当前状态
 258          
 259                     if( DUxCO_CurrVal != DUxCO_LastVal )     
 260                     if( DUxCO_CurrVal == 1 )            // 识别DUxCO上升沿
 261                     {                                      
 262                        if( DUxCO_RisTimCNT == 0 )       // TIMER1没有开始计数
 263                             {
 264                      SFRPAGE = TIMER01_PAGE;       // Change to Timer1 Page
 265                      TR1 = 1;                      // T1 Begin. 
 266                             }
 267                             else
 268                          DUxCO_RisTimCNT++;
 269          
 270                             if( DUxCO_RisTimCNT == 3 )       // 在第三次DUxCO上升沿中止TIMER1
 271                             {
 272                      SFRPAGE = TIMER01_PAGE;       // Change to Timer1 Page
 273                      TR1 = 0;                      // T1 STOP. 
 274                      PwrFact_PhaDiffMsrDATA[PwrFact_PhaDiffMsrCNT].ucVAR[0] = TL1;
 275                      PwrFact_PhaDiffMsrDATA[PwrFact_PhaDiffMsrCNT].ucVAR[1] = TH1;
 276                      TH1 = 0;                      // TH1_INIT = 0x00;
 277                      TL1 = 0;                      // TL1_INIT = 0x00; 
 278          
 279                                DUxCO_RisTimCNT = 0;               //
 280                                     PwrFact_PhaDiffMsrCNT++;      
 281                      if( PwrFact_PhaDiffMsrCNT == 8 )
 282                                          {
 283                                        PwrFact_PhaDiffMsrOVER = 1;// 置本轮测量结束标记,等待计算测量结果. 
 284                                        PwrFact_PhaDiffMsrEN = 0;  // 计算结果期间停止测量. 
 285                                          } 
 286                             }
 287                     }
 288             }
 289          
 290          
 291             /*****************************************************************
 292             *** TIMER 0 SLOT 0 
 293             *** (1)启动录波功能:32 Points / Period; Time Interevl 625uS;
 294                  *** (2)SYNCa、SYNCb和SYNCc同步信息缺失或相序错误检测; 
 295                  *** (3)失控检测;
 296             *****************************************************************/
 297             if( TimSlotCNT == 0 )          // Time Slot 1;
 298             {
 299                     /*****************************************************************
 300                     *** 启动录波功能:32 Points / Period; Time Interevl 625uS;
 301                     *****************************************************************/
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 6   

 302                          /*
 303                          #define ByteNumMaxPerPage 65534
 304                          #define ExSramWrRdPagMax  2
 305          
 306                     MotStaUpEmWaveRecEN;
 307                     MotStaUpEmVoltRecEN;
 308                          MotStaUpEmWaveRecOVER;
 309          
 310                     uint8  idata ExSramWrRdPag;  // 外部SRAM页
 311                          uint16 idata ExSramWrRdAdr;  // 外部SRAM读写地址  
 312                     INTUC  idata AD_DataBuff;    // A/D数据缓冲
 313                          */
 314                if( MotStaUpEmWaveRecEN == 1 )                // 启动录波功能是否开启
 315                {
 316                             if( MotStaUpEmVoltRecEN == 1 )             // 1/0: EmVolt / EmCurr;
 317                     ADC0_CH_Setting(0x02);                   // AIN02 for EmVolt.                     
 318                   else
 319                     ADC0_CH_Setting(0x03);                   // AIN03 for EmCurr.                     
 320          
 321                        AD0INT = 0;                                // RST ADC Convert Complete Flag.
 322                   AD0BUSY = 1;                               // Start ADC0    
 323                   while( AD0INT == 0 );                      // Wait for Convert Over
 324          
 325                   if( ExSramWrRdAdr & 0x01 == 0 )            // Even Address.
 326                             {
 327                      AD_DataBuff.ucVAR[1] = ADC0H;           // Get  High 8 Byte.  
 328                      AD_DataBuff.ucVAR[0] = ADC0L & 0xf0;    // Get  Low  4 Byte.  
 329          
 330                           ExSRAM_PageSetting( ExSramWrRdPag );    // 切换到外部SRAM
 331                           ExSramWrRdAdrPt  = ExSramWrRdAdr;       //  
 332                      *ExSramWrRdAdrPt = AdcDatBuff.ucVAR[1]; // Save High 8 Byte
 333                      ExSramWrRdAdr++;
 334                      ExInSRAM_Select(0);                     // 切换回内部SRAM 
 335                   }
 336                   else
 337                             {
 338                      AD_DataBuff.ucVAR[1] = ADC0H;           // Get  High 8 Byte.  
 339                      ucTMP = ADC0L;                          // Get  Low  4 Byte.  
 340                      ucTMP = ucTMP >> 4;                     // Unite with Last Sample's Low  4 Byte.
 341                      AD_DataBuff.ucVAR[0] = ucTMP | AD_DataBuff.ucVAR[0];                                                     
             -  
 342          
 343                           ExSRAM_PageSetting( ExSramWrRdPag );    // 切换到外部SRAM
 344                           ExSramWrRdAdrPt  = ExSramWrRdAdr;
 345                      *ExSramWrRdAdrPt = AD_DataBuff.ucVAR[0];// Save Low  8 Byte.
 346                      ExSramWrRdAdr++;
 347          
 348                           ExSramWrRdAdrPt = ExSramWrRdAdr;
 349                      *ExSramWrRdAdrPt = AD_DataBuff.ucVAR[1];// Save High 8 Byte.
 350                      ExSramWrRdAdr++;        
 351                      ExInSRAM_Select(0);                     // 切换回内部SRAM 
 352                             }
 353          
 354                   if( ExSramWrRdAdr >= ByteNumMaxPerPage )   // 65534.   
 355                   {                                          // 65535 Sample Points/Page( 27Sec/Page ).
 356                           ExSramWrRdAdr = 0;                      // RST ExSRAM Address.
 357                      ExSramWrRdPag++;                        // ExSRAM Page Number Increase 1.
 358                   }
 359                   if( ExSramWrRdPag >= ExSramWrRdPagMax )    // 2
 360                        {                                          // Motor Startup Wave Record Over.
 361                           ExSramWrRdAdr = 0;                      // RST ExSRAM Address.
 362                           ExSramWrRdPag = 0;                      // RST ExSRAM Page No.
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 7   

 363                      MotStaUpEmWaveRecEN = 0;                // Disabled Motor Startup Wave Recording.     
 364                      MotStaUpEmWaveRecOVER = 1;              // Set Record Over Event Flag.
 365                        }
 366                }    
 367                /*****************************************************************
 368                *** SYNCa、SYNCb和SYNCc同步信息缺失或相序错误检测.
 369                *****************************************************************/
 370                /*
 371                #define SYNCxHalfPeriTimMAX   22   // 22 * 0.625 = 13.75mS.     
 372                #define SYNCxHalfPeriTimMIN   10   // 10 * 0.625 =  6.25mS.     
 373                #define SYNCxErrTimMAX        5    // 允许同步信号连续错误次数
 374          
 375                uint8  xdata SYNCaSameLevlTimCNT = 0;
 376                uint8  xdata SYNCbSameLevlTimCNT = 0;
 377                uint8  xdata SYNCcSameLevlTimCNT = 0;
 378                uint8  xdata SYNCaErrTimCNT = 0;
 379                uint8  xdata SYNCbErrTimCNT = 0;
 380                uint8  xdata SYNCcErrTimCNT = 0;
 381                uint8  xdata SYNCbAftSYNCaRiseEdgeTimCNT = 0;
 382                uint8  xdata SYNCcAftSYNCaRiseEdgeTimCNT = 0;

⌨️ 快捷键说明

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