📄 7455.lss
字号:
1a6: b1 f7 brne .-20 ; 0x194 <twi_write_8+0x1e>
//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_send(uchar data)
{
TWDR=data;
TWCR = (1<<TWINT) | (1<<TWEN);
1a8: 94 e8 ldi r25, 0x84 ; 132
}
//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_send(uchar data)
{
TWDR=data;
1aa: 23 b9 out 0x03, r18 ; 3
TWCR = (1<<TWINT) | (1<<TWEN);
1ac: 96 bf out 0x36, r25 ; 54
while (!(TWCR & (1<<TWINT)));
1ae: 06 b6 in r0, 0x36 ; 54
1b0: 07 fe sbrs r0, 7
1b2: fd cf rjmp .-6 ; 0x1ae <twi_write_8+0x38>
if ((TWSR & 0xF8) ==TW_MT_DATA_ACK)
1b4: 81 b1 in r24, 0x01 ; 1
1b6: 88 7f andi r24, 0xF8 ; 248
1b8: 88 32 cpi r24, 0x28 ; 40
1ba: 21 f0 breq .+8 ; 0x1c4 <twi_write_8+0x4e>
{
return 1;
}
else if ((TWSR & 0xF8) ==TW_MT_DATA_NACK)
1bc: 81 b1 in r24, 0x01 ; 1
1be: 88 7f andi r24, 0xF8 ; 248
1c0: 80 33 cpi r24, 0x30 ; 48
1c2: 99 f7 brne .-26 ; 0x1aa <twi_write_8+0x34>
//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_send(uchar data)
{
TWDR=data;
TWCR = (1<<TWINT) | (1<<TWEN);
1c4: 94 e8 ldi r25, 0x84 ; 132
}
//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_send(uchar data)
{
TWDR=data;
1c6: 63 b9 out 0x03, r22 ; 3
TWCR = (1<<TWINT) | (1<<TWEN);
1c8: 96 bf out 0x36, r25 ; 54
while (!(TWCR & (1<<TWINT)));
1ca: 06 b6 in r0, 0x36 ; 54
1cc: 07 fe sbrs r0, 7
1ce: fd cf rjmp .-6 ; 0x1ca <twi_write_8+0x54>
if ((TWSR & 0xF8) ==TW_MT_DATA_ACK)
1d0: 81 b1 in r24, 0x01 ; 1
1d2: 88 7f andi r24, 0xF8 ; 248
1d4: 88 32 cpi r24, 0x28 ; 40
1d6: 21 f0 breq .+8 ; 0x1e0 <twi_write_8+0x6a>
{
return 1;
}
else if ((TWSR & 0xF8) ==TW_MT_DATA_NACK)
1d8: 81 b1 in r24, 0x01 ; 1
1da: 88 7f andi r24, 0xF8 ; 248
1dc: 80 33 cpi r24, 0x30 ; 48
1de: 99 f7 brne .-26 ; 0x1c6 <twi_write_8+0x50>
//停止通信,发送STOP信号
void twi_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
1e0: 84 e9 ldi r24, 0x94 ; 148
1e2: 86 bf out 0x36, r24 ; 54
while(!twi_start());
while(!twi_to_write());
while(!twi_send(adress));
while(!twi_send(com));
twi_stop();
}
1e4: 08 95 ret
000001e6 <twi_read_8>:
void twi_read_8(uchar adress)
{
1e6: 28 2f mov r18, r24
TWCR = 0x44; //启动TWI
}
uchar twi_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
1e8: 94 ea ldi r25, 0xA4 ; 164
1ea: 96 bf out 0x36, r25 ; 54
while (!(TWCR & (1<<TWINT)));
1ec: 06 b6 in r0, 0x36 ; 54
1ee: 07 fe sbrs r0, 7
1f0: fd cf rjmp .-6 ; 0x1ec <twi_read_8+0x6>
if((TWSR & 0xf8)==TW_START)
1f2: 81 b1 in r24, 0x01 ; 1
1f4: 88 7f andi r24, 0xF8 ; 248
1f6: 88 30 cpi r24, 0x08 ; 8
1f8: 21 f0 breq .+8 ; 0x202 <twi_read_8+0x1c>
{
return 1;
}
else if((TWSR & 0xf8)==TW_REP_START)
1fa: 81 b1 in r24, 0x01 ; 1
1fc: 88 7f andi r24, 0xF8 ; 248
1fe: 80 31 cpi r24, 0x10 ; 16
200: a1 f7 brne .-24 ; 0x1ea <twi_read_8+0x4>
//返回值: 1表示成功,0表示失败
uchar twi_to_write(void)
{
TWDR=TWAR;
TWCR = (1<<TWINT) | (1<<TWEN);
202: 94 e8 ldi r25, 0x84 ; 132
}
//返回值: 1表示成功,0表示失败
uchar twi_to_write(void)
{
TWDR=TWAR;
204: 82 b1 in r24, 0x02 ; 2
206: 83 b9 out 0x03, r24 ; 3
TWCR = (1<<TWINT) | (1<<TWEN);
208: 96 bf out 0x36, r25 ; 54
while (!(TWCR & (1<<TWINT)));
20a: 06 b6 in r0, 0x36 ; 54
20c: 07 fe sbrs r0, 7
20e: fd cf rjmp .-6 ; 0x20a <twi_read_8+0x24>
if((TWSR & 0xf8)==TW_MT_SLA_ACK)
210: 81 b1 in r24, 0x01 ; 1
212: 88 7f andi r24, 0xF8 ; 248
214: 88 31 cpi r24, 0x18 ; 24
216: b1 f7 brne .-20 ; 0x204 <twi_read_8+0x1e>
//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_send(uchar data)
{
TWDR=data;
TWCR = (1<<TWINT) | (1<<TWEN);
218: 94 e8 ldi r25, 0x84 ; 132
}
//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_send(uchar data)
{
TWDR=data;
21a: 23 b9 out 0x03, r18 ; 3
TWCR = (1<<TWINT) | (1<<TWEN);
21c: 96 bf out 0x36, r25 ; 54
while (!(TWCR & (1<<TWINT)));
21e: 06 b6 in r0, 0x36 ; 54
220: 07 fe sbrs r0, 7
222: fd cf rjmp .-6 ; 0x21e <twi_read_8+0x38>
if ((TWSR & 0xF8) ==TW_MT_DATA_ACK)
224: 81 b1 in r24, 0x01 ; 1
226: 88 7f andi r24, 0xF8 ; 248
228: 88 32 cpi r24, 0x28 ; 40
22a: 21 f0 breq .+8 ; 0x234 <twi_read_8+0x4e>
{
return 1;
}
else if ((TWSR & 0xF8) ==TW_MT_DATA_NACK)
22c: 81 b1 in r24, 0x01 ; 1
22e: 88 7f andi r24, 0xF8 ; 248
230: 80 33 cpi r24, 0x30 ; 48
232: 99 f7 brne .-26 ; 0x21a <twi_read_8+0x34>
TWCR = 0x44; //启动TWI
}
uchar twi_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
234: 94 ea ldi r25, 0xA4 ; 164
236: 96 bf out 0x36, r25 ; 54
while (!(TWCR & (1<<TWINT)));
238: 06 b6 in r0, 0x36 ; 54
23a: 07 fe sbrs r0, 7
23c: fd cf rjmp .-6 ; 0x238 <twi_read_8+0x52>
if((TWSR & 0xf8)==TW_START)
23e: 81 b1 in r24, 0x01 ; 1
240: 88 7f andi r24, 0xF8 ; 248
242: 88 30 cpi r24, 0x08 ; 8
244: 21 f0 breq .+8 ; 0x24e <twi_read_8+0x68>
{
return 1;
}
else if((TWSR & 0xf8)==TW_REP_START)
246: 81 b1 in r24, 0x01 ; 1
248: 88 7f andi r24, 0xF8 ; 248
24a: 80 31 cpi r24, 0x10 ; 16
24c: a1 f7 brne .-24 ; 0x236 <twi_read_8+0x50>
//返回值: 1表示成功,0表示失败
uchar twi_to_read(void)
{
TWDR=TWAR+1;
TWCR = (1<<TWINT) | (1<<TWEN);
24e: 94 e8 ldi r25, 0x84 ; 132
}
//返回值: 1表示成功,0表示失败
uchar twi_to_read(void)
{
TWDR=TWAR+1;
250: 82 b1 in r24, 0x02 ; 2
252: 8f 5f subi r24, 0xFF ; 255
254: 83 b9 out 0x03, r24 ; 3
TWCR = (1<<TWINT) | (1<<TWEN);
256: 96 bf out 0x36, r25 ; 54
while (!(TWCR & (1<<TWINT)));
258: 06 b6 in r0, 0x36 ; 54
25a: 07 fe sbrs r0, 7
25c: fd cf rjmp .-6 ; 0x258 <twi_read_8+0x72>
if((TWSR & 0xf8)==TW_MR_SLA_ACK )
25e: 81 b1 in r24, 0x01 ; 1
260: 88 7f andi r24, 0xF8 ; 248
262: 80 34 cpi r24, 0x40 ; 64
264: a9 f7 brne .-22 ; 0x250 <twi_read_8+0x6a>
}
//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_receive(void)
{
TWCR = (1<<TWINT) | (1<<TWEN);
266: 24 e8 ldi r18, 0x84 ; 132
268: 26 bf out 0x36, r18 ; 54
while (!(TWCR & (1<<TWINT)));
26a: 06 b6 in r0, 0x36 ; 54
26c: 07 fe sbrs r0, 7
26e: fd cf rjmp .-6 ; 0x26a <twi_read_8+0x84>
a=TWDR;
270: 93 b1 in r25, 0x03 ; 3
if ((TWSR & 0xF8) ==TW_MR_DATA_ACK)
272: 81 b1 in r24, 0x01 ; 1
274: 88 7f andi r24, 0xF8 ; 248
276: 80 35 cpi r24, 0x50 ; 80
278: 21 f0 breq .+8 ; 0x282 <twi_read_8+0x9c>
{
return 1;
}
else if ((TWSR & 0xF8) ==TW_MR_DATA_NACK)
27a: 81 b1 in r24, 0x01 ; 1
27c: 88 7f andi r24, 0xF8 ; 248
27e: 88 35 cpi r24, 0x58 ; 88
280: 99 f7 brne .-26 ; 0x268 <twi_read_8+0x82>
282: 90 93 8e 00 sts 0x008E, r25
//停止通信,发送STOP信号
void twi_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
286: 84 e9 ldi r24, 0x94 ; 148
288: 86 bf out 0x36, r24 ; 54
while(!twi_send(adress));
while(!twi_start());
while(!twi_to_read());
while(!twi_receive());
twi_stop();
}
28a: 08 95 ret
0000028c <init_mma7455>:
//初始化
void init_mma7455(void)
{
28c: 65 e4 ldi r22, 0x45 ; 69
28e: 86 e1 ldi r24, 0x16 ; 22
290: 0e 94 bb 00 call 0x176 ; 0x176 <twi_write_8>
twi_write_8(0x16,0x45);//2G,测量
twi_write_8(0x18,0x80);
294: 60 e8 ldi r22, 0x80 ; 128
296: 88 e1 ldi r24, 0x18 ; 24
298: 0e 94 bb 00 call 0x176 ; 0x176 <twi_write_8>
twi_write_8(0x10,74); //X校
29c: 6a e4 ldi r22, 0x4A ; 74
29e: 80 e1 ldi r24, 0x10 ; 16
2a0: 0e 94 bb 00 call 0x176 ; 0x176 <twi_write_8>
twi_write_8(0x12,110);//Y校
2a4: 6e e6 ldi r22, 0x6E ; 110
2a6: 82 e1 ldi r24, 0x12 ; 18
2a8: 0e 94 bb 00 call 0x176 ; 0x176 <twi_write_8>
twi_write_8(0x14,98);//Z校
2ac: 62 e6 ldi r22, 0x62 ; 98
2ae: 84 e1 ldi r24, 0x14 ; 20
2b0: 0e 94 bb 00 call 0x176 ; 0x176 <twi_write_8>
}
2b4: 08 95 ret
000002b6 <__vector_11>:
//串行接收结束中断服务程序
ISR(USART_RXC_vect)
{
2b6: 1f 92 push r1
2b8: 0f 92 push r0
2ba: 0f b6 in r0, 0x3f ; 63
2bc: 0f 92 push r0
2be: 11 24 eor r1, r1
2c0: 2f 93 push r18
2c2: 3f 93 push r19
2c4: 4f 93 push r20
2c6: 5f 93 push r21
2c8: 6f 93 push r22
2ca: 7f 93 push r23
2cc: 8f 93 push r24
2ce: 9f 93 push r25
2d0: af 93 push r26
2d2: bf 93 push r27
2d4: ef 93 push r30
2d6: ff 93 push r31
cli();//关中断.
2d8: f8 94 cli
stmp=UDR;//保护接收UDR数据.
2da: 8c b1 in r24, 0x0c ; 12
2dc: 80 93 92 00 sts 0x0092, r24
if((stmp!='x')&&(stmp!='y')&&(stmp!='z')&&(stmp!='r'))//装缓冲区,以换行符为结束字节.
2e0: 80 91 92 00 lds r24, 0x0092
2e4: 88 37 cpi r24, 0x78 ; 120
2e6: e1 f0 breq .+56 ; 0x320 <__vector_11+0x6a>
2e8: 80 91 92 00 lds r24, 0x0092
2ec: 89 37 cpi r24, 0x79 ; 121
2ee: c1 f0 breq .+48 ; 0x320 <__vector_11+0x6a>
2f0: 80 91 92 00 lds r24, 0x0092
2f4: 8a 37 cpi r24, 0x7A ; 122
2f6: a1 f0 breq .+40 ; 0x320 <__vector_11+0x6a>
2f8: 80 91 92 00 lds r24, 0x0092
2fc: 82 37 cpi r24, 0x72 ; 114
2fe: 81 f0 breq .+32 ; 0x320 <__vector_11+0x6a>
{
inbuffer[inbufcount++]=stmp;
300: 80 91 90 00 lds r24, 0x0090
304: 90 91 91 00 lds r25, 0x0091
308: 20 91 92 00 lds r18, 0x0092
30c: fc 01 movw r30, r24
30e: ed 56 subi r30, 0x6D ; 109
310: ff 4f sbci r31, 0xFF ; 255
312: 20 83 st Z, r18
314: 01 96 adiw r24, 0x01 ; 1
316: 90 93 91 00 sts 0x0091, r25
31a: 80 93 90 00 sts 0x0090, r24
31e: 33 c0 rjmp .+102 ; 0x386 <__vector_11+0xd0>
return;
}
else //结束条件满足,执行操作.
{
if(stmp=='x')
320: 80 91 92 00 lds r24, 0x0092
324: 88 37 cpi r24, 0x78 ; 120
326: 49 f4 brne .+18 ; 0x33a <__vector_11+0x84>
{
twi_write_8(0x10,inbuffer[inbufcount-1]);
328: e0 91 90 00 lds r30, 0x0090
32c: f0 91 91 00 lds r31, 0x0091
330: ee 56 subi r30, 0x6E ; 110
332: ff 4f sbci r31, 0xFF ; 255
334: 60 81 ld r22, Z
336: 80 e1 ldi r24, 0x10 ; 16
338: 0c c0 rjmp .+24 ; 0x352 <__vector_11+0x9c>
}
else if(stmp=='y')
33a: 80 91 92 00 lds r24, 0x0092
33e: 89 37 cpi r24, 0x79 ; 121
340: 59 f4 brne .+22 ; 0x358 <__vector_11+0xa2>
{
twi_write_8(0x12,inbuffer[inbufcount-1]);
342: e0 91 90 00 lds r30, 0x0090
346: f0 91 91 00 lds r31, 0x0091
34a: ee 56 subi r30, 0x6E ; 110
34c: ff 4f sbci r31, 0xFF ; 255
34e: 60 81 ld r22, Z
350: 82 e1 ldi r24, 0x12 ; 18
352: 0e 94 bb 00 call 0x176 ; 0x176 <twi_write_8>
356: 13 c0 rjmp .+38 ; 0x37e <__vector_11+0xc8>
}
else if(stmp=='z')
358: 80 91 92 00 lds r24, 0x0092
35c: 8a 37 cpi r24, 0x7A ; 122
35e: 49 f4 brne .+18 ; 0x372 <__vector_11+0xbc>
{
twi_write_8(0x14,inbuffer[inbufcount-1]);
360: e0 91 90 00 lds r30, 0x0090
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -