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

📄 can.lss

📁 AT90CAN128的CAN通信源码测试成功
💻 LSS
📖 第 1 页 / 共 2 页
字号:

can.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00000018  00800100  00000732  000007a6  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         00000732  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .bss          0000000d  00800118  0000074a  000007be  2**0
                  ALLOC
  3 .debug_aranges 00000020  00000000  00000000  000007be  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_pubnames 000001ac  00000000  00000000  000007de  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   0000056e  00000000  00000000  0000098a  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 00000228  00000000  00000000  00000ef8  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   000006fc  00000000  00000000  00001120  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  000000e0  00000000  00000000  0000181c  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    000001e6  00000000  00000000  000018fc  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_loc    000000d6  00000000  00000000  00001ae2  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_ranges 00000060  00000000  00000000  00001bb8  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 4a 00 	jmp	0x94	; 0x94 <__ctors_end>
   4:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
   8:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
   c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  10:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  14:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  18:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  1c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  20:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  24:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  28:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  2c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  30:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  34:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  38:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  3c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  40:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  44:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  48:	0c 94 61 01 	jmp	0x2c2	; 0x2c2 <__vector_18>
  4c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  50:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  54:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  58:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  5c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  60:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  64:	0c 94 55 02 	jmp	0x4aa	; 0x4aa <__vector_25>
  68:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  6c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  70:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  74:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  78:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  7c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  80:	0c 94 04 02 	jmp	0x408	; 0x408 <__vector_32>
  84:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  88:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  8c:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>
  90:	0c 94 67 00 	jmp	0xce	; 0xce <__bad_interrupt>

00000094 <__ctors_end>:
  94:	11 24       	eor	r1, r1
  96:	1f be       	out	0x3f, r1	; 63
  98:	cf ef       	ldi	r28, 0xFF	; 255
  9a:	d8 e0       	ldi	r29, 0x08	; 8
  9c:	de bf       	out	0x3e, r29	; 62
  9e:	cd bf       	out	0x3d, r28	; 61

000000a0 <__do_copy_data>:
  a0:	11 e0       	ldi	r17, 0x01	; 1
  a2:	a0 e0       	ldi	r26, 0x00	; 0
  a4:	b1 e0       	ldi	r27, 0x01	; 1
  a6:	e2 e3       	ldi	r30, 0x32	; 50
  a8:	f7 e0       	ldi	r31, 0x07	; 7
  aa:	02 c0       	rjmp	.+4      	; 0xb0 <.do_copy_data_start>

000000ac <.do_copy_data_loop>:
  ac:	05 90       	lpm	r0, Z+
  ae:	0d 92       	st	X+, r0

000000b0 <.do_copy_data_start>:
  b0:	a8 31       	cpi	r26, 0x18	; 24
  b2:	b1 07       	cpc	r27, r17
  b4:	d9 f7       	brne	.-10     	; 0xac <.do_copy_data_loop>

000000b6 <__do_clear_bss>:
  b6:	11 e0       	ldi	r17, 0x01	; 1
  b8:	a8 e1       	ldi	r26, 0x18	; 24
  ba:	b1 e0       	ldi	r27, 0x01	; 1
  bc:	01 c0       	rjmp	.+2      	; 0xc0 <.do_clear_bss_start>

000000be <.do_clear_bss_loop>:
  be:	1d 92       	st	X+, r1

000000c0 <.do_clear_bss_start>:
  c0:	a5 32       	cpi	r26, 0x25	; 37
  c2:	b1 07       	cpc	r27, r17
  c4:	e1 f7       	brne	.-8      	; 0xbe <.do_clear_bss_loop>
  c6:	0e 94 b8 02 	call	0x570	; 0x570 <main>
  ca:	0c 94 97 03 	jmp	0x72e	; 0x72e <_exit>

000000ce <__bad_interrupt>:
  ce:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

000000d2 <read_address>:

void USART_Transmit(uchar);


void read_address(void)                              //读取本机地址
{
  d2:	17 b8       	out	0x07, r1	; 7
    uchar read_add;
	DDRC = 0X00;           //C口输入上拉
	PORTC = 0XFF;
  d4:	8f ef       	ldi	r24, 0xFF	; 255
  d6:	88 b9       	out	0x08, r24	; 8
	read_add = PINC;
  d8:	86 b1       	in	r24, 0x06	; 6
	address=read_add;
  da:	80 93 24 01 	sts	0x0124, r24
}
  de:	08 95       	ret

000000e0 <can_baudrate>:


void can_baudrate(void)               //设置波特率250K 
{
  e0:	df 93       	push	r29
  e2:	cf 93       	push	r28
  e4:	cd b7       	in	r28, 0x3d	; 61
  e6:	de b7       	in	r29, 0x3e	; 62
  e8:	28 97       	sbiw	r28, 0x08	; 8
  ea:	0f b6       	in	r0, 0x3f	; 63
  ec:	f8 94       	cli
  ee:	de bf       	out	0x3e, r29	; 62
  f0:	0f be       	out	0x3f, r0	; 63
  f2:	cd bf       	out	0x3d, r28	; 61
		
	uchar	i;
	int	n;
	uchar	PH[8] = {20,16,15,12,10,8,25,18};
  f4:	de 01       	movw	r26, r28
  f6:	11 96       	adiw	r26, 0x01	; 1
  f8:	e0 e1       	ldi	r30, 0x10	; 16
  fa:	f1 e0       	ldi	r31, 0x01	; 1
  fc:	88 e0       	ldi	r24, 0x08	; 8
  fe:	01 90       	ld	r0, Z+
 100:	0d 92       	st	X+, r0
 102:	81 50       	subi	r24, 0x01	; 1
 104:	e1 f7       	brne	.-8      	; 0xfe <can_baudrate+0x1e>
 106:	fe 01       	movw	r30, r28
 108:	31 96       	adiw	r30, 0x01	; 1
 10a:	20 e0       	ldi	r18, 0x00	; 0

	n = 48 ;                       // 12M/250K; 

	for(i=0;i<8;i++)
	{
		if( n%PH[i] == 0 )
 10c:	60 81       	ld	r22, Z
 10e:	80 e3       	ldi	r24, 0x30	; 48
 110:	90 e0       	ldi	r25, 0x00	; 0
 112:	70 e0       	ldi	r23, 0x00	; 0
 114:	0e 94 70 03 	call	0x6e0	; 0x6e0 <__divmodhi4>
 118:	89 2b       	or	r24, r25
 11a:	21 f0       	breq	.+8      	; 0x124 <can_baudrate+0x44>
	
	//20,16,15,12,10,8,18

	n = 48 ;                       // 12M/250K; 

	for(i=0;i<8;i++)
 11c:	2f 5f       	subi	r18, 0xFF	; 255
 11e:	31 96       	adiw	r30, 0x01	; 1
 120:	28 30       	cpi	r18, 0x08	; 8
 122:	a1 f7       	brne	.-24     	; 0x10c <can_baudrate+0x2c>
		{
			 break;
		}
	}

	CPHS2 = PH[i]/3;
 124:	fe 01       	movw	r30, r28
 126:	e2 0f       	add	r30, r18
 128:	f1 1d       	adc	r31, r1
 12a:	21 81       	ldd	r18, Z+1	; 0x01
 12c:	82 2f       	mov	r24, r18
 12e:	63 e0       	ldi	r22, 0x03	; 3
 130:	0e 94 64 03 	call	0x6c8	; 0x6c8 <__udivmodqi4>
 134:	e8 2f       	mov	r30, r24
	CSMP 	= 1;
	CBRP 	= n/PH[i];                  
	CPRS 	= PH[i]- CPHS2 - CPHS1 - CTSYNC;
	
	
	CANBT1 	=	(CBRP-1)<<1;
 136:	80 e3       	ldi	r24, 0x30	; 48
 138:	90 e0       	ldi	r25, 0x00	; 0
 13a:	62 2f       	mov	r22, r18
 13c:	70 e0       	ldi	r23, 0x00	; 0
 13e:	0e 94 70 03 	call	0x6e0	; 0x6e0 <__divmodhi4>
 142:	61 50       	subi	r22, 0x01	; 1
 144:	66 0f       	add	r22, r22
 146:	60 93 e2 00 	sts	0x00E2, r22
	CANBT2 	= 	((CSJW)<<5) | ((CPRS-1)<<1);
 14a:	2e 1b       	sub	r18, r30
 14c:	2e 1b       	sub	r18, r30
 14e:	21 50       	subi	r18, 0x01	; 1
 150:	30 e0       	ldi	r19, 0x00	; 0
 152:	21 50       	subi	r18, 0x01	; 1
 154:	30 40       	sbci	r19, 0x00	; 0
 156:	22 0f       	add	r18, r18
 158:	33 1f       	adc	r19, r19
 15a:	20 93 e3 00 	sts	0x00E3, r18
	CANBT3 	=	((CPHS2-1)<<4) | ((CPHS1-1)<<1) | CSMP;
 15e:	f0 e0       	ldi	r31, 0x00	; 0
 160:	31 97       	sbiw	r30, 0x01	; 1
 162:	cf 01       	movw	r24, r30
 164:	88 0f       	add	r24, r24
 166:	99 1f       	adc	r25, r25
 168:	94 e0       	ldi	r25, 0x04	; 4
 16a:	ee 0f       	add	r30, r30
 16c:	ff 1f       	adc	r31, r31
 16e:	9a 95       	dec	r25
 170:	e1 f7       	brne	.-8      	; 0x16a <can_baudrate+0x8a>
 172:	e8 2b       	or	r30, r24
 174:	e1 60       	ori	r30, 0x01	; 1
 176:	e0 93 e4 00 	sts	0x00E4, r30

}
 17a:	28 96       	adiw	r28, 0x08	; 8
 17c:	0f b6       	in	r0, 0x3f	; 63
 17e:	f8 94       	cli
 180:	de bf       	out	0x3e, r29	; 62
 182:	0f be       	out	0x3f, r0	; 63
 184:	cd bf       	out	0x3d, r28	; 61
 186:	cf 91       	pop	r28
 188:	df 91       	pop	r29
 18a:	08 95       	ret

0000018c <init_CAN>:

void init_CAN(void)
{
 18c:	cf 92       	push	r12
 18e:	df 92       	push	r13
 190:	ef 92       	push	r14
 192:	ff 92       	push	r15
 194:	0f 93       	push	r16
 196:	1f 93       	push	r17
 198:	cf 93       	push	r28
 19a:	df 93       	push	r29

  CANGCON |= (1<<SWRES);                                                        //CAN控制器软复位 
 19c:	08 ed       	ldi	r16, 0xD8	; 216
 19e:	10 e0       	ldi	r17, 0x00	; 0
 1a0:	e8 01       	movw	r28, r16
 1a2:	88 81       	ld	r24, Y
 1a4:	81 60       	ori	r24, 0x01	; 1
 1a6:	88 83       	st	Y, r24
  can_baudrate();
 1a8:	0e 94 70 00 	call	0xe0	; 0xe0 <can_baudrate>
  CANTCON = 0x00; 
 1ac:	10 92 e5 00 	sts	0x00E5, r1

//--------------can_MOB INITIAL------------------- 
//MOB0=RX[CMD]   接收设置      主机格式:192.168.0.0   从机192.168.0.1          
  CANPAGE  = 0x00;                                                              //MOB0 接收,自动增量,初值为0 
 1b0:	2d ee       	ldi	r18, 0xED	; 237
 1b2:	30 e0       	ldi	r19, 0x00	; 0
 1b4:	f9 01       	movw	r30, r18
 1b6:	10 82       	st	Z, r1
  CANSTMOB = 0; 
 1b8:	6e ee       	ldi	r22, 0xEE	; 238
 1ba:	c6 2e       	mov	r12, r22
 1bc:	d1 2c       	mov	r13, r1
 1be:	e6 01       	movw	r28, r12
 1c0:	18 82       	st	Y, r1
  CANCDMOB = 0x18;                                                              //can2B,DLC=8 
 1c2:	af ee       	ldi	r26, 0xEF	; 239
 1c4:	b0 e0       	ldi	r27, 0x00	; 0
 1c6:	98 e1       	ldi	r25, 0x18	; 24
 1c8:	9c 93       	st	X, r25
  CANIDT4 = rx_ID[3]<<3;                                                        // 接收ID设置  
 1ca:	80 91 06 01 	lds	r24, 0x0106
 1ce:	88 0f       	add	r24, r24
 1d0:	88 0f       	add	r24, r24
 1d2:	88 0f       	add	r24, r24
 1d4:	50 ef       	ldi	r21, 0xF0	; 240
 1d6:	e5 2e       	mov	r14, r21
 1d8:	f1 2c       	mov	r15, r1
 1da:	f7 01       	movw	r30, r14
 1dc:	80 83       	st	Z, r24
  CANIDT3 = rx_ID[2];                                                              
 1de:	80 91 04 01 	lds	r24, 0x0104
 1e2:	61 ef       	ldi	r22, 0xF1	; 241
 1e4:	70 e0       	ldi	r23, 0x00	; 0
 1e6:	eb 01       	movw	r28, r22
 1e8:	88 83       	st	Y, r24
  CANIDT2 = rx_ID[1];                                                              
 1ea:	80 91 02 01 	lds	r24, 0x0102
 1ee:	42 ef       	ldi	r20, 0xF2	; 242
 1f0:	50 e0       	ldi	r21, 0x00	; 0
 1f2:	fa 01       	movw	r30, r20
 1f4:	80 83       	st	Z, r24
  CANIDT1 = rx_ID[0];                                                              
 1f6:	80 91 00 01 	lds	r24, 0x0100
 1fa:	e3 ef       	ldi	r30, 0xF3	; 243
 1fc:	f0 e0       	ldi	r31, 0x00	; 0
 1fe:	80 83       	st	Z, r24

  CANIDM4  = 0xff;                                                              //校验寄存器设置                           
 200:	8f ef       	ldi	r24, 0xFF	; 255
 202:	80 93 f4 00 	sts	0x00F4, r24
  CANIDM3  = 0xff;                                                                                          
 206:	80 93 f5 00 	sts	0x00F5, r24
  CANIDM2  = 0xff;                                                                                          
 20a:	80 93 f6 00 	sts	0x00F6, r24
  CANIDM1  = 0xff;                                                              
 20e:	80 93 f7 00 	sts	0x00F7, r24

//MOB4=TX[CMD]     发送设置     主机格式:192.168.0.1    从机192.168.0.0    
  CANPAGE = 0x40;                                                                 //MOB4 发送,自动增量,初值为0  
 212:	80 e4       	ldi	r24, 0x40	; 64
 214:	e9 01       	movw	r28, r18
 216:	88 83       	st	Y, r24
  CANSTMOB = 0;                                      
 218:	e6 01       	movw	r28, r12
 21a:	18 82       	st	Y, r1
  CANCDMOB = 0x18;                                                               //can2B,DLC=8 
 21c:	9c 93       	st	X, r25
  CANIDT4 = tx_ID[3]<<3;                                                        //发送ID设置     
 21e:	80 91 0e 01 	lds	r24, 0x010E
 222:	88 0f       	add	r24, r24
 224:	88 0f       	add	r24, r24
 226:	88 0f       	add	r24, r24
 228:	e7 01       	movw	r28, r14
 22a:	88 83       	st	Y, r24
  CANIDT3 = tx_ID[2];                                                                 
 22c:	80 91 0c 01 	lds	r24, 0x010C
 230:	eb 01       	movw	r28, r22
 232:	88 83       	st	Y, r24
  CANIDT2 = tx_ID[1];                                                                 
 234:	80 91 0a 01 	lds	r24, 0x010A
 238:	ea 01       	movw	r28, r20
 23a:	88 83       	st	Y, r24
  CANIDT1 = tx_ID[0];                                                                
 23c:	80 91 08 01 	lds	r24, 0x0108
 240:	80 83       	st	Z, r24


 
  CANGIE |= ((1<<ENIT) + (1<<ENRX)+(1<<ENTX));                                            //开全局中断 和 接收中断 
 242:	eb ed       	ldi	r30, 0xDB	; 219
 244:	f0 e0       	ldi	r31, 0x00	; 0
 246:	80 81       	ld	r24, Z
 248:	80 6b       	ori	r24, 0xB0	; 176
 24a:	80 83       	st	Z, r24
  CANIE2 |= (1<<IEMOB0)|(1<<IEMOB4);                                                              // MOB0信箱接收中断(接收邮箱) 
 24c:	ee ed       	ldi	r30, 0xDE	; 222
 24e:	f0 e0       	ldi	r31, 0x00	; 0
 250:	80 81       	ld	r24, Z
 252:	81 61       	ori	r24, 0x11	; 17
 254:	80 83       	st	Z, r24
  CANPAGE  = 0x00; 
 256:	f9 01       	movw	r30, r18
 258:	10 82       	st	Z, r1
  CANCDMOB |=(1<<CONMOB1);                                                             // CONMOB1,CONMOB0=10是接收使能 
 25a:	8c 91       	ld	r24, X
 25c:	80 68       	ori	r24, 0x80	; 128
 25e:	8c 93       	st	X, r24
 
  CANGCON |=  (1<<ENASTB);                                                              //CAN控制器启动 
 260:	e8 01       	movw	r28, r16
 262:	88 81       	ld	r24, Y
 264:	82 60       	ori	r24, 0x02	; 2
 266:	88 83       	st	Y, r24

}
 268:	df 91       	pop	r29
 26a:	cf 91       	pop	r28
 26c:	1f 91       	pop	r17
 26e:	0f 91       	pop	r16
 270:	ff 90       	pop	r15
 272:	ef 90       	pop	r14
 274:	df 90       	pop	r13
 276:	cf 90       	pop	r12
 278:	08 95       	ret

0000027a <can_rx_deal>:

// 开路电压DD     00     01    00 00 00 00    FF
//     开头   地址   指令      数据       结尾  

void can_rx_deal(void)                                     //接收数据处理   
{
 27a:	80 91 21 01 	lds	r24, 0x0121

⌨️ 快捷键说明

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