📄 dataflsh.lst
字号:
DATAFLSH PAGE 1
1 ;********************************************************************
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : October 2003
6 ;
7 ; File : dataflsh.asm
8 ;
9 ; Hardware : ADuC842/ADuC843
10 ;
11 ; Description : Demonstrates use of the on-chip read/write 4096 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.
16 ; The ADuC842 stores the play sequece in data flash
17 ; until another is recorded with a new set of button
18 ; presses. To record a new sequence, just wait until
19 ; the current one finishes playing (LED is off) and
20 ; enter new sequence via button (INT0).
21 ;
22 ;********************************************************************
23
24 $MOD842 ; Use 8052&ADuC842 predefined symbols
25
00B4 26 LED EQU P3.4 ; P3.4 drives red LED on eval board
00B2 27 BUTTON EQU P3.2 ; button on eval board drives P3.2
00D5 28 PREVIOUS EQU F0 ; flag to hold previous button value
0001 29 READ EQU 01h ; FlashEE command: 'read page'
0002 30 WRITE EQU 02h ; FlashEE command: 'write page'
0004 31 VERIFY EQU 04h ; FlashEE command: 'verify page'
0005 32 ERASE EQU 05h ; FlashEE command: 'erase page'
0006 33 ERASEALL EQU 06h ; FlashEE command: 'erase all'
34 ;--------------------------------------------------------------------
35 ;____________________________________________________________________
36 ; BEGINNING OF CODE
---- 37 CSEG
38
0000 39 ORG 0000h
40
0000 41 MAIN:
0000 C2B4 42 CLR LED ; turn LED off
0002 75C700 43 MOV EADRH,#0 ; set data FlashEE address to page 0
0005 75C600 44 MOV EADRL,#0
45
46 ; READ FLASH/EE DATA and indicate values via LED on and off times...
47
0008 48 READFLASH:
0008 75B901 49 MOV ECON,#READ ; read current 4byte page of FlashEE
50 ; into EDATA1,2,3,4
000B E5BF 51 MOV A,EDATA4
000D B40111 52 CJNE A,#1,RECORD ; if EDATA4 is 1, then page contains
53 ; a valid play sequence
54 ; => Play this sequence
55 ; otherwise jump to record mode
56
57
58 ;--------------------------------------------------------------------
DATAFLSH PAGE 2
0010 59 PLAYBACK:
0010 12005A 60 CALL BLINK ; flash LED for period determined
61 ; by FlashEE data just read
0013 E5C6 62 MOV A,EADRL
0015 B4FF02 63 CJNE A,#0FFh,INCPAGE1 ; if low address is FFh then increment high address
0018 05C7 64 INC EADRH
001A 65 INCPAGE1:
001A 05C6 66 INC EADRL ; increment to next FlashEE page addr
001C E5C7 67 MOV A,EADRH
001E B404E7 68 CJNE A,#04h,READFLASH
69 ; if address is less than 160 then jump
70 ; to read the next page
71 ; when PLAYBACK is finished jump to RECORD mode
72
73 ;--------------------------------------------------------------------
0021 74 RECORD:
0021 C2B4 75 CLR LED
0023 20B2FD 76 JB BUTTON,$ ; wait for first button press
77
78 ; once button is pressed, erase dataflash
0026 75B906 79 MOV ECON,#ERASEALL ; clear all data FlashEE memory
0029 75C700 80 MOV EADRH,#0
002C 75C600 81 MOV EADRL,#0
82
83 ; record time of button press
84
002F 85 RECORD_NEXT_TIME:
002F 12007A 86 CALL RECORDTIME
87
0032 8582BC 88 MOV EDATA1,DPL ; place DPTR in EDATA1,2,3
0035 8583BD 89 MOV EDATA2,DPH
0038 8584BE 90 MOV EDATA3,DPP
003B 75BF01 91 MOV EDATA4,#1 ; put 1 in EDATA4 as identifier
003E 75B902 92 MOV ECON,#WRITE ; write EDATA1-4 into pre-erased
93 ; page of FlashEE data memory
94
0041 75B904 95 MOV ECON,#VERIFY ; verify current page is same as
0044 E5B9 96 MOV A,ECON ; EDATA1-4. If same, ECON=0.
0046 70D9 97 JNZ RECORD ; if verify fails, jump to RECORD
98
0048 E5C6 99 MOV A,EADRL
004A B4FF02 100 CJNE A,#0FFh,INCPAGE2 ; if low address is FFh then increment high address
004D 05C7 101 INC EADRH
004F 102 INCPAGE2:
004F 05C6 103 INC EADRL ; increment to next FlashEE page addr
0051 E5C7 104 MOV A,EADRH
0053 B404D9 105 CJNE A,#04h,RECORD_NEXT_TIME
106 ; record first 160 button presses only
107
108 ; when flash/EE data space is full turn off LED and wait
109 ; for a power cycle
0056 C2B4 110 CLR LED
0058 80FE 111 JMP $
112
113
114 ;====================================================================
115 ; FUNCTIONS
116 ;====================================================================
DATAFLSH PAGE 3
117
118
119 ;____________________________________________________________________
120 ; SUBROUTINES
005A 121 BLINK:
122 ; Turn LED ON/OFF based on the time in EDATA3/2/1
005A B2B4 123 CPL LED
124
005C E4 125 CLR A
005D F582 126 MOV DPL,A
005F F583 127 MOV DPH,A ; clear DPTR
0061 F584 128 MOV DPP,A
129
0063 05BC 130 INC EDATA1 ; EDATA1 -> EDATA3 should be
0065 05BD 131 INC EDATA2 ; incremented for the below to work
0067 05BE 132 INC EDATA3
133
0069 134 BLINKLOOP:
135 ; the record loop takes 11 instruction cycles hence 7 NOPs are
136 ; required to make the Playback loop 11 instruction cycles also.
137 ; NOTE: the main Playback loop will jump to BLINKLOOP after
138 ; decrementing EDATA1 and hence the time required to decrement
139 ; EDATA2 (approx 1/256 time of main loop) and EDATA3 are ignored.
0069 00 140 NOP ; 1
006A 00 141 NOP ; 1
006B 00 142 NOP ; 1
006C 00 143 NOP ; 1
006D 00 144 NOP ; 1
006E 00 145 NOP ; 1
006F 00 146 NOP ; 1
0070 D5BCF6 147 DJNZ EDATA1, BLINKLOOP ; 4
0073 D5BDF3 148 DJNZ EDATA2, BLINKLOOP ; EDATA1 overflows back to FFh
0076 D5BEF0 149 DJNZ EDATA3, BLINKLOOP ; EDATA2 overflows back to FFh
150
0079 22 151 RET
152
153 ;____________________________________________________________________
154
007A 155 RECORDTIME:
156 ; Record how long button is pressed for and store in EDATA3/2/1
007A E4 157 CLR A
007B F582 158 MOV DPL,A
007D F583 159 MOV DPH,A ; clear DPTR
007F F584 160 MOV DPP,A
161
0081 B2B4 162 CPL LED
163
164 ; measure how long the button is either pressed or released
165 ; for. If the button is pressed then the LED is on. If the
166 ; button is released then the LED is off.
0083 167 RECORDLOOP:
0083 A3 168 INC DPTR ; incrementing DPTR.. ; 3
0084 30B404 169 JNB LED, CHKB ; 4
0087 30B2F9 170 JNB BUTTON,RECORDLOOP ; 4
171 ; keep recording while button is pressed
008A 22 172 RET
008B 20B2F5 173 CHKB: JB BUTTON,RECORDLOOP ; 4
174 ; keep recording while button is released
DATAFLSH PAGE 4
008E 22 175 RET
176
177 ; DPP,DPH,DPL now holds a number that represents the length of
178 ; time between button edges. this data will be stored in FlashEE
179 ; space for use in controlling LED on and off times in "play" mode.
180
181 ;____________________________________________________________________
182
183
184 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
DATAFLSH PAGE 5
BLINK. . . . . . . . . . . . . . C ADDR 005AH
BLINKLOOP. . . . . . . . . . . . C ADDR 0069H
BUTTON . . . . . . . . . . . . . NUMB 00B2H
CHKB . . . . . . . . . . . . . . C ADDR 008BH
DPH. . . . . . . . . . . . . . . D ADDR 0083H PREDEFINED
DPL. . . . . . . . . . . . . . . D ADDR 0082H PREDEFINED
DPP. . . . . . . . . . . . . . . D ADDR 0084H PREDEFINED
EADRH. . . . . . . . . . . . . . D ADDR 00C7H PREDEFINED
EADRL. . . . . . . . . . . . . . D ADDR 00C6H PREDEFINED
ECON . . . . . . . . . . . . . . D ADDR 00B9H PREDEFINED
EDATA1 . . . . . . . . . . . . . D ADDR 00BCH PREDEFINED
EDATA2 . . . . . . . . . . . . . D ADDR 00BDH PREDEFINED
EDATA3 . . . . . . . . . . . . . D ADDR 00BEH PREDEFINED
EDATA4 . . . . . . . . . . . . . D ADDR 00BFH PREDEFINED
ERASE. . . . . . . . . . . . . . NUMB 0005H NOT USED
ERASEALL . . . . . . . . . . . . NUMB 0006H
F0 . . . . . . . . . . . . . . . B ADDR 00D5H PREDEFINED
INCPAGE1 . . . . . . . . . . . . C ADDR 001AH
INCPAGE2 . . . . . . . . . . . . C ADDR 004FH
LED. . . . . . . . . . . . . . . NUMB 00B4H
MAIN . . . . . . . . . . . . . . C ADDR 0000H NOT USED
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
PLAYBACK . . . . . . . . . . . . C ADDR 0010H NOT USED
PREVIOUS . . . . . . . . . . . . NUMB 00D5H NOT USED
READ . . . . . . . . . . . . . . NUMB 0001H
READFLASH. . . . . . . . . . . . C ADDR 0008H
RECORD . . . . . . . . . . . . . C ADDR 0021H
RECORDLOOP . . . . . . . . . . . C ADDR 0083H
RECORDTIME . . . . . . . . . . . C ADDR 007AH
RECORD_NEXT_TIME . . . . . . . . C ADDR 002FH
VERIFY . . . . . . . . . . . . . NUMB 0004H
WRITE. . . . . . . . . . . . . . NUMB 0002H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -