📄 i2c_demo.lis
字号:
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 + -