📄 eeprom.lst
字号:
170 unsigned char I2C_read_ack(void)
171 { unsigned char num=0xFF;
172 1 I2C_DATA_PIN=0x1; //* 需要释放数据线
173 1 IIC_delay_min();
174 1 I2C_SCLK_PIN=0x1; //* 读取ACK的时钟信号
175 1 while(I2C_DATA_PIN==0x1)
176 1 { num--;
177 2 if(num==0x0)
178 2 { break;
C51 COMPILER V8.02 EEPROM 09/26/2008 11:40:17 PAGE 4
179 3 }
180 2 }
181 1 I2C_SCLK_PIN=0x0;
182 1 IIC_delay_min();
183 1 I2C_DATA_PIN=0x0;
184 1 IIC_delay_min();
185 1 if(num==0x0)
186 1 { return 0x0;
187 2 }
188 1 else
189 1 { return 0x1;
190 2 }
191 1 }
192
193 /********************************************************************************/
194 /* funname : I2C_send_ack() */
195 /* created : xillinx */
196 /* time : 2008-08-06 */
197 /* descript: I2C总线接收数据时发送ACK */
198 /********************************************************************************/
199 void I2C_send_ack(void)
200 { I2C_DATA_PIN=0x0;
201 1 IIC_delay_min();
202 1 I2C_SCLK_PIN=0x1;
203 1 IIC_delay_max();
204 1 I2C_SCLK_PIN=0x0;
205 1 IIC_delay_min();
206 1 }
207
208 /********************************************************************************/
209 /* funname : I2C_send_nack() */
210 /* created : xillinx */
211 /* time : 2008-08-06 */
212 /* descript: I2C总线接收数据时发送NACK */
213 /********************************************************************************/
214 void I2C_send_nack(void)
215 { I2C_DATA_PIN=0x1;
216 1 IIC_delay_min();
217 1 I2C_SCLK_PIN=0x1;
218 1 IIC_delay_max();
219 1 I2C_SCLK_PIN=0x0;
220 1 IIC_delay_min();
221 1 I2C_DATA_PIN=0x0;
222 1 IIC_delay_min();
223 1 }
224
225
226
227 /********************************************************************************/
228 /* funname : I2C_send_1_byte() */
229 /* created : xillinx */
230 /* time : 2008-08-06 */
231 /* descript: I2C总线发送1字节数据 */
232 /********************************************************************************/
233 unsigned char I2C_send_1_byte(unsigned char mdata)
234 { unsigned char status;
235 1 I2C_start();
236 1 I2C_send_8_bits(mdata);
237 1 status=I2C_read_ack();
238 1 I2C_stop();
239 1 return status;
240 1 }
C51 COMPILER V8.02 EEPROM 09/26/2008 11:40:17 PAGE 5
241 /********************************************************************************/
242 /* funname : I2C_recv_bit() */
243 /* created : xillinx */
244 /* time : 2008-08-06 */
245 /* descript: I2C总线接收1位数据 */
246 /********************************************************************************/
247 unsigned char I2C_recv_bit(void)
248 { unsigned char mbit;
249 1 I2C_SCLK_PIN=0x1; //* 准备读取数据
250 1 IIC_delay_min();
251 1 mbit=I2C_DATA_PIN;
252 1 IIC_delay_min();
253 1 I2C_SCLK_PIN=0x0; //* 贮备下一个读取数据
254 1 IIC_delay_max();
255 1 return mbit;
256 1 }
257
258 /********************************************************************************/
259 /* funname : I2C_recv_8_bits() */
260 /* created : xillinx */
261 /* time : 2008-08-06 */
262 /* descript: I2C总线接收8位数据 */
263 /********************************************************************************/
264 unsigned char I2C_recv_8_bits(void)
265 { unsigned char i,mdata=0x0;
266 1 I2C_DATA_PIN=0x1;
267 1 for(i=0x0;i<0x8;i++)
268 1 { mdata<<=0x1;
269 2 mdata|=I2C_recv_bit();
270 2 }
271 1 I2C_DATA_PIN=0x0;
272 1 IIC_delay_min();
273 1 return mdata;
274 1 }
275
276 /********************************************************************************/
277 /* funname : AT24C16_write() */
278 /* created : xillinx */
279 /* time : 2008-08-06 */
280 /* descript: I2C总线写入数据 */
281 /* 设备地址字节 */
282 /* | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 | */
283 /* | 1 | 0 | 1 | 0 | A10 | A9 | A8 | R/W | */
284 /********************************************************************************/
285 unsigned char AT24C16_write(unsigned char page, unsigned char address, unsigned char * buffer ,unsigned ch
-ar length)
286 { unsigned char i;
287 1 I2C_start();
288 1 I2C_send_8_bits(AT24C16_WR_CMD|(page<<0x1));
289 1 I2C_read_ack();
290 1 I2C_send_8_bits(address);
291 1 I2C_read_ack();
292 1 for(i=0x0;i<length;i++)
293 1 { I2C_send_8_bits(buffer[i]);
294 2 I2C_read_ack();
295 2 }
296 1 I2C_stop();
297 1 IIC_delay_ms(10);
298 1 return 0x1;
299 1 }
300 /********************************************************************************/
301 /* funname : AT24C16_read() */
C51 COMPILER V8.02 EEPROM 09/26/2008 11:40:17 PAGE 6
302 /* created : xillinx */
303 /* time : 2008-08-06 */
304 /* descript: I2C总线写入数据 */
305 /********************************************************************************/
306 unsigned char AT24C16_read(unsigned char page, unsigned char address, unsigned char * buffer ,unsigned cha
-r length)
307 { unsigned char addr_hi;
308 1 unsigned char i;
309 1 addr_hi=(address>>0x8)&0xFF;
310 1 I2C_start();
311 1 I2C_send_8_bits(AT24C16_WR_CMD|(page<<0x1));
312 1 I2C_read_ack();
313 1 I2C_send_8_bits(address);
314 1 I2C_read_ack(); //* 这时的时钟为低电平
315 1 I2C_go_hi();
316 1 I2C_start();
317 1 I2C_send_8_bits(AT24C16_RD_CMD|(page<<0x1));
318 1 I2C_read_ack();
319 1 for(i=0x0;i<length-0x1;i++)
320 1 { buffer[i]=I2C_recv_8_bits();
321 2 I2C_send_ack();
322 2 }
323 1 buffer[i]=I2C_recv_8_bits();
324 1 I2C_send_nack();
325 1 I2C_stop();
326 1 IIC_delay_ms(10);
327 1 return 0x1;
328 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 505 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 13
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 + -