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

📄 main.lst

📁 说明:采用与C极其类似的PL/M-96语言编写。 单片机采用Intel的96系列KB; 开发环境为Wave6000; 该程序的功能为采用模糊滑膜变结构 控制算法
💻 LST
📖 第 1 页 / 共 4 页
字号:
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE   1


DOS 7.10 (038-N) PL/M-96 V1.1 COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN C:\WAVE6000\SAMPLES\MAIN.OBJ
COMPILER INVOKED BY:  C:\COMP96\PLM96.EXE C:\WAVE6000\SAMPLES\MAIN.PLM DB TY FAST(100) 
   1          MAIN:DO;
              /***************************************************/
              /*80C196KB CPU专用寄存器*/
              /***************************************************/
   2   1      DECLARE ZERO WORD AT (00H);  /*R*/
   3   1      DECLARE AD_COMMAND  BYTE AT(02H);   /*W*/
   4   1      DECLARE HSI_MODE BYTE AT (03H);  /*W*/
   5   1      DECLARE HSI_TIME WORD AT (04H);  /*R*/
   6   1      DECLARE HSO_TIME WORD AT (04H);  /*W*/
   7   1      DECLARE HSI_STATUS BYTE AT (06H);  /*R*/
   8   1      DECLARE HSO_COMMAND BYTE AT (06H);  /*W*/
   9   1      DECLARE SBUF BYTE AT(07H);   /* R/W */
  10   1      DECLARE INT_MASK BYTE AT (08H);  /*R W*/
  11   1      DECLARE INT_PENDING BYTE AT (09H);  /*R W*/
  12   1      DECLARE WATCHDOG BYTE AT (0AH);  /*W*/
  13   1      DECLARE TIMER1 WORD AT (0AH);  /*R*/
  14   1      DECLARE TIMER2 WORD AT (0CH);  /*R W*/
  15   1      DECLARE IOC2 BYTE AT (0BH); /*W*/
  16   1      DECLARE IOPORT0 BYTE AT (0EH); /*R*/
  17   1      DECLARE IOPORT1 BYTE AT (0FH); /*R W*/
  18   1      DECLARE IOPORT2 BYTE AT (10H); /*R W*/
  19   1      DECLARE INT_PEND1 BYTE AT (12H); /*R W*/
  20   1      DECLARE INT_MASK1 BYTE AT (13H); /*R W*/
  21   1      DECLARE WSR BYTE AT (14H); /*R W*/
  22   1      DECLARE IOS0 BYTE AT (15H); /*R*/
  23   1      DECLARE IOC0 BYTE AT (15H); /*W*/
  24   1      DECLARE IOS1 BYTE AT (16H); /*R*/
  25   1      DECLARE IOC1 BYTE AT (16H); /*W*/
  26   1      DECLARE IOS2 BYTE AT (17H); /*R*/
  27   1      DECLARE SP WORD AT (18H); /*R W*/

              /*****************************************************/
  28   1      DECLARE (DIRECT,P,Q,ORDER) BYTE FAST;
  29   1      DECLARE T1OVER WORD;
  30   1      DECLARE PWM_WIDTH WORD;
  31   1      DECLARE DISP_SPD(4) BYTE;
  32   1      DECLARE DISP_BUFF(4) BYTE;
  33   1      DECLARE (START_SIGN,BID) BYTE;
  34   1      DECLARE R0 BYTE;
  35   1      DECLARE (DISP_STATUS,SPD_STEP,FAULT) BYTE;
  36   1      DECLARE (II,KK) WORD;
  37   1      DECLARE COMM_8279 BYTE AT(0DFFFH);
  38   1      DECLARE DATA_8279 BYTE AT(0DE00H);
  39   1      DECLARE (AIM_SPD,CONV_SPD,RUN_SPD) WORD ;
  40   1      DECLARE (TM1,TM2) WORD FAST;
  41   1      DECLARE (TURNON,TURNOFF) WORD FAST;
  42   1      DECLARE (E0,E1,EC) INTEGER;
  43   1      DECLARE T_SPAN DWORD FAST;
  44   1      DECLARE INT13 WORD AT(203AH) DATA(.KEY_PROCESS);
  45   1      DECLARE DEFAULT_SPD WORD DATA(400);
  46   1      DECLARE DIGI_CODE(10) BYTE DATA(3FH,30H,5BH,79H,74H,6DH,6FH,38H,7FH,7DH);
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE   2


  47   1      DECLARE FUZZY(225) BYTE DATA(0,0,0,1,1,2,3,3,4,5,5,6,7,7,7,
                                               1,1,2,2,3,3,4,4,5,5,6,7,7,7,8,
                                               2,2,3,3,3,4,4,5,5,6,6,7,7,7,8,
                                               3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,
                                               4,4,4,5,5,6,6,6,6,7,7,7,7,8,8,
                                               4,5,5,6,6,6,6,6,7,7,7,7,7,8,8,
                                               5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,
                                               6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,
                                               6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,
                                               6,6,7,7,7,7,7,8,8,8,8,8,9,9,10,
                                               6,6,7,7,7,7,8,8,8,8,9,9,10,10,10,
                                               6,6,7,7,7,8,8,8,9,9,9,10,10,10,11,
                                               6,7,7,7,8,8,9,9,10,10,11,11,11,12,12,
                                               6,7,7,7,8,9,9,10,10,11,11,12,12,13,13,
                                               7,7,7,8,9,9,10,11,11,12,13,13,14,14,14);
              /*显示程序*/
  48   1      DISPLAY:PROCEDURE;
  49   2        DECLARE I BYTE;
  50   2        DO CASE DISP_STATUS;
  51   3        DISP0:DO;      /*速度显示*/
  52   4          II=II+1;
  53   4          IF II>500 THEN DO;
  55   5          II=0;
  56   5          CONV_SPD=RUN_SPD;
  57   5          END;
  58   4          CALL CONVERSION;
  59   4          DO I=0 TO 3;
  60   5          DISP_BUFF(I)=DISP_SPD(I);
  61   5          END;
  62   4        END;
  63   3        DISP1:DO;      /*一般故障显示*/
  64   4          IF BITTST(.FAULT,1) THEN DISP_BUFF(0)=00H;
  66   4          ELSE DISP_BUFF(0)=40H;
  67   4          IF BITTST(.FAULT,2) THEN DISP_BUFF(1)=00H;
  69   4          ELSE DISP_BUFF(1)=40H;
  70   4          IF BITTST(.FAULT,3) THEN DISP_BUFF(2)=80H;
  72   4          ELSE DISP_BUFF(2)=0c0H;
  73   4          IF BITTST(.FAULT,4) THEN DISP_BUFF(3)=00H;
  75   4          ELSE DISP_BUFF(3)=40H;
  76   4        END;
  77   3        DISP2:DO;      /*电源故障显示*/
  78   4          DO I=0 TO 2;
  79   5            IF BITTST(.FAULT,0) THEN  DISP_BUFF(I)=00H;
  81   5            ELSE DISP_BUFF(I)=40H;
  82   5          END;
  83   4          DISP_BUFF(3)=0DEH;
  84   4        END;
  85   3        DISP3:DO;
  86   4          CONV_SPD=PWM_WIDTH;
  87   4          CALL CONVERSION;
  88   4            DO I=0 TO 3;
  89   5              DISP_BUFF(I)=DISP_SPD(I);
  90   5            END;
  91   4        END;
  92   3        DISP4:DO;
  93   4          CONV_SPD=UNSIGN(IABS(E1));
  94   4          CALL CONVERSION;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE   3


  95   4            DO I=0 TO 3;
  96   5              DISP_BUFF(I)=DISP_SPD(I);
  97   5            END;
  98   4        END;
  99   3        DISP5:DO;
 100   4          CONV_SPD=UNSIGN(IABS(EC));
 101   4          CALL CONVERSION;
 102   4            DO I=0 TO 3;
 103   5              DISP_BUFF(I)=DISP_SPD(I);
 104   5            END;
 105   4        END;
 106   3        DISP6:DO;
 107   4          CONV_SPD=SPD_STEP;
 108   4          CALL CONVERSION;
 109   4            DO I=0 TO 3;
 110   5              DISP_BUFF(I)=DISP_SPD(I);
 111   5            END;
 112   4        END;
 113   3        DISP7:DO;
 114   4          CONV_SPD=AIM_SPD;
 115   4          CALL CONVERSION;
 116   4            DO I=0 TO 3;
 117   5              DISP_BUFF(I)=DISP_SPD(I);
 118   5            END;
 119   4        END;
 120   3       END;
 121   2       IF START_SIGN=1 THEN DISP_BUFF(0)=(DISP_BUFF(0) OR 80H);
 123   2       IF DIRECT=1 THEN DISP_BUFF(1)=(DISP_BUFF(1) OR 80H);
 125   2       IF FAULT<1FH THEN DISP_BUFF(3)=(DISP_BUFF(3) OR 80H);
 127   2       CALL REFRESH;
 128   2      END DISPLAY;

 129   1      CONVERSION:PROCEDURE;
 130   2        DECLARE K BYTE;
 131   2        DECLARE NN BYTE;
 132   2        DECLARE DIGI_N(4) BYTE;
 133   2        DIGI_N(0)=CONV_SPD/1000;
 134   2        DIGI_N(1)=(CONV_SPD MOD 1000)/100;
 135   2        DIGI_N(2)=(CONV_SPD MOD 100)/10;
 136   2        DIGI_N(3)=CONV_SPD MOD 10;
 137   2        DO K=0 TO 3;
 138   3          NN=DIGI_N(K);
 139   3          DISP_SPD(K)=DIGI_CODE(NN);
 140   3        END;
 141   2      END CONVERSION;

 142   1      REFRESH:PROCEDURE;
 143   2        DECLARE J BYTE;
 144   2        COMM_8279=90H;
 145   2        DO J=0 TO 3;
 146   3          DATA_8279=DISP_BUFF(J);
 147   3        END;
 148   2      END REFRESH;

 149   1      EXTINT1:PROCEDURE INTERRUPT_CALLABLE ;
 150   2        DISABLE;
 151   2        DISP_STATUS=1;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE   4


 152   2        FAULT=IOPORT1;
 153   2        IF BITTST(.FAULT,0) THEN DISP_STATUS=2;
 155   2        CALL DISPLAY;
 156   2        ENABLE;
 157   2      END;

              /*键盘处理程序*/
 158   1      KEY_PROCESS:PROCEDURE INTERRUPT 7 ;
 159   2        DECLARE KEY BYTE;
 160   2        DISABLE;
 161   2          COMM_8279=40H;
 162   2          KEY=DATA_8279;
 163   2          COMM_8279=0C2H;
 164   2        IF KEY>7 THEN KEY=KEY-8;
 166   2        ENABLE;
 167   2        DO CASE KEY;
 168   3        K0:DO;      /*启动键*/
 169   4          IF START_SIGN=0 THEN  CALL START;
 171   4        END;
 172   3        K1:DO;     /*反向键*/
 173   4          IF (START_SIGN=0 AND RUN_SPD=0) THEN DO;
 175   5            IF DIRECT=1 THEN DIRECT=0;
 177   5            ELSE DIRECT=1;
 178   5          END;
 179   4          ELSE DO;
 180   5            START_SIGN=0;
 181   5            AIM_SPD=0;
 182   5            BID=1;
 183   5            CALL STOP;
 184   5          END;
 185   4        END;
 186   3        K2:DO;     /*显示切换键*/
 187   4          DISP_STATUS=DISP_STATUS+1;
 188   4          IF DISP_STATUS=8 THEN DISP_STATUS=0;
 190   4        END;
 191   3        K3:DO;     /*加速键*/
 192   4          DISP_STATUS=7;
 193   4          IF AIM_SPD<2000 THEN  AIM_SPD=AIM_SPD+SPD_STEP;
 195   4          IF AIM_SPD>2000 THEN  AIM_SPD=2000;
 197   4        END;
 198   3        K4:DO;     /*减速键*/
 199   4          DISP_STATUS=7;
 200   4          IF AIM_SPD>50 THEN AIM_SPD=AIM_SPD-SPD_STEP;
 202   4          IF AIM_SPD<50 THEN AIM_SPD=50;
 204   4        END;
 205   3        K5:DO;     /*停止键*/
 206   4          START_SIGN=0;
 207   4          AIM_SPD=0;
 208   4          CALL STOP;
 209   4        END;
 210   3        K6:DO;     /*步距调节键*/
 211   4          DISP_STATUS=6;
 212   4          IF SPD_STEP=100 THEN SPD_STEP=10;
 214   4          ELSE IF SPD_STEP=10 THEN SPD_STEP=1;
 216   4          ELSE SPD_STEP=100;
 217   4        END;
 218   3        K7:DO;     /*缺省速度键*/
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE   5


 219   4          DISP_STATUS=7;
 220   4          AIM_SPD=DEFAULT_SPD;
 221   4        END;
 222   3      END;

 223   2      END KEY_PROCESS;

 224   1      START:PROCEDURE;
 225   2        DECLARE PORT BYTE;
 226   2          DISABLE;
 227   2          IOC2=80H;
 228   2          PWM_WIDTH=2;
 229   2          PORT=IOPORT1;
 230   2          IF BITTST(.PORT,7) THEN P=1;
 232   2          ELSE P=0;
 233   2          IF BITTST(.PORT,5) THEN Q=1;
 235   2          ELSE Q=0;
 236   2          TM1=0;
 237   2          T1OVER=0;
 238   2          CALL PWMTIME;
 239   2          START_SIGN=1;
 240   2          IF DIRECT=1 THEN DO;
 242   3            IF (P=1 AND Q=1) THEN DO;
 244   4              HSO_COMMAND=26H;
 245   4              HSO_TIME=TIMER1+02H;
 246   4               R0=0;
 247   4               R0=0;
 248   4               HSO_COMMAND=07H;
 249   4               HSO_TIME=TIMER1+02H;
 250   4               R0=0;
 251   4               R0=0;
 252   4            END;
 253   3            ELSE IF(P=1 AND Q=0) THEN DO;
 255   4              HSO_COMMAND=23H;
 256   4              HSO_TIME=TIMER1+02H;
 257   4              R0=0;
 258   4              R0=0;
 259   4              HSO_COMMAND=20H;
 260   4              HSO_TIME=TIMER1+02H;
 261   4               R0=0;
 262   4               R0=0;
 263   4               HSO_COMMAND=01H;
 264   4               HSO_TIME=TIMER1+02H;
 265   4               R0=0;
 266   4               R0=0;
 267   4               HSO_COMMAND=02H;
 268   4               HSO_TIME=TIMER1+02H;
 269   4               R0=0;
 270   4               R0=0;

 271   4            END;
 272   3            ELSE IF(P=0 AND Q=1) THEN DO;
 274   4              HSO_COMMAND=21H;
 275   4              HSO_TIME=TIMER1+02H;
 276   4              R0=0;
 277   4              R0=0;
 278   4              HSO_COMMAND=22H;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE   6


 279   4              HSO_TIME=TIMER1+02H;
 280   4               R0=0;
 281   4               R0=0;
 282   4               HSO_COMMAND=00H;
 283   4               HSO_TIME=TIMER1+02H;
 284   4               R0=0;
 285   4               R0=0;
 286   4               HSO_COMMAND=03H;
 287   4               HSO_TIME=TIMER1+02H;
 288   4               R0=0;
 289   4               R0=0;

 290   4            END;
 291   3            ELSE DO;
 292   4              HSO_COMMAND=27H;
 293   4              HSO_TIME=TIMER1+02H;
 294   4               R0=0;
 295   4               R0=0;
 296   4               HSO_COMMAND=06H;
 297   4               HSO_TIME=TIMER1+02H;
 298   4               R0=0;
 299   4               R0=0;
 300   4            END;
 301   3          END;
 302   2          ELSE DO;  /*顺时针转*/
 303   3            IF (P=0 AND Q=0) THEN DO;
 305   4              HSO_COMMAND=26H;
 306   4              HSO_TIME=TIMER1+02H;
 307   4               R0=0;
 308   4               R0=0;
 309   4               HSO_COMMAND=07H;
 310   4               HSO_TIME=TIMER1+02H;
 311   4               R0=0;
 312   4               R0=0;
 313   4            END;
 314   3            ELSE IF(P=1 AND Q=0) THEN DO;
 316   4              HSO_COMMAND=21H;
 317   4              HSO_TIME=TIMER1+02H;
 318   4              R0=0;
 319   4              R0=0;
 320   4              HSO_COMMAND=22H;
 321   4              HSO_TIME=TIMER1+02H;
 322   4               R0=0;
 323   4               R0=0;
 324   4               HSO_COMMAND=00H;
 325   4               HSO_TIME=TIMER1+02H;
 326   4               R0=0;
 327   4               R0=0;
 328   4               HSO_COMMAND=03H;
 329   4               HSO_TIME=TIMER1+02H;
 330   4               R0=0;
 331   4               R0=0;

 332   4            END;
 333   3            ELSE IF(P=0 AND Q=1) THEN DO;
 335   4              HSO_COMMAND=20H;
 336   4              HSO_TIME=TIMER1+02H;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE   7


 337   4              R0=0;
 338   4              R0=0;
 339   4              HSO_COMMAND=23H;
 340   4              HSO_TIME=TIMER1+02H;
 341   4               R0=0;
 342   4               R0=0;
 343   4               HSO_COMMAND=01H;
 344   4               HSO_TIME=TIMER1+02H;
 345   4               R0=0;
 346   4               R0=0;
 347   4               HSO_COMMAND=02H;
 348   4               HSO_TIME=TIMER1+02H;
 349   4               R0=0;
 350   4               R0=0;

 351   4            END;
 352   3            ELSE DO;
 353   4              HSO_COMMAND=27H;
 354   4              HSO_TIME=TIMER1+02H;
 355   4               R0=0;
 356   4               R0=0;
 357   4               HSO_COMMAND=06H;
 358   4               HSO_TIME=TIMER1+02H;
 359   4               R0=0;
 360   4               R0=0;
 361   4            END;
 362   3          END;
 363   2          ENABLE;
 364   2      END START;

              /*高速输入中断程序*/
 365   1      HSI_INT:PROCEDURE INTERRUPT 2 ;
 366   2        DECLARE STATUS BYTE;
 367   2        DECLARE IOS BYTE;
 368   2        DECLARE T1 BYTE;
 369   2        declare (SUM,temp) word;
 370   2        DISABLE;
 371   2        IOS=IOS1;
 372   2        IF BITTST(.IOS,7) THEN DO;
 374   3          STATUS=HSI_STATUS;

⌨️ 快捷键说明

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