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

📄 main.lss

📁 单片机的I2C通信协议
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000001a4  00000000  00000000  00000054  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .debug_aranges 00000020  00000000  00000000  000001f8  2**0
                  CONTENTS, READONLY, DEBUGGING
  2 .debug_pubnames 00000049  00000000  00000000  00000218  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_info   000001ab  00000000  00000000  00000261  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_abbrev 000000d6  00000000  00000000  0000040c  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_line   00000271  00000000  00000000  000004e2  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_frame  00000060  00000000  00000000  00000754  2**2
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_str    0000009b  00000000  00000000  000007b4  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_loc    000000bb  00000000  00000000  0000084f  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	2c c0       	rjmp	.+88     	; 0x5c <__bad_interrupt>
   4:	2b c0       	rjmp	.+86     	; 0x5c <__bad_interrupt>
   6:	2a c0       	rjmp	.+84     	; 0x5c <__bad_interrupt>
   8:	29 c0       	rjmp	.+82     	; 0x5c <__bad_interrupt>
   a:	28 c0       	rjmp	.+80     	; 0x5c <__bad_interrupt>
   c:	27 c0       	rjmp	.+78     	; 0x5c <__bad_interrupt>
   e:	26 c0       	rjmp	.+76     	; 0x5c <__bad_interrupt>
  10:	25 c0       	rjmp	.+74     	; 0x5c <__bad_interrupt>
  12:	24 c0       	rjmp	.+72     	; 0x5c <__bad_interrupt>
  14:	23 c0       	rjmp	.+70     	; 0x5c <__bad_interrupt>
  16:	22 c0       	rjmp	.+68     	; 0x5c <__bad_interrupt>
  18:	21 c0       	rjmp	.+66     	; 0x5c <__bad_interrupt>
  1a:	20 c0       	rjmp	.+64     	; 0x5c <__bad_interrupt>
  1c:	1f c0       	rjmp	.+62     	; 0x5c <__bad_interrupt>
  1e:	1e c0       	rjmp	.+60     	; 0x5c <__bad_interrupt>
  20:	1d c0       	rjmp	.+58     	; 0x5c <__bad_interrupt>
  22:	1c c0       	rjmp	.+56     	; 0x5c <__bad_interrupt>
  24:	1b c0       	rjmp	.+54     	; 0x5c <__bad_interrupt>

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf e5       	ldi	r28, 0x5F	; 95
  2c:	d4 e0       	ldi	r29, 0x04	; 4
  2e:	de bf       	out	0x3e, r29	; 62
  30:	cd bf       	out	0x3d, r28	; 61

00000032 <__do_copy_data>:
  32:	10 e0       	ldi	r17, 0x00	; 0
  34:	a0 e6       	ldi	r26, 0x60	; 96
  36:	b0 e0       	ldi	r27, 0x00	; 0
  38:	e4 ea       	ldi	r30, 0xA4	; 164
  3a:	f1 e0       	ldi	r31, 0x01	; 1
  3c:	02 c0       	rjmp	.+4      	; 0x42 <.do_copy_data_start>

0000003e <.do_copy_data_loop>:
  3e:	05 90       	lpm	r0, Z+
  40:	0d 92       	st	X+, r0

00000042 <.do_copy_data_start>:
  42:	a0 36       	cpi	r26, 0x60	; 96
  44:	b1 07       	cpc	r27, r17
  46:	d9 f7       	brne	.-10     	; 0x3e <.do_copy_data_loop>

00000048 <__do_clear_bss>:
  48:	10 e0       	ldi	r17, 0x00	; 0
  4a:	a0 e6       	ldi	r26, 0x60	; 96
  4c:	b0 e0       	ldi	r27, 0x00	; 0
  4e:	01 c0       	rjmp	.+2      	; 0x52 <.do_clear_bss_start>

00000050 <.do_clear_bss_loop>:
  50:	1d 92       	st	X+, r1

00000052 <.do_clear_bss_start>:
  52:	a0 36       	cpi	r26, 0x60	; 96
  54:	b1 07       	cpc	r27, r17
  56:	e1 f7       	brne	.-8      	; 0x50 <.do_clear_bss_loop>
  58:	94 d0       	rcall	.+296    	; 0x182 <main>
  5a:	a2 c0       	rjmp	.+324    	; 0x1a0 <_exit>

0000005c <__bad_interrupt>:
  5c:	d1 cf       	rjmp	.-94     	; 0x0 <__vectors>

0000005e <error>:
 www.iccavr.com
*/

//#include "iom16v.h"  I2C总线主机模式错误处理 
void error(unsigned char type)
 { 
  5e:	90 e0       	ldi	r25, 0x00	; 0
  60:	88 7f       	andi	r24, 0xF8	; 248
  62:	90 70       	andi	r25, 0x00	; 0
  64:	80 33       	cpi	r24, 0x30	; 48
  66:	91 05       	cpc	r25, r1
  68:	29 f0       	breq	.+10     	; 0x74 <error+0x16>
  6a:	88 34       	cpi	r24, 0x48	; 72
  6c:	91 05       	cpc	r25, r1
  6e:	29 f0       	breq	.+10     	; 0x7a <error+0x1c>
  70:	80 97       	sbiw	r24, 0x20	; 32
  72:	29 f4       	brne	.+10     	; 0x7e <error+0x20>
    /*stop 停止*/
    TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
    break;
    case 0x30:     /*数据写失败*/
    /*stop 停止*/
    TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
  74:	84 e9       	ldi	r24, 0x94	; 148
  76:	86 bf       	out	0x36, r24	; 54
  78:	08 95       	ret
    break;
    case 0x38:     /*仲裁失败*/
    break;
    case 0x48:     /*址址读失败*/
    /*stop 停止*/
    TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
  7a:	84 e9       	ldi	r24, 0x94	; 148
  7c:	86 bf       	out	0x36, r24	; 54
  7e:	08 95       	ret

00000080 <twi_write>:



/*I2C总线单字节写入*/
unsigned char twi_write(unsigned char addr, unsigned char dd) 
{ 
  80:	98 2f       	mov	r25, r24
 TWBR = 2; /*start 启动*/
  82:	82 e0       	ldi	r24, 0x02	; 2
  84:	80 b9       	out	0x00, r24	; 0
 TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
  86:	84 ea       	ldi	r24, 0xA4	; 164
  88:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
  8a:	06 b6       	in	r0, 0x36	; 54
  8c:	07 fe       	sbrs	r0, 7
  8e:	fd cf       	rjmp	.-6      	; 0x8a <twi_write+0xa>
    ;
 if ((TWSR & 0xF8) != 0x08)
  90:	81 b1       	in	r24, 0x01	; 1
  92:	88 7f       	andi	r24, 0xF8	; 248
  94:	88 30       	cpi	r24, 0x08	; 8
  96:	f9 f4       	brne	.+62     	; 0xd6 <twi_write+0x56>
     {
     error(TWSR);
     return 0;
     }
 /*SLA_W 芯片地址*/
 TWDR = 0xA0;
  98:	80 ea       	ldi	r24, 0xA0	; 160
  9a:	83 b9       	out	0x03, r24	; 3
 TWCR = (1 << TWINT) | (1 << TWEN);
  9c:	84 e8       	ldi	r24, 0x84	; 132
  9e:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
  a0:	06 b6       	in	r0, 0x36	; 54
  a2:	07 fe       	sbrs	r0, 7
  a4:	fd cf       	rjmp	.-6      	; 0xa0 <twi_write+0x20>
     ;
 if ((TWSR & 0xF8) != 0x18)
  a6:	81 b1       	in	r24, 0x01	; 1
  a8:	88 7f       	andi	r24, 0xF8	; 248
  aa:	88 31       	cpi	r24, 0x18	; 24
  ac:	a1 f4       	brne	.+40     	; 0xd6 <twi_write+0x56>
     {
     error(TWSR);
     return 0;
     }
 /*addr 操作地址*/
 TWDR = addr;
  ae:	93 b9       	out	0x03, r25	; 3
 TWCR = (1 << TWINT) | (1 << TWEN);
  b0:	84 e8       	ldi	r24, 0x84	; 132
  b2:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
  b4:	06 b6       	in	r0, 0x36	; 54
  b6:	07 fe       	sbrs	r0, 7
  b8:	fd cf       	rjmp	.-6      	; 0xb4 <twi_write+0x34>
    ;
 if ((TWSR & 0xF8) != 0x28)
  ba:	81 b1       	in	r24, 0x01	; 1
  bc:	88 7f       	andi	r24, 0xF8	; 248
  be:	88 32       	cpi	r24, 0x28	; 40
  c0:	51 f4       	brne	.+20     	; 0xd6 <twi_write+0x56>
     error(TWSR);
     return 0;
     }
 
 /*dd 写入数据*/
 TWDR = dd;
  c2:	63 b9       	out	0x03, r22	; 3
 TWCR = (1 << TWINT) | (1 << TWEN);
  c4:	84 e8       	ldi	r24, 0x84	; 132
  c6:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
  c8:	06 b6       	in	r0, 0x36	; 54
  ca:	07 fe       	sbrs	r0, 7
  cc:	fd cf       	rjmp	.-6      	; 0xc8 <twi_write+0x48>
     ;
 if ((TWSR & 0xF8) != 0x28) {
  ce:	81 b1       	in	r24, 0x01	; 1
  d0:	88 7f       	andi	r24, 0xF8	; 248
  d2:	88 32       	cpi	r24, 0x28	; 40
  d4:	21 f0       	breq	.+8      	; 0xde <twi_write+0x5e>
  error(TWSR);
  d6:	81 b1       	in	r24, 0x01	; 1
  d8:	c2 df       	rcall	.-124    	; 0x5e <error>
  da:	80 e0       	ldi	r24, 0x00	; 0
  dc:	08 95       	ret
  return 0;
  }
 
 /*stop 停止*/
 TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
  de:	84 e9       	ldi	r24, 0x94	; 148
  e0:	86 bf       	out	0x36, r24	; 54
  e2:	81 e0       	ldi	r24, 0x01	; 1
 return 1;
}
  e4:	08 95       	ret

000000e6 <twi_read>:


/*I2C总线单字节读取*/
unsigned char twi_read(unsigned char addr, unsigned char *dd)
 {
  e6:	98 2f       	mov	r25, r24
  e8:	fb 01       	movw	r30, r22
 TWBR = 2; /*start 启动*/
  ea:	82 e0       	ldi	r24, 0x02	; 2
  ec:	80 b9       	out	0x00, r24	; 0
 TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
  ee:	84 ea       	ldi	r24, 0xA4	; 164
  f0:	86 bf       	out	0x36, r24	; 54
 while(!(TWCR&(1<<TWINT)))
  f2:	06 b6       	in	r0, 0x36	; 54
  f4:	07 fe       	sbrs	r0, 7
  f6:	fd cf       	rjmp	.-6      	; 0xf2 <twi_read+0xc>
     ;
 if ((TWSR & 0xF8) != 0x08)
  f8:	81 b1       	in	r24, 0x01	; 1
  fa:	88 7f       	andi	r24, 0xF8	; 248
  fc:	88 30       	cpi	r24, 0x08	; 8
  fe:	91 f5       	brne	.+100    	; 0x164 <twi_read+0x7e>
    error(TWSR);
    return 0;
    }
	
 /*SLA_W 芯片地址*/
 TWDR = 0xA0;
 100:	80 ea       	ldi	r24, 0xA0	; 160
 102:	83 b9       	out	0x03, r24	; 3
 TWCR = (1 << TWINT) | (1 << TWEN);
 104:	84 e8       	ldi	r24, 0x84	; 132
 106:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
 108:	06 b6       	in	r0, 0x36	; 54
 10a:	07 fe       	sbrs	r0, 7
 10c:	fd cf       	rjmp	.-6      	; 0x108 <twi_read+0x22>
      ;
 if ((TWSR & 0xF8) != 0x18)
 10e:	81 b1       	in	r24, 0x01	; 1
 110:	88 7f       	andi	r24, 0xF8	; 248
 112:	88 31       	cpi	r24, 0x18	; 24
 114:	39 f5       	brne	.+78     	; 0x164 <twi_read+0x7e>
    error(TWSR);
    return 0;
    } 
	
/*addr 操作地址*/
 TWDR = addr;
 116:	93 b9       	out	0x03, r25	; 3
 TWCR = (1 << TWINT) | (1 << TWEN);
 118:	84 e8       	ldi	r24, 0x84	; 132
 11a:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
 11c:	06 b6       	in	r0, 0x36	; 54
 11e:	07 fe       	sbrs	r0, 7
 120:	fd cf       	rjmp	.-6      	; 0x11c <twi_read+0x36>
     ;
 if ((TWSR & 0xF8) != 0x28)
 122:	81 b1       	in	r24, 0x01	; 1
 124:	88 7f       	andi	r24, 0xF8	; 248
 126:	88 32       	cpi	r24, 0x28	; 40
 128:	e9 f4       	brne	.+58     	; 0x164 <twi_read+0x7e>
    error(TWSR);
    return 0;
    }
  
 /*start 启动*/
 TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
 12a:	84 ea       	ldi	r24, 0xA4	; 164
 12c:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
 12e:	06 b6       	in	r0, 0x36	; 54
 130:	07 fe       	sbrs	r0, 7
 132:	fd cf       	rjmp	.-6      	; 0x12e <twi_read+0x48>
     ;
 if ((TWSR & 0xF8) != 0x10) 
 134:	81 b1       	in	r24, 0x01	; 1
 136:	88 7f       	andi	r24, 0xF8	; 248
 138:	80 31       	cpi	r24, 0x10	; 16
 13a:	a1 f4       	brne	.+40     	; 0x164 <twi_read+0x7e>
    error(TWSR);
    return 0;
    }
 
 /*SLA_R 芯片地址*/
 TWDR = 0xA1;
 13c:	81 ea       	ldi	r24, 0xA1	; 161
 13e:	83 b9       	out	0x03, r24	; 3
 TWCR = (1 << TWINT) | (1 << TWEN);
 140:	84 e8       	ldi	r24, 0x84	; 132
 142:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
 144:	06 b6       	in	r0, 0x36	; 54
 146:	07 fe       	sbrs	r0, 7
 148:	fd cf       	rjmp	.-6      	; 0x144 <twi_read+0x5e>
      ;
 if ((TWSR & 0xF8) != 0x40) 
 14a:	81 b1       	in	r24, 0x01	; 1
 14c:	88 7f       	andi	r24, 0xF8	; 248
 14e:	80 34       	cpi	r24, 0x40	; 64
 150:	49 f4       	brne	.+18     	; 0x164 <twi_read+0x7e>
     {
     error(TWSR);
     return 0;
     } 
/*读取数据*/
 TWCR = (1 << TWINT) | (1 << TWEN);
 152:	84 e8       	ldi	r24, 0x84	; 132
 154:	86 bf       	out	0x36, r24	; 54
 while (!(TWCR & (1 << TWINT)))
 156:	06 b6       	in	r0, 0x36	; 54
 158:	07 fe       	sbrs	r0, 7
 15a:	fd cf       	rjmp	.-6      	; 0x156 <twi_read+0x70>
      ;
 if ((TWSR & 0xF8) != 0x58) 
 15c:	81 b1       	in	r24, 0x01	; 1
 15e:	88 7f       	andi	r24, 0xF8	; 248
 160:	88 35       	cpi	r24, 0x58	; 88
 162:	21 f0       	breq	.+8      	; 0x16c <twi_read+0x86>
     {
     error(TWSR);
 164:	81 b1       	in	r24, 0x01	; 1
 166:	7b df       	rcall	.-266    	; 0x5e <error>
 168:	80 e0       	ldi	r24, 0x00	; 0
 16a:	08 95       	ret
     return 0;
     }
 *dd = TWDR;
 16c:	83 b1       	in	r24, 0x03	; 3
 16e:	80 83       	st	Z, r24
  
 /*stop 停止*/
 TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
 170:	84 e9       	ldi	r24, 0x94	; 148
 172:	86 bf       	out	0x36, r24	; 54
 174:	81 e0       	ldi	r24, 0x01	; 1
 return 1;
 176:	08 95       	ret

00000178 <port>:
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <I2C.H>

void  port (void)
{
 178:	8a 9a       	sbi	0x11, 2	; 17
  DDRD|=(1<<PD2);    //485  cs
  PORTD&=~(1<<PD2);  
 17a:	92 98       	cbi	0x12, 2	; 18
  DDRB|=(1<<PB0);    //power 灯
 17c:	b8 9a       	sbi	0x17, 0	; 23
  PORTB&=~(1<<PB0);  
 17e:	c0 98       	cbi	0x18, 0	; 24
  
}
 180:	08 95       	ret

00000182 <main>:

//--------------------------------------------------------------------------------------------
 main(void) 
{ 
 182:	8a 9a       	sbi	0x11, 2	; 17
#include <I2C.H>

void  port (void)
{
  DDRD|=(1<<PD2);    //485  cs
  PORTD&=~(1<<PD2);  
 184:	92 98       	cbi	0x12, 2	; 18
  DDRB|=(1<<PB0);    //power 灯
 186:	b8 9a       	sbi	0x17, 0	; 23
  PORTB&=~(1<<PB0);  
 188:	c0 98       	cbi	0x18, 0	; 24
 main(void) 
{ 
  unsigned long int d=0,p[12],n=0,m=0;
  unsigned char aa=0,a=0,b=0,c=0,i=0;
  port();     //端口初始化
  TWCR|=5;
 18a:	86 b7       	in	r24, 0x36	; 54
 18c:	85 60       	ori	r24, 0x05	; 5
 18e:	86 bf       	out	0x36, r24	; 54
  TWBR=2;
 190:	82 e0       	ldi	r24, 0x02	; 2
 192:	80 b9       	out	0x00, r24	; 0
  TWSR=0;
 194:	11 b8       	out	0x01, r1	; 1
  
  sei();
 196:	78 94       	sei
   
  while(1) 
  {
  
  twi_write(0x80, 0x01);
 198:	61 e0       	ldi	r22, 0x01	; 1
 19a:	80 e8       	ldi	r24, 0x80	; 128
 19c:	71 df       	rcall	.-286    	; 0x80 <twi_write>
 19e:	fc cf       	rjmp	.-8      	; 0x198 <main+0x16>

000001a0 <_exit>:
 1a0:	f8 94       	cli

000001a2 <__stop_program>:
 1a2:	ff cf       	rjmp	.-2      	; 0x1a2 <__stop_program>

⌨️ 快捷键说明

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