📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 11/29/2004 16:44:51 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE main.c OPTIMIZE(4,SPEED) DEBUG OBJECTEXTEND CODE
stmt level source
1 /*********************************************************************
2
3 (c) copyright Extell Company 2001
4 ALL RIGHTS RESERVED
5
6 *********************************************************************
7 ESR-700 Demonstration Program for Voice Recognition Application
8 *********************************************************************
9
10 File: main.c
11
12 Project: ESR-700 demo program for Demo Board DownLoad
13
14 Description: DownLoad Main Program
15
16 Date: Sep. 2001
17
18 ********************************************************************/
19
20 #include <stdio.h>
21 #include "extell51.h"
22 #include "main.h"
23
24
25 #define BUFFER_LEN 64
26
27 union BLOCK_SIZE {
28 unsigned short length;
29 struct {
30 unsigned char msb;
31 unsigned char lsb;
32 } div;
33 };
34
35
36 void delay(unsigned int count)
37 {
38 1 unsigned int data i;
39 1 for(i=0;i<count;i++){}
40 1 }
41
42
43 void init()
44 {
45 1
46 1 // 12.288 MHz => 0xfb
47 1 TH1 = 0xfb; // f3(4800), fb(12800)
48 1 TL1 = 0xff;
49 1 PCON = 0x80;
50 1 TMOD = 0x22;
51 1 SM0 = 0;
52 1 SM1 = 1;
53 1 TI = 1;
54 1 RI = 1;
55 1 TR1 = 1;
C51 COMPILER V7.06 MAIN 11/29/2004 16:44:51 PAGE 2
56 1 REN = 1;
57 1
58 1 // interrupt enable
59 1 EA = 1;
60 1 // edge sensitivie
61 1 IT1 = 1;
62 1 }
63
64 void erase_flash()
65 {
66 1 unsigned short data addr;
67 1 MXRAM = 1;
68 1 for(addr=0;addr<=0xf000;addr+=0x1000)
69 1 {
70 2 while(SectorErase(addr)!=OK);
71 2 if(addr==0xf000)break;
72 2 }
73 1 MXRAM = 0;
74 1 }
75
76 void main()
77 {
78 1 unsigned char data rdata;
79 1 unsigned char data check_sum;
80 1 unsigned short data flash_addr;
81 1 union BLOCK_SIZE block;
82 1 unsigned short data block_written;
83 1 unsigned char data i;
84 1 unsigned char data buffer[BUFFER_LEN];
85 1 char mode;
86 1 unsigned char led1;
87 1 unsigned char count;
88 1
89 1 init();
90 1 P1 = 0xff;
91 1
92 1 count = 0;
93 1 while(1)
94 1 {
95 2 while(1)
96 2 {
97 3 RI = 0;
98 3 while( !RI );
99 3 if(SBUF=='H')
100 3 {
101 4 TI = 0;
102 4 SBUF = 0x00;
103 4 while( !TI );
104 4
105 4 RI = 0;
106 4
107 4 while( !RI );
108 4 if(SBUF=='Y')
109 4 {
110 5 TI = 0;
111 5 SBUF = 0x00;
112 5 while( !TI );
113 5
114 5 RI = 0;
115 5 while( !RI );
116 5 if(SBUF=='S') { break;}
117 5 }
C51 COMPILER V7.06 MAIN 11/29/2004 16:44:51 PAGE 3
118 4 }
119 3 P1 = 0xff;
120 3 }
121 2
122 2 P1 = 0xff;
123 2 TI = 0;
124 2 SBUF = 0X00;
125 2 while( !TI );
126 2
127 2 // ready to receive data
128 2
129 2 // receive bank index
130 2
131 2 RI = 0;
132 2 while( !RI );
133 2
134 2 delay(100);
135 2
136 2 // erase selected bank flash
137 2 erase_flash();
138 2
139 2 TI = 0;
140 2 SBUF = 0x00;
141 2 while( !TI );
142 2
143 2 // receive block size infomation
144 2 P1_6 = 0;
145 2
146 2 RI = 0;
147 2 while( !RI );
148 2 block.div.msb = SBUF;
149 2 TI = 0;
150 2 SBUF = 0x00;
151 2 while( !TI );
152 2
153 2 RI = 0;
154 2 while( !RI );
155 2 block.div.lsb = SBUF;
156 2 TI = 0;
157 2 SBUF = 0x00;
158 2 while( !TI );
159 2
160 2 flash_addr = 0;
161 2 mode = 0;
162 2 block_written = 0;
163 2
164 2 led1 = 0xfe;
165 2 P1 = led1;
166 2
167 2 while(1)
168 2 {
169 3 // ready to receive !!
170 3
171 3 RI = 0;
172 3 while( !RI );
173 3
174 3 check_sum = 0;
175 3
176 3 TI = 0;
177 3 SBUF = 0x00;
178 3 while( !TI );
179 3
C51 COMPILER V7.06 MAIN 11/29/2004 16:44:51 PAGE 4
180 3 for( i=0; i<BUFFER_LEN; i++)
181 3 {
182 4 RI = 0;
183 4 while( !RI );
184 4
185 4 buffer[i] = SBUF;
186 4 check_sum += SBUF;
187 4 }
188 3
189 3 // get check sum
190 3 RI = 0;
191 3 while( !RI );
192 3 rdata = SBUF;
193 3
194 3 if( rdata == check_sum )
195 3 {
196 4 mode = 0;
197 4 for( i=0; i<BUFFER_LEN; i++)
198 4 {
199 5 rdata = buffer[i];
200 5 MXRAM = 1;
201 5 FlashWrite(flash_addr,rdata);
202 5 delay(5);
203 5 MXRAM = 0;
204 5 flash_addr++;
205 5 }
206 4 block_written ++;
207 4 }
208 3 else
209 3 mode = 1;
210 3
211 3 if( block_written == block.length )
212 3 {
213 4 P1 = 0xff;
214 4 P1_0 = 0;
215 4 P1_1 = 0;
216 4
217 4 if( mode == 0 )
218 4 {
219 5 TI = 0;
220 5 SBUF = 0x00;
221 5 while( !TI );
222 5 }
223 4 else
224 4 {
225 5 TI = 0;
226 5 SBUF = 0x0f;
227 5 while( !TI );
228 5 }
229 4
230 4 break;
231 4 }
232 3
233 3 count ++;
234 3
235 3 if( count%12 == 0 )
236 3 {
237 4 P1 = led1;
238 4 led1 = led1 << 1;
239 4 led1 = led1 | 0x01;
240 4 if( led1==0xff )
241 4 led1 = 0xfe;
C51 COMPILER V7.06 MAIN 11/29/2004 16:44:51 PAGE 5
242 4 }
243 3
244 3 if( mode == 0 )
245 3 {
246 4 TI = 0;
247 4 SBUF = 0x00;
248 4 while( !TI );
249 4 }
250 3 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -