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

📄 i2c_demo.lis

📁 本人改编和测试过的用于AVR mega128关于I2C总线的应用实例--使用EEPROM的读写方法。采用ICCAVR编译器实验。
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0074           ;  
 0074           ;  Temp = Read_I2C_Byte();                         // Read data from EEPROM
 0074 0E940000          xcall _Read_I2C_Byte
 0078 A02E              mov R10,R16
 007A                   .dbline 114
 007A           ;  
 007A           ;  I2C_Stop();                                             // Set I2C Stop condition
 007A 0E940000          xcall _I2C_Stop
 007E                   .dbline 116
 007E           ; 
 007E           ;  return Temp;                                            // Return data from EEPROM
 007E 0A2D              mov R16,R10
 0080                   .dbline -2
 0080           L2:
 0080                   .dbline 0 ; func end
 0080 2196              adiw R28,1
 0082 0C940000          xjmp pop_xgset003C
 0086                   .dbsym r Temp 10 c
 0086                   .dbsym r M_ADD 12 i
 0086                   .dbsym r H_ADD 10 c
 0086                   .dbend
 0086                   .dbfunc e main _main fV
 0086           ;              k -> R12
 0086           ;           data -> y+1
 0086           ;              j -> R10
 0086           ;              i -> R22,R23
 0086           ;              c -> R20,R21
                        .even
 0086           _main::
 0086 2297              sbiw R28,2
 0088                   .dbline -1
 0088                   .dbline 125
 0088           ; }
 0088           ; 
 0088           ; 
 0088           ; 
 0088           ; 
 0088           ; //AT24C512B使用2BYTE片内地址。
 0088           ; unsigned char bf[26];
 0088           ; void main (void)
 0088           ; {
 0088                   .dbline 131
 0088           ;   unsigned int i;
 0088           ;   unsigned char j, k;
 0088           ;   unsigned int c;                       // Temp Ram used for write delay
 0088           ;   volatile unsigned char data;
 0088           ;   
 0088           ;   DDRG |=BIT(PG1);
 0088 999A              sbi 0x13,1
 008A                   .dbline 132
 008A           ;   PORTG |=BIT(PG1); //VCC =high.
 008A A19A              sbi 0x14,1
 008C                   .dbline 134
 008C           ;   
 008C           ;   I2C_DIR |= BIT(PD0)|BIT(PD1);                                 // Set Port B to Outputs
 008C 8AB1              in R24,0xa
 008E 8360              ori R24,3
 0090 8AB9              out 0xa,R24
 0092                   .dbline 136
 0092           ;   
 0092           ;   Init_I2C();                           // Setup the hardware port
 0092 0E940000          xcall _Init_I2C
 0096 35C0              xjmp L5
 0098           L4:
 0098                   .dbline 139
 0098           ;   
 0098           ;   while (true)
 0098           ;   {
 0098                   .dbline 140
 0098           ;     for (k=0,i=0x1050, j='A'; 1; i++,j++ )
 0098 CC24              clr R12
 009A 60E5              ldi R22,4176
 009C 70E1              ldi R23,16
 009E 81E4              ldi R24,65
 00A0 A82E              mov R10,R24
 00A2 25C0              xjmp L10
 00A4           L7:
 00A4                   .dbline 141
 00A4           ;     {
 00A4                   .dbline 142
 00A4           ;       EEPROM_Write( 1 , i , j );
 00A4 A882              std y+0,R10
 00A6 9B01              movw R18,R22
 00A8 01E0              ldi R16,1
 00AA AADF              xcall _EEPROM_Write
 00AC                   .dbline 144
 00AC           ;       
 00AC           ;       for(c=0;c<5000;c++);              // Delay for EEPROM Write
 00AC 4427              clr R20
 00AE 5527              clr R21
 00B0 02C0              xjmp L14
 00B2           L11:
 00B2                   .dbline 144
 00B2           L12:
 00B2                   .dbline 144
 00B2 4F5F              subi R20,255  ; offset = 1
 00B4 5F4F              sbci R21,255
 00B6           L14:
 00B6                   .dbline 144
 00B6 4838              cpi R20,136
 00B8 E3E1              ldi R30,19
 00BA 5E07              cpc R21,R30
 00BC D0F3              brlo L11
 00BE           X0:
 00BE                   .dbline 146
 00BE           ;       
 00BE           ;       data = EEPROM_Read( 1, i );       // Read device 1, memory address 1
 00BE 9B01              movw R18,R22
 00C0 01E0              ldi R16,1
 00C2 BBDF              xcall _EEPROM_Read
 00C4 0983              std y+1,R16
 00C6                   .dbline 147
 00C6           ;       bf[k++] =data;
 00C6 2C2C              mov R2,R12
 00C8 3324              clr R3
 00CA 822D              mov R24,R2
 00CC 8F5F              subi R24,255    ; addi 1
 00CE C82E              mov R12,R24
 00D0 80E0              ldi R24,<_bf
 00D2 90E0              ldi R25,>_bf
 00D4 E22D              mov R30,R2
 00D6 FF27              clr R31
 00D8 E80F              add R30,R24
 00DA F91F              adc R31,R25
 00DC 202E              mov R2,R16
 00DE 2082              std z+0,R2
 00E0                   .dbline 148
 00E0           ;       if (j=='Z') break;
 00E0 8A2D              mov R24,R10
 00E2 8A35              cpi R24,90
 00E4 09F4              brne L15
 00E6           X1:
 00E6                   .dbline 148
 00E6 04C0              xjmp L9
 00E8           L15:
 00E8                   .dbline 150
 00E8           ;       
 00E8           ;     }
 00E8           L8:
 00E8                   .dbline 140
 00E8 6F5F              subi R22,255  ; offset = 1
 00EA 7F4F              sbci R23,255
 00EC A394              inc R10
 00EE           L10:
 00EE                   .dbline 140
 00EE DACF              xjmp L7
 00F0           L9:
 00F0                   .dbline 152
 00F0           ;     
 00F0           ;     for(c=0;c<5000;c++);                // Delay for EEPROM Write
 00F0 4427              clr R20
 00F2 5527              clr R21
 00F4 02C0              xjmp L20
 00F6           L17:
 00F6                   .dbline 152
 00F6           L18:
 00F6                   .dbline 152
 00F6 4F5F              subi R20,255  ; offset = 1
 00F8 5F4F              sbci R21,255
 00FA           L20:
 00FA                   .dbline 152
 00FA 4838              cpi R20,136
 00FC E3E1              ldi R30,19
 00FE 5E07              cpc R21,R30
 0100 D0F3              brlo L17
 0102           X2:
 0102                   .dbline 153
 0102           ;   }
 0102           L5:
 0102                   .dbline 138
 0102 CACF              xjmp L4
 0104           X3:
 0104                   .dbline -2
 0104           L3:
 0104                   .dbline 0 ; func end
 0104 2296              adiw R28,2
 0106 0895              ret
 0108                   .dbsym r k 12 c
 0108                   .dbsym l data 1 c
 0108                   .dbsym r j 10 c
 0108                   .dbsym r i 22 i
 0108                   .dbsym r c 20 i
 0108                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\MyWorks\SOFT\I2C_E2PROM\I2C_Demo.c
 0000           _bf::
 0000                   .blkb 26
 001A                   .dbsym e bf _bf A[26:26]c
 001A           ; 
 001A           ; }

⌨️ 快捷键说明

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