📄 dataflsh.lst
字号:
DATAFLSH PAGE 1
1 ;********************************************************************
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : February 2001
6 ;
7 ; File : dataflsh.asm
8 ;
9 ; Hardware : ADuC814
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.
16 ; The ADuC814 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 $MOD814 ; Use 8052&ADuC814 predefined symbols
25
00B3 26 LED EQU P3.3 ; P3.3 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 C2B3 42 CLR LED ; turn LED off
0002 75C600 43 MOV EADRL,#0 ; set data FlashEE address to page 0
44
45 ; READ FLASH/EE DATA and indicate values via LED on and off times...
46
0005 47 READFLASH:
0005 75B901 48 MOV ECON,#READ ; read current 4byte page of FlashEE
49 ; into EDATA1,2,3,4
0008 E5BF 50 MOV A,EDATA4
000A B4010A 51 CJNE A,#1,RECORD ; if EDATA4 is 1, then page contains
52 ; a valid play sequence
53 ; => Play this sequence
54 ; otherwise jump to record mode
55
56
57 ;--------------------------------------------------------------------
000D 58 PLAYBACK:
DATAFLSH PAGE 2
000D 120043 59 CALL BLINK ; flash LED for period determined
60 ; by FlashEE data just read
0010 05C6 61 INC EADRL ; increment to next FlashEE page addr
0012 E5C6 62 MOV A,EADRL
0014 B4A0EE 63 CJNE A,#0A0h,READFLASH
64 ; if address is less than 160 then jump
65 ; to read the next page
66 ; when PLAYBACK is finished jump to RECORD mode
67
68 ;--------------------------------------------------------------------
0017 69 RECORD:
0017 C2B3 70 CLR LED
0019 20B2FD 71 JB BUTTON,$ ; wait for first button press
72
73 ; once button is pressed, erase dataflash
001C 75B906 74 MOV ECON,#ERASEALL ; clear all data FlashEE memory
001F 75C600 75 MOV EADRL,#0
76
77 ; record time of button press
78
0022 79 RECORD_NEXT_TIME:
0022 120059 80 CALL RECORDTIME
81
0025 8582BC 82 MOV EDATA1,DPL ; place DPTR in EDATA1,2,3
0028 8583BD 83 MOV EDATA2,DPH
002B 75BF01 84 MOV EDATA4,#1 ; put 1 in EDATA4 as identifier
002E 75B902 85 MOV ECON,#WRITE ; write EDATA1-4 into pre-erased
86 ; page of FlashEE data memory
87
0031 75B904 88 MOV ECON,#VERIFY ; verify current page is same as
0034 E5B9 89 MOV A,ECON ; EDATA1-4. If same, ECON=0.
0036 70DF 90 JNZ RECORD ; if verify fails, jump to RECORD
91
0038 05C6 92 INC EADRL ; increment to next FlashEE page addr
003A E5C6 93 MOV A,EADRL
003C B4A0E3 94 CJNE A,#0A0h,RECORD_NEXT_TIME
95 ; record first 160 button presses only
96
97 ; when flash/EE data space is full turn off LED and wait
98 ; for a power cycle
003F C2B3 99 CLR LED
0041 80FE 100 JMP $
101
102
103 ;====================================================================
104 ; FUNCTIONS
105 ;====================================================================
106
107
108 ;____________________________________________________________________
109 ; SUBROUTINES
0043 110 BLINK:
111 ; Turn LED ON/OFF based on the time in EDATA2/1
0043 B2B3 112 CPL LED
113
0045 E4 114 CLR A
0046 F582 115 MOV DPL,A
0048 F583 116 MOV DPH,A ; clear DPTR
DATAFLSH PAGE 3
117
004A 05BC 118 INC EDATA1 ; EDATA1 -> EDATA3 should be
004C 05BD 119 INC EDATA2 ; incremented for the below to work
120
004E 121 BLINKLOOP:
122 ; the record loop takes 6 instruction cycles hence 4 NOPs are
123 ; required to make the Playback loop 6 instruction cycles also.
124 ; NOTE: the main Playback loop will jump to BLINKLOOP after
125 ; decrementing EDATA1 and hence the time required to decrement
126 ; EDATA2 (approx 1/256 time of main loop) ignored.
004E 00 127 NOP ; 1
004F 00 128 NOP ; 1
0050 00 129 NOP ; 1
0051 00 130 NOP ; 1
0052 D5BCF9 131 DJNZ EDATA1, BLINKLOOP ; 2
0055 D5BDF6 132 DJNZ EDATA2, BLINKLOOP ; EDATA1 overflows back to FFh
133
0058 22 134 RET
135
136 ;____________________________________________________________________
137
0059 138 RECORDTIME:
139 ; Record how long button is pressed for and store in EDATA3/2/1
0059 E4 140 CLR A
005A F582 141 MOV DPL,A
005C F583 142 MOV DPH,A ; clear DPTR
143
005E B2B3 144 CPL LED
145
146 ; measure how long the button is either pressed or released
147 ; for. If the button is pressed then the LED is on. If the
148 ; button is released then the LED is off.
0060 149 RECORDLOOP:
0060 A3 150 INC DPTR ; incrementing DPTR.. ; 2
0061 30B304 151 JNB LED, CHKB ; 2
0064 30B2F9 152 JNB BUTTON,RECORDLOOP ; 2
153 ; keep recording while button is pressed
0067 22 154 RET
0068 20B2F5 155 CHKB: JB BUTTON,RECORDLOOP ; 2
156 ; keep recording while button is released
006B 22 157 RET
158
159 ; DPH,DPL now holds a number that represents the length of
160 ; time between button edges. this data will be stored in FlashEE
161 ; space for use in controlling LED on and off times in "play" mode.
162
163 ;____________________________________________________________________
164
165
166 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
DATAFLSH PAGE 4
BLINK. . . . . . . . . . . . . . C ADDR 0043H
BLINKLOOP. . . . . . . . . . . . C ADDR 004EH
BUTTON . . . . . . . . . . . . . NUMB 00B2H
CHKB . . . . . . . . . . . . . . C ADDR 0068H
DPH. . . . . . . . . . . . . . . D ADDR 0083H PREDEFINED
DPL. . . . . . . . . . . . . . . D ADDR 0082H PREDEFINED
EADRL. . . . . . . . . . . . . . D ADDR 00C6H PREDEFINED
ECON . . . . . . . . . . . . . . D ADDR 00B9H PREDEFINED
EDATA1 . . . . . . . . . . . . . D ADDR 00BCH PREDEFINED
EDATA2 . . . . . . . . . . . . . D ADDR 00BDH PREDEFINED
EDATA4 . . . . . . . . . . . . . D ADDR 00BFH PREDEFINED
ERASE. . . . . . . . . . . . . . NUMB 0005H NOT USED
ERASEALL . . . . . . . . . . . . NUMB 0006H
F0 . . . . . . . . . . . . . . . B ADDR 00D5H PREDEFINED
LED. . . . . . . . . . . . . . . NUMB 00B3H
MAIN . . . . . . . . . . . . . . C ADDR 0000H NOT USED
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
PLAYBACK . . . . . . . . . . . . C ADDR 000DH NOT USED
PREVIOUS . . . . . . . . . . . . NUMB 00D5H NOT USED
READ . . . . . . . . . . . . . . NUMB 0001H
READFLASH. . . . . . . . . . . . C ADDR 0005H
RECORD . . . . . . . . . . . . . C ADDR 0017H
RECORDLOOP . . . . . . . . . . . C ADDR 0060H
RECORDTIME . . . . . . . . . . . C ADDR 0059H
RECORD_NEXT_TIME . . . . . . . . C ADDR 0022H
VERIFY . . . . . . . . . . . . . NUMB 0004H
WRITE. . . . . . . . . . . . . . NUMB 0002H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -