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

📄 plc51x.lst

📁 PLC源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 314   2            if ((Ia & 0x8000) == 0)    //先送高bit位数据   
 315   2                { HC595_SDATA = 0; } 
 316   2              else                     //送74HC595的数据
 317   2                { HC595_SDATA = 1; } 
 318   2            Time_10ms();
 319   2            Ia <<= 1;   
 320   2            HC595_SCLK = 1;            //拉高74HC595时钟
 321   2            Time_10ms(); 
 322   2          } 
 323   1          HC595_SDATA = 1;             //释放数据总线
 324   1          Time_10ms();
 325   1          HC595_RCLK = 0;              //锁存数据
 326   1          Time_10ms();
 327   1          HC595_RCLK = 1; 
 328   1          Time_10ms();
 329   1      }
 330          
 331          //-------------------------------------------------------------------------------------//
 332          //  100ms 定时子函数                                                                   //
 333          //-------------------------------------------------------------------------------------//
 334          
 335          void _T100mS(void)
 336          { unsigned char i;
 337   1        if (Timer_100ms != 0)
 338   1          { Timer_100ms--;
 339   2            Pulse_val_Sec++;
 340   2            if (Pulse_val_Sec == 5) 
 341   2                  { Pulse_Sec = ~Pulse_Sec;
 342   3                  }   
 343   2            if (Pulse_val_Sec == 10) 
 344   2                  { Pulse_Sec = ~Pulse_Sec; 
 345   3                        Pulse_val_Min++; 
 346   3                Pulse_val_Sec = 0;
 347   3                      }
 348   2                for (i=0; i<_T_num; i++ )
 349   2              { if ((rTF[i/8].BYTE & (1 << (i%8))) != 0)
 350   3                  { if (_T[i][0] < _T[i][1])  { _T[i][0]++; }
 351   4                  }
 352   3              }
 353   2              }
 354   1      }
 355          
 356          //-------------------------------------------------------------------------------------//
 357          //  1Set 定时子函数                                                                    //
 358          //-------------------------------------------------------------------------------------//
 359          
 360          void _T1Set(void)
 361          { if ((Pulse_val_Min == 30) && (Pulse_val_Sec == 0)) 
 362   1              { Pulse_Min = ~Pulse_Min;
 363   2              }   
 364   1        if ((Pulse_val_Min == 60) && (Pulse_val_Sec == 0))  
 365   1              { Pulse_Min = ~Pulse_Min;
C51 COMPILER V8.16   PLC51X                                                                10/10/2009 14:43:40 PAGE 7   

 366   2                Pulse_val_Min = 0;
 367   2              }
 368   1      }
 369          
 370          //-------------------------------------------------------------------------------------//
 371          //  5ms 定时中断 子函数,使用定时器 0                                                  //
 372          //-------------------------------------------------------------------------------------//
 373          
 374          void timer0(void) interrupt 1 using 1
 375          { TH0 = (Value_T0_cons >> 8);
 376   1        Pulse_10ms = ~Pulse_10ms;
 377   1        if ((++Timer_5ms & 0x01) != 0)  { Timer_10ms++; }
 378   1        if (Timer_5ms == 10)  { Pulse_100ms = ~Pulse_100ms; }
 379   1        if (Timer_5ms == 20)
 380   1          { Pulse_100ms = ~Pulse_100ms;
 381   2            Timer_100ms++;  
 382   2                Timer_5ms = 0;
 383   2          }
 384   1        if(UartRxTimerStartFlag)                      // 接收超时...50ms
 385   1              { if(UartWaitForCounter>=10)
 386   2                      { UartWaitForCounter=0;
 387   3                        UartRxTimerStartFlag=0;
 388   3                        UartDataReadyFlag=1;
 389   3                        REN=0;                                                // 禁止UART接收器
 390   3                      }
 391   2                else UartWaitForCounter++;
 392   2              }
 393   1      }
 394          
 395          
 396          //-------------------------------------------------------------------------------------//
 397          //  初始化,输入输出,内存处理 子函数                                                  //
 398          //-------------------------------------------------------------------------------------//
 399          void input_IO(void)           // X输入,Y输出刷新
 400          { unsigned char i;
 401   1        i = P2;
 402   1        i = ((i << 1) & 0xaa) | ((i >> 1) & 0x55);
 403   1        i = ((i << 2) & 0xcc) | ((i >> 2) & 0x33);
 404   1        rX[0].BYTE = ~((P1 & 0x0f) | (i & 0xf0));
 405   1        rX[1].BYTE = ~(i & 0x0f) & 0x0f;
 406   1        rX[2].BYTE = ~Get_EX_BIT();
 407   1        P0 = rY[0].BYTE;
 408   1        Out_EY_BIT();
 409   1        _M8011_ = Pulse_10ms;
 410   1        _M8012_ = Pulse_100ms;
 411   1        _M8013_ = Pulse_Sec;
 412   1        _M8014_ = Pulse_Min;
 413   1      }
 414          
 415          void reset_IO(void)             // I,O口初始化
 416          { P0M0  = 0x00;
 417   1        P0M1  = 0xff;
 418   1        P0    = 0x00;
 419   1        P1    = 0xff;
 420   1        P2    = 0xff;
 421   1        P3    = 0xff;
 422   1        Value = 0;          // 变频显示器LED显示缓冲区
 423   1        Va0   = 0;          // 变频显示器F/R指示显示缓冲区
 424   1        Va1   = 0;          // 变频显示器 Hz指示显示缓冲区
 425   1        Va2   = 0;          // 变频显示器 V 指示显示缓冲区
 426   1        Va3   = 0;          // 变频显示器 A 指示显示缓冲区 
 427   1        Va4   = 0;          // 变频显示器RUN指示显示缓冲区 
C51 COMPILER V8.16   PLC51X                                                                10/10/2009 14:43:40 PAGE 8   

 428   1        Vb0   = 0;          // 变频显示器LED个位小数点显示缓冲区
 429   1        Vb1   = 0;          // 变频显示器LED十位小数点显示缓冲区
 430   1        Vb2   = 0;          // 变频显示器LED百位小数点显示缓冲区
 431   1        Vb3   = 0;          // 变频显示器LED千位小数点显示缓冲区
 432   1        Vc0   = 0;          // 变频显示器LED个位数熄灭标志
 433   1        Vc1   = 0;          // 变频显示器LED十位数熄灭标志
 434   1        Vc2   = 0;          // 变频显示器LED百位数熄灭标志
 435   1        Vc3   = 0;          // 变频显示器LED千位数熄灭标志
 436   1      }
 437          
 438          void reset_M8xxx(void)             // RUN 后输出一个扫描周期初始化
 439          { rM8xxx[0].BYTE = 0x09;
 440   1      }
 441          
 442          void reset_RAM(void)
 443          { unsigned char i;
 444   1        for (i=0; i<_T_num;  i++)  { _T[i][0] = 0; }
 445   1        for (i=0; i<_T_num;  i++)  { _T[i][1] = 0x7fff; }
 446   1        for (i=0; i<_C_num;  i++)  { _C[i]    = 0; }
 447   1        for (i=0; i<_T_BYTE; i++)  { rT[i].BYTE = 0; rT1[i].BYTE = 0; rTF[i].BYTE = 0; }
 448   1        for (i=0; i<_C_BYTE; i++)  { rC[i].BYTE = 0; rT1[i].BYTE = 0; rCF[i].BYTE = 0; }
 449   1        for (i=0; i<_Y_BYTE; i++)  { rY[i].BYTE = 0; rY1[i].BYTE = 0; }
 450   1        for (i=0; i<_M_BYTE; i++)  { rM[i].BYTE = 0; rM1[i].BYTE = 0; }
 451   1        for (i=0; i<_S_BYTE; i++)  { rS[i].BYTE = 0; rS1[i].BYTE = 0; }
 452   1        for (i=0; i<_M8xxx_BYTE; i++) { rM8xxx[i].BYTE = 0; rM8xxx1[i].BYTE = 0; }
 453   1        rM8xxx[0].BYTE  = 0x05;
 454   1        rM8xxx1[0].BYTE = 0x05;
 455   1        Timer_5ms     = 0;           // 5ms时基计数器,5ms Timer0中断计数
 456   1        Timer_10ms    = 0;           // 10ms时基计数器,5ms Timer0中断计数
 457   1        Timer_100ms   = 0;           // 100ms时基计数器,5ms Timer0中断计数
 458   1        Pulse_val_Sec = 0;           // 1s时基计数器
 459   1        Pulse_val_Min = 0;           // 1min时基计数器
 460   1        CODE_ERROR    = 0;
 461   1        input_IO(); 
 462   1        for (i=0; i<_X_BYTE; i++) { rX1[i].BYTE = rX[i].BYTE; }
 463   1      }
 464          
 465          void reset_interrupt(void)
 466          { IP   = 0x00;
 467   1        IE   = 0x00;
 468   1        TCON = 0x00;                   // 定时器控制寄存器, 注意:TCON只需操作一次
 469   1        TMOD = 0x01;
 470   1        T0  = Value_T0_cons;       // 装入5ms Timer0中断常数
 471   1        PT0 = 1;
 472   1        ET0 = 1;
 473   1        TR0 = 1;
 474   1      }
 475          

⌨️ 快捷键说明

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