📄 t.lst
字号:
I2C_Stop();
Delay_N_mS(10); /* waiting for write cycle to be completed */
((uchar*)mcu_address)++;
AT24C64_address++;
}
}
void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count)
{
//DOG_WDI=!DOG_WDI;
//DOGTIME=0;
while(count--)
{
I2C_Start();
/*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/ /* 24C16 USE */
I2C_Send_Byte( 0xa0 );
I2C_Send_Byte( AT24C64_address/256 );
I2C_Send_Byte( AT24C64_address % 256 );
I2C_Start();
/*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/
C51 COMPILER V7.06 T 06/27/2008 14:25:55 PAGE 5
I2C_Send_Byte( 0xa1 );
*(uchar*)mcu_address = I2C_Receive_Byte();
I2C_Nack();
I2C_Stop();
((uchar*)mcu_address)++;
AT24C64_address++;
}
}
#else
252
253 void delay()
254 {
255 1 _nop_();
256 1 _nop_();
257 1 _nop_();
258 1 _nop_();
259 1 _nop_();
260 1 }
261 #if 0
void delayms (uint x)
{
byte j;
while(x--){
for(j=0;j<125;j++){;}
}
}
#endif
270 void I2C_Start() //I2C START
271 {
272 1 SDA=1;
273 1 _nop_();
274 1 SCL=1;
275 1 delay();
276 1 SDA=0;
277 1 delay();
278 1 SCL=0;
279 1 _nop_();
280 1 }
281
282 void I2C_Stop() //I2C STOP
283 {
284 1 SDA=0;
285 1 _nop_();
286 1 SCL=1;
287 1 delay();
288 1 SDA=1;
289 1 delay();
290 1 }
291
292 bit I2C_ReceiveAck()
293 {
294 1 bit ck;
295 1 SDA=1; //THE HOST RELEASE THE BUS
296 1 _nop_();
297 1 _nop_();
298 1 SCL=1;
299 1 _nop_();
300 1 _nop_();
301 1 ck=SDA;
302 1 _nop_();
303 1 _nop_();
C51 COMPILER V7.06 T 06/27/2008 14:25:55 PAGE 6
304 1 SCL=0;
305 1 _nop_();
306 1 return(ck);
307 1 }
308
309
310 void I2C_SendAck()
311
312 {
313 1 SDA=0;
314 1 _nop_();
315 1 _nop_();
316 1 SCL=1;
317 1 delay(); //remain
318 1 SCL=0;
319 1 _nop_();
320 1 _nop_();
321 1 }
322
323 void I2C_SendNoAck()
324
325 {
326 1 SDA=1;
327 1 _nop_();
328 1 _nop_();
329 1 SCL=1;
330 1 delay(); //remain
331 1 SCL=0;
332 1 _nop_();
333 1 _nop_();
334 1 }
335
336 void I2C_SendByte(byte SData)
337 {uchar i;
338 1 for(i=0;i<8;i++)
339 1 { SDA=(bit)(SData&0x80);
340 2 SData=SData<<1;
341 2 SCL=1;
342 2 delay();
343 2 SCL=0;
344 2 }
345 1 }
346
347 byte I2C_ReceiveByte()
348 {uchar i;
349 1 byte RData;
350 1 RData=0;
351 1
352 1 for(i=0;i<8;i++)
353 1 { SDA=1;
354 2 _nop_();
355 2 SCL=1;
356 2 _nop_();
357 2 _nop_();
358 2 RData=RData<<1;
359 2 RData=RData|SDA;
360 2 _nop_();
361 2 _nop_();
362 2 SCL=0;
363 2 }
364 1 return(RData);
365 1 }
C51 COMPILER V7.06 T 06/27/2008 14:25:55 PAGE 7
366 //#define p1(x) P1=~x
367 #define p1(x) delay()
368 void I2C_SendToSubAddress(byte SlaveAddress,uint SubAddress,byte *pSData,uchar N)
369 {
370 1 uchar i;
371 1 I2C_Start();p1(0x1F);
372 1 I2C_SendByte(SlaveAddress);p1(0x2F); //send slave address(write device)
373 1 I2C_ReceiveAck();p1(0x3F);
374 1
375 1 I2C_SendByte(SubAddress/256);p1(0x4F); //send sub address
376 1 I2C_ReceiveAck();p1(0x5F);
377 1
378 1 I2C_SendByte(SubAddress%256);p1(0x6F); //send sub address
379 1 I2C_ReceiveAck();p1(0x7F);
380 1
381 1 /*
382 1 I2C_SendByte(SubAddress);
383 1 I2C_ReceiveAck();
384 1
385 1 */
386 1 for(i=0;i<N;i++)
387 1 { do{
388 3 I2C_SendByte(pSData[i]);
389 3 }while(I2C_ReceiveAck()==1);
390 2 }
391 1 p1(0x8F);
392 1 I2C_Stop();p1(0x9F);
393 1 }
394 void I2C_ReceiveFromSubAddress(byte SlaveAddress,uint SubAddress,byte *pRData,uchar N)
395 {uchar i;
396 1 I2C_Start();
397 1 I2C_SendByte(SlaveAddress); //send slave address(write device)
398 1 I2C_ReceiveAck();
399 1 I2C_SendByte(SubAddress/256); //send sub address
400 1 I2C_ReceiveAck();
401 1 I2C_SendByte(SubAddress%256); //send sub address
402 1 I2C_ReceiveAck();
403 1
404 1 /*
405 1 I2C_SendByte(SubAddress); //send sub address
406 1 I2C_ReceiveAck();
407 1 */
408 1 I2C_Start(); //I2C Start Again!
409 1 I2C_SendByte(SlaveAddress+1); //send slave address(read device)
410 1 I2C_ReceiveAck();
411 1 for(i=0;i<N-1;i++)
412 1 {
413 2 pRData[i]=I2C_ReceiveByte();
414 2 I2C_SendAck();
415 2 }
416 1 pRData[i]=I2C_ReceiveByte();
417 1 I2C_SendNoAck();
418 1 I2C_Stop();
419 1 }
420 /*
421 main()
422 {byte *pData;
423 uint addr;
424 byte a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
425 pData=a;
426 do
427 {
C51 COMPILER V7.06 T 06/27/2008 14:25:55 PAGE 8
428 I2C_SendToSubAddress(0xA0,addr,pData,16);
429 addr+=16;
430 delayms (1);
431 }while(addr!=0x2000);
432 while(1);
433 }
434 */
435 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 706 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 17
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -