📄 eeprom.lst
字号:
C51 COMPILER V8.02 EEPROM 09/28/2006 13:57:54 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c OMF2 BROWSE DEBUG
line level source
1 /**********************************************************************
2 *File Name : eeprom.c
3 *Creat Time : 2002/02/11
4 *Program Author : mqli
5 *File Discreption :
6 *
7 ************************************************************************/
8
9
10 #include "common.h"
11 #include "Var.h"
12 #include "main.h"
13 #include "eeprom.h"
14
15
16
17
18
19
20
21
22 BOOL IICWriteWaitAcknowlodge(void);
23
24 unsigned char IICrxbyte(void);
25
26 void IICstart(void);
27 void IICstop(void);
28 void IICReadAcknowledge(void);
29 void IICtxbyte(U8 DateByte);
30 void Comfirm_Var_Validity(U8 *var_address,U8 Max_Value,U8 Min_Value, U8 Normal_Value);
31
32
33
34 void IICstart(void)
35 {
36 1
37 1 #if 0
EEPROM_CLK_1;
EEPROM_DATA_1;
Delay_xuS(1);
EEPROM_DATA_0;
Delay_xuS(1);
#else
45 1
46 1
47 1 EEPROM_CLK_0;
48 1 Delay_xuS(1);
49 1 EEPROM_DATA_1;
50 1 Delay_xuS(1);
51 1 EEPROM_CLK_1;
52 1 Delay_xuS(1);
53 1 EEPROM_DATA_0;
54 1 Delay_xuS(1);
55 1 EEPROM_CLK_0;
C51 COMPILER V8.02 EEPROM 09/28/2006 13:57:54 PAGE 2
56 1 Delay_xuS(1);
57 1 #endif
58 1
59 1 }
60
61 void IICstop(void)
62 {
63 1 #if 0
EEPROM_CLK_0;
EEPROM_DATA_0;
Delay_xuS(1);
EEPROM_CLK_1;
Delay_xuS(1);
EEPROM_DATA_1;
#else
72 1 Delay_xuS(1);
73 1 EEPROM_CLK_0;
74 1 Delay_xuS(1);
75 1 EEPROM_DATA_0;
76 1 Delay_xuS(1);
77 1 EEPROM_CLK_1;
78 1 Delay_xuS(1);
79 1 EEPROM_DATA_1;
80 1 Delay_xuS(1);
81 1 #endif
82 1 }
83 void IICReadAcknowledge(void)
84 {
85 1 EEPROM_CLK_0;
86 1 EEPROM_DATA_0;
87 1 Delay_xuS(1);
88 1 EEPROM_CLK_1;
89 1 Delay_xuS(1);
90 1 EEPROM_CLK_0;
91 1 EEPROM_DATA_1;
92 1 }
93
94 BOOL IICWriteWaitAcknowlodge(void)
95 {
96 1
97 1 BOOL WriteSuccessFlag=FALSE;
98 1
99 1 EEPROM_CLK_1;
100 1 WriteSuccessFlag=(EEPROM_DATA)?FALSE:TRUE;
101 1 EEPROM_CLK_0;
102 1 if ( WriteSuccessFlag==FALSE )
103 1 {
104 2 Delay_xuS(1);
105 2 }
106 1 return WriteSuccessFlag;
107 1
108 1 }
109
110 void IICtxbyte(U8 DataByte)
111 {
112 1
113 1 EX_DATA U8 BitMast;
114 1
115 1
116 1 for(BitMast=0x80;BitMast>0;BitMast>>=1)
117 1
C51 COMPILER V8.02 EEPROM 09/28/2006 13:57:54 PAGE 3
118 1
119 1 {
120 2
121 2 if (DataByte&BitMast)
122 2 EEPROM_DATA_1;
123 2 else
124 2 EEPROM_DATA_0;
125 2 Delay_xuS(1);
126 2 Delay_xuS(1);
127 2 EEPROM_CLK_1;
128 2 Delay_xuS(1);
129 2 Delay_xuS(1);
130 2 EEPROM_CLK_0;
131 2 }
132 1 EEPROM_DATA_1;
133 1 // IIC_SDA=1; // data high, ask for acknowledge signal
134 1 // IIC_SCL=1; // clock high
135 1 // btmask=IIC_SDA; // btmask=0:ok,otherwise not ok.
136 1 // IIC_SCL=0; // clock low
137 1 // return btmask;
138 1
139 1
140 1 }
141
142 unsigned char IICrxbyte(void)
143 {
144 1 EX_DATA U8 ReceiveByte=0,i;
145 1 EEPROM_DATA_1;
146 1 for(i=0;i<8;i++)
147 1 {
148 2 EEPROM_CLK_1;
149 2 ReceiveByte<<=1;
150 2 ReceiveByte|=EEPROM_DATA;
151 2 EEPROM_CLK_0;
152 2 Delay_xuS(1);
153 2
154 2 }
155 1 return ReceiveByte;
156 1
157 1
158 1 }
159
160 /* Read EEPROM content */
161 void ReadXEEprom(U8 * bufptr, U16 eepadr, U8 cnt)
162 {
163 1 DE_DATA unsigned char errcnt;
164 1
165 1 errcnt=0;
166 1 while(1)
167 1 {
168 2 IICstart(); // IIC start condition
169 2 IICtxbyte(0xa0+((U8)(eepadr/128)&0x0e)); // transmit EEPROM IIC address //the eeprom is below 512 bits
170 2 if (IICWriteWaitAcknowlodge()==TRUE) break;
171 2 errcnt++;
172 2 if (errcnt>5)
173 2 {
174 3 IICstop();
175 3 return;
176 3 }
177 2 }
178 1
179 1 IICtxbyte((U8)eepadr);
C51 COMPILER V8.02 EEPROM 09/28/2006 13:57:54 PAGE 4
180 1 IICWriteWaitAcknowlodge(); // acknowledge
181 1
182 1 IICstart(); // IIC start condition
183 1 IICtxbyte(0xa1+((U8)(eepadr/128)&0x0e)); // transmit EEPROM IIC address
184 1 IICWriteWaitAcknowlodge(); // acknowledge
185 1
186 1 while (1)
187 1 {
188 2 *bufptr=0;
189 2 *bufptr=IICrxbyte();
190 2 cnt--;
191 2 if (cnt==0) break;
192 2 IICReadAcknowledge(); // acknowledge
193 2 bufptr++;
194 2 }
195 1 Delay_xuS(1);
196 1 IICstop();
197 1 }
198
199 void WriteEEprom(U16 eeaddr, U8 dat)
200 {
201 1 DE_DATA unsigned char errcnt;
202 1
203 1 errcnt=0;
204 1 while(1)
205 1 {
206 2 IICstart(); // IIC start condition
207 2 IICtxbyte(0xa0+((U8)(eeaddr/128)&0x0e)); // transmit EEPROM IIC address //the eeprom is below 512 bits
208 2 if (IICWriteWaitAcknowlodge()==TRUE) break;
209 2 errcnt++;
210 2 if (errcnt>5)
211 2 {
212 3 IICstop();
213 3 return;
214 3 }
215 2 }
216 1
217 1 /* IICtxbyte((U8)eepadr);
218 1 IICstart(); // IIC start condition
219 1 IICtxbyte(0xa0+((U8)(eeaddr/128)&0x0e)); // transmit EEPROM IIC address
220 1 IICWriteWaitAcknowlodge();*/ // acknowledge
221 1 IICtxbyte((U8)eeaddr); //write the address onchip
222 1 IICWriteWaitAcknowlodge(); // acknowledge
223 1 IICtxbyte(dat); // transmit EEPROM data
224 1 IICWriteWaitAcknowlodge(); // acknowledge
225 1 IICstop(); // IIC stop condition
226 1 Delay_xmS(10);
227 1 }
228
229
230
231 /*******************************************************
232 for fast write fuction
233 care that some chip limit the total bytes of one write cycle
234 1K,2K=8 4K,8K,16K=16
235 ************************************************************/
236
237
238 void WriteXEEprom(U8 * bufptr, U16 eepadr, U8 cnt)
239 {
240 1 DE_DATA unsigned char errcnt,temp;
241 1
C51 COMPILER V8.02 EEPROM 09/28/2006 13:57:54 PAGE 5
242 1 errcnt=0;
243 1 while(1)
244 1 {
245 2 IICstart(); // IIC start condition
246 2 IICtxbyte(0xa0+((U8)(eepadr/128)&0x0e)); // transmit EEPROM IIC address //the eeprom is below 512 bits
247 2 if (IICWriteWaitAcknowlodge()==TRUE) break;
248 2 errcnt++;
249 2 if (errcnt>5)
250 2 {
251 3 IICstop();
252 3 return;
253 3 }
254 2 }
255 1 IICtxbyte((U8)eepadr); //write the address onchip
256 1 IICWriteWaitAcknowlodge(); // acknowledge
257 1
258 1 while(cnt)
259 1 {
260 2 temp=*bufptr;
261 2 IICtxbyte(temp); // transmit EEPROM data
262 2 IICWriteWaitAcknowlodge(); // acknowledge
263 2 bufptr++;
264 2 cnt--;
265 2 }
266 1 IICstop(); // IIC stop condition
267 1 Delay_xmS(10);
268 1 }
269
270
271
272
273
274
275 //save the preset var
276 void Write_Preset_Channel_Information(U8 channel,U16 frequence,U8 radio_band,BOOL is_stereo)
277 {
278 1 WriteEEprom(EEPAddress_Preset_channal_Freq_Base+channel*2 ,(U8)(frequence) );
279 1 WriteEEprom(EEPAddress_Preset_channal_Freq_Base+channel*2+1,(U8)(frequence>>8));
280 1 WriteEEprom(EEPAddress_Preset_channal_Band_Base+channel,radio_band);
281 1 WriteEEprom(EEPAddress_Preset_channal_Stereo_Base+channel,is_stereo);
282 1
283 1 }
284
285
286
287 void Check_EEProm_Var_Validity(void)
288 {
289 1
290 1
291 1
292 1 }
293
294
295 void Comfirm_Var_Validity(U8 *var_address,U8 Max_Value,U8 Min_Value, U8 Normal_Value)
296 {
297 1 if( (*var_address>Max_Value)||(*var_address<Min_Value) )
298 1 *var_address=Normal_Value;
299 1 }
300
301
302
303
C51 COMPILER V8.02 EEPROM 09/28/2006 13:57:54 PAGE 6
304
305
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 578 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 3
PDATA SIZE = ---- ----
DATA SIZE = ---- 30
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -