📄 i2c.lis
字号:
.module I2C.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
0000 _tabel::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 7971 .byte 'y,'q
0010 .dbfile D:\ICC-AVR\examples.sl\I2C\I2C.c
0010 .dbsym s tabel _tabel Ac[16:16]
.area data(ram, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\I2C\I2C.c
0000 _ledbuff::
0000 .blkb 2
.area idata
0000 3F3F .byte 63,63
.area data(ram, con, rel)
0002 .dbfile D:\ICC-AVR\examples.sl\I2C\I2C.c
0002 .blkb 2
.area idata
0002 3F3F .byte 63,63
.area data(ram, con, rel)
0004 .dbfile D:\ICC-AVR\examples.sl\I2C\I2C.c
0004 .blkb 2
.area idata
0004 0000 .byte 0,0
.area data(ram, con, rel)
0006 .dbfile D:\ICC-AVR\examples.sl\I2C\I2C.c
0006 .dbsym s ledbuff _ledbuff Ac[6:6]
.area text(rom, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\I2C\I2C.c
0000 .dbfunc s i2c_Write _i2c_Write fI
; RomAddress -> R22
; Wdata -> R20
.even
0000 _i2c_Write::
0000 00D0 rcall push_gset2
0002 622F mov R22,R18
0004 402F mov R20,R16
0006 .dbline 25{
; /**********************************************
; http://www.sl.com.cn
; 双龙电子公司----I2C总线演示程序(ICCAVR)
; 作者:詹卫前
; 1、以访问AT24C02为例
; 2、SDA :PORTA.0
; 3、SCL : PORTA.1
; 使用注意:1、应包含头文件slavr.h
; 2、在工程选项中的Additional Lib中填入slavr
; 使用编译器使用附加库文件libslavr.a
; ***********************************************/
; #include <io8515.h>
; #include <slavr.h>
; /* 七段译码字形表 */
; #pragma data:code
; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; #pragma data:data
; /* 显示缓冲区 */
; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x00,0x00};
; unsigned char at24_add,at24_data;
; /******************************************
; I2C总线写一个字节
; *******************************************/
; void i2c_Write(unsigned char Wdata,unsigned char RomAddress)
; {
0006 .dbline 26
; Start();
0006 00D0 rcall _Start
0008 .dbline 27
; Write8Bit(0xa0);
0008 00EA ldi R16,160
000A 00D0 rcall _Write8Bit
000C .dbline 28
; TestAck();
000C 00D0 rcall _TestAck
000E .dbline 29
; Write8Bit(RomAddress);
000E 062F mov R16,R22
0010 00D0 rcall _Write8Bit
0012 .dbline 30
; TestAck();
0012 00D0 rcall _TestAck
0014 .dbline 31
; Write8Bit(Wdata);
0014 042F mov R16,R20
0016 00D0 rcall _Write8Bit
0018 .dbline 32
; TestAck();
0018 00D0 rcall _TestAck
001A .dbline 33
; Stop();
001A 00D0 rcall _Stop
001C .dbline 34
; delay_ms(10);
001C 0AE0 ldi R16,10
001E 10E0 ldi R17,0
0020 00D0 rcall _delay_ms
0022 .dbline 35}
; }
0022 L1:
0022 00D0 rcall pop_gset2
0024 0895 ret
0026 .dbsym r RomAddress 22 c
0026 .dbsym r Wdata 20 c
0026 .dbfunc s i2c_Read _i2c_Read fI
; temp -> R20
; RomAddress -> R20
.even
0026 _i2c_Read::
0026 00D0 rcall push_gset1
0028 402F mov R20,R16
002A .dbline 40{
; /******************************************
; I2C总线读一个字节
; *******************************************/
; unsigned char i2c_Read(unsigned char RomAddress)
; {
002A .dbline 42
; unsigned char temp;
; Start();
002A 00D0 rcall _Start
002C .dbline 43
; Write8Bit(0xa0);
002C 00EA ldi R16,160
002E 00D0 rcall _Write8Bit
0030 .dbline 44
; TestAck();
0030 00D0 rcall _TestAck
0032 .dbline 45
; Write8Bit(RomAddress);
0032 042F mov R16,R20
0034 00D0 rcall _Write8Bit
0036 .dbline 46
; TestAck();
0036 00D0 rcall _TestAck
0038 .dbline 47
; Start();
0038 00D0 rcall _Start
003A .dbline 48
; Write8Bit(0xa1);
003A 01EA ldi R16,161
003C 00D0 rcall _Write8Bit
003E .dbline 49
; TestAck();
003E 00D0 rcall _TestAck
0040 .dbline 50
; temp=Read8Bit();
0040 00D0 rcall _Read8Bit
0042 202E mov R2,R16
0044 312E mov R3,R17
0046 422D mov R20,R2
0048 .dbline 51
; NoAck();
0048 00D0 rcall _NoAck
004A .dbline 52
; Stop();
004A 00D0 rcall _Stop
004C .dbline 53
; return temp;
004C 042F mov R16,R20
004E 1127 clr R17
0050 L2:
0050 00D0 rcall pop_gset1
0052 0895 ret
0054 .dbline 54}
0054 .dbsym r temp 20 c
0054 .dbsym r RomAddress 20 c
0054 .dbfunc s port_init _port_init fI
.even
0054 _port_init::
0054 .dbline 59{
; }
; /******************************************
; 端口初始化
; *******************************************/
; void port_init(void)
; {
0054 .dbline 60
; DDRD=0x3f;
0054 8FE3 ldi R24,63
0056 81BB out 0x11,R24
0058 .dbline 61
; DDRB=0xff;
0058 8FEF ldi R24,255
005A 87BB out 0x17,R24
005C .dbline 62
; PORTD=0xff;
005C 82BB out 0x12,R24
005E .dbline 63
; PORTB=0xff;
005E 88BB out 0x18,R24
0060 .dbline 64}
; }
0060 L3:
0060 0895 ret
0062 .dbfunc s display _display fI
; i -> R20
.even
0062 _display::
0062 00D0 rcall push_gset1
0064 .dbline 69{
; /******************************************
; 六路动态扫描显示电路
; *******************************************/
; void display(void)
; {
0064 .dbline 71
; unsigned char i;
; i=at24_data%16;
0064 10E1 ldi R17,16
0066 00910000 lds R16,_at24_data
006A 00D0 rcall mod8u
006C 402F mov R20,R16
006E .dbline 72
; ledbuff[0]=tabel[i];
006E 80E0 ldi R24,<_tabel
0070 90E0 ldi R25,>_tabel
0072 242E mov R2,R20
0074 3324 clr R3
0076 280E add R2,R24
0078 391E adc R3,R25
007A E22D mov R30,R2
007C F32D mov R31,R3
007E C895 lpm
0080 00920000 sts _ledbuff,R0
0084 .dbline 73
; i=at24_data/16;
0084 10E1 ldi R17,16
0086 00910000 lds R16,_at24_data
008A 00D0 rcall div8u
008C 402F mov R20,R16
008E .dbline 74
; ledbuff[1]=tabel[i];
008E 80E0 ldi R24,<_tabel
0090 90E0 ldi R25,>_tabel
0092 242E mov R2,R20
0094 3324 clr R3
0096 280E add R2,R24
0098 391E adc R3,R25
009A E22D mov R30,R2
009C F32D mov R31,R3
009E C895 lpm
00A0 00920100 sts _ledbuff+1,R0
00A4 .dbline 75
; i=at24_add%16;
00A4 10E1 ldi R17,16
00A6 00910100 lds R16,_at24_add
00AA 00D0 rcall mod8u
00AC 402F mov R20,R16
00AE .dbline 76
; ledbuff[2]=tabel[i];
00AE 80E0 ldi R24,<_tabel
00B0 90E0 ldi R25,>_tabel
00B2 242E mov R2,R20
00B4 3324 clr R3
00B6 280E add R2,R24
00B8 391E adc R3,R25
00BA E22D mov R30,R2
00BC F32D mov R31,R3
00BE C895 lpm
00C0 00920200 sts _ledbuff+2,R0
00C4 .dbline 77
; i=at24_add/16;
00C4 10E1 ldi R17,16
00C6 00910100 lds R16,_at24_add
00CA 00D0 rcall div8u
00CC 402F mov R20,R16
00CE .dbline 78
; ledbuff[3]=tabel[i];
00CE 80E0 ldi R24,<_tabel
00D0 90E0 ldi R25,>_tabel
00D2 242E mov R2,R20
00D4 3324 clr R3
00D6 280E add R2,R24
00D8 391E adc R3,R25
00DA E22D mov R30,R2
00DC F32D mov R31,R3
00DE C895 lpm
00E0 00920300 sts _ledbuff+3,R0
00E4 .dbline 79
; for (i=0;i<6;i++)
00E4 4427 clr R20
00E6 16C0 rjmp L11
00E8 L8:
00E8 .dbline 80
00E8 .dbline 81
00E8 80E0 ldi R24,<_ledbuff
00EA 90E0 ldi R25,>_ledbuff
00EC E42F mov R30,R20
00EE FF27 clr R31
00F0 E80F add R30,R24
00F2 F91F adc R31,R25
00F4 2080 ldd R2,z+0
00F6 28BA out 0x18,R2
00F8 .dbline 82
00F8 01E0 ldi R16,1
00FA 142F mov R17,R20
00FC 00D0 rcall lsl8
00FE 202E mov R2,R16
0100 2094 com R2
0102 22BA out 0x12,R2
0104 .dbline 83
0104 00D0 rcall _delay_1ms
0106 .dbline 84
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -