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

📄 lzkfunc.lst

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 383          
 384                     uint8 bdata SYNCx_FLAG = 0x00;
 385                          sbit SYNCc_LastVal  = SYNCx_FLAG ^ 7;
 386                          sbit SYNCc_CurrVal  = SYNCx_FLAG ^ 6;
 387                          sbit SYNCb_LastVal  = SYNCx_FLAG ^ 5;
 388                          sbit SYNCb_CurrVal  = SYNCx_FLAG ^ 4;
 389                          sbit SYNCa2_LastVal = SYNCx_FLAG ^ 3;
 390                          sbit SYNCa2_CurrVal = SYNCx_FLAG ^ 2;
 391                          sbit SYNCa_LastVal  = SYNCx_FLAG ^ 1;
 392                          sbit SYNCa_CurrVal  = SYNCx_FLAG ^ 0;
 393          
 394                uint8 bdata SYNCx_ErrFLAG = 0x00;
 395                sbit SYNCabcMoniEN                 = SYNCx_ErrFLAG ^ 6; 
 396                          sbit SYNCbAftSYNCaRiseEdgeTimCntEN = SYNCx_ErrFLAG ^ 6;
 397                          sbit SYNCcAftSYNCaRiseEdgeTimCntEN = SYNCx_ErrFLAG ^ 5; 
 398                sbit SYNCbAftSYNCaErrEVT           = SYNCx_ErrFLAG ^ 4;
 399                sbit SYNCcAftSYNCaErrEVT           = SYNCx_ErrFLAG ^ 3;
 400                sbit SYNCaErrEVT                   = SYNCx_ErrFLAG ^ 2;
 401                sbit SYNCbErrEVT                   = SYNCx_ErrFLAG ^ 1;
 402                sbit SYNCcErrEVT                   = SYNCx_ErrFLAG ^ 0;
 403          
 404                          */
 405                if( SYNCabcMoniEN )              // 励磁同步检测功能是否使能.
 406                     {
 407                   //       1-----1     1-----1     1-----1
 408                   // SYNCa_|     |_____|     |_____|     |___________
 409                   // ______0_____10____0_____10____0_____10__________0(0mS);     20(12.5mS)
 410                   //           1-----1     1-----1     1-----1
 411                   // SYNCb_____|     |_____|     |_____|     |_______13(8.125mS);30(18.75mS);
 412                             // _________6.67__16.7__6.67__16.7__6.67__16.7_____
 413                   //               1-----1     1-----1     1-----1
 414                   // SYNCc_________|     |_____|     |_____|     |___
 415                             // _____________13.3__3.3___13.3__3.3___13.3__3.3__26(16.25mS);11(6.875mS);
 416          
 417                   /*****************************************************************
 418                   *** A相同步信息处理:检测SYNCa高电平或低电平持续时间,
 419                                  ***                  在SYNCa上升沿启动SYNCb滞后SYNCa计时,  
 420                                  ***                  检测间隔时间625uS
 421                   *****************************************************************/               
 422                   SYNCa2_LastVal = SYNCa2_CurrVal;    
 423                   SYNCa2_CurrVal = SYNCa; 
 424                        if( SYNCa2_CurrVal != SYNCa2_LastVal )   // SYNCa电平变化.           
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 8   

 425                             {                  
 426                      if( (SYNCaSameLevlTimCNT > SYNCxHalfPeriTimMAX) || (SYNCaSameLevlTimCNT < SYNCxHalfPeriTimMIN)
             - ) 
 427                                     {                                     // SYNCa同一电平时间太长或太短
 428                                        SYNCaErrTimCNT++; 
 429                                                  if( SYNCaErrTimCNT >= SYNCxErrTimMAX )
 430                                                  {
 431                                                     SYNCaErrTimCNT = 0;
 432                                                     SYNCaErrEVT = 1;                // 置位SYNCa错误标记 
 433                                                  }  
 434                                     }
 435                      else
 436                                            SYNCaErrTimCNT = 0;                 // 复位SYNCaErrTimCNT                
 437          
 438                                if( SYNCa2_CurrVal == 1 )             // SYNCa上升沿.
 439                           {                               
 440                         SYNCbAftSYNCaRiseEdgeTimCntEN = 1; // SYNCb上升沿滞后SYNCa上升沿计时使能.
 441                         SYNCcAftSYNCaRiseEdgeTimCntEN = 1; // SYNCc上升沿滞后SYNCa上升沿计时使能.
 442                                          }
 443                      SYNCaSameLevlTimCNT = 0;              // 复位SYNCaSameLevlTimCNT.  
 444                             }  
 445                   else                                     // SYNCa电平保持不变
 446                     SYNCaSameLevlTimCNT++;
 447          
 448                   if( SYNCbAftSYNCaRiseEdgeTimCntEN == 1 )
 449                                    SYNCbAftSYNCaRiseEdgeTimCNT++;         // SYNCb上升沿滞后SYNCa上升沿计时 
 450                   if( SYNCcAftSYNCaRiseEdgeTimCntEN == 1 )
 451                                    SYNCcAftSYNCaRiseEdgeTimCNT++;         // SYNCc上升沿滞后SYNCa上升沿计时
 452          
 453                   /*****************************************************************
 454                   *** B相同步信息处理:检测SYNCb高电平或低电平持续时间,
 455                                  ***                  在SYNCb上升沿检查SYNCb滞后SYNCa计时结果是否在范围内,  
 456                                  ***                  检测间隔时间625uS
 457                   *****************************************************************/               
 458                   SYNCb_LastVal = SYNCb_CurrVal;    
 459                   SYNCb_CurrVal = SYNCb; 
 460                        if( SYNCb_CurrVal != SYNCb_LastVal )    // SYNCb电平变化.    
 461                             {                  
 462                      if( (SYNCbSameLevlTimCNT > SYNCxHalfPeriTimMAX) || (SYNCaSameLevlTimCNT < SYNCxHalfPeriTimMIN)
             - ) 
 463                                     {                                    // SYNCa同一电平时间太长或太短
 464                                        SYNCbErrTimCNT++;
 465                                                  if( SYNCbErrTimCNT >= SYNCxErrTimMAX )
 466                                                  {
 467                                                     SYNCbErrTimCNT = 0;
 468                                                     SYNCbErrEVT = 1;
 469                                                  }  
 470                                     }
 471                      else
 472                                            SYNCbErrTimCNT = 0;                // 复位SYNCaErrTimCNT
 473                                             
 474                                if( SYNCb_CurrVal == 1 )             // SYNCb上升沿.
 475                           {                               
 476                         SYNCbAftSYNCaRiseEdgeTimCntEN = 0;// 3.75 < 6.67 < 10;
 477                                                  if( (SYNCbAftSYNCaRiseEdgeTimCNT < 6) || (SYNCbAftSYNCaRiseEdgeTimCNT > 16) ) 
 478                         {
 479                            SYNCbAftSYNCaRiseEdgeTimCNT = 0;
 480                            SYNCbAftSYNCaErrEVT = 1;        // 同步相序错误
 481                         }  
 482                         SYNCbAftSYNCaRiseEdgeTimCNT = 0;
 483                                          }
 484                      SYNCbSameLevlTimCNT = 0;             // 复位SYNCaSameLevlTimCNT.  
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 9   

 485                             }  
 486                   else
 487                     SYNCbSameLevlTimCNT++;
 488          
 489                   /*****************************************************************
 490                   *** C相同步信息处理:检测SYNCc高电平或低电平持续时间,
 491                                  ***                  在SYNCc上升沿检查SYNCc滞后SYNCa计时结果是否在范围内,  
 492                                  ***                  检测间隔时间625uS
 493                   *****************************************************************/               
 494                   SYNCc_LastVal = SYNCc_CurrVal;    
 495                   SYNCc_CurrVal = SYNCc; 
 496                        if( SYNCc_CurrVal != SYNCc_LastVal )    // SYNCc电平变化.    
 497                             {                  
 498                      if( (SYNCcSameLevlTimCNT > SYNCxHalfPeriTimMAX) || (SYNCcSameLevlTimCNT < SYNCxHalfPeriTimMIN)
             - ) 
 499                                     {                                    // SYNCa同一电平时间太长或太短
 500                                        SYNCcErrTimCNT++;
 501                                                  if( SYNCcErrTimCNT >= SYNCxErrTimMAX )
 502                                                  {
 503                                                SYNCcErrTimCNT = 0;            // 复位SYNCcErrTimCNT
 504                                                     SYNCcErrEVT = 1;
 505                                                  }  
 506                                     }
 507                      else
 508                                            SYNCcErrTimCNT = 0;                // 复位SYNCcErrTimCNT
 509                                             
 510                                if( SYNCc_CurrVal == 1 )             // SYNCa上升沿.
 511                           {                               
 512                         SYNCcAftSYNCaRiseEdgeTimCntEN = 0;// 9.375 < 13.33 < 16.25;  
 513                                                  if( (SYNCcAftSYNCaRiseEdgeTimCNT < 15) || (SYNCcAftSYNCaRiseEdgeTimCNT > 26) ) 
 514                         {
 515                                                     SYNCcAftSYNCaRiseEdgeTimCNT = 0;
 516                            SYNCcAftSYNCaErrEVT = 1;        // 同步相序错误
 517                         }
 518                         SYNCcAftSYNCaRiseEdgeTimCNT = 0;
 519                                          }
 520                      SYNCcSameLevlTimCNT = 0;             // 复位SYNCcSameLevlTimCNT.  
 521                             }  
 522                   else
 523                     SYNCcSameLevlTimCNT++;
 524          
 525          
 526                /*****************************************************************
 527                *** 失控检测
 528                *****************************************************************/
 529                /*
 530                #define UFCO_OutOfCtrlTimMAX 5          //
 531          
 532                uint8  xdata UFCO_LowLevlTimCNT = 0;   
 533                uint8  xdata UFCO_OutOfCtrlTimCNT =0;
 534                uint8  xdata UFCO_01SecTimCNT = 0;
 535          
 536                UFCO_LastVal
 537                UFCO_CurrVal
 538                          UFCO_01SecTimCntEN
 539                          UFCO_OutOfCtrlEVT
 540                */
 541                     if( OutOfCtrlMoniEN )                   // 失控检测功能是否使能.
 542                {
 543                        UFCO_LowLevlTimCNT++;                // Increase 1 Every 625uS.
 544          
 545                   UFCO_LastVal = UFCO_CurrVal;         // UFCO为过零比较.   
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 10  

 546                   UFCO_CurrVal = ~UFCO;                // 比较器倒相!!!硬件设计错误.   
 547                   if( UFCO_CurrVal != UFCO_LastVal )  
 548                        {
 549                      if( UFCO_CurrVal == 0 )           // UFCO下降沿.
 550                                       UFCO_LowLevlTimCNT = 0;         // 复位UFCO低电平计时器.
 551                                     else                              // 只在UFCO上升沿判断UFCO_LowLevlTimCNT的值.
 552                                     {
 553                                if( UFCO_LowLevlTimCNT >= 9 )  // UFCO低电平时间超过9(5.5mS). 
 554                                        {
 555                                           UFCO_OutOfCtrlTimCNT++;     // UFCO低电平超时事件计数
 556                            if( UFCO_OutOfCtrlTimCNT >= UFCO_OutOfCtrlTimMAX )  
 557                                                {                           // 达到5次认为失控.
 558                                                   UFCO_OutOfCtrlEVT = 1;   // 置位失控事件标记. 
 559                                                   UFCO_OutOfCtrlTimCNT = 0;
 560                                                }           
 561                                                UFCO_01SecTimCNT = 0;       // 100mS计时器复位;不断复位使其不超时!!!
 562                            UFCO_01SecTimCntEN = 1;     // 100mS计时器计时使能.
 563                                        }
 564                                     }
 565                     }           
 566          
 567                                  if( UFCO_01SecTimCntEN )
 568                             {
 569                      UFCO_01SecTimCNT++;
 570                                if( UFCO_01SecTimCNT >= 160 )     // 100毫秒计时超时.
 571                                     {
 572                         UFCO_OutOfCtrlTimCNT = 0;      // 100毫秒内没有出现另1个超过5.5毫秒的低电平.  
 573                         UFCO_01SecTimCntEN = 0;        // 本次100毫秒超时计时任务结束.
 574                                     }
 575                             }    
 576                } // End of 失控检测功能.

⌨️ 快捷键说明

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