📄 flash.lst
字号:
184 * 函数功能描述:Flash写入字节函数程序;
185 *
186 * 输入参数:unsigned long类型地址,unsigned char类型数据;
187 *
188 * 返回数据:none;
189 *
190 * 注意: none;
191 ************************************************************************************/
192
193 void flash_write_byte_save(unsigned long address, unsigned char dat)
194 {
195 1 unsigned char xdata a[128];
196 1 unsigned int temp;
197 1 unsigned int t;
198 1 unsigned char sec;
199 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
200 1 SFRPAGE = SFR_PAGE_F; // set SFR page F
201 1 temp=address|0xc000;
202 1 sec=address>>14;
203 1
204 1 if(sec>15)
205 1 return ;
206 1 P4=sec;
207 1 t=(temp-0xc000)%128;
208 1 temp=temp-t;
209 1
210 1 flash_read_page(address,a);
211 1 a[t]=dat;
212 1 flash_write_page(address,a);
213 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
214 1 }
215
216 /***********************************************************************************
217 * 函数名称:flash_write_string;
218 *
219 * 函数功能描述:Flash写入字符串函数程序;
220 *
221 * 输入参数:unsigned long类型地址,unsigned char类型数据起始指针,unsigned char类型数据长度;
222 *
223 * 返回数据:none;
224 *
225 * 注意: none;
226 ************************************************************************************/
227
228 void flash_write_string(unsigned long address, unsigned char *dat_sta, unsigned char count)
229 {
230 1 if(count>127)
231 1 return;
232 1 while(count--)
233 1 {
234 2 flash_write_byte(address++,*dat_sta++);
235 2 }
236 1 }
237
238 /***********************************************************************************
239 * 函数名称:flash_write_page;
240 *
241 * 函数功能描述:Flash按页写入函数;
C51 COMPILER V7.02b FLASH 03/06/2006 15:41:23 PAGE 5
242 *
243 * 输入参数:unsigned long类型地址,unsigned char类型数据起始指针;
244 *
245 * 返回数据:none;
246 *
247 * 注意: none;
248 ************************************************************************************/
249
250 void flash_write_page(unsigned long address, unsigned char *dat)
251 {
252 1 unsigned char i;
253 1 i=0;
254 1 while(i<128)
255 1 {
256 2 flash_write_byte(address++,*dat++);
257 2 i++;
258 2 }
259 1 }
260
261 /***********************************************************************************
262 * 函数名称:flash_write_block;
263 *
264 * 函数功能描述:Flash按块写入函数;
265 *
266 * 输入参数:unsigned long类型地址,unsigned char类型数据起始指针;
267 *
268 * 返回数据:none;
269 *
270 * 注意: none;
271 ************************************************************************************/
272
273 void flash_write_block(unsigned long address, unsigned char *dat)
274 {
275 1 unsigned char count;
276 1 unsigned int ct;
277 1 count=128;
278 1 ct=address%0x3fff;
279 1 address=address-ct;
280 1 while(count--)
281 1 {
282 2 flash_write_page(address, dat);
283 2 Delay_ms(10);
284 2
285 2 address+=128;
286 2 dat+=128;
287 2 }
288 1 }
289
290 /***********************************************************************************
291 * 函数名称:flash_read_byte;
292 *
293 * 函数功能描述:Flash读取字节函数程序;
294 *
295 * 输入参数:unsigned long类型地址;
296 *
297 * 返回数据:unsigned char;
298 *
299 * 注意: none;
300 ************************************************************************************/
301
302 unsigned char flash_read_byte(unsigned long address)
303 {
C51 COMPILER V7.02b FLASH 03/06/2006 15:41:23 PAGE 6
304 1 unsigned char xdata *x;
305 1 unsigned int temp;
306 1 unsigned char sec;
307 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
308 1 SFRPAGE = SFR_PAGE_F; // set SFR page F
309 1 temp=address|0xc000;
310 1 sec=address>>14;
311 1 if(sec>15)
312 1 return 0xff;
313 1 P4=sec;
314 1 x=temp;
315 1 return *x;
316 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
317 1 }
318
319 /***********************************************************************************
320 * 函数名称:flash_read_page;
321 *
322 * 函数功能描述:Flash读取页函数程序;
323 *
324 * 输入参数:unsigned long类型地址,unsigned char类型数据存储起始地址指针;
325 *
326 * 返回数据:none;
327 *
328 * 注意: none;
329 ************************************************************************************/
330
331 void flash_read_page(unsigned long address, unsigned char *buf)
332 {
333 1 unsigned char xdata *x;
334 1 unsigned char count=128;
335 1 unsigned int temp;
336 1 unsigned int t;
337 1 unsigned char sec;
338 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
339 1 SFRPAGE = SFR_PAGE_F; // set SFR page F
340 1
341 1 temp=address|0xc000;
342 1 sec=address>>14;
343 1 if(sec>15)
344 1 return ;
345 1 t=(temp-0xc000)%128;
346 1 temp=temp-t;
347 1 P4=sec;
348 1 x=temp;
349 1 while(count--)
350 1 {
351 2 *buf++=*x++;
352 2 }
353 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
354 1 }
355
356 /***********************************************************************************/
357 // 文件结束
358 /***********************************************************************************/
359
360
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1119 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V7.02b FLASH 03/06/2006 15:41:23 PAGE 7
XDATA SIZE = ---- 180
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
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 + -