?? iic.lst
字號:
BYTE data j;
error=0;
if(error)
{
IIC2_Stop();
return;
}
IIC2_Start();
error=IIC2_Data_In(device);
if(error)
{
IIC2_Stop();
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 5
return;
}
error=IIC2_Data_In(address%256);
if(error)
{
IIC2_Stop();
return;
}
error=IIC2_Data_In(address/256);
if(error)
{
IIC2_Stop();
return;
}
while(count!=0)
{
j=*IICBufPtr;
error=IIC2_Data_In(*IICBufPtr);
if(error)
break;
count--;
IICBufPtr++;
}
IIC2_Stop();
}
//iic read function with two byte address
void IIC_Read2(BYTE device, WORD address, BYTE count)
{
if(error)
{
IIC2_Stop();
return;
}
IIC2_Start();
error=IIC2_Data_In(device);
if(error)
{
IIC2_Stop();
return;
}
error=IIC2_Data_In(address%256);
if(error)
{
IIC2_Stop();
return;
}
error=IIC2_Data_In(address/256);
if(error)
{
IIC2_Stop();
return;
}
IIC2_Stop();
IIC2_Start();
error=IIC2_Data_In(device|1);
if(error)
{
IIC2_Stop();
return;
}
while(count!=0)
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 6
{
*IICBufPtr=IIC2_Data_Out();
if(count==1) // last byte
{
Send2_Acknowledge(1);
}
else
{
Send2_Acknowledge(0);
}
count--;
IICBufPtr++;
}
IIC2_Stop();
}
#else
321 #ifdef HARDIIC2
322 // hardware IIC
323 // Wait for byM230_IIC_MBUFI flag and clear it, return 1 if time out, and check ack.
324 bit wait_IIC(void)
325 {
326 1 IICWait=IIC_WAIT_TIME;
327 1 error=0;
328 1 //check MBuf sent/received
329 1 while( (byM230_IIC_INTFLG&0x01)==0) // Wait for byM230_IIC_MBUFl
330 1 {
331 2 if(IICWait==0)
332 2 {
333 3 error=1;
334 3 break;
335 3 }
336 2 }
337 1 // check ack
338 1 if((byM230_IIC_STUS2&0x80) != 0)
339 1 {
340 2 error=1;
341 2 }
342 1
343 1 byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
344 1 return(error);
345 1 }
346
347 void I2cStart(void)
348 {
349 1 byM230_IIC_CTR=0x00;
350 1 ShortDelay(1);
351 1 byM230_IIC_CTR=byM230_IIC_CTR|0x01; //S rise
352 1 }
353
354 /*
355 void I2cStop(void)
356 {
357 byM230_IIC_CTR=0x00;
358 ShortDelay(1);
359 byM230_IIC_CTR=byM230_IIC_CTR|0x02; //P rise
360 }
361 */
362 /*
363 void SendAck(bit NoAck)
364 {
365 if(NoAck)
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 7
366 {
367 byM230_IIC_CTR=0x84;
368 }
369 else
370 {
371 byM230_IIC_CTR=0x80;
372 }
373 }*/
374
375 void IICWrite(BYTE slave,BYTE address,BYTE count)
376 {
377 1 BYTE data i;
378 1
379 1 byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
380 1 byM230_IIC_MBUF=slave; // First byte of IIC data:slave address
381 1 I2cStart();
382 1 error=wait_IIC();
383 1
384 1 byM230_IIC_MBUF=address; // Send next byte:sub address
385 1 error=wait_IIC();
386 1
387 1 for(i=0; i<count; i++)
388 1 {
389 2 byM230_IIC_MBUF=*IICBufPtr; // Send next byte
390 2 IICBufPtr++;
391 2 error=wait_IIC();
392 2 if(error==1) break;
393 2 }
394 1
395 1 I2cStop();
396 1 }
397
398 void IICRead(BYTE slave, BYTE address, BYTE count)
399 {
400 1 BYTE data i;
401 1
402 1 byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
403 1 //start
404 1 byM230_IIC_CTR=0x80; // S=0,P=0
405 1 byM230_IIC_MBUF=slave; // slave address (dummy write)
406 1 ShortDelay(1);
407 1 byM230_IIC_CTR=0x81; // S=1,P=0
408 1 error=wait_IIC();
409 1 //dummy write
410 1 ShortDelay(1);
411 1 byM230_IIC_MBUF=address; //sub address
412 1 error=wait_IIC();
413 1
414 1 //restart
415 1 byM230_IIC_CTR=byM230_IIC_CTR & 0xfe; // S set 0
416 1 byM230_IIC_MBUF=slave|0x01; //restart + slave address (read)
417 1 ShortDelay(1);
418 1 byM230_IIC_CTR=byM230_IIC_CTR | 0x01; // S set 1
419 1 error=wait_IIC();
420 1 //dummy read
421 1 ShortDelay(1);
422 1 IICBuf.ByteArray[0]=byM230_IIC_MBUF;
423 1 error=wait_IIC();
424 1 i=0;
425 1 while(count!=0)
426 1 {
427 2 if(count==1)
C51 COMPILER V7.07 IIC 12/01/2003 15:27:33 PAGE 8
428 2 {
429 3 //byM230_IIC_CTR=byM230_IIC_CTR|0x04; //Ack=1
430 3 byM230_IIC_CTR=0x05; //Ack=1
431 3 }
432 2 ShortDelay(1);
433 2 *IICBufPtr=byM230_IIC_MBUF;
434 2 IICBufPtr++;
435 2 error=wait_IIC();
436 2 if(error==1) break;
437 2 count--;
438 2 i++;
439 2 }
440 1 I2cStop();
441 1 }
442 #else
// no define SOFTIIC2 or HARDIIC2
#endif
445 #endif
446
447
448
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 329 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 6
IDATA SIZE = 33 ----
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 + -