📄 can.lss
字号:
{
27a: 80 91 12 01 lds r24, 0x0112
27e: 8c 3c cpi r24, 0xCC ; 204
280: a9 f4 brne .+42 ; 0x2ac <can_rx_deal+0x32>
if(can_rx_data[0]==0Xcc) //FET控制
{
//if(can_rx_data[1]==0xb0)
{
switch(can_rx_data[1])
282: 80 91 13 01 lds r24, 0x0113
286: 80 3b cpi r24, 0xB0 ; 176
288: 29 f0 breq .+10 ; 0x294 <can_rx_deal+0x1a>
28a: 88 3b cpi r24, 0xB8 ; 184
28c: 39 f0 breq .+14 ; 0x29c <can_rx_deal+0x22>
28e: 80 3a cpi r24, 0xA0 ; 160
290: c9 f4 brne .+50 ; 0x2c4 <can_rx_deal+0x4a>
292: 08 c0 rjmp .+16 ; 0x2a4 <can_rx_deal+0x2a>
{
case 0xb0: close_flag=1; //通道关闭
294: 81 e0 ldi r24, 0x01 ; 1
296: 80 93 20 01 sts 0x0120, r24
29a: 08 95 ret
break;
case 0xb8: open_flag=1; //通道开启
29c: 81 e0 ldi r24, 0x01 ; 1
29e: 80 93 1d 01 sts 0x011D, r24
2a2: 08 95 ret
break;
case 0xa0: ad_flag=1; //AD采集启动
2a4: 81 e0 ldi r24, 0x01 ; 1
2a6: 80 93 1f 01 sts 0x011F, r24
2aa: 08 95 ret
break;
}
}
}
else if(can_rx_data[0]==0XDD) //太阳能方阵开路电压采集
2ac: 80 91 12 01 lds r24, 0x0112
2b0: 8d 3d cpi r24, 0xDD ; 221
2b2: 41 f4 brne .+16 ; 0x2c4 <can_rx_deal+0x4a>
{
if(can_rx_data[1]==address)
2b4: 90 91 13 01 lds r25, 0x0113
2b8: 80 91 1e 01 lds r24, 0x011E
2bc: 98 17 cp r25, r24
2be: 11 f4 brne .+4 ; 0x2c4 <can_rx_deal+0x4a>
{
switch(can_rx_data[2])
2c0: 80 91 14 01 lds r24, 0x0114
2c4: 08 95 ret
000002c6 <__vector_18>:
}
ISR(CANIT_vect) //CAN接收中断处理函数
{
2c6: 1f 92 push r1
2c8: 0f 92 push r0
2ca: 0f b6 in r0, 0x3f ; 63
2cc: 0f 92 push r0
2ce: 11 24 eor r1, r1
2d0: 2f 93 push r18
2d2: 3f 93 push r19
2d4: 4f 93 push r20
2d6: 5f 93 push r21
2d8: 6f 93 push r22
2da: 7f 93 push r23
2dc: 8f 93 push r24
2de: 9f 93 push r25
2e0: af 93 push r26
2e2: bf 93 push r27
2e4: ef 93 push r30
2e6: ff 93 push r31
uchar i , num_i;
CANGIE &= ~(1<<ENRX); //关接收中断****
2e8: 80 91 db 00 lds r24, 0x00DB
2ec: 8f 7d andi r24, 0xDF ; 223
2ee: 80 93 db 00 sts 0x00DB, r24
num_i = CANSIT2;
2f2: 80 91 e0 00 lds r24, 0x00E0
//-----------------------------------------------------
if (num_i & (1<<SIT0))
2f6: 80 ff sbrs r24, 0
2f8: 0f c0 rjmp .+30 ; 0x318 <__vector_18+0x52>
{
i=0;
CANPAGE = i<<4;
2fa: 10 92 ed 00 sts 0x00ED, r1
2fe: 20 e0 ldi r18, 0x00 ; 0
300: 30 e0 ldi r19, 0x00 ; 0
for(num_i = 0; num_i < 8; num_i++)
{
can_rx_data[num_i]=CANMSG; //取得8个字节的数据
302: 80 91 fa 00 lds r24, 0x00FA
306: f9 01 movw r30, r18
308: ee 5e subi r30, 0xEE ; 238
30a: fe 4f sbci r31, 0xFE ; 254
30c: 80 83 st Z, r24
30e: 2f 5f subi r18, 0xFF ; 255
310: 3f 4f sbci r19, 0xFF ; 255
if (num_i & (1<<SIT0))
{
i=0;
CANPAGE = i<<4;
for(num_i = 0; num_i < 8; num_i++)
312: 28 30 cpi r18, 0x08 ; 8
314: 31 05 cpc r19, r1
316: a9 f7 brne .-22 ; 0x302 <__vector_18+0x3c>
{
can_rx_data[num_i]=CANMSG; //取得8个字节的数据
}
}
can_rx_deal() ; //处理接收指令
318: 0e 94 3d 01 call 0x27a ; 0x27a <can_rx_deal>
CANPAGE = 0x00;
31c: 10 92 ed 00 sts 0x00ED, r1
CANSTMOB &= ~(1<<RXOK); //清中断标志****
320: 80 91 ee 00 lds r24, 0x00EE
324: 8f 7d andi r24, 0xDF ; 223
326: 80 93 ee 00 sts 0x00EE, r24
CANCDMOB = 0x98; //接收使能 2.0B DLC=8
32a: 88 e9 ldi r24, 0x98 ; 152
32c: 80 93 ef 00 sts 0x00EF, r24
CANGIE |= (1<<ENRX); //开中断
330: 80 91 db 00 lds r24, 0x00DB
334: 80 62 ori r24, 0x20 ; 32
336: 80 93 db 00 sts 0x00DB, r24
}
33a: ff 91 pop r31
33c: ef 91 pop r30
33e: bf 91 pop r27
340: af 91 pop r26
342: 9f 91 pop r25
344: 8f 91 pop r24
346: 7f 91 pop r23
348: 6f 91 pop r22
34a: 5f 91 pop r21
34c: 4f 91 pop r20
34e: 3f 91 pop r19
350: 2f 91 pop r18
352: 0f 90 pop r0
354: 0f be out 0x3f, r0 ; 63
356: 0f 90 pop r0
358: 1f 90 pop r1
35a: 18 95 reti
0000035c <can_send_data>:
void can_send_data(void) //发送前数据整理
{
35c: 8d ed ldi r24, 0xDD ; 221
35e: 80 93 13 01 sts 0x0113, r24
can_tx_data[0]=0xDD;
can_tx_data[1]=0x00; //地址
362: 10 92 14 01 sts 0x0114, r1
can_tx_data[2]=0x02;
366: 82 e0 ldi r24, 0x02 ; 2
368: 80 93 15 01 sts 0x0115, r24
can_tx_data[3]=0x01; //ad高位
36c: 81 e0 ldi r24, 0x01 ; 1
36e: 80 93 16 01 sts 0x0116, r24
can_tx_data[4]=0x03; //ad低位
372: 83 e0 ldi r24, 0x03 ; 3
374: 80 93 17 01 sts 0x0117, r24
can_tx_data[5]=0x00;
378: 10 92 18 01 sts 0x0118, r1
can_tx_data[6]=0x00;
37c: 10 92 19 01 sts 0x0119, r1
can_tx_data[7]=0xff;
380: 8f ef ldi r24, 0xFF ; 255
382: 80 93 1a 01 sts 0x011A, r24
}
386: 08 95 ret
00000388 <MOB_send>:
void MOB_send (void) //CAN发送函数
{
388: 80 91 db 00 lds r24, 0x00DB
38c: 8f 7d andi r24, 0xDF ; 223
38e: 80 93 db 00 sts 0x00DB, r24
CANGIE &= ~(1<<ENRX); //关接收中断
uint i,n=4;
CANPAGE = (n<<4); //MOB_n, auto increment, index 0
392: 80 e4 ldi r24, 0x40 ; 64
394: 80 93 ed 00 sts 0x00ED, r24
if (CANSTMOB & (1<<TXOK))
398: 80 91 ee 00 lds r24, 0x00EE
39c: 86 ff sbrs r24, 6
39e: 2f c0 rjmp .+94 ; 0x3fe <MOB_send+0x76>
{
// CANCDMOB= 0x18;
CANSTMOB &= ~(1<<TXOK);
3a0: 80 91 ee 00 lds r24, 0x00EE
3a4: 8f 7b andi r24, 0xBF ; 191
3a6: 80 93 ee 00 sts 0x00EE, r24
}
void can_send_data(void) //发送前数据整理
{
can_tx_data[0]=0xDD;
3aa: 8d ed ldi r24, 0xDD ; 221
3ac: 80 93 13 01 sts 0x0113, r24
can_tx_data[1]=0x00; //地址
3b0: 10 92 14 01 sts 0x0114, r1
can_tx_data[2]=0x02;
3b4: 82 e0 ldi r24, 0x02 ; 2
3b6: 80 93 15 01 sts 0x0115, r24
can_tx_data[3]=0x01; //ad高位
3ba: 81 e0 ldi r24, 0x01 ; 1
3bc: 80 93 16 01 sts 0x0116, r24
can_tx_data[4]=0x03; //ad低位
3c0: 83 e0 ldi r24, 0x03 ; 3
3c2: 80 93 17 01 sts 0x0117, r24
can_tx_data[5]=0x00;
3c6: 10 92 18 01 sts 0x0118, r1
can_tx_data[6]=0x00;
3ca: 10 92 19 01 sts 0x0119, r1
can_tx_data[7]=0xff;
3ce: 8f ef ldi r24, 0xFF ; 255
3d0: 80 93 1a 01 sts 0x011A, r24
3d4: 20 e0 ldi r18, 0x00 ; 0
3d6: 30 e0 ldi r19, 0x00 ; 0
// CANCDMOB= 0x18;
CANSTMOB &= ~(1<<TXOK);
can_send_data(); //发送前整理
for(i = 0; i < 8; i++)
{
CANMSG = can_tx_data[i];
3d8: f9 01 movw r30, r18
3da: ed 5e subi r30, 0xED ; 237
3dc: fe 4f sbci r31, 0xFE ; 254
3de: 80 81 ld r24, Z
3e0: 80 93 fa 00 sts 0x00FA, r24
if (CANSTMOB & (1<<TXOK))
{
// CANCDMOB= 0x18;
CANSTMOB &= ~(1<<TXOK);
can_send_data(); //发送前整理
for(i = 0; i < 8; i++)
3e4: 2f 5f subi r18, 0xFF ; 255
3e6: 3f 4f sbci r19, 0xFF ; 255
3e8: 28 30 cpi r18, 0x08 ; 8
3ea: 31 05 cpc r19, r1
3ec: a9 f7 brne .-22 ; 0x3d8 <MOB_send+0x50>
{
CANMSG = can_tx_data[i];
}
CANCDMOB = 0x58; //帧发送 DLC=8
3ee: 88 e5 ldi r24, 0x58 ; 88
3f0: 80 93 ef 00 sts 0x00EF, r24
CANGIE |=(1<<ENRX); //开接收中断
3f4: 80 91 db 00 lds r24, 0x00DB
3f8: 80 62 ori r24, 0x20 ; 32
3fa: 80 93 db 00 sts 0x00DB, r24
3fe: 08 95 ret
00000400 <USART_Transmit>:
//---------------------串口测试相关函数------------------------------
void USART_Transmit(uchar data)
{
400: 98 2f mov r25, r24
while(!(UCSR1A&_BV(UDRE1)));
402: 80 91 c8 00 lds r24, 0x00C8
406: 85 ff sbrs r24, 5
408: fc cf rjmp .-8 ; 0x402 <USART_Transmit+0x2>
UDR1=data;
40a: 90 93 ce 00 sts 0x00CE, r25
}
40e: 08 95 ret
00000410 <__vector_32>:
ISR(USART1_RX_vect)
{
410: 1f 92 push r1
412: 0f 92 push r0
414: 0f b6 in r0, 0x3f ; 63
416: 0f 92 push r0
418: 11 24 eor r1, r1
41a: 8f 93 push r24
41c: 9f 93 push r25
41e: ef 93 push r30
420: ff 93 push r31
uchar status,data;
status=UCSR1A;
422: 80 91 c8 00 lds r24, 0x00C8
data=UDR1;
426: 90 91 ce 00 lds r25, 0x00CE
if((status&(_BV(FE1)|_BV(UPE1)|_BV(DOR1)))==0)
42a: 8c 71 andi r24, 0x1C ; 28
42c: f1 f4 brne .+60 ; 0x46a <__vector_32+0x5a>
{
rx_buffer[rx_counter]=data;
42e: e0 91 21 01 lds r30, 0x0121
432: f0 e0 ldi r31, 0x00 ; 0
434: ec 5e subi r30, 0xEC ; 236
436: fe 4f sbci r31, 0xFE ; 254
438: 90 83 st Z, r25
rx_counter++;
43a: 80 91 21 01 lds r24, 0x0121
43e: 8f 5f subi r24, 0xFF ; 255
440: 80 93 21 01 sts 0x0121, r24
switch(rx_counter)
444: 80 91 21 01 lds r24, 0x0121
448: 81 30 cpi r24, 0x01 ; 1
44a: 19 f0 breq .+6 ; 0x452 <__vector_32+0x42>
44c: 85 30 cpi r24, 0x05 ; 5
44e: 69 f4 brne .+26 ; 0x46a <__vector_32+0x5a>
450: 05 c0 rjmp .+10 ; 0x45c <__vector_32+0x4c>
{
case 1:
if(data!=0XBB)
452: 9b 3b cpi r25, 0xBB ; 187
454: 51 f0 breq .+20 ; 0x46a <__vector_32+0x5a>
rx_counter=0;
456: 10 92 21 01 sts 0x0121, r1
45a: 07 c0 rjmp .+14 ; 0x46a <__vector_32+0x5a>
break;
case 5:
if(data==0XFF)
45c: 9f 3f cpi r25, 0xFF ; 255
45e: 29 f4 brne .+10 ; 0x46a <__vector_32+0x5a>
{
rx_counter=0;
460: 10 92 21 01 sts 0x0121, r1
usart1_flag=1;
464: 81 e0 ldi r24, 0x01 ; 1
466: 80 93 10 01 sts 0x0110, r24
}
break;
}
}
}
46a: ff 91 pop r31
46c: ef 91 pop r30
46e: 9f 91 pop r25
470: 8f 91 pop r24
472: 0f 90 pop r0
474: 0f be out 0x3f, r0 ; 63
476: 0f 90 pop r0
478: 1f 90 pop r1
47a: 18 95 reti
0000047c <USART_init>:
void USART_init(void)
{
47c: 10 92 c8 00 sts 0x00C8, r1
UCSR1A= 0X00 ;
UCSR1B= _BV(RXCIE1)|_BV(RXEN1)|_BV(TXEN1)|_BV(TXCIE1); //发送允许,接收允许 发送中断使能,接收中断使能
480: 88 ed ldi r24, 0xD8 ; 216
482: 80 93 c9 00 sts 0x00C9, r24
UCSR1C= _BV(UCSZ11)|_BV(UCSZ10); //异步通信模式;通信参数 8位数据位1位停止位,无校验
486: 86 e0 ldi r24, 0x06 ; 6
488: 80 93 ca 00 sts 0x00CA, r24
UBRR1H= 0x00;
48c: 10 92 cd 00 sts 0x00CD, r1
UBRR1L= 0x4D;
490: 8d e4 ldi r24, 0x4D ; 77
492: 80 93 cc 00 sts 0x00CC, r24
}
496: 08 95 ret
00000498 <adc_init>:
/**********************AD采集相关函数*****************************/
void adc_init(void) //初始化函数
{
498: 10 ba out 0x10, r1 ; 16
DDRF=0X00;
PORTF=0X00; //输入禁止上拉
49a: 11 ba out 0x11, r1 ; 17
ADCSRA=0x00; //暂时关闭AD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -