2017-11-29 16 views
0

PIC 18F4520のOLEDと通信するためにI2Cビットを実行しようとしました。その 'clock stretching'がなくてもうまく動作しますが、 'clock stretching'を置くと動作しません。また、私は、ACKパルスの前後に 'クロックストレッチ'ブロックを置いて試してみました。どちらも動作していません。クロック伸張でI2Cビットが動作しない

void send_packet(){ 
    /* Soft_I2C_Start();    //Here its working fine 
    Soft_I2C_Write(0x78);    
    Soft_I2C_Write(tx_packet[0]); 
    Soft_I2C_Write(tx_packet[1]);  
    Soft_I2C_Stop();*/ 

    unsigned char i,temp=0x78;   //Slave Address with write permission 
    ASDA=1;   //Start Condition 
    ASCL=1; 
    delay_ms(1); 

    ASDA=0; 
    ASCL=0; 

    for(i=0;i<8;i++){ 
     if(temp & 0x80){ 
      ASDA=1; 
     } 
     else{ 
      ASDA=0; 
     } 

     temp=temp<<1; 
     ASCL=1; 
     ASCL=0; 
    } 

    ASCL=1;   //Acknowledgment Pulse 
    ASCL=0; 

    while(PORTC.RC4==0); //Clock Stretching 

    for(i=0;i<8;i++){ 
     if(tx_packet[0] & 0x80){ 
      ASDA=1; 
     } 
     else{ 
      ASDA=0; 
     } 

     tx_packet[0]=tx_packet[0]<<1; 
     ASCL=1; 
     ASCL=0; 
    } 

    ASCL=1;   //Acknowledgment Pulse 
    ASCL=0; 

    while(PORTC.RC4==0); //Clock Stretching 

    for(i=0;i<8;i++){ 
     if(tx_packet[1] & 0x80){ 
      ASDA=1; 
     } 
     else{ 
      ASDA=0; 
     } 

     tx_packet[1]=tx_packet[1]<<1; 
     ASCL=1; 
     ASCL=0; 
    } 

    ASCL=1;   //Acknowledgment Pulse 
    ASCL=0; 

    while(PORTC.RC4==0); //Clock Stretching 

    ASCL=1; //Stop Condition 
    ASDA=1; 

} 

答えて

0

IF((TEMP &は0x80)== 1){& 0x80の2つの可能な値、0とは0x80を有する

TEMP。決して== 1.

+0

ありがとうございます。 。 。私はそのエラーを修正しますが、まだ動作していません。 。 。編集したコード –

+0

が更新されました。 。 。問題は、クロックストレッチラインです。 。私はそれとその作業を取り除いた。 。 。しかし、私はまだ疑問があります。時計の伸びには何が間違っていますか? –

+0

私の質問も同様に更新されました –

関連する問題