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

📄 can.lss

📁 AT90CAN128的CAN通信源码测试成功
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 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 + -