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

📄 main.lst

📁 说明:采用与C极其类似的PL/M-96语言编写。 单片机采用Intel的96系列KB; 开发环境为Wave6000; 该程序的功能为采用模糊滑膜变结构 控制算法
💻 LST
📖 第 1 页 / 共 4 页
字号:
1148   6               HSO_COMMAND=21H;
1149   6               HSO_TIME=TIMER1+TURNON;
1150   6               R0=0;
1151   6               R0=0;
1152   6               HSO_COMMAND=02H;
1153   6               HSO_TIME=TIMER1+TURNOFF;
1154   6               R0=0;
1155   6               R0=0;
1156   6               HSO_COMMAND=03H;
1157   6               HSO_TIME=TIMER1+04H;
1158   6               R0=0;
1159   6               R0=0;

1160   6             END;
1161   5            END;
1162   4          END;
1163   3          ELSE  DO;
1164   4            TURNON=T_SPAN*4/5;
1165   4            TURNOFF=T_SPAN/5;
1166   4            DO CASE ORDER;
1167   5             T55:DO;
1168   6               HSO_COMMAND=22H;
1169   6               HSO_TIME=TIMER1+TURNON;
1170   6               R0=0;
1171   6               R0=0;
1172   6               HSO_COMMAND=03H;
1173   6               HSO_TIME=TIMER1+TURNOFF;
1174   6               R0=0;
1175   6               R0=0;
1176   6               HSO_COMMAND=00H;
1177   6               HSO_TIME=TIMER1+04H;
1178   6               R0=0;
1179   6               R0=0;
1180   6             END;
1181   5             T56:DO;
1182   6               HSO_COMMAND=23H;
1183   6               HSO_TIME=TIMER1+TURNON;
1184   6               R0=0;
1185   6               R0=0;
1186   6               HSO_COMMAND=00H;
1187   6               HSO_TIME=TIMER1+TURNOFF;
1188   6               R0=0;
1189   6               R0=0;
1190   6               HSO_COMMAND=01H;
1191   6               HSO_TIME=TIMER1+04H;
1192   6               R0=0;
1193   6               R0=0;

1194   6             END;
1195   5             T57:DO;
1196   6               HSO_COMMAND=20H;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE  22


1197   6               HSO_TIME=TIMER1+TURNON;
1198   6               R0=0;
1199   6               R0=0;
1200   6               HSO_COMMAND=01H;
1201   6               HSO_TIME=TIMER1+TURNOFF;
1202   6               R0=0;
1203   6               R0=0;
1204   6               HSO_COMMAND=02H;
1205   6               HSO_TIME=TIMER1+04H;
1206   6               R0=0;
1207   6               R0=0;

1208   6             END;
1209   5             T58:DO;
1210   6               HSO_COMMAND=21H;
1211   6               HSO_TIME=TIMER1+TURNON;
1212   6               R0=0;
1213   6               R0=0;
1214   6               HSO_COMMAND=02H;
1215   6               HSO_TIME=TIMER1+TURNOFF;
1216   6               R0=0;
1217   6               R0=0;
1218   6               HSO_COMMAND=03H;
1219   6               HSO_TIME=TIMER1+04H;
1220   6               R0=0;
1221   6               R0=0;
1222   6             END;
1223   5            END;
1224   4          END;
1225   3        END;
1226   2        ENABLE;
1227   2      END HSO_PROCESS;

1228   1      T1_INT:PROCEDURE INTERRUPT 0;
1229   2        T1OVER=T1OVER+1;
1230   2        IF T1OVER>50000 THEN T1OVER=0;
1232   2      END T1_INT;

1233   1      STOP:PROCEDURE;
1234   2      DISABLE;
1235   2        IF T1OVER>5 THEN DO;
1237   3           HSO_COMMAND=06H;
1238   3           HSO_TIME=TIMER1+02H;
1239   3           R0=0;
1240   3           R0=0;
1241   3           HSO_COMMAND=07H;
1242   3           HSO_TIME=TIMER1+02H;
1243   3           R0=0;
1244   3           R0=0;
1245   3        END;
1246   2        ELSE DO;
1247   3          IF T_SPAN>18000  THEN DO;
1249   4           HSO_COMMAND=07H;
1250   4           HSO_TIME=TIMER1+02H;
1251   4           R0=0;
1252   4           R0=0;
1253   4           HSO_COMMAND=06H;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE  23


1254   4           HSO_TIME=TIMER1+02H;
1255   4           R0=0;
1256   4           R0=0;
1257   4          END;
1258   3          ELSE DO;
1259   4           TURNON=T_SPAN*5/6;
1260   4           TURNOFF=T_SPAN/2;
1261   4           IF DIRECT=1 THEN DO;
1263   5             DO CASE ORDER;
1264   6             S00:DO;
1265   7               HSO_COMMAND=23H;
1266   7               HSO_TIME=TIMER1+TURNON;
1267   7               R0=0;
1268   7               R0=0;
1269   7               HSO_COMMAND=02H;
1270   7               HSO_TIME=TIMER1+TURNOFF;
1271   7             END;
1272   6             S01:DO;
1273   7               HSO_COMMAND=20H;          /*此处原来为00H*/
1274   7               HSO_TIME=TIMER1+TURNON;
1275   7               R0=0;
1276   7               R0=0;
1277   7               HSO_COMMAND=03H;
1278   7               HSO_TIME=TIMER1+TURNOFF;
1279   7             END;
1280   6             S02:DO;
1281   7               HSO_COMMAND=21H;
1282   7               HSO_TIME=TIMER1+TURNON;
1283   7               R0=0;
1284   7               R0=0;
1285   7               HSO_COMMAND=00H;
1286   7               HSO_TIME=TIMER1+TURNOFF;
1287   7             END;
1288   6             S03:DO;
1289   7               HSO_COMMAND=22H;
1290   7               HSO_TIME=TIMER1+TURNON;
1291   7               R0=0;
1292   7               R0=0;
1293   7               HSO_COMMAND=01H;
1294   7               HSO_TIME=TIMER1+TURNOFF;
1295   7             END;
1296   6            END;
1297   5          END;
1298   4          ELSE DO;
1299   5            DO CASE ORDER;
1300   6             S10:DO;
1301   7               HSO_COMMAND=23H;
1302   7               HSO_TIME=TIMER1+TURNON;
1303   7               R0=0;
1304   7               R0=0;
1305   7               HSO_COMMAND=00H;
1306   7               HSO_TIME=TIMER1+TURNOFF;
1307   7             END;
1308   6             S11:DO;
1309   7               HSO_COMMAND=20H;       /*此处原来为00H*/
1310   7               HSO_TIME=TIMER1+TURNON;
1311   7               R0=0;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE  24


1312   7               R0=0;
1313   7               HSO_COMMAND=01H;
1314   7               HSO_TIME=TIMER1+TURNOFF;
1315   7             END;
1316   6             S12:DO;
1317   7               HSO_COMMAND=21H;
1318   7               HSO_TIME=TIMER1+TURNON;
1319   7               R0=0;
1320   7               R0=0;
1321   7               HSO_COMMAND=02H;
1322   7               HSO_TIME=TIMER1+TURNOFF;
1323   7             END;
1324   6             S13:DO;
1325   7               HSO_COMMAND=22H;
1326   7               HSO_TIME=TIMER1+TURNON;
1327   7               R0=0;
1328   7               R0=0;
1329   7               HSO_COMMAND=03H;
1330   7               HSO_TIME=TIMER1+TURNOFF;
1331   7             END;
1332   6            END;
1333   5          END;
1334   4        END;
1335   3        END;
1336   2      ENABLE;
1337   2      END STOP;

1338   1      PWMTIME:PROCEDURE;
1339   2        IOC2=0C0H;
1340   2        HSO_COMMAND=0CEH;
1341   2        HSO_TIME=150;
1342   2        R0=0;
1343   2        R0=0;
1344   2        HSO_COMMAND=0E5H;
1345   2        HSO_TIME=150;
1346   2        R0=0;
1347   2        R0=0;
1348   2        CALL PWM_OUT;
1349   2      END PWMTIME;

1350   1      HSO_INT:PROCEDURE INTERRUPT 3;
1351   2          KK=KK+1;
1352   2          IF START_SIGN=0 THEN DO;
1354   3            IF KK>20 THEN DO;
1356   4              KK=1;
1357   4              CALL PWM;
1358   4            END;
1359   3            ELSE CALL PWM_OUT;
1360   3          END;
1361   2          ELSE DO;
1362   3            IF RUN_SPD<60 THEN DO;
1364   4              IF KK>300 THEN DO;
1366   5                KK=1;
1367   5                CALL PWM;
1368   5              END;
1369   4              ELSE CALL PWM_OUT;
1370   4            END;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE  25


1371   3            ELSE IF AIM_SPD>300 THEN DO;
1373   4              IF RUN_SPD<(AIM_SPD-300) THEN DO;
1375   5                IF KK>32 THEN DO;
1377   6                  KK=1;
1378   6                  CALL PWM;
1379   6                END;
1380   5                ELSE CALL PWM_OUT;
1381   5              END;
1382   4              ELSE DO;
1383   5                IF KK>400 THEN DO;
1385   6                  KK=1;
1386   6                  CALL PWM;
1387   6                END;
1388   5                ELSE CALL PWM_OUT;
1389   5              END;
1390   4            END;
1391   3            ELSE DO;
1392   4              IF KK>600 THEN DO;
1394   5                  KK=1;
1395   5                  CALL PWM;
1396   5              END;
1397   4              ELSE CALL PWM_OUT;
1398   4            END;
1399   3          END;
1400   2      END HSO_INT;

1401   1      PWM:PROCEDURE;
1402   2      DECLARE(GE,GEC) BYTE;
1403   2      DECLARE EE1 INTEGER;
1404   2      DISABLE;
1405   2      IF START_SIGN=0 THEN DO;
1407   3         PWM_WIDTH=PWM_WIDTH-1;
1408   3         IF T_SPAN>10000 THEN PWM_WIDTH=2;
1410   3         ELSE IF T1OVER>15 THEN PWM_WIDTH=2;
1412   3         IF PWM_WIDTH<2 THEN PWM_WIDTH=2;
1414   3      END;
1415   2      ELSE DO;/*E0 前次误差 E1 本次误差 EC 本次误差的变化率*/
1416   3          E1=SIGNED(AIM_SPD-RUN_SPD);
1417   3          EE1=E1;
1418   3          IF IABS(EE1)>42 THEN DO;
1420   4            IF AIM_SPD>RUN_SPD THEN EE1=42;
1422   4            ELSE EE1=-42;
1423   4          END;
1424   3          GE=UNSIGN(EE1/6+7);
1425   3          EC=E1-E0;
1426   3          IF IABS(EC)>7 THEN DO;
1428   4            IF E1>E0 THEN EC=7;
1430   4            ELSE EC=-7;
1431   4          END;
1432   3          GEC=UNSIGN(EC+7);
1433   3          PWM_WIDTH=PWM_WIDTH+FUZZY(GE*15+GEC);
1434   3          PWM_WIDTH=PWM_WIDTH-7;
1435   3          IF PWM_WIDTH>145 THEN PWM_WIDTH=145;
1437   3          IF PWM_WIDTH<2 THEN PWM_WIDTH=2;
1439   3          E0=E1;
1440   3      END;
1441   2      CALL PWM_OUT;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE  26


1442   2      ENABLE;
1443   2      END PWM;

1444   1      PWM_OUT:PROCEDURE;
1445   2      DISABLE;
1446   2          HSO_COMMAND=55H;
1447   2          HSO_TIME=PWM_WIDTH;
1448   2          R0=0;
1449   2          R0=0;
1450   2      ENABLE;
1451   2      END PWM_OUT;

              /***主过程***/
1452   1      MAINPROC:DO;
1453   2      CALL TIME(500);
1454   2      DISABLE;
1455   2        IOC0=05H;
1456   2        IOC1=66H;
1457   2        IOC2=80H;
1458   2        SP=0C0H;
1459   2        INT_MASK=2DH;
1460   2        INT_MASK1=23H;
1461   2        INT_PENDING=00H;
1462   2        INT_PEND1=00H;
1463   2        HSI_MODE=0FH;
1464   2        IOPORT1=0FFH;
1465   2        IOPORT2=0;

1466   2        COMM_8279=2FH;
1467   2        R0=0;
1468   2        R0=0;
1469   2        COMM_8279=01H;
1470   2        R0=0;
1471   2        R0=0;
1472   2        COMM_8279=0D3H;

1473   2        START_SIGN=0;
1474   2        AIM_SPD=0;
1475   2        DIRECT=0;
1476   2        FAULT=1FH;
1477   2        PWM_WIDTH=0;
1478   2        E0=0;
1479   2        E1=0;
1480   2        EC=0;
1481   2        DISP_STATUS=0;
1482   2        SPD_STEP=100;
1483   2        RUN_SPD=0;
1484   2        CONV_SPD=0;
1485   2        KK=0;
1486   2        DO II=0 TO 7;
1487   3          TM1=HSI_TIME;
1488   3          R0=0;
1489   3          R0=0;
1490   3        END;
1491   2      ENABLE;

1492   2      MAINLOOP:
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE  27


              DO;
1493   3           CALL BITCPL(.IOPORT2,6);
1494   3        IF START_SIGN=0 THEN DO;
1496   4          IF T_SPAN>100000 THEN DO;
1498   5             PWM_WIDTH=2;
1499   5             RUN_SPD=0;
1500   5          END;
1501   4          ELSE IF T1OVER>5 THEN DO;
1503   5             PWM_WIDTH=2;
1504   5             RUN_SPD=0;
1505   5          END;
1506   4        END;
1507   3        IF BID=1 THEN DO;
1509   4         IF RUN_SPD=0 THEN DO;
1511   5           IF DIRECT=1 THEN DIRECT=0;
1513   5           ELSE DIRECT=1;
1514   5           BID=0;
1515   5           AIM_SPD=DEFAULT_SPD;
1516   5           CALL START;
1517   5         END;
1518   4        END;
1519   3        CALL DISPLAY;
1520   3      END;
1521   2      GOTO MAINLOOP;
1522   2      END MAINPROC;
1523   1      END MAIN;
              EOF;
PL/M-96 COMPILER    MAIN                                                                     06/12/:5 17:37:49  PAGE  28
                    SEMANTIC ERRORS


*** WARNING 135, NEAR 'EXTINT1': THE INTERRUPT_CALLABLE PROCEDURE CANNOT BE CALLED FROM INTERRUPT
MODULE INFORMATION:
     CODE AREA SIZE             = 1331H   4913D
     CONSTANT AREA SIZE         = 00EDH    237D
     DATA AREA SIZE             = 0000H      0D
     STATIC REGS AREA SIZE      = 0048H     72D
     OVERLAYABLE REGS AREA SIZE = 0000H      0D
     MAXIMUM STACK SIZE         = 0054H     84D
     1502 LINES READ
PL/M-96 COMPILATION COMPLETE.      1 WARNING,     0 ERRORS

⌨️ 快捷键说明

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