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

📄 basic-52.lst

📁 一个用PROTEUS搭建的51单片机的基本运行系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
  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 + -