📄 boot831.lst
字号:
BOOT831 PAGE 1
1 ;********************************************************************
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : April 2002
6 ;
7 ; File : Boot831.asm
8 ;
9 ; Hardware : ADuC831
10 ;
11 ; Description : Example bootloader program that lies in upper
12 ; 6kbytes of the 62kByte code space. This bootloader
13 ; can be used to download to the bottom 56kBytes.
14 ;
15 ; NOTE: This program will only work if the option to
16 ; always run code from E000H after download is
17 ; selected.
18 ;
19 ;********************************************************************
20 $MOD831
0006 21 ACK EQU 06H
0015 22 NACK EQU 15H
23
24 ;**********************************************************************
25 ; EXAMPLE USER CODE
26 ;**********************************************************************
---- 27 CSEG
0000 28 ORG 0000H
29
0000 012E 30 AJMP MAIN
31
32 ;____________________________________________________________________
33 ; INT0 ISR
0003 34 ORG 0003H
35 ; wait to receive a character from the UART
0003 3098FD 36 JNB RI, $ ; wait for reception
0006 C298 37 CLR RI
0008 E599 38 MOV A, SBUF
000A B45520 39 CJNE A, #'U', ERROR
40
41 ; plan to upgrade new code => set BOOTEN
000D 75C700 42 MOV EADRH, #0
0010 75C600 43 MOV EADRL, #0
0013 75B901 44 MOV ECON, #1 ; read page
0016 43BC01 45 ORL EDATA1, #1 ; SET LSB
0019 75B905 46 MOV ECON, #5 ; ERASE page
001C 75B902 47 MOV ECON, #2 ; program page
001F 75B904 48 MOV ECON, #4 ; verify page
0022 E5B9 49 MOV A, ECON
0024 7007 50 JNZ ERROR
51 ; use the watchdog timer to reset part...run from E000H after reset
0026 C2AF 52 CLR EA ; disable interrupts for double
53 ; write sequence
0028 D2C0 54 SETB WDWR
002A 75C082 55 MOV WDCON, #82h
56
002D 57 ERROR:
002D 32 58 RETI
BOOT831 PAGE 2
59
60
61 ;____________________________________________________________________
62 ; MAIN
002E 63 MAIN:
64 ; enable INT0
002E D288 65 SETB IT0 ; INT0 edge triggered
0030 D2AF 66 SETB EA ; enable inturrupts
0032 D2A8 67 SETB EX0 ; enable INT0
68
69 ; configure UART for 115200
0034 759E81 70 MOV T3CON, #81h
0037 759D20 71 MOV T3FD, #20h
003A 759852 72 MOV SCON, #52H
73
74 ; THIS SIMPLE BLINK ROUTINE REPRESENTS THE MAIN PROGRAM
003D 75 BLINK:
003D B2B4 76 CPL P3.4
003F 120044 77 CALL DELAY
0042 013D 78 AJMP BLINK
79
80
81 ;____________________________________________________________________
82 ; DELAY
0044 83 DELAY:
84 ; 70ms DELAY
0044 78FF 85 MOV R0,#255
0046 86 DLY:
0046 79FF 87 MOV R1,#255 ; 255 x 255 x 1.08us
0048 D9FE 88 DJNZ R1,$
004A D8FA 89 DJNZ R0,DLY
90
004C 22 91 RET
92 ;____________________________________________________________________
93
94
95 ;**********************************************************************
96 ; EXAMPLE BOOTLOAGER CODE
97 ;**********************************************************************
---- 98 CSEG
E000 99 ORG 0E000h
100 ; read BOOTEN
E000 75C700 101 MOV EADRH, #0
E003 75C600 102 MOV EADRl, #0
E006 75B901 103 MOV ECON, #1 ; read page
E009 E5BC 104 MOV A, EDATA1
E00B 20E00C 105 JB ACC.0, BOOTLOADER
106
107 ; reset EDATA1-4 before running user code
E00E E4 108 CLR A
E00F F5BC 109 MOV EDATA1, A
E011 F5BD 110 MOV EDATA2, A
E013 F5BE 111 MOV EDATA3, A
E015 F5BF 112 MOV EDATA4, A
E017 020000 113 LJMP 0000H
114
E01A 115 BOOTLOADER:
116 ; clear the deliberate WDT reset
BOOT831 PAGE 3
E01A D2C0 117 SETB WDWR
E01C 75C010 118 MOV WDCON, #10H
119
120 ; configure UART for 115200 baud
121
E01F 759E81 122 MOV T3CON, #81H
E022 759D20 123 MOV T3FD, #20h
E025 759852 124 MOV SCON,#52h
125
126 ; configure in ULOAD mode
E028 75B9F0 127 MOV ECON, #0F0h
128
E02B 129 GETCOMMAND:
E02B 12E0F5 130 CALL RECBYTE
E02E B44502 131 CJNE A, #'E', $+5
E031 013F 132 AJMP ERASECOMMAND
E033 B44402 133 CJNE A, #'D', $+5
E036 014D 134 AJMP DOWNLOADCOMMAND
E038 B44F02 135 CJNE A, #'O', $+5
E03B 019E 136 AJMP DOWNLOADOKCOMMAND
E03D 2109 137 AJMP SENDNACK
138
139 ;====================================================================
140 ; ERASE CODE
141 ;====================================================================
E03F 142 ERASECOMMAND:
143 ; wait for erase command
144 ; <'E'><CS>
E03F 12E0F5 145 CALL RECBYTE
E042 2445 146 ADD A,#'E'
E044 6002 147 JZ ERASEOK
E046 2109 148 AJMP SENDNACK
149
E048 150 ERASEOK:
151 ; erase 56kbytes of code space
E048 75B906 152 MOV ECON, #6
153
154 ; send ACK
E04B 2105 155 AJMP SENDACK
156
157 ;====================================================================
158 ; DOWNLOAD CODE
159 ;====================================================================
E04D 160 DOWNLOADCOMMAND:
161 ; wait for download command
162 ; <'D'><PAGEADD><DATA0->255><CS>
163
E04D 7844 164 MOV R0, #'D'
165 ; get page address
E04F 12E0F5 166 CALL RECBYTE
E052 F5C7 167 MOV EADRH, A
E054 75C60D 168 mov eadrl, #13
E057 28 169 ADD A, R0
E058 F8 170 MOV R0, A
171
172 ; check for page address >E0h
E059 E5C7 173 MOV A, EADRH
E05B B4E000 174 CJNE A, #0E0H, $+3
BOOT831 PAGE 4
E05E 4002 175 JC ADDRESSOK ; C=0 for EADRH < E0h
E060 2109 176 AJMP SENDNACK
177
E062 178 ADDRESSOK:
E062 900000 179 MOV DPTR, #0
E065 7900 180 MOV R1, #0 ; count
E067 43AF01 181 ORL CFG831, #1 ; int XRAM
E06A 182 READDATA:
E06A 11F5 183 ACALL RECBYTE
E06C F0 184 MOVX @DPTR, A
E06D A3 185 INC DPTR
E06E 28 186 ADD A, R0
E06F F8 187 MOV R0, A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -