📄 basic-52.lst
字号:
904: N 00D0 T_PC EQU T_ULAST+18 ;PCON
905: 031F D0 DB T_PC
906: 0320 50 43 4F 4E DB 'PCON'
907: ;
908: N 00D1 T_ASC EQU T_ULAST+19 ;ASC TOKEN
909: 0324 D1 DB T_ASC
910: 0325 41 53 43 28 DB 'ASC('
911: ;
912: N 00D2 T_USE EQU T_ULAST+20 ;USING TOKEN
913: 0329 D2 DB T_USE
914: 032A 55 53 49 4E DB 'USING('
032E 47 28
915: 0330 D2 DB T_USE
916: 0331 55 2E 28 DB 'U.('
917: ;
918: N 00D3 T_CHR EQU T_ULAST+21 ;CHR TOKEN
919: 0334 D3 DB T_CHR
920: 0335 43 48 52 28 DB 'CHR('
921: ;
922: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 24
Line I Addr Code Source
923: N 00F0 T_CMND EQU 0F0H ;COMMAND BASE
924: ;
925: 0339 F0 DB 0F0H ;RUN TOKEN
926: 033A 52 55 4E DB 'RUN'
927: ;
928: 033D F1 DB 0F1H ;LIST TOKEN
929: 033E 4C 49 53 54 DB 'LIST'
930: ;
931: 0342 F2 DB 0F2H ;NULL TOKEN
932: 0343 4E 55 4C 4C DB 'NULL'
933: ;
934: 0347 F3 DB 0F3H ;NEW TOKEN
935: 0348 4E 45 57 DB 'NEW'
936: ;
937: 034B F4 DB 0F4H ;CONTINUE TOKEN
938: 034C 43 4F 4E 54 DB 'CONT'
939: ;
940: 0350 F5 DB 0F5H ;PROGRAM TOKEN
941: 0351 50 52 4F 47 DB 'PROG'
942: ;
943: 0355 F6 DB 0F6H ;TRANSFER TOKEN
944: 0356 58 46 45 52 DB 'XFER'
945: ;
946: 035A F7 DB 0F7H ;RAM MODE
947: 035B 52 41 4D DB 'RAM'
948: ;
949: 035E F8 DB 0F8H ;ROM MODE
950: 035F 52 4F 4D DB 'ROM'
951: ;
952: 0362 F9 DB 0F9H ;INTELLIGENT PROM PROGRAMMING
953: 0363 46 50 52 4F DB 'FPROG'
0367 47
954: ;
955: 0368 FF DB 0FFH ;END OF TABLE
956: ;
957:
958: ; END OF INCLUDE LOOK52
959: ;$INCLUDE(:F2:LOOK52.SRC)
960: ;
961: 0369 45 58 54 52 EIG: DB 'EXTRA IGNORED"'
036D 41 20 49 47
0371 4E 4F 52 45
0375 44 22
962: ;
963: 0377 41 2D 53 54 EXA: DB 'A-STACK"'
037B 41 43 4B 22
964: ;
965: 037F 43 2D 53 54 EXC: DB 'C-STACK"'
0383 41 43 4B 22
966: ;
967: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 25
Line I Addr Code Source
968: ;$INCLUDE(:F2:BAS52.RST)
969: ; BEGINNING
970:
971: ;**************************************************************
972: ;
973: 0387 CRST: ; This performs system initialzation, it was moved here so the
974: ; new power on reset functions could be tested in an 8751.
975: ;
976: ;**************************************************************
977: ;
978: ; First, initialize SFR's
979: ;
980: 0387 75 98 5A MOV SCON,#5AH ;INITIALIZE SFR'S
981: 038A 75 89 10 MOV TMOD,#10H
982: 038D 75 88 54 MOV TCON,#54H
983: 0390 75 DB 75H ;MOV DIRECT, # OP CODE
984: 0391 C8 DB 0C8H ;T2CON LOCATION
985: 0392 34 DB 34H ;CONFIGURATION BYTE
986: ;
987: 0393 90 20 01 MOV DPTR,#2001H ;READ CODE AT 2001H
988: 0396 E4 CLR A
989: 0397 93 MOVC A,@A+DPTR
990: 0398 B4 AA 03 CJNE A,#0AAH,$+6 ;IF IT IS AN AAH, DO USER RESET
991: 039B 12 20 90 LCALL 2090H
992: ;
993: 039E 78 FF MOV R0,#IRAMTOP ;PUT THE TOP OF RAM IN R0
994: 03A0 E4 CLR A ;ZERO THE ACC
995: ;
996: 03A1 F6 MOV @R0,A ;CLEAR INTERNAL MEMORY
997: 03A2 D8 FD DJNZ R0,$-1 ;LOOP TIL DONE
998: ;
999: ; Now, test the external memory
1000: ;
1001: 03A4 75 3E 4D MOV SPSAV,#CMNDSP ;SET UP THE STACK
1002: 03A7 85 3E 81 MOV SP,SPSAV
1003: ;
1004: 03AA 75 13 80 MOV BOFAH,#HIGH ROMADR
1005: 03AD 75 14 11 MOV BOFAL,#LOW ROMADR+17
1006: 03B0 90 80 00 MOV DPTR,#ROMADR ;GET THE BYTE AT 8000H
1007: 03B3 E0 MOVX A,@DPTR
1008: 03B4 C3 CLR C
1009: 03B5 94 31 SUBB A,#31H ;FOR BIAS
1010: 03B7 F5 45 MOV MT1,A ;SAVE IN DIRECT MATH LOC
1011: 03B9 C2 E2 CLR ACC.2 ;SAVE FOR RESET
1012: 03BB FF MOV R7,A ;SAVE IT IN R7
1013: 03BC A3 INC DPTR
1014: 03BD B1 B2 ACALL L31DPI ;GET SAVED BAUD RATE
1015: 03BF 12 08 89 LCALL RCL
1016: 03C2 A3 INC DPTR ;GET MEMTOP
1017: 03C3 B1 B2 ACALL L31DPI
1018: 03C5 90 00 5F MOV DPTR,#5FH ;READ THE EXTERNAL BYTE
1019: 03C8 E0 MOVX A,@DPTR
1020: 03C9 90 00 00 MOV DPTR,#0 ;ESTABLISH BASE FOR CLEAR
1021: 03CC B4 A5 08 CJNE A,#0A5H,CRS
1022: 03CF E5 45 MOV A,MT1
1023: 03D1 C2 E0 CLR ACC.0 ;CLEAR BIT ONE
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 26
Line I Addr Code Source
1024: 03D3 64 04 XRL A,#4H
1025: 03D5 60 29 JZ CR2
1026: ;
1027: 03D7 BF 02 02 CRS: CJNE R7,#2,$+5
1028: 03DA 80 03 SJMP $+5
1029: 03DC BF 03 04 CJNE R7,#3,$+7
1030: 03DF D1 75 ACALL CL_1
1031: 03E1 80 11 SJMP CR1
1032: ;
1033: 03E3 AB 83 CR0: MOV R3,DPH ;SAVE THE DPTR
1034: 03E5 A9 82 MOV R1,DPL
1035: 03E7 A3 INC DPTR
1036: 03E8 74 5A MOV A,#5AH
1037: 03EA F0 MOVX @DPTR,A
1038: 03EB E0 MOVX A,@DPTR
1039: 03EC B4 5A 05 CJNE A,#5AH,CR1
1040: 03EF E4 CLR A
1041: 03F0 F0 MOVX @DPTR,A
1042: 03F1 BB E0 EF CJNE R3,#0E0H,CR0
1043: ;
1044: 03F4 BB 03 00 CR1: CJNE R3,#03H,$+3 ;NEED THIS MUCH RAM
1045: 03F7 40 8E JC CRST
1046: 03F9 90 01 0A MOV DPTR,#MEMTOP ;SAVE MEMTOP
1047: 03FC B1 FB ACALL S31DP2 ;SAVE MEMTOP AND SEED RCELL
1048: 03FE D1 54 ACALL CNEW ;CLEAR THE MEMORY AND SET UP POINTERS
1049: ;
1050: 0400 D1 67 CR2: ACALL RC1 ;SET UP STACKS IF NOT DONE
1051: ;
1052: 0402 12 16 49 LCALL AXTAL0 ;DO THE CRYSTAL
1053: 0405 E5 45 MOV A,MT1 ;GET THE RESET BYTE
1054: 0407 B4 05 03 CJNE A,#5,$+6
1055: 040A 12 40 39 LCALL 4039H
1056: 040D 50 0D JNC BG1 ;CHECK FOR 0,1,2,3, OR 4
1057: 040F 30 E0 25 JNB ACC.0,BG3 ;NO RUN IF WRONG TYPE
1058: 0412 90 80 10 MOV DPTR,#ROMADR+16
1059: 0415 E0 MOVX A,@DPTR ;READ THE BYTE
1060: 0416 B4 55 1E CJNE A,#55H,BG3
1061: 0419 02 08 06 LJMP CRUN
1062: ;
1063: 041C E4 BG1: CLR A ;DO BAUD RATE
1064: 041D FB MOV R3,A
1065: 041E F9 MOV R1,A
1066: 041F 78 04 MOV R0,#4
1067: 0421 20 B0 FD JB RXD,$ ;LOOP UNTIL A CHARACTER IS RECEIVED
1068: ;
1069: 0424 D8 FE BG2: DJNZ R0,$ ;FOUR CLOCKS, IN LOOP
1070: 0426 12 15 81 CALL DEC3210+4 ;NINE CLOCKS
1071: 0429 78 02 MOV R0,#2 ;ONE CLOCK
1072: 042B 30 B0 F6 JNB RXD,BG2 ;TWO CLOCKS, LOOP UNTIL DONE
1073: 042E 20 B0 FD JB RXD,$ ;WAIT FOR STOP CHARACTER TO END
1074: 0431 30 B0 FD JNB RXD,$
1075: 0434 12 08 89 CALL RCL ;LOAD THE TIMER
1076: ;
1077: 0437 90 1F D3 BG3: MOV DPTR,#S_N ;GET THE MESSAGE
1078: 043A D1 A5 ACALL CRP ;PRINT IT
1079: 043C 02 17 7D LJMP CRAM
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 27
Line I Addr Code Source
1080:
1081: ; END
1082: ;$INCLUDE(:F2:BAS52.RST)
1083: ;
1084: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 28
Line I Addr Code Source
1085: ;***************************************************************
1086: ;
1087: ; CIPROG AND CPROG - Program a prom
1088: ;
1089: ;***************************************************************
1090: ;
1091: ;$INCLUDE(:F2:BAS52.PGM)
1092: ;BEGINNING
1093:
1094: 043F 7F 00 PG8: MOV R7,#00H ;PROGRAM ONE BYTE AT A TIME
1095: 0441 7E 01 MOV R6,#01H
1096: 0443 7A 7F MOV R2,#HIGH ROMADR-1
1097: 0445 78 FF MOV R0,#LOW ROMADR-1;LOAD PROM ADDRESS
1098: 0447 91 98 ACALL PG1+3
1099: 0449 0E INC R6
1100: 044A E5 DB 0E5H ;MOV A DIRECT OP CODE
1101: 044B CB DB 0CBH ;ADDRESS OF R2CAP HIGH
1102: 044C 91 98 ACALL PG1+3
1103: 044E E5 DB 0E5H ;MOV A, DIRECT OP CODE
1104: 044F CA DB 0CAH ;R2CAP LOW
1105: 0450 7E 03 MOV R6,#3
1106: 0452 79 09 MOV R1,#LOW MEMTOP-1
1107: 0454 7B 01 MOV R3,#HIGH MEMTOP
1108: 0456 91 98 ACALL PG1+3 ;SAVE MEMTOP
1109: 0458 80 37 SJMP PGR
1110: ;
1111: 045A 90 01 2A CIPROG: MOV DPTR,#IPROGS ;LOAD IPROG LOCATION
1112: 045D D2 33 SETB INTELB
1113: 045F 80 05 SJMP $+7 ;GO DO PROG
1114: ;
1115: 0461 90 01 28 CPROG: MOV DPTR,#PROGS ;LOAD PROG LOCATION
1116: 0464 C2 33 CLR INTELB
1117: ;
1118: 0466 B1 7A ACALL LD_T ;LOAD THE TIMER
1119: 0468 C2 95 CLR PROMV ;TURN ON THE PROM VOLTAGE
1120: 046A 12 0E EA CALL DELTST ;SEE IF A CR
1121: 046D 70 D0 JNZ PG8 ;SAVE TIMER IF SO
1122: 046F 7C FE MOV R4,#0FEH
1123: 0471 D2 1D SETB INBIT
1124: 0473 B1 53 ACALL ROMFD ;GET THE ROM ADDRESS OF THE LAST LOCATION
1125: 0475 12 18 55 CALL TEMPD ;SAVE THE ADDRESS
1126: 0478 EC MOV A,R4 ;GET COUNT
1127: 0479 F4 CPL A
1128: 047A 12 14 A3 CALL TWO_R2 ;PUT IT ON THE STACK
1129: 047D 12 19 A1 CALL FP_BASE+14 ;OUTPUT IT
1130: 0480 B1 16 ACALL CCAL ;GET THE PROGRAM
1131: 0482 D1 9D ACALL CRLF ;DO CRLF
1132: 0484 A8 0E MOV R0,TEMP4 ;GET ADDRESS
1133: 0486 AA 0F MOV R2,TEMP5
1134: 0488 74 55 MOV A,#55H ;LOAD SIGNIFIER
1135: 048A 0E INC R6 ;LOAD LEN + 1
1136: 048B BE 00 01 CJNE R6,#00,$+4
1137: 048E 0F INC R7
1138: 048F 91 9B ACALL PG2-2
1139: ;
1140: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 29
Line I Addr Code Source
1141: 0491 D2 95 PGR: SETB PROMV
1142: 0493 A1 3A AJMP C_K
1143: ;
1144: 0495 8B A0 PG1: MOV P2,R3 ;GET THE BYTE TO PROGRAM
1145: 0497 E3 MOVX A,@R1
1146: 0498 12 15 68 LCALL INC3210 ;BUMP POINTERS
1147: 049B 7D 01 MOV R5,#1 ;SET UP INTELLIGENT COUMTER
1148: ;
1149: 049D FC PG2: MOV R4,A ;SAVE THE BYTE IN R4
1150: 049E 91 D6 ACALL PG7 ;PROGRAM THE BYTE
1151: 04A0 91 F0 ACALL PG9
1152: 04A2 20 33 0C JB INTELB,PG4 ;SEE IF INTELLIGENT PROGRAMMING
1153: ;
1154: 04A5 6C PG3: XRL A,R4
1155: 04A6 70 20 JNZ PG6 ;ERROR IF NOT THE SAME
1156: 04A8 12 16 39 CALL DEC76 ;BUMP THE COUNTERS
1157: 04AB 70 E8 JNZ PG1 ;LOOP IF NOT DONE
1158: 04AD 53 D0 E7 ANL PSW,#11100111B ;INSURE RB0
1159: 04B0 22 RET
1160: ;
1161: 04B1 6C PG4: XRL A,R4 ;SEE IF PROGRAMMED
1162: 04B2 70 0F JNZ PG5 ;JUMP IF NOT
1163: 04B4 EC MOV A,R4 ;GET THE DATA BACK
1164: 04B5 91 D6 ACALL PG7 ;PROGRAM THE LOCATION
1165: 04B7 91 E0 ACALL ZRO ;AGAIN
1166: 04B9 91 E0 ACALL ZRO ;AND AGAIN
1167: 04BB 91 E0 ACALL ZRO ;AND AGAIN
1168: 04BD DD F8 DJNZ R5,$-6 ;KEEP DOING IT
1169: 04BF 91 F0 ACALL PG9 ;RESET PROG
1170: 04C1 80 E2 SJMP PG3 ;FINISH THE LOOP
1171: ;
1172: 04C3 0D PG5: INC R5 ;BUMP THE COUNTER
1173: 04C4 EC MOV A,R4 ;GET THE BYTE
1174: 04C5 BD 19 D5 CJNE R5,#25,PG2 ;SEE IF TRIED 25 TIMES
1175: ;
1176: 04C8 D2 95 PG6: SETB PROMV ;TURN OFF PROM VOLTAGE
1177: 04CA 75 D0 00 MOV PSW,#0 ;INSURE RB0
1178: 04CD 30 2F E0 JNB DIRF,PG4-1 ;EXIT IF IN RUN MODE
1179: 04D0 90 1F 9A MOV DPTR,#E16X ;PROGRAMMING ERROR
1180: ;
1181: 04D3 02 18 90 ERRLK: LJMP ERROR ;PROCESS THE ERROR
1182: ;
1183: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 30
Line I Addr Code Source
1184: 04D6 88 80 PG7: MOV P0,R0 ;SET UP THE PORTS
1185: 04D8 8A A0 MOV P2,R2 ;LATCH LOW ORDER ADDRESS
1186: 04DA B1 05 ACALL PG11 ;DELAY FOR 8748/9
1187: 04DC C2 93 CLR ALED
1188: 04DE F5 80 MOV P0,A ;PUT DATA ON THE PORT
1189: ;
1190: 04E0 00 ZRO: NOP ;SETTLEING TIME + FP ZERO
1191: 04E1 00 NOP
1192: 04E2 00 NOP
1193: 04E3 00 NOP
1194: 04E4 00 NOP
1195: 04E5 00 NOP
1196: 04E6 B1 05 ACALL PG11 ;DELAY A WHILE
1197: 04E8 C2 94 CLR PROMP ;START PROGRAMMING
1198: 04EA B1 27 ACALL TIMER_LOAD ;START THE TIMER
1199: 04EC 30 8F FD JNB TF1,$ ;WAIT FOR PART TO PROGRAM
1200: 04EF 22 RET ;EXIT
1201: ;
1202: 04F0 D2 94 PG9: SETB PROMP
1203: 04F2 B1 05 ACALL PG11 ;DELAY FOR A WHILE
1204: 04F4 30 B2 FD JNB P3.2,$ ;LOOP FOR EEPROMS
1205: 04F7 75 80 FF MOV P0,#0FFH
1206: 04FA C2 B7 CLR P3.7 ;LOWER READ
1207: 04FC B1 05 ACALL PG11
1208: 04FE E5 80 MOV A,P0 ;READ THE PORT
1209: 0500 D2 B7 SETB P3.7
1210: 0502 D2 93 SETB ALED
1211: 0504 22 RET
1212: ;
1213: 0505 75 0F 0C PG11: MOV TEMP5,#12 ;DELAY 30uS AT 12 MHZ
1214: 0508 D5 0F FD DJNZ TEMP5,$
1215: 050B 22 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -