⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c_driver.msa

📁 炬力方案176*132软件源码,适用于AK1025
💻 MSA
📖 第 1 页 / 共 2 页
字号:
          output parameter:A:1-success;0:fail.
                           C:One Byte Data.
***************************************************************************/
I2C_ReadOneByte:
             PUSH    DE
             PUSH    HL
                                      
             LD      A,E
             CP      01H
             JR      Z,Rd_Send_Restart
             CP      02H
             JR      Z,Rd_Send_Stop
                                               
             LD      A,(I2CSPEED)                  //read one byte
             ADD     A,82H              
             OUT     (I2CCTL),A                    //Realse I2C-must need!!!
             
             CALL    LWRD Recv_complete
             CP      00H
             JR      Z,I2C_ReadOneByte_Exit
             IN      A,(I2CDAT)
             LD      C,A
             LD      A,01H
             JP      I2C_ReadOneByte_Exit

Rd_Send_Restart:
             CALL    LWRD I2C_Restart              //Send NACK & Restart& receive the last data 
             CALL    LWRD Recv_complete
             CP      00H
             JR      Z,I2C_ReadOneByte_Exit
             IN      A,(I2CDAT)
             LD      C,A
             
             LD      A,(I2CSPEED)
             ADD     A,82H
               OUT     (I2CCTL),A                          //release i2c;Must need!!!!
               
               LD      A,01H
             JR      I2C_ReadOneByte_Exit   

Rd_Send_Stop:
             CALL    LWRD I2C_Stop                //Send Stop & NACK & receive the last data
             CALL    LWRD Recv_complete
             CP      00H
             JR      Z,I2C_ReadOneByte_Exit
             IN      A,(I2CDAT)
             LD      C,A
             
             LD      A,(I2CSPEED)
             ADD     A,82H
               OUT     (I2CCTL),A                          //release i2c;Must need!!!!
               
               CALL    LWRD Wait_Stop
               LD      A,01H
             JR      I2C_ReadOneByte_Exit
                                      
I2C_ReadOneByte_Exit:  
             POP     HL           
             POP     DE
             RET                                       

/***************************************************************************
        I2C Restart
          input parameter:NO
          output parameter:NO
***************************************************************************/
I2C_Restart:  
             LD    A,(I2CSPEED)
             ADD   A,8FH           
             OUT    (I2CCTL),A                 //Start condition             
             RET
                          
/***************************************************************************
        I2C Stop
          input parameter:NO
          output parameter:NO
***************************************************************************/
I2C_Stop:   
             LD    A,(I2CSPEED)
             ADD   A,8BH
             OUT    (I2CCTL),A             
             RET
             
/***************************************************************************
        wait Stop:wait stop complete
          input parameter:NO
          output parameter:NO
***************************************************************************/
Wait_Stop:
             PUSH   AF                       
Wait_Stopxxx:             
             IN     A,(I2CSTA)
             BIT    6,A
             JR     Z,Wait_Stopxxx
             
             POP    AF
             RET 
                         
/***************************************************************************
        I2C Exit
          input parameter:NO
          output parameter:NO
***************************************************************************/
I2C_Exit:
             LD      A,00H
             OUT     (I2CCTL),A
             RET             

/***************************************************************************
              Trans_complete
         input parameter:NO
         output parameter:A-1:Transmit complete;0:fail.
***************************************************************************/
Trans_complete:
             PUSH   BC
                          
             //LD     C,3FH
Trans_complete_loop:
             //DEC    C
             //JR     Z,Trans_complete_error       //Timeout error                                                   
             IN        A,(I2CSTA)
             BIT    7,A
             JR     Z,Trans_complete_loop
             
             CALL   DELAY_5us
             
             CALL   Test_ACK
             CP     00H
             JR     Z,Trans_complete_error             
             
//ADD 2005.3.18             
             LD     A,80H                         //Clear complete bit
             OUT    (I2CSTA),A
////             
////modify 2005.4.21
//             CALL   Test_ACK
//             CP     00H
//             JR     Z,Trans_complete_error
             
             LD     A,01H
             JR     Trans_complete_exit
Trans_complete_error:             
             LD     A,00H                        
Trans_complete_exit:                                                          
             POP    BC
             RET  
              
/***********************************************************************
                Recv_complete
         input parameter:NO
         output parameter:A:1:Receive complete;0:fail.
************************************************************************/
Recv_complete:
             PUSH   BC
                          
             //LD     C,3FH
Recv_complete_loop:
             //DEC    C
             //JR     Z,Recv_complete_error       //Timeout error                                                   
             IN        A,(I2CSTA)
             BIT    7,A
             JR     Z,Recv_complete_loop
//ADD 2005.3.18             
             LD     A,80H                         //Clear complete bit
             OUT    (I2CSTA),A
//             
             LD     A,01H
             JR     Recv_complete_exit
Recv_complete_error:             
             LD     A,00H
Recv_complete_exit:
             POP    BC
             RET
             
/**********************************************************************
                TEST ACK
          input parameter:NO
          output parameter:A:1:ACK;0:NACK. 
***********************************************************************/             
Test_ACK:                        
             IN     A,(I2CCTL)
             BIT    0,A
             JR        Z,ACK_OK
             LD     A,00H
             JR     ACK_exit     
ACK_OK:
             LD     A,01H
ACK_exit:                                      
             RET 
             
/***************************************************
                DELAY 15us
***************************************************/
DELAY_15us:
          PUSH   BC
          LD     B,18
WAIT_DELAY:
           PUSH   AF
           POP    AF 
           DJNZ   WAIT_DELAY
           POP    BC
           RET  
           
/***************************************************
                DELAY 5us
***************************************************/
DELAY_5us:
            PUSH   BC
            LD     B,6
WAIT_DELAY1:
            NOP
            NOP
            NOP
            NOP
            DJNZ   WAIT_DELAY
            POP    BC
            RET            
                                                                                        
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -