📄 init_e2p.lst
字号:
009D C2B7 178 CLR EN
INIT_E2P PAGE 4
009F 00 179 NOP
00A0 120076 180 LCALL READY
00A3 22 181 RET
182 ;****************************LCD SUBROUTINES****************************************
183
00A4 7430 184 INIT: MOV A,#030H ;INITIALIZE LCD BY SENDING 30H THREE TIMES.
00A6 120095 185 LCALL CMD
00A9 11E7 186 ACALL DDELAY ;INITIAL DELAY 4.1MSEC
00AB 7430 187 MOV A,#030H
00AD 120095 188 LCALL CMD
00B0 11E7 189 ACALL DDELAY
00B2 7430 190 MOV A,#030H
00B4 120095 191 LCALL CMD
00B7 11E7 192 ACALL DDELAY
193
00B9 7438 194 MOV A,#038H ; INITIALIZE, 2-LINES, 5X7 MATRIX.
00BB 120095 195 LCALL CMD
00BE 11E7 196 ACALL DDELAY
197
00C0 740C 198 MOV A,#0CH ; INVISIBLE CURSOR ON;
00C2 120095 199 LCALL CMD
00C5 7401 200 MOV A,#01H ; CLEAR LCD SCREEN
00C7 120095 201 LCALL CMD
00CA 7406 202 MOV A,#06H ; SHIFT CURSOR RIGHT
00CC 120095 203 LCALL CMD
204
00CF 7482 205 MOV A,#82H ; LINE 1
00D1 120095 206 LCALL CMD
207
00D4 9001F4 208 MOV DPTR,#MSG_1
00D7 E4 209 LINE1: CLR A
00D8 93 210 MOVC A,@A+DPTR
00D9 6005 211 JZ DONE
00DB 1186 212 ACALL DAT
00DD A3 213 INC DPTR
00DE 80F7 214 SJMP LINE1
215
216
00E0 22 217 DONE: RET
218
219 ;****************************LCD SUBROUTINES****************************************
220
00E1 7401 221 CLEAR: MOV A,#01H
00E3 120095 222 LCALL CMD
00E6 22 223 RET
224
225 ;****************************LCD SUBROUTINES****************************************
226
00E7 7D29 227 DDELAY: MOV R5,#41D ; 4.1 mS DELAY
00E9 7E32 228 QT2: MOV R6,#50D
00EB DEFE 229 QT1: DJNZ R6,QT1
00ED DDFA 230 DJNZ R5,QT2
00EF 22 231 RET
232
233 ;***********************************************************************
234 ; I2C - SERIAL EEPROM ROUTINES
235 ;***********************************************************************
236 ;**********************************************************
INIT_E2P PAGE 5
237 ; THIS SUB READS ONE BYTE OF DATA FROM THE EEPROM
238 ;**********************************************************
239
00F0 240 READ_BYTE:
00F0 752108 241 MOV BITCNT,#08H; SET COUNTER FOR 8-BITS DATA
00F3 7400 242 MOV A,#00H
00F5 D2B1 243 SETB SDA ; SET SDA HIGH TO ENSURE LINE
244 ; FREE
00F7 245 READ_BITS:
246 +1 SCL_HIGH ; TRANSITION SCL LOW-TO-HIGH
00F7 D2B0 247 +1 SETB SCL ; SET SCL HIGH
00F9 30B0FD 248 +1 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
00FC A2B1 250 MOV C,SDA ; MOVE DATA BIT INTO CARRY
00FE 33 251 RLC A ; ROTATE CARRY-BIT INTO ACC.0
00FF C2B0 252 CLR SCL ; TRANSITION SCL HIGH-TO-LOW
0101 D521F3 253 DJNZ BITCNT,READ_BITS
254 ; LOOP FOR 8-BITS
0104 200002 255 JB LASTREAD,ACKN
256 ; CHECK TO SEE IF THIS IS
257 ; THE LAST READ
0107 C2B1 258 CLR SDA ; IF NOT LAST READ SEND ACK-BIT
259
0109 260 ACKN:
261 +1 SCL_HIGH ; PULSE SCL TO TRANSMIT ACKNOWLEDGE
0109 D2B0 262 +1 SETB SCL ; SET SCL HIGH
010B 30B0FD 263 +1 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
010E C2B0 265 CLR SCL ; OR NOT ACKNOWLEDGE BIT
0110 22 266 RET
267
268 ;**********************************************************
269 ; SUB SENDS START CONDITION
270 ;**********************************************************
271
0111 272 SEND_START:
0111 D207 273 SETB _2W_BUSY ; INDICATE THAT 2-WIRE
0113 C205 274 CLR ACK ; OPERATION IS IN PROGRESS
0115 C206 275 CLR BUS_FLT ; CLEAR STATUS FLAGS
0117 30B011 276 JNB SCL,FAULT
011A 30B10E 277 JNB SDA,FAULT
011D D2B1 278 SETB SDA ; BEGIN START CODITION
279 +1 SCL_HIGH
011F D2B0 280 +1 SETB SCL ; SET SCL HIGH
0121 30B0FD 281 +1 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
0124 C2B1 283 CLR SDA
0126 313A 284 ACALL DEELAY
0128 C2B0 285 CLR SCL
012A 22 286 RET
012B 287 FAULT:
012B D206 288 SETB BUS_FLT
012D 22 289 RET
290
291 ;**********************************************************
292 ; SUB SENDS STOP CONDITION
293 ;**********************************************************
012E 294 SEND_STOP:
012E C2B1 295 CLR SDA
296 +1 SCL_HIGH
0130 D2B0 297 +1 SETB SCL ; SET SCL HIGH
INIT_E2P PAGE 6
0132 30B0FD 298 +1 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
0135 D2B1 300 SETB SDA
0137 C207 301 CLR _2W_BUSY
0139 22 302 RET
303 ;**********************************************************
304 ; SUB DELAYS THE BUS
305 ;**********************************************************
013A 306 DEELAY:
013A 00 307 NOP ; DELAY FOR BUS TIMING
013B 22 308 RET
309 ; *********************************************************
310 ; THIS SUB SENDS 1 BYTE OF DATA TO THE EEPROM
311 ; *********************************************************
312
013C 313 SEND_BYTE:
013C 752108 314 MOV BITCNT,#08H; SET COUNTER FOR 8-BITS
013F 315 SB_LOOP:
013F 30E705 316 JNB ACC.7,NOTONE ; CHECK TO SEE IF BIT-7 OF
0142 D2B1 317 SETB SDA ; ACC IS A 1, AND SET SDA HIGH
0144 020149 318 JMP ONE
0147 319 NOTONE:
0147 C2B1 320 CLR SDA ; CLR SDA LOW
0149 321 ONE:
322 +1 SCL_HIGH ; TRANSITION SCL LOW-TO-HIGH
0149 D2B0 323 +1 SETB SCL ; SET SCL HIGH
014B 30B0FD 324 +1 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
014E 23 326 RL A ; ROTATE ACC LEFT 1-BIT
014F C2B0 327 CLR SCL ; TRANSITION SCL LOW-TO-HIGH
0151 D521EB 328 DJNZ BITCNT,SB_LOOP ; LOOP FOR 8-BITS
0154 D2B1 329 SETB SDA ; SET SDA HIGH TO LOOK FOR
330 +1 SCL_HIGH ; ACKNOWLEDGE PULSE
0156 D2B0 331 +1 SETB SCL ; SET SCL HIGH
0158 30B0FD 332 +1 JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
015B C205 334 CLR ACK
015D 30B102 335 JNB SDA,SB_EX ; CHECK FOR ACK OR NOT ACK
0160 D205 336 SETB ACK ; SET ACKNOWLEDGE FLAG FOR
337 ; NOT ACK
0162 338 SB_EX:
0162 313A 339 ACALL DEELAY ; DELAY FOR AN OPERATION
0164 C2B0 340 CLR SCL ; TRANSITION SCL HIGH-TO-LOW
0166 313A 341 ACALL DEELAY ; DELAY FOR AN OPERATION
0168 22 342 RET
343 ; *********************************************************************
344 ; SUB READS FROM THE EEPROM AND WRITES IT TO THE SCRATCHPAD MEMORY
345 ; *********************************************************************
0169 346 READEEPROM:
0169 7923 347 MOV R1,#POINT ; START FROM POINT STORAGE LOCATION
016B 752200 348 MOV BYTECNT,#00H
016E C200 349 CLR LASTREAD
0170 120111 350 LCALL SEND_START
0173 74A0 351 MOV A,#EEPROMW
0175 12013C 352 LCALL SEND_BYTE
0178 7400 353 MOV A,#00H ; POINT TO 00H ADDRESS OF EEPROM
017A 12013C 354 LCALL SEND_BYTE
017D 12012E 355 LCALL SEND_STOP
356
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -