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

📄 i2c.lis

📁 I2C AVR单片机使用I2C总线的例子
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                         .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 + -