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

📄 cantest.lss

📁 AVR系列单片机
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 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 + -