📄 basic-52.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: BASIC-52.ASM
Object File: BASIC-52.HEX
List File: BASIC-52.LST
Line I Addr Code Source
1: ; December 18, 1986
2: ; MS-DOS compatible Source code for MCS BASIC-52 (tm)
3: ; Assembles with ASM51 Macro Assembler Version 2.2
4: ;
5: ; The following source code does not include the floating point math
6: ; routines. These are seperately compiled using FP52.SRC.
7: ;
8: ; Both the BASIC.SRC and FP52.SRC programs assemble into ABSOLUTE
9: ; object files, and do not need to be relocated or linked. The FP52
10: ; object code and the BASIC object code, when compiled without modification
11: ; of the source listings, create the same object code that is found on
12: ; the MCS BASIC-52 Version 1.1 microcontrollers.
13: ;
14: ; The original source code had 7 "include" files that have been incorporated
15: ; into this file for ease of assembly.
16: ; These 7 files are: LOOK52.SRC, BAS52.RST, BAS52.PGM, BAS52.TL, BAS52.OUT,
17: ; BAS52.PWM, and BAS52.CLK.
18: ;
19: ;
20: ; Intel Corporation, Embedded Controller Operations
21:
22: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
23: ;**************************************************************
24: ;
25: ; TRAP VECTORS TO MONITOR
26: ;
27: ; RESET TAG (0AAH) ---------2001H
28: ;
29: ; TAG LOCATION (5AH) ------ 2002H
30: ;
31: ; EXTERNAL INTERRUPT 0 ---- 2040H
32: ;
33: ; COMMAND MODE ENTRY ------ 2048H
34: ;
35: ; SERIAL PORT ------------- 2050H
36: ;
37: ; MONITOR (BUBBLE) OUTPUT - 2058H
38: ;
39: ; MONITOR (BUBBLE) INPUT -- 2060H
40: ;
41: ; MONITOR (BUBBLE) CSTS --- 2068H
42: ;
43: ; GET USER JUMP VECTOR ---- 2070H
44: ;
45: ; GET USER LOOKUP VECTOR -- 2078H
46: ;
47: ; PRINT AT VECTOR --------- 2080H
48: ;
49: ; INTERRUPT PWM ----------- 2088H
50: ;
51: ; EXTERNAL RESET ---------- 2090H
52: ;
53: ; USER OUTPUT-------------- 4030H
54: ;
55: ; USER INPUT -------------- 4033H
56: ;
57: ; USER CSTS --------------- 4036H
58: ;
59: ; USER RESET -------------- 4039H
60: ;
61: ; USER DEFINED PRINT @ --- 403CH
62: ;
63: ;***************************************************************
64: ;
65: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
66: ;***************************************************************
67: ;
68: ; MCS - 51 - 8K BASIC VERSION 1.1
69: ;
70: ;***************************************************************
71: ;
72: 0000 61 87 AJMP CRST ;START THE PROGRAM
73: ;
74: N 0003 ORG 3H
75: ;
76: ;***************************************************************
77: ;
78: ;EXTERNAL INTERRUPT 0
79: ;
80: ;***************************************************************
81: ;
82: 0003 20 31 2D JB DRQ,STQ ;SEE IF DMA IS SET
83: 0006 C0 D0 PUSH PSW ;SAVE THE STATUS
84: 0008 02 40 03 LJMP 4003H ;JUMP TO USER IF NOT SET
85: ;
86: N 000B ORG 0BH
87: ;
88: ;***************************************************************
89: ;
90: ;TIMER 0 OVERFLOW INTERRUPT
91: ;
92: ;***************************************************************
93: ;
94: 000B C0 D0 PUSH PSW ;SAVE THE STATUS
95: 000D 20 2E 10 JB C_BIT,STJ ;SEE IF USER WANTS INTERRUPT
96: 0010 02 40 0B LJMP 400BH ;EXIT IF USER WANTS INTERRUPTS
97: ;
98: N 0013 ORG 13H
99: ;
100: ;***************************************************************
101: ;
102: ;EXTERNAL INTERRUPT 1
103: ;
104: ;***************************************************************
105: ;
106: 0013 20 12 2B JB INTBIT,STK
107: 0016 C0 D0 PUSH PSW
108: 0018 02 40 13 LJMP 4013H
109: ;
110: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
111: ;
112: N 001B ORG 1BH
113: ;
114: ;***************************************************************
115: ;
116: ;TIMER 1 OVERFLOW INTERRUPT
117: ;
118: ;***************************************************************
119: ;
120: 001B C0 D0 PUSH PSW
121: 001D 02 1F 78 LJMP CKS_I
122: ;
123: 0020 02 19 03 STJ: LJMP I_DR ;DO THE INTERRUPT
124: ;
125: ;***************************************************************
126: ;
127: ;SERIAL PORT INTERRUPT
128: ;
129: ;***************************************************************
130: ;
131: N 0023 ORG 23H
132: ;
133: 0023 C0 D0 PUSH PSW
134: 0025 20 1F 1C JB SPINT,STU ;SEE IF MONITOR EANTS INTERRUPT
135: 0028 02 40 23 LJMP 4023H
136: ;
137: N 002B ORG 2BH
138: ;
139: ;**************************************************************
140: ;
141: ;TIMER 2 OVERFLOW INTERRUPT
142: ;
143: ;**************************************************************
144: ;
145: 002B C0 D0 PUSH PSW
146: 002D 02 40 2B LJMP 402BH
147: ;
148: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 5
Line I Addr Code Source
149: ;**************************************************************
150: ;
151: ;USER ENTRY
152: ;
153: ;**************************************************************
154: ;
155: N 0030 ORG 30H
156: ;
157: 0030 02 19 3D LJMP IBLK ;LINK TO USER BLOCK
158: ;
159: 0033 20 26 08 STQ: JB I_T0,STS ;SEE IF MONITOR WANTS IT
160: 0036 C2 96 CLR DACK
161: 0038 30 B2 FD JNB P3.2,$ ;WAIT FOR DMA TO END
162: 003B D2 96 SETB DACK
163: 003D 32 RETI
164: ;
165: 003E 02 20 40 STS: LJMP 2040H ;GO TO THE MONITOR
166: ;
167: 0041 D2 16 STK: SETB INTPEN ;TELL BASIC AN INTERRUPT WAS RECEIVED
168: 0043 32 RETI
169: ;
170: 0044 02 20 50 STU: LJMP 2050H ;SERIAL PORT INTERRUPT
171: ;
172: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 6
Line I Addr Code Source
173:
174: ;$INCLUDE(:F2:LOOK52.SRC)
175: ; INCLUDED BELOW
176:
177: ;
178: ;**************************************************************
179: ;
180: ; This is the equate table for 8052 basic.
181: ;
182: ;**************************************************************
183: ;
184: ; The register to direct equates for CJNE instructions.
185: ;
186: N 0000 R0B0 EQU 0
187: N 0001 R1B0 EQU 1
188: N 0002 R2B0 EQU 2
189: N 0003 R3B0 EQU 3
190: N 0004 R4B0 EQU 4
191: N 0005 R5B0 EQU 5
192: N 0006 R6B0 EQU 6
193: N 0007 R7B0 EQU 7
194: ;
195: ; Register bank 1 contains the text pointer
196: ; and the arg stack pointer.
197: ;
198: N 0008 TXAL EQU 8 ;R0 BANK 1 = TEXT POINTER LOW
199: N 0009 ASTKA EQU 9 ;R1 BANK 1 = ARG STACK
200: N 000A TXAH EQU 10 ;R2 BANK 1 = TEXT POINTER HIGH
201: ;
202: ; Now five temporary locations that are used by basic.
203: ;
204: N 000B TEMP1 EQU 11
205: N 000C TEMP2 EQU 12
206: N 000D TEMP3 EQU 13
207: N 000E TEMP4 EQU 14
208: N 000F TEMP5 EQU 15
209: ;
210: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 7
Line I Addr Code Source
211: ; Register bank 2 contains the read text pointer
212: ; and the control stack pointer.
213: ;
214: N 0010 RTXAL EQU 16 ;R0 BANK 2 = READ TEXT POINTER LOW
215: N 0011 CSTKA EQU 17 ;R1 BANK 2 = CONTROL STACK POINTER
216: N 0012 RTXAH EQU 18 ;R2 BANK 2 = READ TEXT POINTER HIGH
217: ;
218: ; Now some internal system equates.
219: ;
220: N 0013 BOFAH EQU 19 ;START OF THE BASIC PROGRAM, HIGH BYTE
221: N 0014 BOFAL EQU 20 ;START OF THE BASIC PROGRAM, LOW BYTE
222: N 0015 NULLCT EQU 21 ;NULL COUNT
223: N 0016 PHEAD EQU 22 ;PRINT HEAD POSITION
224: N 0017 FORMAT EQU 23
225: ;
226: ; Register bank 3 is for the user and can be loaded
227: ; by basic
228: ;
229: ;
230: ;
231: ; Now everything else is used by basic.
232: ; First the bit locations, these use bytes 34, 35, 36, 37 and 38
233: ;
234: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 8
Line I Addr Code Source
235: N 10 OTS BIT 16 ;34.0-ON TIME INSTRUCTION EXECUTED
236: N 11 INPROG BIT 17 ;34.1-INTERRUPT IN PROCESS
237: N 12 INTBIT BIT 18 ;34.2-INTERRUPT SET BIT
238: N 13 ON_ERR BIT 19 ;34.3-ON ERROR EXECUTED
239: N 14 OTI BIT 20 ;34.4-ON TIME INTERRUPT IN PROGRESS
240: N 15 LINEB BIT 21 ;34.5-LINE CHANGE OCCURED
241: N 16 INTPEN BIT 22 ;34.6-INTERRUPT PENDING BIT
242: N 17 CONB BIT 23 ;34.7-CAN CONTINUE IF SET
243: N 18 GTRD BIT 24 ;35.0-READ GET LOCATION
244: N 19 LPB BIT 25 ;35.1-PRINT TO LINE PRINTER PORT
245: N 1A CKS_B BIT 26 ;35.2-FOR PWM INTERRUPT
246: N 1B COB BIT 27 ;35.3-CONSOLE OUT BIT
247: ; 0 = SERIAL PORT
248: ; 1 = LINE PRINTER
249: N 1C COUB BIT 28 ;35.4-USER CONSOLE OUT BIT
250: ; 0 = SERIAL PORT
251: ; 1 = USER DRIVER
252: N 1D INBIT BIT 29 ;35.5-INITIALIZATION BIT
253: N 1E CIUB BIT 30 ;35.6-USER CONSOLE IN BIT
254: ; 0 = SERIAL PORT
255: ; 1 = USER ROUTINE
256: N 1F SPINT BIT 31 ;35.7-SERIAL PORT INTERRUPT
257: N 20 STOPBIT BIT 32 ;36.0-PROGRAM STOP ENCOUNTERED
258: N 21 U_IDL BIT 33 ;36.1-USER IDLE BREAK
259: N 22 INP_B BIT 34 ;36.2-SET DURING INPUT INSTRUCTION
260: ;DCMPXZ BIT 35 ;36.3-DCMPX ZERO FLAG
261: N 24 ARGF BIT 36 ;36.4-ARG STACK HAS A VALUE
262: N 25 RETBIT BIT 37 ;36.5-RET FROM INTERRUPT EXECUTED
263: N 26 I_T0 BIT 38 ;36.6-TRAP INTERRUPT ZERO TO MON
264: N 27 UPB BIT 39 ;36.7-SET WHEN @ IS VALID
265: N 28 JKBIT BIT 40 ;37.0-WB TRIGGER
266: N 29 ENDBIT BIT 41 ;37.1-GET END OF PROGRAM
267: N 2A UBIT BIT 42 ;37.2-FOR DIM STATEMENT
268: N 2B ISAV BIT 43 ;37.3-SAVE INTERRUPT STATUS
269: N 2C BO BIT 44 ;37.4-BUBBLE OUTPUT
270: N 2D XBIT BIT 45 ;37.5-EXTERNAL PROGRAM PRESENT
271: N 2E C_BIT BIT 46 ;37.6-SET WHEN CLOCK RUNNING
272: N 2F DIRF BIT 47 ;37.7-DIRECT INPUT MODE
273: N 30 NO_C BIT 48 ;38.0-NO CONTROL C
274: N 31 DRQ BIT 49 ;38.1-DMA ENABLED
275: N 32 BI BIT 50 ;38.2-BUBBLE INPUT
276: N 33 INTELB BIT 51 ;38.3-INTELLIGENT PROM PROGRAMMING
277: N 34 C0ORX1 BIT 52 ;38.4-PRINT FROM ROM OR RAM
278: N 35 CNT_S BIT 53 ;38.5-CONTROL S ENCOUNTERED
279: N 36 ZSURP BIT 54 ;38.6-ZERO SUPRESS
280: N 37 HMODE BIT 55 ;38.7-HEX MODE PRINT
281: B 97 LP BIT P1.7 ;SOFTWARE LINE PRINTER
282: B 96 DACK BIT P1.6 ;DMA ACK
283: B 95 PROMV BIT P1.5 ;TURN ON PROM VOLTAGE
284: B 94 PROMP BIT P1.4 ;PROM PULSE
285: B 93 ALED BIT P1.3 ;ALE DISABLE
286: B 92 T_BIT BIT P1.2 ;I/O TOGGLE BIT
287: ;
288: $EJECT
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 9
Line I Addr Code Source
289: ;
290: ; The next location is a bit addressable byte counter
291: ;
292: N 0027 BABC EQU 39
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -