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

📄 i2c.lis

📁 使用AVR做的IIC主模式下的程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module i2c.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\mine\i2c\i2c.c
 0000                   .dbfunc e delay_1ms _delay_1ms fV
 0000           ;              i -> R16,R17
                        .even
 0000           _delay_1ms::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; #include<iom128v.h>
 0000           ; #include<iom128v.h>
 0000           ; #define START 0x08
 0000           ; #define restart 0x10
 0000           ; #define MT_SLA_ACK 0x18
 0000           ; #define MT_DATA_ACK 0x28
 0000           ; #define MR_SLA_ACK  0x40 
 0000           ; #define MR_DATA_NOACK 0x58  
 0000           ; #define wr_device_adress 0xa0;
 0000           ; #define rd_device_adress 0xa1;
 0000           ; #define start TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTA)
 0000           ; #define wait { while(!(TWCR&(1<<TWINT)));}
 0000           ; #define stop TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
 0000           ; #define write8bit(c){TWDR=c;TWCR=(1<<TWINT)|(1<<TWEN);}
 0000           ; #define Twi           (TWCR=(1<<TWINT)|(1<<TWEN)) 
 0000           ; void delay_1ms(void)
 0000           ; {
 0000                   .dbline 19
 0000 0027              clr R16
 0002 1127              clr R17
 0004 02C0              xjmp L5
 0006           L2:
 0006                   .dbline 19
 0006           L3:
 0006                   .dbline 19
 0006 0F5F              subi R16,255  ; offset = 1
 0008 1F4F              sbci R17,255
 000A           L5:
 000A                   .dbline 19
 000A           ; unsigned int i;
 000A           ; for(i=0;i<=8000;i++);
 000A 80E4              ldi R24,8000
 000C 9FE1              ldi R25,31
 000E 8017              cp R24,R16
 0010 9107              cpc R25,R17
 0012 C8F7              brsh L2
 0014                   .dbline -2
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbsym r i 16 i
 0016                   .dbend
 0016                   .dbfunc e delay_ms _delay_ms fV
 0016           ;              i -> R20,R21
 0016           ;              n -> R22,R23
                        .even
 0016           _delay_ms::
 0016 0E940000          xcall push_gset2
 001A B801              movw R22,R16
 001C                   .dbline -1
 001C                   .dbline 22
 001C           ; }
 001C           ; void delay_ms(unsigned int n)
 001C           ; {
 001C                   .dbline 24
 001C           ; unsigned int i;
 001C           ; for(i=0;i<n;i++)
 001C 4427              clr R20
 001E 5527              clr R21
 0020 03C0              xjmp L10
 0022           L7:
 0022                   .dbline 25
 0022 EEDF              xcall _delay_1ms
 0024           L8:
 0024                   .dbline 24
 0024 4F5F              subi R20,255  ; offset = 1
 0026 5F4F              sbci R21,255
 0028           L10:
 0028                   .dbline 24
 0028 4617              cp R20,R22
 002A 5707              cpc R21,R23
 002C D0F3              brlo L7
 002E                   .dbline -2
 002E           L6:
 002E 0E940000          xcall pop_gset2
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbsym r i 20 i
 0034                   .dbsym r n 22 i
 0034                   .dbend
 0034                   .dbfunc e i2cwrite _i2cwrite fc
 0034           ;      romadress -> R22
 0034           ;           data -> R20
                        .even
 0034           _i2cwrite::
 0034 0E940000          xcall push_gset2
 0038 622F              mov R22,R18
 003A 402F              mov R20,R16
 003C                   .dbline -1
 003C                   .dbline 28
 003C           ; delay_1ms();
 003C           ; }
 003C           ; unsigned char i2cwrite(unsigned char data,unsigned char romadress)
 003C           ; {
 003C                   .dbline 29
 003C           ; start;
 003C 84EA              ldi R24,164
 003E 80937400          sts 116,R24
 0042                   .dbline 30
 0042           L12:
 0042                   .dbline 30
 0042           L13:
 0042                   .dbline 30
 0042           ; wait;
 0042 20907400          lds R2,116
 0046 27FE              sbrs R2,7
 0048 FCCF              rjmp L12
 004A                   .dbline 30
 004A                   .dbline 30
 004A                   .dbline 32
 004A           ; 
 004A           ; if((TWSR&0xf8)!=START) return 1;
 004A 80917100          lds R24,113
 004E 887F              andi R24,248
 0050 8830              cpi R24,8
 0052 11F0              breq L15
 0054                   .dbline 32
 0054 01E0              ldi R16,1
 0056 38C0              xjmp L11
 0058           L15:
 0058                   .dbline 34
 0058           ; 
 0058           ; write8bit(wr_device_adress);
 0058                   .dbline 34
 0058 80EA              ldi R24,160
 005A 80937300          sts 115,R24
 005E                   .dbline 34
 005E                   .dbline 34
 005E 84E8              ldi R24,132
 0060 80937400          sts 116,R24
 0064                   .dbline 34
 0064                   .dbline 34
 0064                   .dbline 35
 0064           L17:
 0064                   .dbline 35
 0064           L18:
 0064                   .dbline 35
 0064           ; wait;
 0064 20907400          lds R2,116
 0068 27FE              sbrs R2,7
 006A FCCF              rjmp L17
 006C                   .dbline 35
 006C                   .dbline 35
 006C                   .dbline 36
 006C           ; if((TWSR&0xf8)!=MT_SLA_ACK) return 1;
 006C 80917100          lds R24,113
 0070 887F              andi R24,248
 0072 8831              cpi R24,24
 0074 11F0              breq L20
 0076                   .dbline 36
 0076 01E0              ldi R16,1
 0078 27C0              xjmp L11
 007A           L20:
 007A                   .dbline 37
 007A           ; write8bit(romadress)
 007A                   .dbline 37
 007A 60937300          sts 115,R22
 007E                   .dbline 37
 007E 84E8              ldi R24,132
 0080 80937400          sts 116,R24
 0084                   .dbline 37
 0084                   .dbline 38
 0084           L22:
 0084                   .dbline 38
 0084           L23:
 0084                   .dbline 38
 0084           ; wait;
 0084 20907400          lds R2,116
 0088 27FE              sbrs R2,7
 008A FCCF              rjmp L22
 008C                   .dbline 38
 008C                   .dbline 38
 008C                   .dbline 39
 008C           ; if((TWSR&0xf8)!=MT_DATA_ACK) return 1;
 008C 80917100          lds R24,113
 0090 887F              andi R24,248
 0092 8832              cpi R24,40
 0094 11F0              breq L25
 0096                   .dbline 39
 0096 01E0              ldi R16,1
 0098 17C0              xjmp L11
 009A           L25:
 009A                   .dbline 40
 009A           ; write8bit(data);
 009A                   .dbline 40
 009A 40937300          sts 115,R20
 009E                   .dbline 40
 009E 84E8              ldi R24,132
 00A0 80937400          sts 116,R24
 00A4                   .dbline 40
 00A4                   .dbline 40
 00A4                   .dbline 41
 00A4           L27:
 00A4                   .dbline 41
 00A4           L28:
 00A4                   .dbline 41
 00A4           ; wait;
 00A4 20907400          lds R2,116
 00A8 27FE              sbrs R2,7
 00AA FCCF              rjmp L27
 00AC                   .dbline 41
 00AC                   .dbline 41
 00AC                   .dbline 42
 00AC           ; if((TWSR&0xf8)!=MT_DATA_ACK) return 1;
 00AC 80917100          lds R24,113
 00B0 887F              andi R24,248
 00B2 8832              cpi R24,40
 00B4 11F0              breq L30
 00B6                   .dbline 42
 00B6 01E0              ldi R16,1
 00B8 07C0              xjmp L11
 00BA           L30:
 00BA                   .dbline 43
 00BA           ; stop;
 00BA 84E9              ldi R24,148
 00BC 80937400          sts 116,R24
 00C0                   .dbline 44
 00C0           ; delay_ms(10);
 00C0 0AE0              ldi R16,10
 00C2 10E0              ldi R17,0
 00C4 A8DF              xcall _delay_ms
 00C6                   .dbline 45
 00C6           ; return 0;
 00C6 0027              clr R16
 00C8                   .dbline -2
 00C8           L11:
 00C8 0E940000          xcall pop_gset2
 00CC                   .dbline 0 ; func end
 00CC 0895              ret
 00CE                   .dbsym r romadress 22 c
 00CE                   .dbsym r data 20 c
 00CE                   .dbend
 00CE                   .dbfunc e i2cread _i2cread fc
 00CE           ;           temp -> R20
 00CE           ;      romadress -> R16
                        .even
 00CE           _i2cread::
 00CE 0E940000          xcall push_gset1
 00D2                   .dbline -1
 00D2                   .dbline 48
 00D2           ; }
 00D2           ; unsigned char i2cread(unsigned char romadress)
 00D2           ; {unsigned char temp;
 00D2                   .dbline 49
 00D2           ; start;
 00D2 84EA              ldi R24,164
 00D4 80937400          sts 116,R24
 00D8                   .dbline 50
 00D8           L33:
 00D8                   .dbline 50
 00D8           L34:
 00D8                   .dbline 50
 00D8           ; wait;
 00D8 20907400          lds R2,116
 00DC 27FE              sbrs R2,7
 00DE FCCF              rjmp L33
 00E0                   .dbline 50
 00E0                   .dbline 50
 00E0                   .dbline 52
 00E0           ; 
 00E0           ; if((TWSR&0xf8)!=START) 
 00E0 80917100          lds R24,113
 00E4 887F              andi R24,248
 00E6 8830              cpi R24,8
 00E8 11F0              breq L36
 00EA                   .dbline 54
 00EA           ; 
 00EA           ; return 1;
 00EA 01E0              ldi R16,1
 00EC 54C0              xjmp L32
 00EE           L36:
 00EE                   .dbline 56
 00EE           ; 
 00EE           ; write8bit(wr_device_adress);
 00EE                   .dbline 56
 00EE 80EA              ldi R24,160
 00F0 80937300          sts 115,R24
 00F4                   .dbline 56
 00F4                   .dbline 56
 00F4 84E8              ldi R24,132
 00F6 80937400          sts 116,R24
 00FA                   .dbline 56
 00FA                   .dbline 56
 00FA                   .dbline 57
 00FA           L38:
 00FA                   .dbline 57
 00FA           L39:
 00FA                   .dbline 57
 00FA           ; wait;
 00FA 20907400          lds R2,116

⌨️ 快捷键说明

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