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

📄 basic-52.lst

📁 一个用PROTEUS搭建的51单片机的基本运行系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 1216:					;
 1217:
 1218:				;END
 1219:				;$INCLUDE(:F2:BAS52.PGM)
 1220:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 31



 Line  I  Addr  Code            Source

 1221:					;**************************************************************
 1222:					;
 1223:	  050C			PGU:	;PROGRAM A PROM FOR THE USER
 1224:					;
 1225:					;**************************************************************
 1226:					;
 1227:	  050C	C2 95			CLR	PROMV		;TURN ON THE VOLTAGE
 1228:	  050E	75 D0 18		MOV	PSW,#00011000B	;SELECT RB3
 1229:	  0511	91 95			ACALL	PG1		;DO IT
 1230:	  0513	D2 95			SETB	PROMV		;TURN IT OFF
 1231:	  0515	22			RET
 1232:					;
 1233:					;
 1234:					;*************************************************************
 1235:					;
 1236:	  0516			CCAL:	; Set up for prom moves
 1237:					; R3:R1 gets source
 1238:					; R7:R6 gets # of bytes
 1239:					;
 1240:					;*************************************************************
 1241:					;
 1242:	  0516	B1 82			ACALL	GETEND		;GET THE LAST LOCATION
 1243:	  0518	A3			INC	DPTR		;BUMP TO LOAD EOF
 1244:	  0519	AB 13			MOV	R3,BOFAH
 1245:	  051B	A9 14			MOV	R1,BOFAL	;RESTORE START
 1246:	  051D	C3			CLR	C		;PREPARE FOR SUBB
 1247:	  051E	E5 82			MOV	A,DPL		;SUB DPTR - BOFA > R7:R6
 1248:	  0520	99			SUBB	A,R1
 1249:	  0521	FE			MOV	R6,A
 1250:	  0522	E5 83			MOV	A,DPH
 1251:	  0524	9B			SUBB	A,R3
 1252:	  0525	FF			MOV	R7,A
 1253:	  0526	22			RET
 1254:					;
 1255:					;
 1256:				;$INCLUDE(:F2:BAS52.TL)
 1257:				;BEGINNING
 1258:
 1259:					;**************************************************************
 1260:					;
 1261:	  0527			TIMER_LOAD:; Load the timer
 1262:					;
 1263:					;*************************************************************
 1264:					;
 1265:	  0527	B1 26			ACALL	$-1		;DELAY FOUR CLOCKS
 1266:	  0529	C2 8E			CLR	TR1		;STOP IT WHILE IT'S LOADED
 1267:	  052B	85 40 8D		MOV	TH1,T_HH
 1268:	  052E	85 41 8B		MOV	TL1,T_LL
 1269:	  0531	C2 8F			CLR	TF1		;CLEAR THE OVERFLOW FLAG
 1270:	  0533	D2 8E			SETB	TR1		;START IT NOW
 1271:	  0535	22			RET
 1272:					;
 1273:
 1274:				;END
 1275:				;$INCLUDE(:F2:BAS52.TL)
 1276:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 32



 Line  I  Addr  Code            Source

 1277:					;***************************************************************
 1278:					;
 1279:	  0536			CROM:	; The command action routine - ROM - Run out of rom
 1280:					;
 1281:					;***************************************************************
 1282:					;
 1283:	  0536	C2 17			CLR	CONB		;CAN'T CONTINUE IF MODE CHANGE
 1284:	  0538	B1 3D			ACALL	RO1		;DO IT
 1285:					;
 1286:	  053A	02 10 7E	C_K:	LJMP	CL3		;EXIT
 1287:					;
 1288:	  053D	12 0F 3E	RO1:	CALL	INTGER		;SEE IF INTGER PRESENT
 1289:	  0540	AC 00			MOV	R4,R0B0		;SAVE THE NUMBER
 1290:	  0542	50 02			JNC	$+4
 1291:	  0544	7C 01			MOV	R4,#01H		;ONE IF NO INTEGER PRESENT
 1292:	  0546	B1 53			ACALL	ROMFD		;FIND THE PROGRAM
 1293:	  0548	BC 00 11		CJNE	R4,#0,RFX	;EXIT IF R4 <> 0
 1294:	  054B	A3			INC	DPTR		;BUMP PAST TAG
 1295:	  054C	85 83 13		MOV	BOFAH,DPH	;SAVE THE ADDRESS
 1296:	  054F	85 82 14		MOV	BOFAL,DPL
 1297:	  0552	22			RET
 1298:					;
 1299:	  0553	90 80 10	ROMFD:	MOV	DPTR,#ROMADR+16	;START OF USER PROGRAM
 1300:					;
 1301:	  0556	E0		RF1:	MOVX	A,@DPTR		;GET THE BYTE
 1302:	  0557	B4 55 09		CJNE	A,#55H,RF3	;SEE IF PROPER TAG
 1303:	  055A	DC 01			DJNZ	R4,RF2		;BUMP COUNTER
 1304:					;
 1305:	  055C	22		RFX:	RET			;DPTR HAS THE START ADDRESS
 1306:					;
 1307:	  055D	A3		RF2:	INC	DPTR		;BUMP PAST TAG
 1308:	  055E	B1 A4			ACALL	G5
 1309:	  0560	A3			INC	DPTR		;BUMP TO NEXT PROGRAM
 1310:	  0561	80 F3			SJMP	RF1		;DO IT AGAIN
 1311:					;
 1312:	  0563	10 1D F6	RF3:	JBC	INBIT,RFX	;EXIT IF SET
 1313:					;
 1314:	  0566	90 1F C9	NOGO:	MOV	DPTR,#NOROM
 1315:	  0569	81 D3			AJMP	ERRLK
 1316:					;
 1317:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 33



 Line  I  Addr  Code            Source

 1318:					;***************************************************************
 1319:					;
 1320:	  056B			L20DPI:	; load R2:R0 with the location the DPTR is pointing to
 1321:					;
 1322:					;***************************************************************
 1323:					;
 1324:	  056B	E0			MOVX	A,@DPTR
 1325:	  056C	FA			MOV	R2,A
 1326:	  056D	A3			INC	DPTR
 1327:	  056E	E0			MOVX	A,@DPTR
 1328:	  056F	F8			MOV	R0,A
 1329:	  0570	22			RET			;DON'T BUMP DPTR
 1330:					;
 1331:					;***************************************************************
 1332:					;
 1333:	  0571			X31DP:	; swap R3:R1 with DPTR
 1334:					;
 1335:					;***************************************************************
 1336:					;
 1337:	  0571	CB			XCH	A,R3
 1338:	  0572	C5 83			XCH	A,DPH
 1339:	  0574	CB			XCH	A,R3
 1340:	  0575	C9			XCH	A,R1
 1341:	  0576	C5 82			XCH	A,DPL
 1342:	  0578	C9			XCH	A,R1
 1343:	  0579	22			RET
 1344:					;
 1345:					;***************************************************************
 1346:					;
 1347:	  057A			LD_T:	; Load the timer save location with the value the DPTR is
 1348:					; pointing to.
 1349:					;
 1350:					;****************************************************************
 1351:					;
 1352:	  057A	E0			MOVX	A,@DPTR
 1353:	  057B	F5 40			MOV	T_HH,A
 1354:	  057D	A3			INC	DPTR
 1355:	  057E	E0			MOVX	A,@DPTR
 1356:	  057F	F5 41			MOV	T_LL,A
 1357:	  0581	22			RET
 1358:					;
 1359:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 34



 Line  I  Addr  Code            Source

 1360:					;
 1361:					;***************************************************************
 1362:					;
 1363:					;GETLIN - FIND THE LOCATION OF THE LINE NUMBER IN R3:R1
 1364:					;         IF ACC = 0 THE LINE WAS NOT FOUND I.E. R3:R1
 1365:					;         WAS TOO BIG, ELSE ACC <> 0 AND THE DPTR POINTS
 1366:					;         AT THE LINE THAT IS GREATER THAN OR EQUAL TO THE
 1367:					;         VALUE IN R3:R1.
 1368:					;
 1369:					;***************************************************************
 1370:					;
 1371:	  0582	D2 29		GETEND:	SETB	ENDBIT		;GET THE END OF THE PROGRAM
 1372:					;
 1373:	  0584	12 0E A4	GETLIN:	CALL	DP_B		;GET BEGINNING ADDRESS
 1374:					;
 1375:	  0587	12 0A AC	G1:	CALL	B_C
 1376:	  058A	60 12			JZ	G3		;EXIT WITH A ZERO IN A IF AT END
 1377:	  058C	A3			INC	DPTR		;POINT AT THE LINE NUMBER
 1378:	  058D	20 29 0A		JB	ENDBIT,G2	;SEE IF WE WANT TO FIND THE END
 1379:	  0590	B1 C4			ACALL	DCMPX		;SEE IF (DPTR) = R3:R1
 1380:	  0592	B1 BA			ACALL	DECDP		;POINT AT LINE COUNT
 1381:	  0594	E0			MOVX	A,@DPTR		;PUT LINE LENGTH INTO ACC
 1382:	  0595	20 2A 06		JB	UBIT,G3		;EXIT IF EQUAL
 1383:	  0598	40 04			JC	G3		;SEE IF LESS THAN OR ZERO
 1384:					;
 1385:	  059A	B1 D6		G2:	ACALL	ADDPTR		;ADD IT TO DPTR
 1386:	  059C	80 E9			SJMP	G1		;LOOP
 1387:					;
 1388:	  059E	C2 29		G3:	CLR	ENDBIT		;RESET ENDBIT
 1389:	  05A0	22			RET			;EXIT
 1390:					;
 1391:	  05A1	90 02 00	G4:	MOV	DPTR,#PSTART	;DO RAM
 1392:					;
 1393:	  05A4	D2 29		G5:	SETB	ENDBIT
 1394:	  05A6	80 DF			SJMP	G1		;NOW DO TEST
 1395:					;
 1396:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 35



 Line  I  Addr  Code            Source

 1397:					;***************************************************************
 1398:					;
 1399:					; LDPTRI - Load the DATA POINTER with the value it is pointing
 1400:					;          to - DPH = (DPTR) , DPL = (DPTR+1)
 1401:					;
 1402:					; acc gets wasted
 1403:					;
 1404:					;***************************************************************
 1405:					;
 1406:	  05A8	E0		LDPTRI:	MOVX	A,@DPTR		;GET THE HIGH BYTE
 1407:	  05A9	C0 E0			PUSH	ACC		;SAVE IT
 1408:	  05AB	A3			INC	DPTR		;BUMP THE POINTER
 1409:	  05AC	E0			MOVX	A,@DPTR		;GET THE LOW BYTE
 1410:	  05AD	F5 82			MOV	DPL,A		;PUT IT IN DPL
 1411:	  05AF	D0 83			POP	DPH		;GET THE HIGH BYTE
 1412:	  05B1	22			RET			;GO BACK
 1413:					;
 1414:					;***************************************************************
 1415:					;
 1416:					;L31DPI - LOAD R3 WITH (DPTR) AND R1 WITH (DPTR+1)
 1417:					;
 1418:					;ACC GETS CLOBBERED
 1419:					;
 1420:					;***************************************************************
 1421:					;
 1422:	  05B2	E0		L31DPI:	MOVX	A,@DPTR		;GET THE HIGH BYTE
 1423:	  05B3	FB			MOV	R3,A		;PUT IT IN THE REG
 1424:	  05B4	A3			INC	DPTR		;BUMP THE POINTER
 1425:	  05B5	E0			MOVX	A,@DPTR		;GET THE NEXT BYTE
 1426:	  05B6	F9			MOV	R1,A		;SAVE IT
 1427:	  05B7	22			RET
 1428:					;
 1429:					;***************************************************************
 1430:					;
 1431:					;DECDP - DECREMENT THE DATA POINTER - USED TO SAVE SPACE
 1432:					;
 1433:					;***************************************************************
 1434:					;
 1435:	  05B8	B1 BA		DECDP2:	ACALL	DECDP
 1436:					;
 1437:	  05BA	C5 82		DECDP:	XCH	A,DPL		;GET DPL
 1438:	  05BC	70 02			JNZ	$+4		;BUMP IF ZERO
 1439:	  05BE	15 83			DEC	DPH
 1440:	  05C0	14			DEC	A		;DECREMENT IT
 1441:	  05C1	C5 82			XCH	A,DPL		;GET A BACK
 1442:	  05C3	22			RET			;EXIT
 1443:					;
 1444:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 36



 Line  I  Addr  Code            Source

 1445:					;***************************************************************
 1446:					;
 1447:					;DCMPX - DOUBLE COMPARE - COMPARE (DPTR) TO R3:R1
 1448:					;R3:R1 - (DPTR) = SET CARRY FLAG
 1449:					;
 1450:					;IF R3:R1 > (DPTR) THEN C = 0
 1451:					;IF R3:R1 < (DPTR) THEN C = 1
 1452:					;IF R3:R1 = (DPTR) THEN C = 0
 1453:					;
 1454:					;***************************************************************
 1455:					;
 1456:	  05C4	C2 2A		DCMPX:	CLR	UBIT		;ASSUME NOT EQUAL
 1457:	  05C6	E0			MOVX	A,@DPTR		;GET THE BYTE
 1458:	  05C7	B5 03 0A		CJNE	A,R3B0,D1	;IF A IS GREATER THAN R3 THEN NO CARRY
 1459:								;WHICH IS R3<@DPTR = NO CARRY AND
 1460:								;R3>@DPTR CARRY IS SET
 1461:	  05CA	A3			INC	DPTR		;BUMP THE DATA POINTER
 1462:	  05CB	E0			MOVX	A,@DPTR		;GET THE BYTE
 1463:	  05CC	B1 BA			ACALL	DECDP		;PUT DPTR BACK
 1464:	  05CE	B5 01 03		CJNE	A,R1B0,D1	;DO THE COMPARE
 1465:	  05D1	B3			CPL	C		;FLIP CARRY
 1466:					;
 1467:	  05D2	B2 2A			CPL	UBIT		;SET IT
 1468:	  05D4	B3		D1:	CPL	C		;GET THE CARRY RIGHT
 1469:	  05D5	22			RET			;EXIT
 1470:					;
 1471:					;***************************************************************
 1472:					;
 1473:					; ADDPTR - Add acc to the dptr
 1474:					;
 1475:					; acc gets wasted
 1476:					;
 1477:					;***************************************************************
 1478:					;
 1479:	  05D6	25 82		ADDPTR:	ADD	A,DPL		;ADD THE ACC TO DPL
 1480:	  05D8	F5 82			MOV	DPL,A		;PUT IT IN DPL
 1481:	  05DA	50 02			JNC	$+4		;JUMP IF NO CARRY
 1482:	  05DC	05 83			INC	DPH		;BUMP DPH
 1483:	  05DE	22			RET			;EXIT
 1484:					;
 1485:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 37



 Line  I  Addr  Code            Source

 1486:					;*************************************************************
 1487:					;
 1488:	  05DF			LCLR:	; Set up the storage allocation
 1489:					;
 1490:					;*************************************************************
 1491:					;
 1492:	  05DF	D1 92			ACALL	ICLR		;CLEAR THE INTERRUPTS
 1493:	  05E1	B1 A1			ACALL	G4		;PUT END ADDRESS INTO DPTR
 1494:	  05E3	74 06			MOV	A,#6		;ADJUST MATRIX SPACE
 1495:	  05E5	B1 D6			ACALL	ADDPTR		;ADD FOR PROPER BOUNDS
 1496:	  05E7	B1 71			ACALL	X31DP		;PUT MATRIX BOUNDS IN R3:R1
 1497:	  05E9	90 01 08		MOV	DPTR,#MT_ALL	;SAVE R3:R1 IN MATRIX FREE SPACE
 1498:	  05EC	B1 FD			ACALL	S31DP		;DPTR POINTS TO MEMTOP
 1499:	  05EE	B1 B2			ACALL	L31DPI		;LOAD MEMTOP INTO R3:R1
 1500:	  05F0	90 01 22		MOV	DPTR,#STR_AL	;GET MEMORY ALLOCATED FOR STRINGS
 1501:	  05F3	B1 A8			ACALL	LDPTRI
 1502:	  05F5	12 0A 0A		CALL	DUBSUB		;R3:R1 = MEMTOP - STRING ALLOCATION
 1503:	  05F8	90 01 04		MOV	DPTR,#VARTOP	;SAVE R3:R1 IN VARTOP
 1504:					;
 1505:					; FALL THRU TO S31DP2
 1506:					;
 1507:					;***************************************************************
 1508:					;
 1509:					;S31DP - STORE R3 INTO (DPTR) AND R1 INTO (DPTR+1)
 1510:					;
 1511:					;ACC GETS CLOBBERED
 1512:					;
 1513:					;***************************************************************
 1514:					;
 1515:	  05FB	B1 FD		S31DP2:	ACALL	S31DP		;DO IT TWICE
 1516:					;
 1517:	  05FD	EB		S31DP:	MOV	A,R3		;GET R3 INTO ACC
 1518:	  05FE	F0			MOVX	@DPTR,A		;STORE IT
 1519:	  05FF	A3			INC	DPTR		;BUMP DPTR
 1520:	  0600	E9			MOV	A,R1		;GET R1
 1521:	  0601	F0			MOVX	@DPTR,A		;STORE IT
 1522:	  0602	A3			INC	DPTR		;BUMP IT AGAIN TO SAVE PROGRAM SPACE
 1523:	  0603	22			RET			;GO BACK
 1524:					;
 1525:					;
 1526:					;***************************************************************
 1527:					;
 1528:	  0604			STRING:	; Allocate memory for strings
 1529:					;
 1530

⌨️ 快捷键说明

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