📄 eprom.lst
字号:
C51 COMPILER V7.00 EPROM 07/18/2007 12:16:47 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE EPROM
OBJECT MODULE PLACED IN Eprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Eprom.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "default.h"
2 #include "Stdafx.h"
3 #include "Eprom.h"
4
5 /* 定义命令 */
6 #define READ_AP_and_Data_Memory_Command 0x01 /* 字节读数据存储区 */
7 #define PROGRAM_AP_and_Data_Memory_Command 0x02 /* 字节编程数据存储区 */
8 #define SECTOR_ERASE_AP_and_Data_Memory_Command 0x03 /* 扇区擦除数据存储区 */
9
10 //20MHZ
11 #define WAIT_TIME 0x01
12
13 #define DEBUG_AP_Memory_Begin_Sector_addr 0x0000
14 #define DEBUG_AP_Memory_End_Sector_addr 0x7e00
15 #define DEBUG_AP_Memory_End_Byte_addr 0x7fff
16
17 #define DEBUG_Data_Memory_Begin_Sector_addr 0x8000
18 /* 打开 ISP,IAP 功能 */
19 void ISP_IAP_enable(void)
20 {
21 1 EA = 0; /* 关中断 */
22 1 ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
23 1 ISP_CONTR = ISP_CONTR | WAIT_TIME;
24 1 ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
25 1 }
26
27 /* 关闭 ISP,IAP 功能 */
28 void ISP_IAP_disable(void)
29 {
30 1 ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
31 1 ISP_TRIG = 0x00;
32 1 EA = 1; /* 开中断 */
33 1 }
34
35 void ispcommand(uchar uCommand)
36 {
37 1 ISP_CMD &= 0xF8; /* 1111,1000 */
38 1 ISP_CMD |= uCommand;
39 1 }
40
41 uchar readchar(uint byte_addr)
42 {
43 1 ISP_DATA = 0;
44 1 ispcommand(READ_AP_and_Data_Memory_Command); /* 0000,0001 */
45 1 ISP_IAP_enable();
46 1 ISP_ADDRH = (uchar)(byte_addr >> 8);
47 1 ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
48 1 ISP_TRIG = 0x46;
49 1 ISP_TRIG = 0xb9;
50 1 _nop_();
51 1 ISP_IAP_disable();
52 1 return (ISP_DATA);
53 1 }
54
55 void writechar(uint byte_addr,uchar uWrite)
C51 COMPILER V7.00 EPROM 07/18/2007 12:16:47 PAGE 2
56 {
57 1 ispcommand(PROGRAM_AP_and_Data_Memory_Command);/* 0000,0010 */
58 1 ISP_IAP_enable();
59 1 ISP_ADDRH = (uchar)(byte_addr >> 8);
60 1 ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
61 1 ISP_DATA = uWrite;
62 1 ISP_TRIG = 0x46;
63 1 ISP_TRIG = 0xb9;
64 1 _nop_();
65 1 ISP_IAP_disable();
66 1 }
67
68 /* 扇区擦除 */
69 uchar sector_erase(uint uSector)
70 {
71 1 uint xdata sector_addr = DEBUG_Data_Memory_Begin_Sector_addr + uSector*512;
72 1 uint xdata get_sector_addr = 0;
73 1 get_sector_addr = (sector_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
74 1 ISP_ADDRH = (uchar)(get_sector_addr >> 8);
75 1 ISP_ADDRL = 0x00;
76 1
77 1 ispcommand(SECTOR_ERASE_AP_and_Data_Memory_Command); /* 0000,0011 */
78 1
79 1 ISP_IAP_enable();
80 1 ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
81 1 ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
82 1 ISP_IAP_disable();
83 1 _nop_();
84 1 return OK;
85 1 }
86
87 /* 字节编程并校验 */
88 //uSector 第几扇区,pWrite,写入数据指针, uint uCount,多少个字节
89 bit WriteEprom(uchar uSector, uchar *pWrite, uint uCount)
90 {
91 1 uint xdata i = 0;
92 1 uchar xdata ii;
93 1 uint xdata byte_addr = DEBUG_Data_Memory_Begin_Sector_addr + uSector*512;
94 1 uint xdata uMove = 0;
95 1 bit bBreak = 0;
96 1 if(uCount > 256)
97 1 {
98 2 sector_erase(uSector);// 扇区擦除
99 2 }else
100 1 {
101 2 uMove = (510 - 510/(8*uCount))/(8*uCount) + 1;
102 2 if(readchar(byte_addr) != (uchar)uCount)
103 2 {
104 3 sector_erase(uSector);// 扇区擦除
105 3 writechar(byte_addr, (uchar)uCount);
106 3 }else
107 2 {
108 3 for(i = 0; i < (510 - 510/(8*uCount))/(8*uCount);i++)
109 3 {
110 4 uchar xdata tChar = readchar(byte_addr + i + 1);
111 4 for(ii = 0; ii < 8; ii++)
112 4 {
113 5 if((tChar &(0x01 << ii)) == 0)
114 5 {
115 6 uMove += uCount;
116 6 }else
117 5 {
C51 COMPILER V7.00 EPROM 07/18/2007 12:16:47 PAGE 3
118 6 uchar xdata ij;
119 6 //对比新的参数是否和旧的一样
120 6 for(ij = 0; ij < uCount; ij++)
121 6 {
122 7 if(readchar(byte_addr + ij + uMove) != pWrite[ij])
123 7 {
124 8 bBreak = 1;
125 8 break;
126 8 }
127 7 }
128 6 if(bBreak)
129 6 {
130 7 tChar &= (0xFE << ii);
131 7 writechar(byte_addr + i + 1,tChar);
132 7 }else return OK;
133 6 break;
134 6 }
135 5 }
136 4 if(bBreak)
137 4 {
138 5 uMove += uCount;
139 5 }
140 4 if((tChar == 0)&&(i >= ((510 - 510/(8*uCount))/(8*uCount) - 1)))
141 4 {
142 5 sector_erase(uSector);// 扇区擦除
143 5 writechar(byte_addr, (uchar)uCount);
144 5 uMove = (510 - 510/(8*uCount))/(8*uCount) + 1;
145 5 }
146 4 if(bBreak)
147 4 {
148 5 break;
149 5 }
150 4 }
151 3 }
152 2 }
153 1
154 1 //ConvetLed2((long)uMove + 1000);
155 1 //delay(60000);delay(60000);
156 1
157 1 for(i = 0; i < uCount; i++)
158 1 {
159 2 writechar(byte_addr + i + uMove, pWrite[i]);
160 2 }
161 1
162 1 for(i = 0; i < uCount; i++)
163 1 {
164 2 if(readchar(byte_addr + i + uMove) != pWrite[i])
165 2 {
166 3 P4_3 = 0;
167 3 delay(5000);
168 3 P4_3 = 1;
169 3 ConvetLed2(i + uMove);
170 3 delay(60000);delay(60000);delay(60000);delay(60000);
171 3 return ERROR;
172 3 }
173 2 }
174 1 return OK;
175 1 }
176
177 /* 读Eprom*/
178 //uSector 第几扇区,pWrite,读出数据指针, uint uCount,多少个字节
179 bit ReadEprom(uchar uSector, uchar *pWrite, uint uCount)
C51 COMPILER V7.00 EPROM 07/18/2007 12:16:47 PAGE 4
180 {
181 1 uint xdata i = 0;
182 1 uchar xdata ii;
183 1 uint xdata byte_addr = DEBUG_Data_Memory_Begin_Sector_addr + uSector*512;
184 1 uint xdata uMove = 0;
185 1 bit bBreak = 0;
186 1
187 1 if(uCount > 256)
188 1 {
189 2
190 2 }else
191 1 {
192 2 uMove = (510 - 510/(8*uCount))/(8*uCount) + 1;
193 2 if(readchar(byte_addr) != (uchar)uCount)
194 2 {
195 3 P4_3 = 0;
196 3 delay(5000);
197 3 P4_3 = 1;
198 3 delay(5000);
199 3 P4_3 = 0;
200 3 delay(5000);
201 3 P4_3 = 1;
202 3 delay(5000);
203 3 P4_3 = 0;
204 3 delay(5000);
205 3 P4_3 = 1;
206 3 }
207 2 for(i = 0; i < (510 - 510/(8*uCount))/(8*uCount);i++)
208 2 {
209 3 uchar xdata tChar = readchar(byte_addr + i + 1);
210 3 for(ii = 0; ii < 8; ii++)
211 3 {
212 4 if((tChar &(0x01 << ii)) == 0)
213 4 {
214 5 uMove += uCount;
215 5 }else
216 4 {
217 5 bBreak = 1;
218 5 break;
219 5 }
220 4 }
221 3
222 3 if(bBreak)
223 3 {
224 4 break;
225 4 }
226 3 }
227 2 }
228 1
229 1 for(i = 0; i < uCount; i++)
230 1 {
231 2 pWrite[i] = readchar(byte_addr + i + uMove);
232 2 }
233 1 return OK;
234 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1539 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 21
PDATA SIZE = ---- ----
C51 COMPILER V7.00 EPROM 07/18/2007 12:16:47 PAGE 5
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -