📄 cantest.lss
字号:
236: 20 93 f3 00 sts 0x00F3, r18
CANCDMOB = 0x08;
23a: 90 93 ef 00 sts 0x00EF, r25
CANGIE |= ((1<<ENIT) + (1<<ENRX)); //开全局中断 和 接收中断
23e: 80 91 db 00 lds r24, 0x00DB
242: 80 6a ori r24, 0xA0 ; 160
244: 80 93 db 00 sts 0x00DB, r24
CANIE2 |= 0x09; //开MOB3 & MOB0信箱接收中断(接收邮箱)
248: 80 91 de 00 lds r24, 0x00DE
24c: 89 60 ori r24, 0x09 ; 9
24e: 80 93 de 00 sts 0x00DE, r24
CANPAGE = 0x00;
252: 10 92 ed 00 sts 0x00ED, r1
CANCDMOB |= 0x80; //MOB0接收使能
256: 80 91 ef 00 lds r24, 0x00EF
25a: 80 68 ori r24, 0x80 ; 128
25c: 80 93 ef 00 sts 0x00EF, r24
CANPAGE = 0x30;
260: 30 93 ed 00 sts 0x00ED, r19
CANCDMOB |= 0x80; //MOB3接收使能
264: 80 91 ef 00 lds r24, 0x00EF
268: 80 68 ori r24, 0x80 ; 128
26a: 80 93 ef 00 sts 0x00EF, r24
CANGCON |= 0x02; //enable //CAN控制器启动
26e: 80 91 d8 00 lds r24, 0x00D8
272: 82 60 ori r24, 0x02 ; 2
274: 80 93 d8 00 sts 0x00D8, r24
/*
CANGIE |= ((1<<ENIT) + (1<<ENRX));
//开全局中断 和 接收中断
CANIE2 |= 0x09; //开MOB3 & MOB0信箱接收中断(接收邮箱)
CANPAGE = 0x00;
CANCDMOB |= 0x80; //MOB0接收使能
CANPAGE = 0x30;
CANCDMOB |= 0x80;
//MOB3接收使能
CANGCON |= 0x02; //enable //CAN控制器启动
*/
/*
//-------------TCC1定时器初始化-----------------
TCCR1A = 0x00; //设置工作模式和分频因子
TCCR1B = 0x04; // T=CLK/1024 0x04=1s 0x05=4s
TCCR1C = 0x00;
TIMSK1 = 0x01; // 允许溢出中断
TCNT1 = 0x0000; //初始化计数器值,在程序中更改相应数值可以更改中断时间
*/
//-------------------ADC初始化------------------
ADCSRA = 0x8c; //使能ADC单元,单次,允许中断,16分频(1MHzADC时钟)
278: 8c e8 ldi r24, 0x8C ; 140
27a: 80 93 7a 00 sts 0x007A, r24
ADMUX = 0x40; //AVcc参考电源,右对齐,未指定输入源
27e: 50 93 7c 00 sts 0x007C, r21
// __watchdog_reset(); //喂狗
SREG = 0x80; //开全局中断
282: 80 e8 ldi r24, 0x80 ; 128
284: 8f bf out 0x3f, r24 ; 63
286: 08 95 ret
00000288 <MOB_send>:
}
//CAN数据帧发送
void MOB_send (unsigned char n)
{
288: 98 2f mov r25, r24
CANGIE &= ~(1<<ENRX);
28a: 80 91 db 00 lds r24, 0x00DB
28e: 8f 7d andi r24, 0xDF ; 223
290: 80 93 db 00 sts 0x00DB, r24
unsigned int i;
CANPAGE = (n<<4); //MOB_n, auto increment, index 0
294: 89 2f mov r24, r25
296: 82 95 swap r24
298: 80 7f andi r24, 0xF0 ; 240
29a: 80 93 ed 00 sts 0x00ED, r24
if (CANSTMOB & (1<<TXOK))
29e: 80 91 ee 00 lds r24, 0x00EE
2a2: 86 ff sbrs r24, 6
2a4: 1f c0 rjmp .+62 ; 0x2e4 <MOB_send+0x5c>
{
// CANCDMOB= 0x18;
CANSTMOB &= ~(1<<TXOK);
2a6: 80 91 ee 00 lds r24, 0x00EE
2aa: 8f 7b andi r24, 0xBF ; 191
2ac: 80 93 ee 00 sts 0x00EE, r24
2b0: e9 2f mov r30, r25
2b2: ff 27 eor r31, r31
2b4: 83 e0 ldi r24, 0x03 ; 3
2b6: ee 0f add r30, r30
2b8: ff 1f adc r31, r31
2ba: 8a 95 dec r24
2bc: e1 f7 brne .-8 ; 0x2b6 <MOB_send+0x2e>
2be: e0 50 subi r30, 0x00 ; 0
2c0: ff 4f sbci r31, 0xFF ; 255
2c2: 27 e0 ldi r18, 0x07 ; 7
2c4: 30 e0 ldi r19, 0x00 ; 0
for(i = 0; i < 8; i++) CANMSG = can_data[n][i];
2c6: 81 91 ld r24, Z+
2c8: 80 93 fa 00 sts 0x00FA, r24
2cc: 21 50 subi r18, 0x01 ; 1
2ce: 30 40 sbci r19, 0x00 ; 0
2d0: 37 ff sbrs r19, 7
2d2: f9 cf rjmp .-14 ; 0x2c6 <MOB_send+0x3e>
CANCDMOB = 0x58; //帧发送
2d4: 88 e5 ldi r24, 0x58 ; 88
2d6: 80 93 ef 00 sts 0x00EF, r24
CANGIE |=(1<<ENRX);
2da: 80 91 db 00 lds r24, 0x00DB
2de: 80 62 ori r24, 0x20 ; 32
2e0: 80 93 db 00 sts 0x00DB, r24
2e4: 08 95 ret
000002e6 <main>:
}
}
int main(void)
{
2e6: cf ef ldi r28, 0xFF ; 255
2e8: d0 e1 ldi r29, 0x10 ; 16
2ea: de bf out 0x3e, r29 ; 62
2ec: cd bf out 0x3d, r28 ; 61
unsigned int pp=0;
mcu_init();
2ee: 0e 94 69 00 call 0xd2 <mcu_init>
//MOB_send(1);
//MOB_send(4);
while(1)
{
pp = 60000;
2f2: 80 e6 ldi r24, 0x60 ; 96
2f4: 9a ee ldi r25, 0xEA ; 234
while(pp){pp--;}
2f6: 01 97 sbiw r24, 0x01 ; 1
2f8: f1 f7 brne .-4 ; 0x2f6 <main+0x10>
pp = 60000;
2fa: 80 e6 ldi r24, 0x60 ; 96
2fc: 9a ee ldi r25, 0xEA ; 234
while(pp){pp--;}
2fe: 01 97 sbiw r24, 0x01 ; 1
300: f1 f7 brne .-4 ; 0x2fe <main+0x18>
pp = 60000;
302: 80 e6 ldi r24, 0x60 ; 96
304: 9a ee ldi r25, 0xEA ; 234
while(pp){pp--;}
306: 01 97 sbiw r24, 0x01 ; 1
308: f1 f7 brne .-4 ; 0x306 <main+0x20>
pp = 60000;
30a: 80 e6 ldi r24, 0x60 ; 96
30c: 9a ee ldi r25, 0xEA ; 234
while(pp){pp--;}
30e: 01 97 sbiw r24, 0x01 ; 1
310: f1 f7 brne .-4 ; 0x30e <main+0x28>
312: ef cf rjmp .-34 ; 0x2f2 <main+0xc>
00000314 <__vector_18>:
//MOB_send(4);
}
}
//-----------------------------------------------------------------------------
//中断函数 接收CAN数据帧 并 存入数据单元组
//**********************************************************
SIGNAL(SIG_CAN_INTERRUPT1)
{
314: 1f 92 push r1
316: 0f 92 push r0
318: 0f b6 in r0, 0x3f ; 63
31a: 0f 92 push r0
31c: 11 24 eor r1, r1
31e: 8f 93 push r24
320: 9f 93 push r25
322: ef 93 push r30
324: ff 93 push r31
326: cf 93 push r28
328: df 93 push r29
32a: cd b7 in r28, 0x3d ; 61
32c: de b7 in r29, 0x3e ; 62
32e: 23 97 sbiw r28, 0x03 ; 3
330: de bf out 0x3e, r29 ; 62
332: cd bf out 0x3d, r28 ; 61
volatile unsigned char i = 1, num_i,jj;
334: 81 e0 ldi r24, 0x01 ; 1
336: 89 83 std Y+1, r24 ; 0x01
CANGIE &= ~(1<<ENRX); //关接收中断****
338: 80 91 db 00 lds r24, 0x00DB
33c: 8f 7d andi r24, 0xDF ; 223
33e: 80 93 db 00 sts 0x00DB, r24
num_i = CANSIT2;
342: 80 91 e0 00 lds r24, 0x00E0
346: 8a 83 std Y+2, r24 ; 0x02
//-----------------------------------------------------
if (num_i & (1<<SIT0))
348: 8a 81 ldd r24, Y+2 ; 0x02
34a: 80 ff sbrs r24, 0
34c: 27 c0 rjmp .+78 ; 0x39c <__vector_18+0x88>
{
i=0;
34e: 19 82 std Y+1, r1 ; 0x01
TCNT1 = 0x0000; //重启定时监视器
350: 10 92 85 00 sts 0x0085, r1
354: 10 92 84 00 sts 0x0084, r1
CANPAGE = i<<4;
358: 89 81 ldd r24, Y+1 ; 0x01
35a: 82 95 swap r24
35c: 80 7f andi r24, 0xF0 ; 240
35e: 80 93 ed 00 sts 0x00ED, r24
for(jj = 0; jj < 8; jj++)
362: 1b 82 std Y+3, r1 ; 0x03
364: 8b 81 ldd r24, Y+3 ; 0x03
366: 88 30 cpi r24, 0x08 ; 8
368: a8 f4 brcc .+42 ; 0x394 <__vector_18+0x80>
{
can_data[i][jj]=CANMSG; //取得8个字节的数据
36a: 9b 81 ldd r25, Y+3 ; 0x03
36c: 89 81 ldd r24, Y+1 ; 0x01
36e: e8 2f mov r30, r24
370: ff 27 eor r31, r31
372: ee 0f add r30, r30
374: ff 1f adc r31, r31
376: ee 0f add r30, r30
378: ff 1f adc r31, r31
37a: ee 0f add r30, r30
37c: ff 1f adc r31, r31
37e: e9 0f add r30, r25
380: f1 1d adc r31, r1
382: e0 50 subi r30, 0x00 ; 0
384: ff 4f sbci r31, 0xFF ; 255
386: 80 91 fa 00 lds r24, 0x00FA
38a: 80 83 st Z, r24
38c: 8b 81 ldd r24, Y+3 ; 0x03
38e: 8f 5f subi r24, 0xFF ; 255
390: 8b 83 std Y+3, r24 ; 0x03
392: e8 cf rjmp .-48 ; 0x364 <__vector_18+0x50>
}
TCNT1 = 0x0000; //重启定时监视器
394: 10 92 85 00 sts 0x0085, r1
398: 10 92 84 00 sts 0x0084, r1
}
//------------------------------------------------------
if (num_i & (1<<SIT3))
39c: 8a 81 ldd r24, Y+2 ; 0x02
39e: 83 ff sbrs r24, 3
3a0: 24 c0 rjmp .+72 ; 0x3ea <__vector_18+0xd6>
{
i=3;
3a2: 83 e0 ldi r24, 0x03 ; 3
3a4: 89 83 std Y+1, r24 ; 0x01
CANPAGE = i<<4;
3a6: 89 81 ldd r24, Y+1 ; 0x01
3a8: 82 95 swap r24
3aa: 80 7f andi r24, 0xF0 ; 240
3ac: 80 93 ed 00 sts 0x00ED, r24
for(jj = 0; jj < 8; jj++)
3b0: 1b 82 std Y+3, r1 ; 0x03
3b2: 8b 81 ldd r24, Y+3 ; 0x03
3b4: 88 30 cpi r24, 0x08 ; 8
3b6: a8 f4 brcc .+42 ; 0x3e2 <__vector_18+0xce>
{
can_data[i][num_i]=CANMSG; //取得8个字节的数据
3b8: 9a 81 ldd r25, Y+2 ; 0x02
3ba: 89 81 ldd r24, Y+1 ; 0x01
3bc: e8 2f mov r30, r24
3be: ff 27 eor r31, r31
3c0: ee 0f add r30, r30
3c2: ff 1f adc r31, r31
3c4: ee 0f add r30, r30
3c6: ff 1f adc r31, r31
3c8: ee 0f add r30, r30
3ca: ff 1f adc r31, r31
3cc: e9 0f add r30, r25
3ce: f1 1d adc r31, r1
3d0: e0 50 subi r30, 0x00 ; 0
3d2: ff 4f sbci r31, 0xFF ; 255
3d4: 80 91 fa 00 lds r24, 0x00FA
3d8: 80 83 st Z, r24
3da: 8b 81 ldd r24, Y+3 ; 0x03
3dc: 8f 5f subi r24, 0xFF ; 255
3de: 8b 83 std Y+3, r24 ; 0x03
3e0: e8 cf rjmp .-48 ; 0x3b2 <__vector_18+0x9e>
}
TCNT1 = 0x0000; //重启定时监视器
3e2: 10 92 85 00 sts 0x0085, r1
3e6: 10 92 84 00 sts 0x0084, r1
}
//------------------------------------------------------
CANPAGE = 0x00;
3ea: 10 92 ed 00 sts 0x00ED, r1
CANSTMOB &= ~(1<<RXOK); //清中断标志****
3ee: 80 91 ee 00 lds r24, 0x00EE
3f2: 8f 7d andi r24, 0xDF ; 223
3f4: 80 93 ee 00 sts 0x00EE, r24
CANCDMOB = 0x98; //接收使能
3f8: 88 e9 ldi r24, 0x98 ; 152
3fa: 80 93 ef 00 sts 0x00EF, r24
CANPAGE = 0x30;
3fe: 80 e3 ldi r24, 0x30 ; 48
400: 80 93 ed 00 sts 0x00ED, r24
CANSTMOB &= ~(1<<RXOK); //清中断标志****
404: 80 91 ee 00 lds r24, 0x00EE
408: 8f 7d andi r24, 0xDF ; 223
40a: 80 93 ee 00 sts 0x00EE, r24
CANCDMOB |= 0x98; //接收使能
40e: 80 91 ef 00 lds r24, 0x00EF
412: 88 69 ori r24, 0x98 ; 152
414: 80 93 ef 00 sts 0x00EF, r24
CANGIE |= (1<<ENRX); //开中断
418: 80 91 db 00 lds r24, 0x00DB
41c: 80 62 ori r24, 0x20 ; 32
41e: 80 93 db 00 sts 0x00DB, r24
422: 23 96 adiw r28, 0x03 ; 3
424: f8 94 cli
426: de bf out 0x3e, r29 ; 62
428: cd bf out 0x3d, r28 ; 61
42a: df 91 pop r29
42c: cf 91 pop r28
42e: ff 91 pop r31
430: ef 91 pop r30
432: 9f 91 pop r25
434: 8f 91 pop r24
436: 0f 90 pop r0
438: 0f be out 0x3f, r0 ; 63
43a: 0f 90 pop r0
43c: 1f 90 pop r1
43e: 18 95 reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -