📄 main.lst
字号:
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 + -