📄 flashee.lst
字号:
FLASHEE PAGE 1
1 ;********************************************************************
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : 28 May 1999
6 ;
7 ; File : FlashEE.asm
8 ;
9 ; Hardware : ADuC812
10 ;
11 ; Description : Demonstrates use of the on-chip read/write 640 byte
12 ; FlashEE data memory space. Stores a sequence of
13 ; button presses (INT0 button on eval board) in data
14 ; FlashEE space. Replays sequence on LED when board
15 ; is reset or power cycled. Will store the sequence
16 ; until another is recorded with a new set of button
17 ; presses. To record a new sequence, just wait until
18 ; the current one finishes playing (LED is off) and
19 ; enter new sequence via button (INT0).
20 ;
21 ; NOTE: : DO NOT write to FlashEE addresses above page 159!
22 ; ----- The 640 bytes are stored in pages 0 thru 159 (9Fh)
23 ; as four bytes per page. Writing to pages above
24 ; those documented can permanently lock you out of
25 ; the chip. See ADuC812 data sheet and errata sheet
26 ; for details (www.analog.com/microconverter).
27 ;
28 ;********************************************************************
29
30 $MOD812 ; Use 8052&ADuC812 predefined symbols
31
00B4 32 LED EQU P3.4 ; P3.4 drives red LED on eval board
00B2 33 BUTTON EQU P3.2 ; button on eval board drives P3.2
00D5 34 PREVIOUS EQU F0 ; flag to hold previous button value
0001 35 READ EQU 01h ; FlashEE command: 'read page'
0002 36 WRITE EQU 02h ; FlashEE command: 'write page'
0004 37 VERIFY EQU 04h ; FlashEE command: 'verify page'
0005 38 ERASE EQU 05h ; FlashEE command: 'erase page'
0006 39 ERASEALL EQU 06h ; FlashEE command: 'erase all'
40
41 ;____________________________________________________________________
42 ; BEGINNING OF CODE
---- 43 CSEG
44
0000 45 ORG 0000h
46
0000 D2B4 47 SETB LED ; turn LED off
0002 740F 48 MOV A,#15
0004 12009C 49 CALL DELAY ; pause 1.5 seconds
50
0007 75C600 51 MOV EADRL,#0 ; set data FlashEE address to page 0
52
53 ; READ FLASH/EE DATA and indicate values via LED on and off times...
54
000A 75B901 55 READPG: MOV ECON,#READ ; read current 4byte page of FlashEE
56 ; into EDATA1,2,3,4
000D 7401 57 MOV A,#1
000F B5BF0C 58 CJNE A,EDATA4,EMPTY ; if EDATA4 is 1, then page contains
FLASHEE PAGE 2
59 ; valid data from previous write
60 ; otherwise, jump to EMPTY
61
0012 12005A 62 CALL BLINK ; flash LED for period determined
63 ; by FlashEE data just read
64
0015 05C6 65 INC EADRL ; increment to next FlashEE page addr
0017 E5C6 66 MOV A,EADRL
0019 B4A000 67 CJNE A,#0A0h,CMPRR ; if address is less than 160..
001C 40EC 68 CMPRR: JC READPG ; ..then jump to read the next page
69 ; (DO NOT write to pages above 159!)
70
71 ; WHEN "PLAY" SEQUENCE IS FINIISHED, wait for button press...
72
001E D2B4 73 EMPTY: SETB LED
0020 20B2FD 74 JB BUTTON,$ ; wait for first button press
0023 7401 75 MOV A,#1
0025 12009C 76 CALL DELAY ; pause 100ms
0028 20B2F3 77 JB BUTTON,EMPTY ; ensure button wasn't false trigger
78
79 ; IF BUTTON PRESSED, then ERASE and go into "RECORD" mode...
80
002B 75B906 81 MOV ECON,#ERASEALL ; clear all data FlashEE memory
002E 75C600 82 MOV EADRL,#0
83
84 ; CAPTURE AND RECORD in FLASH/EE space time between button edges...
85
0031 12007E 86 GETNEW: CALL GETVAL
87
0034 8582BC 88 MOV EDATA1,DPL ; place DPTR in EDATA1,2,3
0037 8583BD 89 MOV EDATA2,DPH
003A 8584BE 90 MOV EDATA3,DPP
003D 75BF01 91 MOV EDATA4,#1 ; put 1 in EDATA4 as identifier
0040 75B905 92 MOV ECON,#ERASE
0043 75B902 93 MOV ECON,#WRITE ; write EDATA1-4 into current page of
94 ; FlashEE data memory
95
0046 75B904 96 MOV ECON,#VERIFY ; verify current page is same as..
0049 E5B9 97 MOV A,ECON ; ..EDATA1-4. if same, ECON <- 0
004B 70D1 98 JNZ EMPTY ; if verify fails, jump to EMPTY
99
004D 05C6 100 INC EADRL ; increment to next FlashEE page addr
004F E5C6 101 MOV A,EADRL
0051 B4A000 102 CJNE A,#0A0h,CMPRG ; if EADRL<A0h..
0054 40DB 103 CMPRG: JC GETNEW ; ..then jump to get the next value
104 ; (DO NOT write to pages above 159!)
105
106 ; WHEN FLASH/EE DATA SPACE IS FULL...
107
0056 D2B4 108 SETB LED ; code will end up here only after 160 button
109 ; edges. no more can be recorded, so code
0058 80FE 110 JMP $ ; just waits for a reset or power cycle.
111
112 ;____________________________________________________________________
113 ; SUBROUTINES
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -