📄 自编isp测试.lst
字号:
A51 MACRO ASSEMBLER 譥__ISP_馐_ 06/12/2005 15:27:28 PAGE 1
MACRO ASSEMBLER A51 V6.12
OBJECT MODULE PLACED IN 自编isp测试.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 自编isp测试.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2
3
4
5
2000 6 MEM_TOP EQU 2000H ;use for 8KB code memory devices
7
0000 8 INIT:
0000 11AB 9 ACALL I_WDT ;
0002 5391FC 10 ANL 91H,#0FCH ;RxD = quasi-bi
0005 439201 11 ORL 92H,#01H ;TxD = push-pull
0008 7590FF 12 MOV P1,#0FFH ;
13
000B 758920 14 MOV TMOD,#20H ;8-bit auto-reload mode
000E 53BAFA 15 ANL 0BAH,#0FAH
0011 E4 16 CLR A
0012 F5BD 17 MOV 0BDH,A
0014 759850 18 MOV SCON,#50H ;init UART 8-bit variable, TI=0 RI=0
0017 75BEF0 19 MOV 0BEH,#0F0H
001A 75BF02 20 MOV 0BFH,#02H
001D 75BD03 21 MOV 0BDH,#03H
22
0020 23 QRZ:
0020 11A3 24 ACALL ECHO ;wait until character is rcv'd & get it
0022 B455FB 25 CJNE A,#'U',QRZ ;check to see if uppercase "U"
0025 118F 26 W1: ACALL CO
27
0027 28 LCMD:
0027 7D00 29 MOV R5,#0 ;begin record... zero checksum
0029 11A3 30 ACALL ECHO ;get first char and echo
002B B43AF7 31 CJNE A,#':',W1 ;record starts with ':' char
002E 1174 32 ACALL GET2 ;get the number of bytes in record
0030 853533 33 MOV 33H,35H ;and save
0033 1174 34 ACALL GET2 ;get MSB of load address
0035 853531 35 MOV 31H,35H ;and save
0038 1174 36 ACALL GET2 ;get LSB of load address
003A 853530 37 MOV 30H,35H ;and save it
003D 1174 38 ACALL GET2 ;get record type
003F 853534 39 MOV 34H,35H ;and save it
0042 E533 40 MOV A,33H ;else, more than
0044 FA 41 MOV R2,A
0045 6009 42 JZ EOR ;zero data bytes ?
0047 7980 43 MOV R1,#80H ;pointer for data bytes
0049 1174 44 LDATA: ACALL GET2 ;get data byte
004B A735 45 MOV @R1,35H ;store it
004D 09 46 INC R1 ;and bump up the pointer
004E DAF9 47 DJNZ R2,LDATA ;repeat if more bytes in record
0050 48 EOR:
0050 ED 49 MOV A,R5 ;
0051 FC 50 MOV R4,A ;save calculated checksum
0052 1174 51 ACALL GET2 ;get the checksum byte
0054 EC 52 MOV A,R4 ;and compare with calculated checksum byte
0055 B53518 53 CJNE A,35H,CHKERR ;recv'd & calc'd chksums match ?
0058 7980 54 MOV R1,#80H ;pointer for data
55 ; AJMP PROCESS ;YES, process command
56
005A 743A 57 MOV A,#3AH
005C 118F 58 ACALL CO
A51 MACRO ASSEMBLER 譥__ISP_馐_ 06/12/2005 15:27:28 PAGE 2
005E E533 59 MOV A,33H
0060 118F 60 ACALL CO
0062 E531 61 MOV A,31H
0064 118F 62 ACALL CO
0066 E530 63 MOV A,30H
0068 118F 64 ACALL CO
006A E534 65 MOV A,34H
006C 118F 66 ACALL CO
006E 0127 67 AJMP LCMD
68
0070 7458 69 CHKERR: MOV A,#'X'
0072 01B8 70 AJMP RSPND1
71
0074 11A3 72 GET2: ACALL ECHO ;get first char of length
0076 1187 73 ACALL A2HEX ;convert to hex
0078 C4 74 SWAP A ;set in high nibble
0079 F535 75 MOV 35H,A ;store in NBYTES
007B 11A3 76 ACALL ECHO ;get second char of length
007D 1187 77 ACALL A2HEX ;convert to hex
007F 4235 78 ORL 35H,A ;add into NBYTES
0081 ED 79 MOV A,R5 ;get checksum
0082 C3 80 CLR C ;subtract NBYTES
0083 9535 81 SUBB A,35H ;from checksum and
0085 FD 82 MOV R5,A ;store as new checksum
0086 22 83 RET
84
85 ;***** ASCII to HEX routine *****
86 ;
87 ;This routine accepts an ASCII char in the ACC
88 ;and converts it into the corresponding hex digit.
89 ;The routine checks to see if the char is in the
90 ;range of '0' through '9' or in the range of 'A'
91 ;through 'F'. If not in either range then the ASCII
92 ;char is not a valid hex entry from the operator
93 ;and an error flag is returned true along with the
94 ;original ASCII char returned in the ACC.
95
0087 96 A2HEX:
0087 30E602 97 JNB ACC.6,HEX1
008A 2409 98 ADD A,#09H
008C 540F 99 HEX1: ANL A,#0FH
008E 22 100 RET
101
102 ;***** console output routine *****
103 ;
104 ;Outputs character in the ACC to
105 ;the serial output line.
106
008F 11B1 107 CO: ACALL FD_WDT ;feed the WDT
0091 F599 108 MOV SBUF,A ;output char to SIO
0093 3099FD 109 JNB TI,$ ;wait till xmtr ready
0096 C299 110 CLR TI ;reset xmtr flag
0098 22 111 RET ;and done
112
113 ;***** console input routine *****
114 ;
115 ;Waits until character has been received
116 ;and then returns char in ACC.
117
0099 11B1 118 CI: ACALL FD_WDT ;feed the WDT
009B 3098FB 119 JNB RI,CI ;wait till char
009E C298 120 CLR RI ;reset rcvr flag
00A0 E599 121 MOV A,SBUF ;read the char
00A2 22 122 RET ;and done
123
124 ;***** character echo routine *****
A51 MACRO ASSEMBLER 譥__ISP_馐_ 06/12/2005 15:27:28 PAGE 3
125 ;
126 ;waits until a character is received from
127 ;the console input and echos this character
128 ;to the console output. The received char
129 ;is also passed to the caller in the ACC.
130
00A3 1199 131 ECHO: ACALL CI ;get char from console
132 ; ACALL CO ;print the character
00A5 30E602 133 JNB ACC.6,EXECHO ;exit if not 4x,5x, or 6x Hex
00A8 C2E5 134 CLR ACC.5 ;convert to upper case
00AA 22 135 EXECHO: RET ;and done
136
00AB 137 I_WDT:
00AB 75C1FF 138 MOV 0C1H,#0FFH ;set to max count
00AE 43A7E0 139 ORL 0A7H,#0E0H ;set pre= max
00B1 140 FD_WDT:
00B1 75C2A5 141 MOV 0C2H,#0A5H ;
00B4 75C35A 142 MOV 0C3H,#5AH ;
00B7 22 143 RET
144
00B8 145 RSPND1:
00B8 118F 146 ACALL CO ;send an okay message
00BA 01BC 147 AJMP DEXIT ;and done
148
00BC 149 DEXIT:
00BC 11C5 150 ACALL CRLF ;print a CRLF
00BE 3099FD 151 JNB TI,$
00C1 D29C 152 SETB REN ;TURN ON UART RECEIVER
00C3 0127 153 AJMP LCMD ;branch to main loop
154
00C5 740D 155 CRLF: MOV A,#0DH
00C7 118F 156 ACALL CO
00C9 740A 157 MOV A,#0AH
00CB 118F 158 ACALL CO
00CD 22 159 RET
160
161 END
A51 MACRO ASSEMBLER 譥__ISP_馐_ 06/12/2005 15:27:28 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
A2HEX. . . . . . . C ADDR 0087H A
ACC. . . . . . . . D ADDR 00E0H A
CHKERR . . . . . . C ADDR 0070H A
CI . . . . . . . . C ADDR 0099H A
CO . . . . . . . . C ADDR 008FH A
CRLF . . . . . . . C ADDR 00C5H A
DEXIT. . . . . . . C ADDR 00BCH A
ECHO . . . . . . . C ADDR 00A3H A
EOR. . . . . . . . C ADDR 0050H A
EXECHO . . . . . . C ADDR 00AAH A
FD_WDT . . . . . . C ADDR 00B1H A
GET2 . . . . . . . C ADDR 0074H A
HEX1 . . . . . . . C ADDR 008CH A
INIT . . . . . . . C ADDR 0000H A
I_WDT. . . . . . . C ADDR 00ABH A
LCMD . . . . . . . C ADDR 0027H A
LDATA. . . . . . . C ADDR 0049H A
MEM_TOP. . . . . . N NUMB 2000H A
P1 . . . . . . . . D ADDR 0090H A
QRZ. . . . . . . . C ADDR 0020H A
REN. . . . . . . . B ADDR 0098H.4 A
RI . . . . . . . . B ADDR 0098H.0 A
RSPND1 . . . . . . C ADDR 00B8H A
SBUF . . . . . . . D ADDR 0099H A
SCON . . . . . . . D ADDR 0098H A
TI . . . . . . . . B ADDR 0098H.1 A
TMOD . . . . . . . D ADDR 0089H A
W1 . . . . . . . . C ADDR 0025H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -