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

📄 i2c.lis

📁 sunplus spca514 cdmp3 源码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                         .module I2c.c
                         .area text(rom, con, rel)
 0000                   .dbfile D:\avrmcu\AT980\I2C\I2c.c
 0000                   .dbfunc s I2C_delay _I2C_delay fI
                       ;              i -> R16
                         .even
 0000                 _I2C_delay::
 0000                   .dbline -1
 0000                   .dbline 22
                       ; /***********************************************************************/
                       ; 
                       ; 
                       ; 
                       ; 
                       ; #include <iom163.h>
                       ; 
                       ; #include "..\io.h"
                       ; #define TRUE   1
                       ; #define FALSE  0
                       ; 
                       ; #define I2C_MAX_WAIT    110 /* in microseconds */
                       ; 
                       ;     #define HOLDING_TIME    10
                       ; 
                       ; /*
                       ;  * These local functions wait for the other end the set the bit to a
                       ;  * certain level.
                       ;  */
                       ; 
                       ; void I2C_delay(void)
                       ; {
 0000                   .dbline 24
                       ;  unsigned char i;
                       ;  for(i=0;i<80;i++)
 0000 0027              clr R16
 0002 01C0              xjmp L5
 0004                 L2:
 0004                   .dbline 25
 0004                   .dbline 26
 0004                 L3:
 0004                   .dbline 24
 0004 0395              inc R16
 0006                 L5:
 0006                   .dbline 24
 0006 0035              cpi R16,80
 0008 E8F3              brlo L2
 000A                   .dbline -2
 000A                   .dbline 27
                       ;  {
                       ;  }
                       ; }
 000A                 L1:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbsym r i 16 c
 000C                   .dbfunc s I2C_delay1 _I2C_delay1 fI
                       ;              i -> R20
                       ;           viod -> R16,R17
                         .even
 000C                 _I2C_delay1::
 000C 0E940000          xcall push_gset1
 0010                   .dbline -1
 0010                   .dbline 29
                       ; void I2C_delay1(viod)
                       ; {
 0010                   .dbline 31
                       ;  unsigned char i;
                       ;  for(i=0;i<200;i++)
 0010 4427              clr R20
 0012 01C0              xjmp L10
 0014                 L7:
 0014                   .dbline 32
 0014                   .dbline 33
 0014                 L8:
 0014                   .dbline 31
 0014 4395              inc R20
 0016                 L10:
 0016                   .dbline 31
 0016 483C              cpi R20,200
 0018 E8F3              brlo L7
 001A                   .dbline 33
                       ;  {
                       ;  };
 001A                   .dbline -2
 001A                   .dbline 34
                       ; }
 001A                 L6:
 001A 0E940000          xcall pop_gset1
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbsym r i 20 c
 0020                   .dbsym r viod 16 I
 0020                   .dbfunc s wait_sda_hi _wait_sda_hi fI
                       ;              i -> R20
                         .even
 0020                 _wait_sda_hi:
 0020 0E940000          xcall push_gset1
 0024                   .dbline -1
 0024                   .dbline 48
                       ; /*static unsigned char wait_sda_lo(void)
                       ; {
                       ;     int i = I2C_MAX_WAIT/5;
                       ;     sda_set_input();
                       ;     while(i && is_sda_hi()) {
                       ;         i--;
                       ;         I2C_delay();        
                       ;     }
                       ;     sda_set_output();
                       ;     return i?TRUE:FALSE;
                       ; }*/
                       ; 
                       ; static unsigned char wait_sda_hi(void)
                       ; {
 0024                   .dbline 49
                       ;     unsigned char i = I2C_MAX_WAIT;
 0024 4EE6              ldi R20,110
 0026                   .dbline 50
                       ;     sda_set_input();
 0026 A198              CBI 0x14,1
 0028 08C0              xjmp L13
 002A                 L12:
 002A                   .dbline 52
                       ;     while(i)
                       ;     {
 002A                   .dbline 53
                       ;       if(is_sda_hi())
 002A 999B              sbis 0x13,1
 002C 04C0              rjmp L15
 002E                   .dbline 54
                       ;       { 
 002E                   .dbline 55
                       ;         sda_set_output();
 002E A19A              SBI 0x14,1
 0030                   .dbline 56
                       ;          return TRUE;
 0030 01E0              ldi R16,1
 0032 10E0              ldi R17,0
 0034 07C0              xjmp L11
 0036                 L15:
 0036                   .dbline 58
 0036 4A95              dec R20
 0038                   .dbline 59
 0038 E9DF              xcall _I2C_delay1
 003A                   .dbline 60
 003A                 L13:
 003A                   .dbline 51
 003A 4423              tst R20
 003C B1F7              brne L12
 003E                   .dbline 61
                       ;        }
                       ;         i--;
                       ;         I2C_delay1();       
                       ;     }
                       ;     sda_set_output();
 003E A19A              SBI 0x14,1
 0040                   .dbline 62
                       ;     return FALSE;
 0040 0027              clr R16
 0042 1127              clr R17
 0044                   .dbline -2
 0044                 L11:
 0044 0E940000          xcall pop_gset1
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r i 20 c
 004A                   .dbfunc s wait_scl_hi _wait_scl_hi fI
                       ;              i -> R20
                         .even
 004A                 _wait_scl_hi:
 004A 0E940000          xcall push_gset1
 004E                   .dbline -1
 004E                   .dbline 66
                       ; }
                       ; 
                       ; static unsigned char wait_scl_hi(void)
                       ; {
 004E                   .dbline 67
                       ;     unsigned char i = I2C_MAX_WAIT;
 004E 4EE6              ldi R20,110
 0050                   .dbline 69
                       ; 
                       ;     scl_set_input();
 0050 A098              CBI 0x14,0
 0052 08C0              xjmp L19
 0054                 L18:
 0054                   .dbline 71
                       ;     while(i)
                       ;     {
 0054                   .dbline 72
                       ;         if(is_scl_hi())
 0054 989B              sbis 0x13,0
 0056 04C0              rjmp L21
 0058                   .dbline 73
                       ;         { 
 0058                   .dbline 74
                       ;           scl_set_output();
 0058 A09A              SBI 0x14,0
 005A                   .dbline 75
                       ;           return TRUE;
 005A 01E0              ldi R16,1
 005C 10E0              ldi R17,0
 005E 07C0              xjmp L17
 0060                 L21:
 0060                   .dbline 77
 0060 4A95              dec R20
 0062                   .dbline 78
 0062 D4DF              xcall _I2C_delay1
 0064                   .dbline 79
 0064                 L19:
 0064                   .dbline 70
 0064 4423              tst R20
 0066 B1F7              brne L18
 0068                   .dbline 80
                       ;         }
                       ;         i--;
                       ;         I2C_delay1();       
                       ;     }
                       ;     scl_set_output();
 0068 A09A              SBI 0x14,0
 006A                   .dbline 81
                       ;     return FALSE;
 006A 0027              clr R16
 006C 1127              clr R17
 006E                   .dbline -2
 006E                 L17:
 006E 0E940000          xcall pop_gset1
 0072                   .dbline 0 ; func end
 0072 0895              ret
 0074                   .dbsym r i 20 c
 0074                   .dbfunc s i2c_start _i2c_start fI
                         .even
 0074                 _i2c_start::
 0074                   .dbline -1
 0074                   .dbline 92
                       ; }
                       ; 
                       ; /*
                       ;  * This function is called before an I2C transfer is started.  A start
                       ;  * condition is signified with a high-to-low transition of SDA while SCL
                       ;  * is high.
                       ;  */
                       ; 
                       ; 
                       ;  unsigned char i2c_start(void)
                       ; {
 0074                   .dbline 94
                       ; 
                       ;     scl_set_output();
 0074 A09A              SBI 0x14,0
 0076                   .dbline 95
                       ;     scl_hi();
 0076 A89A              SBI 0x15,0
 0078                   .dbline 97
                       ;                     // SEC LEE0216
                       ;     I2C_delay();//HOLDING_TIME*3);
 0078 C3DF              xcall _I2C_delay
 007A                   .dbline 98
                       ;     sda_set_output();
 007A A19A              SBI 0x14,1
 007C                   .dbline 99
                       ;     sda_hi();
 007C A99A              SBI 0x15,1
 007E                   .dbline 100
                       ;     I2C_delay();//HOLDING_TIME*3);
 007E C0DF              xcall _I2C_delay
 0080                   .dbline 101
                       ;     scl_hi();                   // SEC LEE0216
 0080 A89A              SBI 0x15,0
 0082                   .dbline 102
                       ;     if (!wait_scl_hi())
 0082 E3DF              xcall _wait_scl_hi
 0084 1801              movw R2,R16
 0086 2220              tst R2
 0088 19F4              brne L24
 008A                   .dbline 103
                       ;         return FALSE;
 008A 0027              clr R16
 008C 1127              clr R17
 008E 06C0              xjmp L23
 0090                 L24:
 0090                   .dbline 105
                       ; 
                       ;     sda_lo();           /* this triggers the start */
 0090 A998              CBI 0x15,1
 0092                   .dbline 106
                       ;     I2C_delay();//HOLDING_TIME*3);
 0092 B6DF              xcall _I2C_delay
 0094                   .dbline 107
                       ;     scl_lo();
 0094 A898              CBI 0x15,0
 0096                   .dbline 108
                       ;     I2C_delay();//HOLDING_TIME*3);
 0096 B4DF              xcall _I2C_delay
 0098                   .dbline 109
                       ;     return TRUE;
 0098 01E0              ldi R16,1
 009A 10E0              ldi R17,0
 009C                   .dbline -2
 009C                 L23:
 009C                   .dbline 0 ; func end
 009C 0895              ret
 009E                   .dbfunc s i2c_stop _i2c_stop fI
                         .even
 009E                 _i2c_stop::
 009E                   .dbline -1
 009E                   .dbline 118
                       ; }

⌨️ 快捷键说明

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