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

📄 i2c.lis

📁 nRF24L01详细编程资料
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0062                   .dbend
 0062                   .dbfunc e Read_I2C_Byte _Read_I2C_Byte fc
 0062           ;              i -> R20
 0062           ;           buff -> R22
                        .even
 0062           _Read_I2C_Byte::
 0062 00D0              rcall push_gset2
 0064                   .dbline -1
 0064                   .dbline 124
 0064           ;       }
 0064           ; }
 0064           ; 
 0064           ; 
 0064           ; 
 0064           ; 
 0064           ; 
 0064           ; // ********************************************************* //
 0064           ; // *** This routine will read a byte from the I2C device *** //
 0064           ; // ********************************************************* //
 0064           ; 
 0064           ; unsigned char Read_I2C_Byte(void)
 0064           ; {     
 0064                   .dbline 125
 0064           ;  unsigned char i,buff = 0;
 0064 6627              clr R22
 0066                   .dbline 127
 0066 4427              clr R20
 0068 0AC0              rjmp L21
 006A           L18:
 006A                   .dbline 127
 006A           ;       
 006A           ;       for (i = 0; i < 8; i++){
 006A                   .dbline 129
 006A           ;       
 006A           ;               buff = buff << 1;
 006A 660F              lsl R22
 006C                   .dbline 131
 006C           ;               
 006C           ;               CLEARBIT(I2C_DIR,SDA);                     // Set SDA to input
 006C 3C98              cbi 0x7,4
 006E                   .dbline 133
 006E           ;                               
 006E           ;               SETBIT(I2C_PORT,SCL);                      // Set SCL High,Clock bit out
 006E 459A              sbi 0x8,5
 0070                   .dbline 136
 0070           ; //    NOP();
 0070           ; //    NOP();
 0070           ;       NOP();
 0070 0000              nop
 0072                   .dbline 139
 0072           ;       
 0072           ;               // Read data on SDA pin
 0072           ;               if ( CHECKBIT( I2C_IN,SDA ) ) buff = buff | 0x01;       
 0072 349B              sbis 0x6,4
 0074 01C0              rjmp L22
 0076                   .dbline 139
 0076 6160              ori R22,1
 0078           L22:
 0078                   .dbline 141
 0078 4598              cbi 0x8,5
 007A                   .dbline 145
 007A 0000              nop
 007C                   .dbline 146
 007C           L19:
 007C                   .dbline 127
 007C 4395              inc R20
 007E           L21:
 007E                   .dbline 127
 007E 4830              cpi R20,8
 0080 A0F3              brlo L18
 0082                   .dbline 150
 0082           ;               
 0082           ;               CLEARBIT(I2C_PORT,SCL);                    // Clear SCL         
 0082           ; 
 0082           ; //    NOP();
 0082           ; //    NOP();
 0082           ;       NOP();
 0082           ;         }
 0082           ; 
 0082           ;  // *** No ACK *** //
 0082           ;  
 0082           ;  I2C_Clock();                                                // Clock I2C bit
 0082 CEDF              rcall _I2C_Clock
 0084                   .dbline 152
 0084           ;       
 0084           ;  return buff;                                                    // Return our I2C byte
 0084 062F              mov R16,R22
 0086                   .dbline -2
 0086           L17:
 0086 00D0              rcall pop_gset2
 0088                   .dbline 0 ; func end
 0088 0895              ret
 008A                   .dbsym r i 20 c
 008A                   .dbsym r buff 22 c
 008A                   .dbend
 008A                   .dbfunc e I2C_Ackn _I2C_Ackn fc
 008A           ;           Ackn -> R16
                        .even
 008A           _I2C_Ackn::
 008A                   .dbline -1
 008A                   .dbline 163
 008A           ; }
 008A           ; 
 008A           ; 
 008A           ; 
 008A           ; 
 008A           ; // *********************************************************************** //
 008A           ; // *** This routine returns a 0 if the I2C device sends an acknowledge *** //
 008A           ; // *********************************************************************** //
 008A           ; 
 008A           ; unsigned char I2C_Ackn(void)
 008A           ; {
 008A                   .dbline 164
 008A           ;  unsigned char Ackn = 0;                 // Temp RAM for Ackn flag
 008A 0027              clr R16
 008C                   .dbline 166
 008C           ;       
 008C           ;  CLEARBIT(I2C_PORT,SCL);
 008C 4598              cbi 0x8,5
 008E                   .dbline 167
 008E           ;  CLEARBIT(I2C_DIR,SDA);                  // Set SDA to input  
 008E 3C98              cbi 0x7,4
 0090                   .dbline 169
 0090           ;  
 0090           ;  SETBIT(I2C_PORT,SCL);                           // Clock the ACK bit
 0090 459A              sbi 0x8,5
 0092                   .dbline 171
 0092           ; 
 0092           ;  if ( CHECKBIT( I2C_IN,SDA ) ) Ackn = 1;        // Check the ACK bit on SDA   
 0092 349B              sbis 0x6,4
 0094 01C0              rjmp L25
 0096                   .dbline 171
 0096 01E0              ldi R16,1
 0098           L25:
 0098                   .dbline 173
 0098           ;  
 0098           ;  CLEARBIT(I2C_PORT,SCL);                 // Clear the clock
 0098 4598              cbi 0x8,5
 009A                   .dbline 175
 009A           ; 
 009A           ;  return Ackn;                                    // Return our ACK bit
 009A                   .dbline -2
 009A           L24:
 009A                   .dbline 0 ; func end
 009A 0895              ret
 009C                   .dbsym r Ackn 16 c
 009C                   .dbend
 009C                   .dbfunc e I2C_Write _I2C_Write fV
 009C           ;           Data -> R20
 009C           ;          M_ADD -> R22
                        .even
 009C           _I2C_Write::
 009C 00D0              rcall push_gset2
 009E 422F              mov R20,R18
 00A0 602F              mov R22,R16
 00A2                   .dbline -1
 00A2                   .dbline 182
 00A2           ; }     
 00A2           ; 
 00A2           ; 
 00A2           ; 
 00A2           ; 
 00A2           ; void I2C_Write(unsigned char M_ADD, unsigned char Data)
 00A2           ; {
 00A2                   .dbline 183
 00A2           ;  I2C_Start();                                            // Set I2C start condition
 00A2 B3DF              rcall _I2C_Start
 00A4                   .dbline 185
 00A4           ; 
 00A4           ;  Write_I2C_Byte(0x64);                                   // Send the EEPROM internal Address
 00A4 04E6              ldi R16,100
 00A6 C0DF              rcall _Write_I2C_Byte
 00A8                   .dbline 187
 00A8           ; 
 00A8           ;  Write_I2C_Byte(M_ADD);                                  // Send the EEPROM internal Address
 00A8 062F              mov R16,R22
 00AA BEDF              rcall _Write_I2C_Byte
 00AC                   .dbline 189
 00AC           ;   
 00AC           ;  Write_I2C_Byte(Data);                                   // Send the EEPROM Data
 00AC 042F              mov R16,R20
 00AE BCDF              rcall _Write_I2C_Byte
 00B0                   .dbline 191
 00B0           ;  
 00B0           ;  I2C_Stop();                                             // Set I2C Stop condition
 00B0 B1DF              rcall _I2C_Stop
 00B2                   .dbline -2
 00B2           L27:
 00B2 00D0              rcall pop_gset2
 00B4                   .dbline 0 ; func end
 00B4 0895              ret
 00B6                   .dbsym r Data 20 c
 00B6                   .dbsym r M_ADD 22 c
 00B6                   .dbend
 00B6                   .dbfunc e I2C_Read _I2C_Read fc
 00B6           ;           Temp -> R20
 00B6           ;          M_ADD -> R20
                        .even
 00B6           _I2C_Read::
 00B6 00D0              rcall push_gset1
 00B8 402F              mov R20,R16
 00BA                   .dbline -1
 00BA                   .dbline 198
 00BA           ; }
 00BA           ; 
 00BA           ; 
 00BA           ; 
 00BA           ; 
 00BA           ; ubyte I2C_Read(unsigned char M_ADD)
 00BA           ; {
 00BA                   .dbline 201
 00BA           ; ubyte Temp;                                   // Temp RAM for EEPROM Read
 00BA           ;  
 00BA           ;  I2C_Start();                                            // Set I2C start condition
 00BA A7DF              rcall _I2C_Start
 00BC                   .dbline 203
 00BC           ; 
 00BC           ;  Write_I2C_Byte(0x64);                                   // Send the EEPROM internal Address
 00BC 04E6              ldi R16,100
 00BE B4DF              rcall _Write_I2C_Byte
 00C0                   .dbline 205
 00C0           ; 
 00C0           ;  Write_I2C_Byte(M_ADD);                                  // Send the EEPROM internal Address
 00C0 042F              mov R16,R20
 00C2 B2DF              rcall _Write_I2C_Byte
 00C4                   .dbline 207
 00C4           ;  
 00C4           ;  I2C_Start();                                            // Set I2C start condition
 00C4 A2DF              rcall _I2C_Start
 00C6                   .dbline 209
 00C6           ;  
 00C6           ;   Write_I2C_Byte(0x65);                                  // Send the EEPROM internal Address
 00C6 05E6              ldi R16,101
 00C8 AFDF              rcall _Write_I2C_Byte
 00CA                   .dbline 211
 00CA           ; 
 00CA           ;  Temp = Read_I2C_Byte();                         // Read data from EEPROM
 00CA CBDF              rcall _Read_I2C_Byte
 00CC 402F              mov R20,R16
 00CE                   .dbline 213
 00CE           ;  
 00CE           ;  I2C_Stop();                                             // Set I2C Stop condition
 00CE A2DF              rcall _I2C_Stop
 00D0                   .dbline 215
 00D0           ; 
 00D0           ;  return Temp;                                            // Return data from EEPROM
 00D0 042F              mov R16,R20
 00D2                   .dbline -2
 00D2           L28:
 00D2 00D0              rcall pop_gset1
 00D4                   .dbline 0 ; func end
 00D4 0895              ret
 00D6                   .dbsym r Temp 20 c
 00D6                   .dbsym r M_ADD 20 c
 00D6                   .dbend

⌨️ 快捷键说明

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