📄 52-eepom.lst
字号:
C51 COMPILER V7.50 52_EEPOM 04/26/2007 11:38:57 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 52_EEPOM
OBJECT MODULE PLACED IN 52-EEPOM.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 52-EEPOM.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "mylib.h"
2
3 //sfr16 DPTR = 0x82;
4
5 /* 新增特殊功能寄存器定义 */
6 /*sfr ISP_DATA = 0xe2;
7 sfr ISP_ADDRH = 0xe3;
8 sfr ISP_ADDRL = 0xe4;
9 sfr ISP_CMD = 0xe5;
10 sfr ISP_TRIG = 0xe6;
11 sfr ISP_CONTR = 0xe7; */
12
13
14 /* 定义命令 */
15 #define READ_AP_and_Data_Memory_Command 0x01 /* 字节读数据存储区 */
16 #define PROGRAM_AP_and_Data_Memory_Command 0x02 /* 字节编程数据存储区 */
17 #define SECTOR_ERASE_AP_and_Data_Memory_Command 0x03 /* 扇区擦除数据存储区 */
18
19 typedef unsigned char INT8U; /* 8 bit 无符号整型 */
20 typedef unsigned int INT16U; /* 16 bit 无符号整型 */
21 #define DELAY_CONST 60000
22
23 /* 定义常量 */
24 #define ERROR 0
25 #define OK 1
26
27 sbit Begin_LED = P1^0;
28 sbit ERROR_LED = P1^3;
29 sbit OK_LED = P1^7;
30
31 /* 定义Flash 操作等待时间 */
32 #define MCU_CLOCK_40MHz
33 //#define MCU_CLOCK_20MHz
34 //#define MCU_CLOCK_10MHz
35 //#define MCU_CLOCK_5MHz
36 #ifdef MCU_CLOCK_40MHz
37 #define WAIT_TIME 0x00
38 #endif
39 #ifdef MCU_CLOCK_20MHz
#define WAIT_TIME 0x01
#endif
42 #ifdef MCU_CLOCK_10MHz
#define WAIT_TIME 0x02
#endif
45 #ifdef MCU_CLOCK_5MHz
#define WAIT_TIME 0x03
#endif
48
49 /* 调试控制项 */
50 //#define DEBUG_STC89C_LE58RD+
51
52 #define DEBUG_STC89C_LE52RC
53
54 //#define USED_BYTE_QTY_IN_ONE_SECTOR 1
55 //#define USED_BYTE_QTY_IN_ONE_SECTOR 2
C51 COMPILER V7.50 52_EEPOM 04/26/2007 11:38:57 PAGE 2
56 //#define USED_BYTE_QTY_IN_ONE_SECTOR 4
57 //#define USED_BYTE_QTY_IN_ONE_SECTOR 8
58 //#define USED_BYTE_QTY_IN_ONE_SECTOR 16
59 //#define USED_BYTE_QTY_IN_ONE_SECTOR 32
60 //#define USED_BYTE_QTY_IN_ONE_SECTOR 64
61 #define USED_BYTE_QTY_IN_ONE_SECTOR 128
62 //#define USED_BYTE_QTY_IN_ONE_SECTOR 256
63 //#define USED_BYTE_QTY_IN_ONE_SECTOR 512
64
65 INT8U xdata protect_buffer[USED_BYTE_QTY_IN_ONE_SECTOR];
66
67
68 #ifdef DEBUG_STC89C_LE58RD+ //STC89C58RD+, 89LE58RD+
*** WARNING C323 IN LINE 68 OF 52-EEPOM.c: newline expected, extra characters found
#define DEBUG_AP_Memory_Begin_Sector_addr 0x0000
#define DEBUG_AP_Memory_End_Sector_addr 0x7e00
#define DEBUG_AP_Memory_End_Byte_addr 0x7fff
#define DEBUG_Data_Memory_Begin_Sector_addr 0x8000
#endif
74 #ifdef DEBUG_STC89C_LE52RC //STC89C52RC, 89LE52RC
75 #define DEBUG_AP_Memory_Begin_Sector_addr 0x0000
76 #define DEBUG_AP_Memory_End_Sector_addr 0x1e00
77 #define DEBUG_AP_Memory_End_Byte_addr 0x1fff
78 #define DEBUG_Data_Memory_Begin_Sector_addr 0x2000
79 #endif
80
81
82 /* 打开 ISP,IAP 功能 */
83 void ISP_IAP_enable(void)
84 {
85 1 EA = 0; /* 关中断 */
86 1 ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
87 1 ISP_CONTR = ISP_CONTR | WAIT_TIME;
88 1 ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
89 1 }
90
91 /* 关闭 ISP,IAP 功能 */
92 void ISP_IAP_disable(void)
93 {
94 1 ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
95 1 ISP_TRIG = 0x00;
96 1 EA = 1; /* 开中断 */
97 1 }
98
99 /* 字节读 */
100 INT8U byte_read(INT16U byte_addr)
101 {
102 1 ISP_ADDRH = (INT8U)(byte_addr >> 8);
103 1 ISP_ADDRL = (INT8U)(byte_addr & 0x00ff);
104 1
105 1 ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
106 1 ISP_CMD = ISP_CMD | READ_AP_and_Data_Memory_Command; /* 0000,0001 */
107 1
108 1 ISP_IAP_enable();
109 1
110 1 ISP_TRIG = 0x46;
111 1 ISP_TRIG = 0xb9;
112 1 _nop_();
113 1
114 1 ISP_IAP_disable();
115 1 return (ISP_DATA);
116 1 }
C51 COMPILER V7.50 52_EEPOM 04/26/2007 11:38:57 PAGE 3
117
118 /* 扇区擦除 */
119 INT8U sector_erase(INT16U sector_addr)
120 {
121 1 INT16U get_sector_addr = 0;
122 1 get_sector_addr = (sector_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
123 1 ISP_ADDRH = (INT8U)(get_sector_addr >> 8);
124 1 ISP_ADDRL = 0x00;
125 1
126 1 ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
127 1 ISP_CMD = ISP_CMD | SECTOR_ERASE_AP_and_Data_Memory_Command; /* 0000,0011 */
128 1
129 1 ISP_IAP_enable();
130 1 ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
131 1 ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
132 1 _nop_();
133 1
134 1 ISP_IAP_disable();
135 1 return OK;
136 1 }
137
138 /* 字节编程 */
139 INT8U byte_program(INT16U byte_addr, INT8U original_data)
140 {
141 1 ISP_ADDRH = (INT8U)(byte_addr >> 8);
142 1 ISP_ADDRL = (INT8U)(byte_addr & 0x00ff);
143 1
144 1 ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
145 1 ISP_CMD = ISP_CMD | PROGRAM_AP_and_Data_Memory_Command; /* 0000,0010 */
146 1 ISP_DATA = original_data;
147 1
148 1 ISP_IAP_enable();
149 1 ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
150 1 ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
151 1 _nop_();
152 1
153 1 ISP_IAP_disable();
154 1 return OK;
155 1 }
156
157 /* 字节编程并校验 */
158 INT8U byte_program_and_verify(INT16U byte_addr, INT8U original_data)
159 {
160 1 ISP_ADDRH = (INT8U)(byte_addr >> 8);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -