📄 can.lss
字号:
27e: 8c 3c cpi r24, 0xCC ; 204
280: 99 f4 brne .+38 ; 0x2a8 <can_rx_deal+0x2e>
if(can_rx_data[0]==0Xcc) //FET控制
{
//if(can_rx_data[1]==0xb0)
{
switch(can_rx_data[2])
282: 80 91 23 01 lds r24, 0x0123
286: 82 30 cpi r24, 0x02 ; 2
288: 39 f0 breq .+14 ; 0x298 <can_rx_deal+0x1e>
28a: 80 3a cpi r24, 0xA0 ; 160
28c: 49 f0 breq .+18 ; 0x2a0 <can_rx_deal+0x26>
28e: 81 30 cpi r24, 0x01 ; 1
290: b9 f4 brne .+46 ; 0x2c0 <can_rx_deal+0x46>
{
case 0x01: close_flag=1; //通道关闭
292: 80 93 18 01 sts 0x0118, r24
296: 08 95 ret
break;
case 0x02: open_flag=1; //通道开启
298: 81 e0 ldi r24, 0x01 ; 1
29a: 80 93 19 01 sts 0x0119, r24
29e: 08 95 ret
break;
case 0xa0: ad_flag=1; //AD采集启动
2a0: 81 e0 ldi r24, 0x01 ; 1
2a2: 80 93 1a 01 sts 0x011A, r24
2a6: 08 95 ret
break;
}
}
}
else if(can_rx_data[0]==0XDD) //太阳能方阵开路电压采集
2a8: 80 91 21 01 lds r24, 0x0121
2ac: 8d 3d cpi r24, 0xDD ; 221
2ae: 41 f4 brne .+16 ; 0x2c0 <can_rx_deal+0x46>
{
if(can_rx_data[1]==address)
2b0: 90 91 22 01 lds r25, 0x0122
2b4: 80 91 24 01 lds r24, 0x0124
2b8: 98 17 cp r25, r24
2ba: 11 f4 brne .+4 ; 0x2c0 <can_rx_deal+0x46>
{
switch(can_rx_data[2])
2bc: 80 91 23 01 lds r24, 0x0123
2c0: 08 95 ret
000002c2 <__vector_18>:
}
ISR(CANIT_vect) //CAN接收中断处理函数
{
2c2: 1f 92 push r1
2c4: 0f 92 push r0
2c6: 0f b6 in r0, 0x3f ; 63
2c8: 0f 92 push r0
2ca: 11 24 eor r1, r1
2cc: 2f 93 push r18
2ce: 3f 93 push r19
2d0: 4f 93 push r20
2d2: 5f 93 push r21
2d4: 6f 93 push r22
2d6: 7f 93 push r23
2d8: 8f 93 push r24
2da: 9f 93 push r25
2dc: af 93 push r26
2de: bf 93 push r27
2e0: ef 93 push r30
2e2: ff 93 push r31
uchar i , num_i;
CANGIE &= ~(1<<ENRX); //关接收中断****
2e4: 80 91 db 00 lds r24, 0x00DB
2e8: 8f 7d andi r24, 0xDF ; 223
2ea: 80 93 db 00 sts 0x00DB, r24
num_i = CANSIT2;
2ee: 80 91 e0 00 lds r24, 0x00E0
//-----------------------------------------------------
if (num_i & (1<<SIT0))
2f2: 80 ff sbrs r24, 0
2f4: 23 c0 rjmp .+70 ; 0x33c <__vector_18+0x7a>
{
if (CANSTMOB & (1<<RXOK))
2f6: 80 91 ee 00 lds r24, 0x00EE
2fa: 85 ff sbrs r24, 5
2fc: 1b c0 rjmp .+54 ; 0x334 <__vector_18+0x72>
{
i=0;
CANPAGE = i<<4;
2fe: 10 92 ed 00 sts 0x00ED, r1
302: 20 e0 ldi r18, 0x00 ; 0
304: 30 e0 ldi r19, 0x00 ; 0
for(num_i = 0; num_i < 8; num_i++)
{
can_rx_data[num_i]=CANMSG; //取得8个字节的数据
306: 80 91 fa 00 lds r24, 0x00FA
30a: f9 01 movw r30, r18
30c: ef 5d subi r30, 0xDF ; 223
30e: fe 4f sbci r31, 0xFE ; 254
310: 80 83 st Z, r24
312: 2f 5f subi r18, 0xFF ; 255
314: 3f 4f sbci r19, 0xFF ; 255
if (CANSTMOB & (1<<RXOK))
{
i=0;
CANPAGE = i<<4;
for(num_i = 0; num_i < 8; num_i++)
316: 28 30 cpi r18, 0x08 ; 8
318: 31 05 cpc r19, r1
31a: a9 f7 brne .-22 ; 0x306 <__vector_18+0x44>
{
can_rx_data[num_i]=CANMSG; //取得8个字节的数据
}
can_rx_deal() ; //处理接收指令
31c: 0e 94 3d 01 call 0x27a ; 0x27a <can_rx_deal>
CANPAGE = 0x00;
320: 10 92 ed 00 sts 0x00ED, r1
CANSTMOB &= ~(1<<RXOK); //清中断标志****
324: 80 91 ee 00 lds r24, 0x00EE
328: 8f 7d andi r24, 0xDF ; 223
32a: 80 93 ee 00 sts 0x00EE, r24
CANCDMOB = 0x98; //接收使能 2.0B DLC=8
32e: 88 e9 ldi r24, 0x98 ; 152
330: 80 93 ef 00 sts 0x00EF, r24
//CANGIE |= (1<<ENRX); //开中断
}
else
{
}
CANSTMOB &= ~(1<<RXOK); //清中断标志****
334: 80 91 ee 00 lds r24, 0x00EE
338: 8f 7d andi r24, 0xDF ; 223
33a: 24 c0 rjmp .+72 ; 0x384 <__vector_18+0xc2>
}
else if (num_i & (1<<SIT4))
33c: 84 ff sbrs r24, 4
33e: 24 c0 rjmp .+72 ; 0x388 <__vector_18+0xc6>
{
if (CANSTMOB & (1<<TXOK))
340: 80 91 ee 00 lds r24, 0x00EE
344: 86 ff sbrs r24, 6
346: 1b c0 rjmp .+54 ; 0x37e <__vector_18+0xbc>
{
i=4;
CANPAGE = i<<4;
348: 80 e4 ldi r24, 0x40 ; 64
34a: 80 93 ed 00 sts 0x00ED, r24
34e: 20 e0 ldi r18, 0x00 ; 0
350: 30 e0 ldi r19, 0x00 ; 0
for(num_i = 0; num_i < 8; num_i++)
{
CANMSG=can_tx_data[num_i]; //发送8个字节的数据
352: f9 01 movw r30, r18
354: ee 5d subi r30, 0xDE ; 222
356: fe 4f sbci r31, 0xFE ; 254
358: 80 81 ld r24, Z
35a: 80 93 fa 00 sts 0x00FA, r24
35e: 2f 5f subi r18, 0xFF ; 255
360: 3f 4f sbci r19, 0xFF ; 255
if (CANSTMOB & (1<<TXOK))
{
i=4;
CANPAGE = i<<4;
for(num_i = 0; num_i < 8; num_i++)
362: 28 30 cpi r18, 0x08 ; 8
364: 31 05 cpc r19, r1
366: a9 f7 brne .-22 ; 0x352 <__vector_18+0x90>
{
CANMSG=can_tx_data[num_i]; //发送8个字节的数据
}
CANPAGE = 0x40;
368: 80 e4 ldi r24, 0x40 ; 64
36a: 80 93 ed 00 sts 0x00ED, r24
CANSTMOB &= ~(1<<TXOK); //清中断标志****
36e: 80 91 ee 00 lds r24, 0x00EE
372: 8f 7b andi r24, 0xBF ; 191
374: 80 93 ee 00 sts 0x00EE, r24
CANCDMOB = 0x58; //接收使能 2.0B DLC=8
378: 88 e5 ldi r24, 0x58 ; 88
37a: 80 93 ef 00 sts 0x00EF, r24
//CANGIE |= (1<<ENRX); //开中断
}
else
{
}
CANSTMOB &= ~(1<<TXOK); //清中断标志****
37e: 80 91 ee 00 lds r24, 0x00EE
382: 8f 7b andi r24, 0xBF ; 191
384: 80 93 ee 00 sts 0x00EE, r24
}
CANGIE |= (1<<ENRX); //开中断
388: 80 91 db 00 lds r24, 0x00DB
38c: 80 62 ori r24, 0x20 ; 32
38e: 80 93 db 00 sts 0x00DB, r24
}
392: ff 91 pop r31
394: ef 91 pop r30
396: bf 91 pop r27
398: af 91 pop r26
39a: 9f 91 pop r25
39c: 8f 91 pop r24
39e: 7f 91 pop r23
3a0: 6f 91 pop r22
3a2: 5f 91 pop r21
3a4: 4f 91 pop r20
3a6: 3f 91 pop r19
3a8: 2f 91 pop r18
3aa: 0f 90 pop r0
3ac: 0f be out 0x3f, r0 ; 63
3ae: 0f 90 pop r0
3b0: 1f 90 pop r1
3b2: 18 95 reti
000003b4 <can_send_data>:
void can_send_data(void) //发送前数据整理
{
3b4: 8c ec ldi r24, 0xCC ; 204
3b6: 80 93 22 01 sts 0x0122, r24
can_tx_data[0]=0xcc;
can_tx_data[1]=0x00; //地址
3ba: 10 92 23 01 sts 0x0123, r1
can_tx_data[2]=0x01;
3be: 91 e0 ldi r25, 0x01 ; 1
3c0: 90 93 24 01 sts 0x0124, r25
can_tx_data[3]=0x01; //ad高位
3c4: 90 93 25 01 sts 0x0125, r25
can_tx_data[4]=0x00; //ad低位
3c8: 10 92 26 01 sts 0x0126, r1
can_tx_data[5]=0x02;
3cc: 82 e0 ldi r24, 0x02 ; 2
3ce: 80 93 27 01 sts 0x0127, r24
can_tx_data[6]=0x01;
3d2: 90 93 28 01 sts 0x0128, r25
can_tx_data[7]=0xff;
3d6: 8f ef ldi r24, 0xFF ; 255
3d8: 80 93 29 01 sts 0x0129, r24
}
3dc: 08 95 ret
000003de <can_tx_init>:
CANCDMOB = 0x58; //帧发送 DLC=8
CANGIE |=(1<<ENRX); //开接收中断
}
}*/
void can_tx_init(void)
{
3de: 80 e4 ldi r24, 0x40 ; 64
3e0: 80 93 ed 00 sts 0x00ED, r24
CANPAGE = 0x40;
if( (CANCDMOB & 0xc0) == 0x00 )
3e4: 80 91 ef 00 lds r24, 0x00EF
3e8: 80 7c andi r24, 0xC0 ; 192
3ea: 29 f4 brne .+10 ; 0x3f6 <can_tx_init+0x18>
{
CANSTMOB |= (1<<TXOK);
3ec: 80 91 ee 00 lds r24, 0x00EE
3f0: 80 64 ori r24, 0x40 ; 64
3f2: 80 93 ee 00 sts 0x00EE, r24
3f6: 08 95 ret
000003f8 <USART_Transmit>:
//---------------------串口测试相关函数------------------------------
void USART_Transmit(uchar data)
{
3f8: 98 2f mov r25, r24
while(!(UCSR1A&_BV(UDRE1)));
3fa: 80 91 c8 00 lds r24, 0x00C8
3fe: 85 ff sbrs r24, 5
400: fc cf rjmp .-8 ; 0x3fa <USART_Transmit+0x2>
UDR1=data;
402: 90 93 ce 00 sts 0x00CE, r25
}
406: 08 95 ret
00000408 <__vector_32>:
ISR(USART1_RX_vect)
{
408: 1f 92 push r1
40a: 0f 92 push r0
40c: 0f b6 in r0, 0x3f ; 63
40e: 0f 92 push r0
410: 11 24 eor r1, r1
412: 8f 93 push r24
414: 9f 93 push r25
416: ef 93 push r30
418: ff 93 push r31
uchar status,data;
status=UCSR1A;
41a: 80 91 c8 00 lds r24, 0x00C8
data=UDR1;
41e: 90 91 ce 00 lds r25, 0x00CE
if((status&(_BV(FE1)|_BV(UPE1)|_BV(DOR1)))==0)
422: 8c 71 andi r24, 0x1C ; 28
424: f1 f4 brne .+60 ; 0x462 <__vector_32+0x5a>
{
rx_buffer[rx_counter]=data;
426: e0 91 1d 01 lds r30, 0x011D
42a: f0 e0 ldi r31, 0x00 ; 0
42c: ed 5d subi r30, 0xDD ; 221
42e: fe 4f sbci r31, 0xFE ; 254
430: 90 83 st Z, r25
rx_counter++;
432: 80 91 1d 01 lds r24, 0x011D
436: 8f 5f subi r24, 0xFF ; 255
438: 80 93 1d 01 sts 0x011D, r24
switch(rx_counter)
43c: 80 91 1d 01 lds r24, 0x011D
440: 81 30 cpi r24, 0x01 ; 1
442: 19 f0 breq .+6 ; 0x44a <__vector_32+0x42>
444: 85 30 cpi r24, 0x05 ; 5
446: 69 f4 brne .+26 ; 0x462 <__vector_32+0x5a>
448: 05 c0 rjmp .+10 ; 0x454 <__vector_32+0x4c>
{
case 1:
if(data!=0XBB)
44a: 9b 3b cpi r25, 0xBB ; 187
44c: 51 f0 breq .+20 ; 0x462 <__vector_32+0x5a>
rx_counter=0;
44e: 10 92 1d 01 sts 0x011D, r1
452: 07 c0 rjmp .+14 ; 0x462 <__vector_32+0x5a>
break;
case 5:
if(data==0XFF)
454: 9f 3f cpi r25, 0xFF ; 255
456: 29 f4 brne .+10 ; 0x462 <__vector_32+0x5a>
{
rx_counter=0;
458: 10 92 1d 01 sts 0x011D, r1
usart1_flag=1;
45c: 81 e0 ldi r24, 0x01 ; 1
45e: 80 93 1c 01 sts 0x011C, r24
}
break;
}
}
}
462: ff 91 pop r31
464: ef 91 pop r30
466: 9f 91 pop r25
468: 8f 91 pop r24
46a: 0f 90 pop r0
46c: 0f be out 0x3f, r0 ; 63
46e: 0f 90 pop r0
470: 1f 90 pop r1
472: 18 95 reti
00000474 <USART_init>:
void USART_init(void)
{
474: 10 92 c8 00 sts 0x00C8, r1
UCSR1A= 0X00 ;
UCSR1B= _BV(RXCIE1)|_BV(RXEN1)|_BV(TXEN1)|_BV(TXCIE1); //发送允许,接收允许 发送中断使能,接收中断使能
478: 88 ed ldi r24, 0xD8 ; 216
47a: 80 93 c9 00 sts 0x00C9, r24
UCSR1C= _BV(UCSZ11)|_BV(UCSZ10); //异步通信模式;通信参数 8位数据位1位停止位,无校验
47e: 86 e0 ldi r24, 0x06 ; 6
480: 80 93 ca 00 sts 0x00CA, r24
UBRR1H= 0x00;
484: 10 92 cd 00 sts 0x00CD, r1
UBRR1L= 0x4D;
488: 8d e4 ldi r24, 0x4D ; 77
48a: 80 93 cc 00 sts 0x00CC, r24
}
48e: 08 95 ret
00000490 <adc_init>:
/**********************AD采集相关函数*****************************/
void adc_init(void) //初始化函数
{
490: 10 ba out 0x10, r1 ; 16
DDRF=0X00;
PORTF=0X00; //输入禁止上拉
492: 11 ba out 0x11, r1 ; 17
ADCSRA=0x00; //暂时关闭AD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -