📄 can.lss
字号:
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 + -