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