dataflsh.lst
来自「大量ADuc831的程序员代码」· LST 代码 · 共 228 行
LST
228 行
DATAFLSH PAGE 1
1 ;********************************************************************
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : May 2002
6 ;
7 ; File : dataflsh.asm
8 ;
9 ; Hardware : ADuC831
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 ADuC831 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 $MOD831 ; Use 8052&ADuC831 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 D2B4 42 SETB 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 D2B4 75 SETB 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 120077 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 D2B4 110 SETB 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 6 instruction cycles hence 4 NOPs are
136 ; required to make the Playback loop 6 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 D5BCF9 144 DJNZ EDATA1, BLINKLOOP ; 2
0070 D5BDF6 145 DJNZ EDATA2, BLINKLOOP ; EDATA1 overflows back to FFh
0073 D5BEF3 146 DJNZ EDATA3, BLINKLOOP ; EDATA2 overflows back to FFh
147
0076 22 148 RET
149
150 ;____________________________________________________________________
151
0077 152 RECORDTIME:
153 ; Record how long button is pressed for and store in EDATA3/2/1
0077 E4 154 CLR A
0078 F582 155 MOV DPL,A
007A F583 156 MOV DPH,A ; clear DPTR
007C F584 157 MOV DPP,A
158
007E B2B4 159 CPL LED
160
161 ; measure how long the button is either pressed or released
162 ; for. If the button is pressed then the LED is on. If the
163 ; button is released then the LED is off.
0080 164 RECORDLOOP:
0080 A3 165 INC DPTR ; incrementing DPTR.. ; 2
0081 30B403 166 JNB LED, CT ; 2
0084 02008B 167 JMP CHKB
0087 30B2F6 168 CT: JNB BUTTON,RECORDLOOP ; 2
169 ; keep recording while button is pressed
008A 22 170 RET
008B 20B2F2 171 CHKB: JB BUTTON,RECORDLOOP ; 2
172 ; keep recording while button is released
008E 22 173 RET
174
DATAFLSH PAGE 4
175 ; DPP,DPH,DPL now holds a number that represents the length of
176 ; time between button edges. this data will be stored in FlashEE
177 ; space for use in controlling LED on and off times in "play" mode.
178
179 ;____________________________________________________________________
180
181
182 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
CT . . . . . . . . . . . . . . . C ADDR 0087H
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 0080H
RECORDTIME . . . . . . . . . . . C ADDR 0077H
RECORD_NEXT_TIME . . . . . . . . C ADDR 002FH
VERIFY . . . . . . . . . . . . . NUMB 0004H
WRITE. . . . . . . . . . . . . . NUMB 0002H
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?