📄 twi.lis
字号:
0100 04C0 xjmp L12
0102 L31:
0102 .dbline 79
0102 ; }
0102 ;
0102 ; /*stop 停止*/
0102 ; TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
0102 84E9 ldi R24,148
0104 80937400 sts 116,R24
0108 .dbline 80
0108 ; return 1;
0108 01E0 ldi R16,1
010A .dbline -2
010A L12:
010A 0E940000 xcall pop_gset2
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbsym r dd 20 c
0110 .dbsym r addr 22 c
0110 .dbend
0110 .dbfunc e twi_read _twi_read fc
0110 ; dd -> R20,R21
0110 ; addr -> R22
.even
0110 _twi_read::
0110 0E940000 xcall push_gset2
0114 A901 movw R20,R18
0116 602F mov R22,R16
0118 .dbline -1
0118 .dbline 84
0118 ; }
0118 ;
0118 ; /*I2C总线单字节读取*/
0118 ; unsigned char twi_read(unsigned char addr, unsigned char *dd) {
0118 .dbline 86
0118 ;
0118 ; TWBR = 2;
0118 82E0 ldi R24,2
011A 80937000 sts 112,R24
011E .dbline 89
011E ;
011E ; /*start 启动*/
011E ; TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
011E 84EA ldi R24,164
0120 80937400 sts 116,R24
0124 L34:
0124 .dbline 90
0124 L35:
0124 .dbline 90
0124 ; while(!(TWCR&(1<<TWINT)));
0124 20907400 lds R2,116
0128 27FE sbrs R2,7
012A FCCF rjmp L34
012C .dbline 91
012C ; if ((TWSR & 0xF8) != 0x08) {
012C 80917100 lds R24,113
0130 887F andi R24,248
0132 8830 cpi R24,8
0134 29F0 breq L37
0136 .dbline 91
0136 .dbline 92
0136 ; error(TWSR);
0136 00917100 lds R16,113
013A 62DF xcall _error
013C .dbline 93
013C ; return 0;
013C 0027 clr R16
013E 65C0 xjmp L33
0140 L37:
0140 .dbline 97
0140 ; }
0140 ;
0140 ; /*SLA_W 芯片地址*/
0140 ; TWDR = 0xA0;
0140 80EA ldi R24,160
0142 80937300 sts 115,R24
0146 .dbline 98
0146 ; TWCR = (1 << TWINT) | (1 << TWEN);
0146 84E8 ldi R24,132
0148 80937400 sts 116,R24
014C L39:
014C .dbline 99
014C L40:
014C .dbline 99
014C ; while (!(TWCR & (1 << TWINT)));
014C 20907400 lds R2,116
0150 27FE sbrs R2,7
0152 FCCF rjmp L39
0154 .dbline 100
0154 ; if ((TWSR & 0xF8) != 0x18) {
0154 80917100 lds R24,113
0158 887F andi R24,248
015A 8831 cpi R24,24
015C 29F0 breq L42
015E .dbline 100
015E .dbline 101
015E ; error(TWSR);
015E 00917100 lds R16,113
0162 4EDF xcall _error
0164 .dbline 102
0164 ; return 0;
0164 0027 clr R16
0166 51C0 xjmp L33
0168 L42:
0168 .dbline 106
0168 ; }
0168 ;
0168 ; /*addr 操作地址*/
0168 ; TWDR = addr;
0168 60937300 sts 115,R22
016C .dbline 107
016C ; TWCR = (1 << TWINT) | (1 << TWEN);
016C 84E8 ldi R24,132
016E 80937400 sts 116,R24
0172 L44:
0172 .dbline 108
0172 L45:
0172 .dbline 108
0172 ; while (!(TWCR & (1 << TWINT)));
0172 20907400 lds R2,116
0176 27FE sbrs R2,7
0178 FCCF rjmp L44
017A .dbline 109
017A ; if ((TWSR & 0xF8) != 0x28) {
017A 80917100 lds R24,113
017E 887F andi R24,248
0180 8832 cpi R24,40
0182 29F0 breq L47
0184 .dbline 109
0184 .dbline 110
0184 ; error(TWSR);
0184 00917100 lds R16,113
0188 3BDF xcall _error
018A .dbline 111
018A ; return 0;
018A 0027 clr R16
018C 3EC0 xjmp L33
018E L47:
018E .dbline 115
018E ; }
018E ;
018E ; /*start 启动*/
018E ; TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
018E 84EA ldi R24,164
0190 80937400 sts 116,R24
0194 L49:
0194 .dbline 116
0194 L50:
0194 .dbline 116
0194 ; while (!(TWCR & (1 << TWINT)));
0194 20907400 lds R2,116
0198 27FE sbrs R2,7
019A FCCF rjmp L49
019C .dbline 117
019C ; if ((TWSR & 0xF8) != 0x10) {
019C 80917100 lds R24,113
01A0 887F andi R24,248
01A2 8031 cpi R24,16
01A4 29F0 breq L52
01A6 .dbline 117
01A6 .dbline 118
01A6 ; error(TWSR);
01A6 00917100 lds R16,113
01AA 2ADF xcall _error
01AC .dbline 119
01AC ; return 0;
01AC 0027 clr R16
01AE 2DC0 xjmp L33
01B0 L52:
01B0 .dbline 123
01B0 ; }
01B0 ;
01B0 ; /*SLA_R 芯片地址*/
01B0 ; TWDR = 0xA1;
01B0 81EA ldi R24,161
01B2 80937300 sts 115,R24
01B6 .dbline 124
01B6 ; TWCR = (1 << TWINT) | (1 << TWEN);
01B6 84E8 ldi R24,132
01B8 80937400 sts 116,R24
01BC L54:
01BC .dbline 125
01BC L55:
01BC .dbline 125
01BC ; while (!(TWCR & (1 << TWINT)));
01BC 20907400 lds R2,116
01C0 27FE sbrs R2,7
01C2 FCCF rjmp L54
01C4 .dbline 126
01C4 ; if ((TWSR & 0xF8) != 0x40) {
01C4 80917100 lds R24,113
01C8 887F andi R24,248
01CA 8034 cpi R24,64
01CC 29F0 breq L57
01CE .dbline 126
01CE .dbline 127
01CE ; error(TWSR);
01CE 00917100 lds R16,113
01D2 16DF xcall _error
01D4 .dbline 128
01D4 ; return 0;
01D4 0027 clr R16
01D6 19C0 xjmp L33
01D8 L57:
01D8 .dbline 132
01D8 ; }
01D8 ;
01D8 ; /*读取数据*/
01D8 ; TWCR = (1 << TWINT) | (1 << TWEN);
01D8 84E8 ldi R24,132
01DA 80937400 sts 116,R24
01DE L59:
01DE .dbline 133
01DE L60:
01DE .dbline 133
01DE ; while (!(TWCR & (1 << TWINT)));
01DE 20907400 lds R2,116
01E2 27FE sbrs R2,7
01E4 FCCF rjmp L59
01E6 .dbline 134
01E6 ; if ((TWSR & 0xF8) != 0x58) {
01E6 80917100 lds R24,113
01EA 887F andi R24,248
01EC 8835 cpi R24,88
01EE 29F0 breq L62
01F0 .dbline 134
01F0 .dbline 135
01F0 ; error(TWSR);
01F0 00917100 lds R16,113
01F4 05DF xcall _error
01F6 .dbline 136
01F6 ; return 0;
01F6 0027 clr R16
01F8 08C0 xjmp L33
01FA L62:
01FA .dbline 138
01FA ; }
01FA ; *dd = TWDR;
01FA 20907300 lds R2,115
01FE FA01 movw R30,R20
0200 2082 std z+0,R2
0202 .dbline 141
0202 ;
0202 ; /*stop 停止*/
0202 ; TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
0202 84E9 ldi R24,148
0204 80937400 sts 116,R24
0208 .dbline 142
0208 ; return 1;
0208 01E0 ldi R16,1
020A .dbline -2
020A L33:
020A 0E940000 xcall pop_gset2
020E .dbline 0 ; func end
020E 0895 ret
0210 .dbsym r dd 20 pc
0210 .dbsym r addr 22 c
0210 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -