📄 flash_eeprom.lst
字号:
/* 将该扇区数据 0 - (USED_BYTE_QTY_IN_ONE_SECTOR-1) 字节数据读入缓冲区保护 */
sector_addr = (begin_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
byte_addr = sector_addr; /* 扇区地址为扇区首字节地址 */
ISP_IAP_enable();
for(i = 0; i < USED_BYTE_QTY_IN_ONE_SECTOR; i++)
{
ISP_ADDRH = (INT8U)(byte_addr >> 8);
ISP_ADDRL = (INT8U)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
ISP_CMD = ISP_CMD | READ_AP_and_Data_Memory_Command; /* 0000,0001 */
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
_nop_();
protect_buffer[i] = ISP_DATA;
byte_addr++;
}
/* 将要写入的数据写入保护缓冲区的相应区域,其余部分保留 */
for(i = 0; i < counter; i++)
{
protect_buffer[in_sector_begin_addr] = array[i];
in_sector_begin_addr++;
}
/* 擦除 要修改/写入 的扇区 */
ISP_ADDRH = (INT8U)(sector_addr >> 8);
ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
ISP_CMD = ISP_CMD | SECTOR_ERASE_AP_and_Data_Memory_Command; /* 0000,0011 */
ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
_nop_();
/* 将保护缓冲区的数据写入 Data Flash, EEPROM */
byte_addr = sector_addr; /* 扇区地址为扇区首字节地址 */
for(i = 0; i< USED_BYTE_QTY_IN_ONE_SECTOR; i++)
{
/* 写一个字节 */
ISP_ADDRH = (INT8U)(byte_addr >> 8);
ISP_ADDRL = (INT8U)(byte_addr & 0x00ff);
ISP_DATA = protect_buffer[i];
C51 COMPILER V7.50 FLASH_EEPROM 05/28/2007 15:49:31 PAGE 5
ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
ISP_CMD = ISP_CMD | PROGRAM_AP_and_Data_Memory_Command; /* 0000,0010 */
ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
_nop_();
/* 读回来 */
ISP_DATA = 0x00;
ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
ISP_CMD = ISP_CMD | READ_AP_and_Data_Memory_Command; /* 0000,0001 */
ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
_nop_();
/* 比较对错 */
if(ISP_DATA != protect_buffer[i])
{
ISP_IAP_disable();
return ERROR;
}
byte_addr++;
}
ISP_IAP_disable();
return OK;
}
#endif
271
272 /* 测试常量数组 */
273 INT8U code Test_array_total[512] =
274 {
275 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
276 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
277 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
278 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
279 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
280 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
281 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
282 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
283 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
284 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
285 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
286 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
287 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
288 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
289 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
290 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
291 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
292 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
293 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
294 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
295 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
296 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
297 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
298 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
299 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
300 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
301 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
302 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
303 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
C51 COMPILER V7.50 FLASH_EEPROM 05/28/2007 15:49:31 PAGE 6
304 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
305 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
306 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
307 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
308 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
309 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8,
310 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0,
311 0xdf, 0xde, 0xdd, 0xdc, 0xdb, 0xda, 0xd9, 0xd8,
312 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0,
313 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc8,
314 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0,
315 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8,
316 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0,
317 0xaf, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9, 0xa8,
318 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0,
319 0x9f, 0x9e, 0x9d, 0x9c, 0x9b, 0x9a, 0x99, 0x98,
320 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90,
321 0x8f, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, 0x89, 0x88,
322 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80,
323 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78,
324 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70,
325 0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x69, 0x68,
326 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60,
327 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x58,
328 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50,
329 0x4f, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49, 0x48,
330 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40,
331 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38,
332 0x33, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30,
333 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28,
334 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20,
335 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
336 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
337 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
338 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
339 };
340 #ifdef delay
#define delay
void delay(INT16U counter)
{
INT16U temp = 0;
for(temp = counter; temp>0; temp--)
{
_nop_();
_nop_();
_nop_();
}
}
#endif
353
354 //void main()
355 //{
356 //sbit Begin_LED = P1^0;
357 //sbit ERROR_LED = P1^3;
358 //sbit OK_LED = P1^7;
359
360 /* display_Begin_LED();
361 delay(DELAY_CONST);
362
363 sector_erase(DEBUG_Data_Memory_Begin_Sector_addr);
364 if(byte_program_and_verify(DEBUG_Data_Memory_Begin_Sector_addr,0x55) == OK)
365 display_OK_LED();
C51 COMPILER V7.50 FLASH_EEPROM 05/28/2007 15:49:31 PAGE 7
366 else
367 display_ERROR_LED(); */
368
369 /*
370 if(sequential_write_flash_in_one_sector(DEBUG_Data_Memory_Begin_Sector_addr, USED_BYTE_QTY_IN_ONE_SECTOR,
- Test_array_total))
371 display_OK_LED();
372 else
373 display_ERROR_LED();
374 */
375 /*
376 if(write_flash_with_protect_in_one_sector(DEBUG_Data_Memory_Begin_Sector_addr+0x3, USED_BYTE_QTY_IN_ONE_S
-ECTOR-0x30, Test_array_total))
377 display_OK_LED();
378 else
379 display_ERROR_LED();
380 */
381 // while(1);
382 //}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 328 ----
CONSTANT SIZE = 512 ----
XDATA SIZE = 128 9
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -