📄 main.lss
字号:
190: 90 e0 ldi r25, 0x00 ; 0
192: 84 e9 ldi r24, 0x94 ; 148
194: 86 bf out 0x36, r24 ; 54
goto quit;
}
196: 89 2f mov r24, r25
198: 99 27 eor r25, r25
19a: 08 95 ret
0000019c <twi_write_str>:
uchar twi_write_str(uchar sla,uchar address,uchar *p,uchar len)
{
19c: 78 2f mov r23, r24
19e: fa 01 movw r30, r20
uchar i,twst,n=0x0,rv=0xff;
1a0: 30 e0 ldi r19, 0x00 ; 0
1a2: 9f ef ldi r25, 0xFF ; 255
restart:
if(n++>=max)
1a4: 83 2f mov r24, r19
1a6: 3f 5f subi r19, 0xFF ; 255
1a8: 83 30 cpi r24, 0x03 ; 3
1aa: 08 f0 brcs .+2 ; 0x1ae <twi_write_str+0x12>
1ac: 4f c0 rjmp .+158 ; 0x24c <twi_write_str+0xb0>
goto error;
begin:
TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送开始信号
1ae: 84 ea ldi r24, 0xA4 ; 164
1b0: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待发送完毕
1b2: 06 b6 in r0, 0x36 ; 54
1b4: 07 fe sbrs r0, 7
1b6: fd cf rjmp .-6 ; 0x1b2 <twi_write_str+0x16>
switch(twst = (TWSR&0xf8))
1b8: 81 b1 in r24, 0x01 ; 1
1ba: 88 7f andi r24, 0xF8 ; 248
1bc: 48 2f mov r20, r24
1be: 55 27 eor r21, r21
1c0: 40 31 cpi r20, 0x10 ; 16
1c2: 51 05 cpc r21, r1
1c4: 31 f0 breq .+12 ; 0x1d2 <twi_write_str+0x36>
1c6: 41 31 cpi r20, 0x11 ; 17
1c8: 51 05 cpc r21, r1
1ca: 54 f5 brge .+84 ; 0x220 <twi_write_str+0x84>
1cc: 48 30 cpi r20, 0x08 ; 8
1ce: 51 05 cpc r21, r1
1d0: e9 f5 brne .+122 ; 0x24c <twi_write_str+0xb0>
{
case 0x10: //TW_REP_START://有可能出现
case 0x08: //TW_START:
break;
case 0x38: //TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWDR = sla | TW_WRITE;//发送SLA+W
1d2: 73 b9 out 0x03, r23 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
1d4: 84 e8 ldi r24, 0x84 ; 132
1d6: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
1d8: 06 b6 in r0, 0x36 ; 54
1da: 07 fe sbrs r0, 7
1dc: fd cf rjmp .-6 ; 0x1d8 <twi_write_str+0x3c>
switch(twst = (TWSR&0xf8))
1de: 81 b1 in r24, 0x01 ; 1
1e0: 88 7f andi r24, 0xF8 ; 248
1e2: 48 2f mov r20, r24
1e4: 55 27 eor r21, r21
1e6: 40 32 cpi r20, 0x20 ; 32
1e8: 51 05 cpc r21, r1
1ea: e1 f2 breq .-72 ; 0x1a4 <twi_write_str+0x8>
1ec: 41 32 cpi r20, 0x21 ; 33
1ee: 51 05 cpc r21, r1
1f0: bc f4 brge .+46 ; 0x220 <twi_write_str+0x84>
1f2: 48 31 cpi r20, 0x18 ; 24
1f4: 51 05 cpc r21, r1
1f6: 51 f5 brne .+84 ; 0x24c <twi_write_str+0xb0>
{
case 0x18: //TW_MT_SLA_ACK:
break;
case 0x20: //TW_MT_SLA_NACK://器件忙,有可能处于内部写周期
goto restart;
case 0x38: //TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
/* TWDR = address>>8;//传输地址高8位
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
switch((twst = TW_STATUS))
{
case TW_MT_DATA_ACK:
break;
case TW_MT_DATA_NACK:
goto quit;
case TW_MT_ARB_LOST:
goto begin;
default:
goto error;
} */
TWDR = address;//传输地址低8位
1f8: 63 b9 out 0x03, r22 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
1fa: 84 e8 ldi r24, 0x84 ; 132
1fc: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
1fe: 06 b6 in r0, 0x36 ; 54
200: 07 fe sbrs r0, 7
202: fd cf rjmp .-6 ; 0x1fe <twi_write_str+0x62>
switch(twst = (TWSR&0xf8))
204: 81 b1 in r24, 0x01 ; 1
206: 88 7f andi r24, 0xF8 ; 248
208: 48 2f mov r20, r24
20a: 55 27 eor r21, r21
20c: 40 33 cpi r20, 0x30 ; 48
20e: 51 05 cpc r21, r1
210: f1 f0 breq .+60 ; 0x24e <twi_write_str+0xb2>
212: 41 33 cpi r20, 0x31 ; 49
214: 51 05 cpc r21, r1
216: 24 f4 brge .+8 ; 0x220 <twi_write_str+0x84>
218: 48 32 cpi r20, 0x28 ; 40
21a: 51 05 cpc r21, r1
21c: 29 f0 breq .+10 ; 0x228 <twi_write_str+0x8c>
21e: 16 c0 rjmp .+44 ; 0x24c <twi_write_str+0xb0>
220: 48 33 cpi r20, 0x38 ; 56
222: 51 05 cpc r21, r1
224: 21 f2 breq .-120 ; 0x1ae <twi_write_str+0x12>
226: 12 c0 rjmp .+36 ; 0x24c <twi_write_str+0xb0>
{
case 0x28: //TW_MT_DATA_ACK:
break;
case 0x30: //TW_MT_DATA_NACK:
goto quit;
case 0x38: //TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
for(i=0;i<len;i++)
228: 30 e0 ldi r19, 0x00 ; 0
22a: 32 17 cp r19, r18
22c: 80 f4 brcc .+32 ; 0x24e <twi_write_str+0xb2>
22e: 44 e8 ldi r20, 0x84 ; 132
{
TWDR = *p;
230: 81 91 ld r24, Z+
232: 83 b9 out 0x03, r24 ; 3
p++;
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
234: 46 bf out 0x36, r20 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
236: 06 b6 in r0, 0x36 ; 54
238: 07 fe sbrs r0, 7
23a: fd cf rjmp .-6 ; 0x236 <twi_write_str+0x9a>
switch(twst =(TWSR&0xf8))
23c: 81 b1 in r24, 0x01 ; 1
23e: 88 7f andi r24, 0xF8 ; 248
240: 88 32 cpi r24, 0x28 ; 40
242: 21 f4 brne .+8 ; 0x24c <twi_write_str+0xb0>
244: 3f 5f subi r19, 0xFF ; 255
246: 32 17 cp r19, r18
248: 98 f3 brcs .-26 ; 0x230 <twi_write_str+0x94>
24a: 01 c0 rjmp .+2 ; 0x24e <twi_write_str+0xb2>
{
case 0x28://TW_MT_DATA_ACK:
break;
default:
goto error;
}
}
quit:
TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);//发送停止信号
return rv;
error:
rv=0x00;
24c: 90 e0 ldi r25, 0x00 ; 0
24e: 84 e9 ldi r24, 0x94 ; 148
250: 86 bf out 0x36, r24 ; 54
goto quit;
}
252: 89 2f mov r24, r25
254: 99 27 eor r25, r25
256: 08 95 ret
00000258 <twi_read_byte>:
uchar twi_read_byte( uchar sla,uchar address) //读字节,地址,寄存器地址。
{
258: 58 2f mov r21, r24
uchar twst,n=0x0,rv=0xff;
25a: 40 e0 ldi r20, 0x00 ; 0
25c: 9f ef ldi r25, 0xFF ; 255
restart:
if(n++>=max)
25e: 84 2f mov r24, r20
260: 4f 5f subi r20, 0xFF ; 255
262: 83 30 cpi r24, 0x03 ; 3
264: 08 f0 brcs .+2 ; 0x268 <twi_read_byte+0x10>
266: 75 c0 rjmp .+234 ; 0x352 <twi_read_byte+0xfa>
goto error;
begin:
TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送开始信号
268: 84 ea ldi r24, 0xA4 ; 164
26a: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待发送完毕
26c: 06 b6 in r0, 0x36 ; 54
26e: 07 fe sbrs r0, 7
270: fd cf rjmp .-6 ; 0x26c <twi_read_byte+0x14>
switch(twst = (TWSR&0xf8))
272: 81 b1 in r24, 0x01 ; 1
274: 88 7f andi r24, 0xF8 ; 248
276: 28 2f mov r18, r24
278: 33 27 eor r19, r19
27a: 20 31 cpi r18, 0x10 ; 16
27c: 31 05 cpc r19, r1
27e: 41 f0 breq .+16 ; 0x290 <twi_read_byte+0x38>
280: 21 31 cpi r18, 0x11 ; 17
282: 31 05 cpc r19, r1
284: 0c f0 brlt .+2 ; 0x288 <twi_read_byte+0x30>
286: 4a c0 rjmp .+148 ; 0x31c <twi_read_byte+0xc4>
288: 28 30 cpi r18, 0x08 ; 8
28a: 31 05 cpc r19, r1
28c: 09 f0 breq .+2 ; 0x290 <twi_read_byte+0x38>
28e: 61 c0 rjmp .+194 ; 0x352 <twi_read_byte+0xfa>
{
case 0x10://TW_REP_START://有可能出现
case 0x08://TW_START:
break;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWDR = sla | TW_WRITE;//发送SLA+W
290: 53 b9 out 0x03, r21 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
292: 84 e8 ldi r24, 0x84 ; 132
294: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
296: 06 b6 in r0, 0x36 ; 54
298: 07 fe sbrs r0, 7
29a: fd cf rjmp .-6 ; 0x296 <twi_read_byte+0x3e>
switch(twst = (TWSR&0xf8))
29c: 81 b1 in r24, 0x01 ; 1
29e: 88 7f andi r24, 0xF8 ; 248
2a0: 28 2f mov r18, r24
2a2: 33 27 eor r19, r19
2a4: 20 32 cpi r18, 0x20 ; 32
2a6: 31 05 cpc r19, r1
2a8: d1 f2 breq .-76 ; 0x25e <twi_read_byte+0x6>
2aa: 21 32 cpi r18, 0x21 ; 33
2ac: 31 05 cpc r19, r1
2ae: b4 f5 brge .+108 ; 0x31c <twi_read_byte+0xc4>
2b0: 28 31 cpi r18, 0x18 ; 24
2b2: 31 05 cpc r19, r1
2b4: 09 f0 breq .+2 ; 0x2b8 <twi_read_byte+0x60>
2b6: 4d c0 rjmp .+154 ; 0x352 <twi_read_byte+0xfa>
{
case 0x18://TW_MT_SLA_ACK:
break;
case 0x20://TW_MT_SLA_NACK://器件忙,有可能处于内部写周期
goto restart;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
/* TWDR = address>>8;//传输地址高8位
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
switch((twst = TW_STATUS))
{
case TW_MT_DATA_ACK:
break;
case TW_MT_DATA_NACK:
goto quit;
case TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}*/
TWDR = address;//传输地址低8位
2b8: 63 b9 out 0x03, r22 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
2ba: 84 e8 ldi r24, 0x84 ; 132
2bc: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
2be: 06 b6 in r0, 0x36 ; 54
2c0: 07 fe sbrs r0, 7
2c2: fd cf rjmp .-6 ; 0x2be <twi_read_byte+0x66>
switch(twst = (TWSR&0xf8))
2c4: 81 b1 in r24, 0x01 ; 1
2c6: 88 7f andi r24, 0xF8 ; 248
2c8: 28 2f mov r18, r24
2ca: 33 27 eor r19, r19
2cc: 20 33 cpi r18, 0x30 ; 48
2ce: 31 05 cpc r19, r1
2d0: 09 f4 brne .+2 ; 0x2d4 <twi_read_byte+0x7c>
2d2: 40 c0 rjmp .+128 ; 0x354 <twi_read_byte+0xfc>
2d4: 21 33 cpi r18, 0x31 ; 49
2d6: 31 05 cpc r19, r1
2d8: 0c f5 brge .+66 ; 0x31c <twi_read_byte+0xc4>
2da: 28 32 cpi r18, 0x28 ; 40
2dc: 31 05 cpc r19, r1
2de: c9 f5 brne .+114 ; 0x352 <twi_read_byte+0xfa>
{
case 0x28://TW_MT_DATA_ACK:
break;
case 0x30://TW_MT_DATA_NACK:
goto quit;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送(重新)开始信号
2e0: 84 ea ldi r24, 0xA4 ; 164
2e2: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待发送完毕
2e4: 06 b6 in r0, 0x36 ; 54
2e6: 07 fe sbrs r0, 7
2e8: fd cf rjmp .-6 ; 0x2e4 <twi_read_byte+0x8c>
switch(twst = (TWSR&0xf8))
2ea: 81 b1 in r24, 0x01 ; 1
2ec: 88 7f andi r24, 0xF8 ; 248
2ee: 28 2f mov r18, r24
2f0: 33 27 eor r19, r19
2f2: 20 31 cpi r18, 0x10 ; 16
2f4: 31 05 cpc r19, r1
2f6: 91 f4 brne .+36 ; 0x31c <twi_read_byte+0xc4>
{
case 0x10://TW_REP_START://正确的状态
break;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWDR = sla | TW_READ;//发送SLA+R
2f8: 85 2f mov r24, r21
2fa: 81 60 ori r24, 0x01 ; 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -