📄 flash.lst
字号:
C51 COMPILER V7.06 FLASH 01/02/2000 11:14:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FLASH
OBJECT MODULE PLACED IN Flash.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Flash.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<intrins.h>
2 #include "C8051f.h"
3
4 unsigned char bdata SPI_DUMP;
5
6 sbit SPI_D7 = SPI_DUMP^7;
7 sbit SPI_D0 = SPI_DUMP^0;
8
9 void SPI_Init (void)
10 {
11 1 SPI0CFG = 0x07; // data sampled on 1st SCK rising edge
12 1 // 8-bit data words
13 1 SPI0CFG |= 0xC0; //CKPOL =1;
14 1
15 1 SPI0CN = 0x03; // Master mode; SPI enabled; flags
16 1 // cleared
17 1 SPI0CKR = SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by
18 1 // EEPROM spec.)
19 1 }
20
21
22
23 void SPI_Write(unsigned char dat)
24 {
25 1 unsigned char temp;
26 1 SPI_DUMP = dat;
27 1 for(temp = 0; temp<8; temp++)
28 1 {
29 2 SSI = SPI_D7;
30 2 SSCK = 1;
31 2 SPI_DUMP = SPI_DUMP << 1;
32 2 SSCK = 0;
33 2 }
34 1 }
35
36 unsigned char SPI_Read()
37 {
38 1 unsigned char temp;
39 1 for(temp = 0; temp<8; temp++)
40 1 {
41 2 SSCK = 1;
42 2 SPI_DUMP = SPI_DUMP << 1;
43 2 SPI_D0 = SSO;
44 2 SSCK = 0;
45 2 }
46 1 return(SPI_DUMP);
47 1 }
48
49 unsigned char SA_RDSR() //读状态寄存器
50 {
51 1 unsigned char temp;
52 1 EA = 0;
53 1 SCS = 0;
54 1 SPI_Write(0x05);
55 1 temp = SPI_Read();
C51 COMPILER V7.06 FLASH 01/02/2000 11:14:25 PAGE 2
56 1 temp = SPI_Read();
57 1 SCS = 1;
58 1 EA = 1;
59 1 return(temp);
60 1 }
61
62 void SA_WREN()//允许写
63 {
64 1 do
65 1 {
66 2 if((SA_RDSR()&0x01) == 0)
67 2 break;
68 2 }while(1);
69 1 EA = 0;
70 1 SCS = 0;
71 1 SPI_Write(0x06);
72 1 SCS = 1;
73 1 EA = 1;
74 1 }
75
76 void SA_WRDI() //禁止写
77 {
78 1 do
79 1 {
80 2 if((SA_RDSR()&0x01) == 0)
81 2 break;
82 2 }while(1);
83 1 EA = 0;
84 1 SCS = 0;
85 1 SPI_Write(0x04);
86 1 SCS = 1;
87 1 EA = 1;
88 1
89 1 }
90 void SA_WRSR(unsigned char da)//写状态寄存器
91 {
92 1 do
93 1 {
94 2 if((SA_RDSR()&0x01)==0)
95 2 break;
96 2 }while(1);
97 1 EA = 0;
98 1 SCS = 0;
99 1 SPI_Write(0x01);
100 1 SPI_Write(da);
101 1 SCS = 1;
102 1 EA = 1;
103 1 }
104
105 void SA_Read(unsigned long addr,unsigned char *ptr,unsigned int size)//
106 {
107 1 unsigned char addr_hh;
108 1 unsigned char addr_h;
109 1 unsigned char addr_l;
110 1 unsigned int si;
111 1 addr_l = addr&0x0000ff;
112 1 addr_h = (addr&0x00ff00) >> 8;
113 1 addr_hh = (addr&0xff0000) >> 16;
114 1 do
115 1 {
116 2 if((SA_RDSR()&0x01) == 0)
117 2 break;
C51 COMPILER V7.06 FLASH 01/02/2000 11:14:25 PAGE 3
118 2 }while(1);
119 1 EA = 0;
120 1 SCS = 0;
121 1 SPI_Write(0x03);
122 1 SPI_Write(addr_hh);
123 1 SPI_Write(addr_h);
124 1 SPI_Write(addr_l);
125 1 for(si = 0; si<size; si++)
126 1 {
127 2 ptr[si] = SPI_Read();
128 2 }
129 1 SCS = 1;
130 1 EA = 1;
131 1 }
132
133
134 unsigned char SA_ReadB(unsigned long addr) //读一个字节
135 {
136 1 unsigned char addr_hh;
137 1 unsigned char addr_h;
138 1 unsigned char addr_l;
139 1 unsigned char temp;
140 1 addr_l = addr&0x0000ff;
141 1 addr_h = (addr&0x00ff00) >> 8;
142 1 addr_hh = (addr&0xff0000) >> 16;
143 1 do
144 1 {
145 2 if((SA_RDSR()&0x01) == 0)
146 2 break;
147 2 }while(1);
148 1 EA = 0;
149 1 SCS = 0;
150 1 SPI_Write(0x03);
151 1 SPI_Write(addr_hh);
152 1 SPI_Write(addr_h);
153 1 SPI_Write(addr_l);
154 1 temp = SPI_Read();
155 1 SCS = 1;
156 1 EA = 1;
157 1 return(temp);
158 1 }
159
160 void SA_PP(unsigned long addr,unsigned char *ptr,unsigned int len)//页写
161 {
162 1 unsigned char addr_hh;
163 1 unsigned char addr_h;
164 1 unsigned char addr_l;
165 1 unsigned int si;
166 1
167 1 addr_l = addr&0x0000ff;
168 1 addr_h = (addr&0x00ff00) >> 8;
169 1 addr_hh = (addr&0xff0000) >> 16;
170 1
171 1 do
172 1 {
173 2 if((SA_RDSR()&0x01) == 0)
174 2 {
175 3 break;
176 3 }
177 2 }while(1);
178 1 SA_WREN();
179 1 EA = 0;
C51 COMPILER V7.06 FLASH 01/02/2000 11:14:25 PAGE 4
180 1 SCS = 0;
181 1 SPI_Write(0x02);
182 1 SPI_Write(addr_hh);
183 1 SPI_Write(addr_h);
184 1 SPI_Write(addr_l);
185 1 for(si = 0; si < len; si++)
186 1 {
187 2 SPI_Write(ptr[si]);
188 2 }
189 1 SCS = 1;
190 1 _nop_();
191 1 _nop_();
192 1 EA = 1;
193 1 do
194 1 {
195 2 if((SA_RDSR()&0x01) == 0x01)
196 2 {
197 3 _nop_();
198 3 _nop_();
199 3 }
200 2 else
201 2 {
202 3 break;
203 3 }
204 2 }while(1);
205 1 }
206
207
208
209
210 void SA_PE(unsigned long addr) //页擦除
211 {
212 1 unsigned char addr_hh;
213 1 unsigned char addr_h;
214 1 unsigned char addr_l;
215 1
216 1 addr_l = addr&0x0000ff;
217 1 addr_h = (addr&0x00ff00) >> 8;
218 1 addr_hh = (addr&0xff0000) >> 16;
219 1 do
220 1 {
221 2 if((SA_RDSR()&0x01) == 0)
222 2 {
223 3 break;
224 3 }
225 2 }while(1);
226 1 SA_WREN();
227 1 EA = 0;
228 1 SCS = 0;
229 1 SPI_Write(0x81);
230 1 SPI_Write(addr_hh);
231 1 SPI_Write(addr_h);
232 1 SPI_Write(addr_l);
233 1 SCS = 1;
234 1 EA = 1;
235 1 }
236
237 SA_Write(unsigned long addr,unsigned char dat)//写一个字节
238 {
239 1 unsigned char addr_l;
240 1 unsigned long num;
241 1 unsigned char ptr[256];
C51 COMPILER V7.06 FLASH 01/02/2000 11:14:25 PAGE 5
242 1 addr_l = addr&0x0000ff;
243 1 num = addr >> 8;
244 1 // num=(addr/256)*256;//>>8;
245 1 // addr_l=(unsigned char)(addr-num);
246 1 SA_Read(num,&ptr[0],256);
247 1 ptr[addr_l] = dat;
248 1 SA_PE(num);
249 1 SA_PP(num,&ptr[0],256);//页写
250 1 }
251
252
253
254 void SA_SE(unsigned long addr) //扇区擦除
255 {
256 1 unsigned char addr_hh;
257 1 unsigned char addr_h;
258 1 unsigned char addr_l;
259 1 addr_l = addr&0x0000ff;
260 1 addr_h = (addr&0x00ff00) >> 8;
261 1 addr_hh = (addr&0xff0000) >> 16;
262 1 do
263 1 {
264 2 if((SA_RDSR()&0x01) == 0)
265 2 break;
266 2 }while(1);
267 1 SA_WREN();
268 1 EA = 0;
269 1 SCS = 0;
270 1 SPI_Write(0xd8);
271 1 SPI_Write(addr_hh);
272 1 SPI_Write(addr_h);
273 1 SPI_Write(addr_l);
274 1 SCS = 1;
275 1 EA = 1;
276 1 }
277 // bulk erase
278 void SA_BE()
279 {
280 1 do
281 1 {
282 2 if((SA_RDSR()&0x01) == 0) break;
283 2 }while(1);
284 1 SA_WREN();
285 1 EA = 0;
286 1 SCS = 0;
287 1 SPI_Write(0xc7);
288 1 SCS = 1;
289 1 EA = 1;
290 1 }
291
292 //software protection
293
294 void SA_SP()
295 {
296 1 do
297 1 {
298 2 if((SA_RDSR()&0x01) == 0)
299 2 break;
300 2 }while(1);
301 1 EA = 0;
302 1 SCS = 0;
303 1 SPI_Write(0xb9);
C51 COMPILER V7.06 FLASH 01/02/2000 11:14:25 PAGE 6
304 1 SCS = 1;
305 1 EA = 1;
306 1 }
307 // release from software protect and read ID
308
309 unsigned char SA_RSP()
310 {
311 1 unsigned char temp;
312 1 do
313 1 {
314 2 if((SA_RDSR()&0x01) == 0)
315 2 break;
316 2 }while(1);
317 1 EA = 0;
318 1 SCS = 0;
319 1 SPI_Write(0xab);
320 1 SPI_Write(0x00);
321 1 SPI_Write(0x00);
322 1 SPI_Write(0x00);
323 1 temp = SPI_Read();
324 1 SCS = 1;
325 1 EA = 1;
326 1 return(temp);
327 1 }
328
329
330
331 void SA_Init()
332 {
333 1 unsigned char temp;
334 1 SSCK = 0;
335 1 SSI = 1;
336 1 SSO = 1;
337 1 SCS = 1;
338 1
339 1 SA_WRSR(0x03);//0x03
340 1 SA_WREN();
341 1 temp = SA_RSP();
342 1 temp = SA_RDSR();
343 1 temp = SA_RDSR();
344 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1609 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 323 ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -