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

📄 main.lss

📁 本程序是NRF950的程序,主要包括发送和接受程序,希望能对大家有帮助
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 196:	cf 3f       	cpi	r28, 0xFF	; 255
 198:	41 f0       	breq	.+16     	; 0x1aa
 19a:	e1 2f       	mov	r30, r17
 19c:	ff 27       	eor	r31, r31
 19e:	e7 56       	subi	r30, 0x67	; 103
 1a0:	ff 4f       	sbci	r31, 0xFF	; 255
 1a2:	80 81       	ld	r24, Z
 1a4:	73 df       	rcall	.-282    	; 0x8c
 1a6:	1f 5f       	subi	r17, 0xFF	; 255
 1a8:	f5 cf       	rjmp	.-22     	; 0x194
	}
	//SPI_transmit(tx_data_buf[1]);
	//SPI_transmit(tx_data_buf[2]);
	CONTROL_PORT |= (1<<CSN);
 1aa:	94 9a       	sbi	0x12, 4	; 18
 1ac:	cf 91       	pop	r28
 1ae:	1f 91       	pop	r17
 1b0:	08 95       	ret

000001b2 <read_rx_payload>:
}


void read_rx_payload(unsigned char rx_payload_bytes_num)
{
 1b2:	ff 92       	push	r15
 1b4:	0f 93       	push	r16
 1b6:	1f 93       	push	r17
 1b8:	cf 93       	push	r28
 1ba:	c8 2f       	mov	r28, r24
	unsigned char i;
	//CSN=0;
	CONTROL_PORT &= ~(1<<CSN);
 1bc:	94 98       	cbi	0x12, 4	; 18
	SPI_transmit(0x24);//0b00100100
 1be:	84 e2       	ldi	r24, 0x24	; 36
 1c0:	65 df       	rcall	.-310    	; 0x8c
	i=0;
 1c2:	ff 24       	eor	r15, r15
	while(rx_payload_bytes_num--)
	{
		rx_data_buf[i]=SPI_receive();
		i++;
 1c4:	c1 50       	subi	r28, 0x01	; 1
 1c6:	cf 3f       	cpi	r28, 0xFF	; 255
 1c8:	49 f0       	breq	.+18     	; 0x1dc
 1ca:	0f 2d       	mov	r16, r15
 1cc:	11 27       	eor	r17, r17
 1ce:	07 58       	subi	r16, 0x87	; 135
 1d0:	1f 4f       	sbci	r17, 0xFF	; 255
 1d2:	60 df       	rcall	.-320    	; 0x94
 1d4:	f8 01       	movw	r30, r16
 1d6:	80 83       	st	Z, r24
 1d8:	f3 94       	inc	r15
 1da:	f4 cf       	rjmp	.-24     	; 0x1c4
	}
	
	//CSN=1;
	CONTROL_PORT |= (1<<CSN);
 1dc:	94 9a       	sbi	0x12, 4	; 18
 1de:	cf 91       	pop	r28
 1e0:	1f 91       	pop	r17
 1e2:	0f 91       	pop	r16
 1e4:	ff 90       	pop	r15
 1e6:	08 95       	ret

000001e8 <send_rx_data_to_pc>:
}



void send_rx_data_to_pc(void)
{
 1e8:	0f 93       	push	r16
 1ea:	1f 93       	push	r17
 1ec:	cf 93       	push	r28
 1ee:	09 e7       	ldi	r16, 0x79	; 121
 1f0:	10 e0       	ldi	r17, 0x00	; 0
 1f2:	cf e1       	ldi	r28, 0x1F	; 31
	unsigned char i;
	i=0;
	for(i=0;i<32;i++)	//send ASCII char'Comait CRM401XNC'use UART
	{
		put1char(rx_data_buf[i]);
 1f4:	f8 01       	movw	r30, r16
 1f6:	81 91       	ld	r24, Z+
 1f8:	8f 01       	movw	r16, r30
 1fa:	5c df       	rcall	.-328    	; 0xb4
 1fc:	c1 50       	subi	r28, 0x01	; 1
 1fe:	c7 ff       	sbrs	r28, 7
 200:	f9 cf       	rjmp	.-14     	; 0x1f4
 202:	cf 91       	pop	r28
 204:	1f 91       	pop	r17
 206:	0f 91       	pop	r16
 208:	08 95       	ret

0000020a <send_rf_data>:
	}
}


//发送RF数据
void send_rf_data(void)
{
	unsigned char i;
	write_tx_address(4);
 20a:	84 e0       	ldi	r24, 0x04	; 4
 20c:	a6 df       	rcall	.-180    	; 0x15a
	write_tx_payload(32);
 20e:	80 e2       	ldi	r24, 0x20	; 32
 210:	ba df       	rcall	.-140    	; 0x186
	CONTROL_PORT |= (1<<TRX_CE);
 212:	96 9a       	sbi	0x12, 6	; 18
	i=100;
	while(i--);  //等待NRF905数据传输完成
 214:	83 e6       	ldi	r24, 0x63	; 99
 216:	84 50       	subi	r24, 0x04	; 4
 218:	8f 3f       	cpi	r24, 0xFF	; 255
 21a:	e9 f7       	brne	.-6      	; 0x216
	CONTROL_PORT &= ~(1<<TRX_CE);
 21c:	96 98       	cbi	0x12, 6	; 18
 21e:	08 95       	ret

00000220 <transmit_mode>:
}



//发送模式
void transmit_mode(void)
{
 //nrf905进入发送模式
 CONTROL_PORT |= (1<<PWR_UP); 
 220:	97 9a       	sbi	0x12, 7	; 18
 CONTROL_PORT |= (1<<TRX_CE);
 222:	96 9a       	sbi	0x12, 6	; 18
 CONTROL_PORT |= (1<<TXEN);
 224:	95 9a       	sbi	0x12, 5	; 18
 delay_nms(2);  
 226:	82 e0       	ldi	r24, 0x02	; 2
 228:	90 e0       	ldi	r25, 0x00	; 0
 22a:	8c df       	rcall	.-232    	; 0x144
 22c:	08 95       	ret

0000022e <receive_mode>:
}


//接收模式
void receive_mode(void)
{
//nrf905进入接收模式
 CONTROL_PORT |= (1<<PWR_UP); 
 22e:	97 9a       	sbi	0x12, 7	; 18
 CONTROL_PORT |= (1<<TRX_CE);
 230:	96 9a       	sbi	0x12, 6	; 18
 CONTROL_PORT &= ~(1<<TXEN);  
 232:	95 98       	cbi	0x12, 5	; 18
 delay_nms(2); 	
 234:	82 e0       	ldi	r24, 0x02	; 2
 236:	90 e0       	ldi	r25, 0x00	; 0
 238:	85 df       	rcall	.-246    	; 0x144
 23a:	08 95       	ret

0000023c <read_config>:
}

void read_config(void)
{         
 23c:	0f 93       	push	r16
 23e:	1f 93       	push	r17
 240:	cf 93       	push	r28
         unsigned char i ;
		 
		 CONTROL_PORT &= ~(1<<CSN);
 242:	94 98       	cbi	0x12, 4	; 18
         SPI_transmit(0x10); //0b00010000
 244:	80 e1       	ldi	r24, 0x10	; 16
 246:	22 df       	rcall	.-444    	; 0x8c
 248:	0f e6       	ldi	r16, 0x6F	; 111
 24a:	10 e0       	ldi	r17, 0x00	; 0
 24c:	c9 e0       	ldi	r28, 0x09	; 9
         i =0;
         for(i=0;i<10;i++)
          {
		   xxx[i]=SPI_receive();
 24e:	22 df       	rcall	.-444    	; 0x94
 250:	f8 01       	movw	r30, r16
 252:	81 93       	st	Z+, r24
 254:	8f 01       	movw	r16, r30
 256:	c1 50       	subi	r28, 0x01	; 1
 258:	c7 ff       	sbrs	r28, 7
 25a:	f9 cf       	rjmp	.-14     	; 0x24e
          }
		 CONTROL_PORT |= (1<<CSN);
 25c:	94 9a       	sbi	0x12, 4	; 18
 25e:	cf 91       	pop	r28
 260:	1f 91       	pop	r17
 262:	0f 91       	pop	r16
 264:	08 95       	ret

00000266 <write_config>:
}

void write_config(void)
{
 266:	0f 93       	push	r16
 268:	1f 93       	push	r17
 26a:	cf 93       	push	r28
         unsigned char i ;
		 CONTROL_PORT &= ~(1<<CSN);
 26c:	94 98       	cbi	0x12, 4	; 18
         SPI_transmit(0x00);  //发送写配置寄存器的命令
 26e:	80 e0       	ldi	r24, 0x00	; 0
 270:	0d df       	rcall	.-486    	; 0x8c
 272:	00 e6       	ldi	r16, 0x60	; 96
 274:	10 e0       	ldi	r17, 0x00	; 0
 276:	c9 e0       	ldi	r28, 0x09	; 9
         i =0;
         for(i=0;i<10;i++)
         {
		  SPI_transmit(config_reg_buf[i]);
 278:	f8 01       	movw	r30, r16
 27a:	81 91       	ld	r24, Z+
 27c:	8f 01       	movw	r16, r30
 27e:	06 df       	rcall	.-500    	; 0x8c
 280:	c1 50       	subi	r28, 0x01	; 1
 282:	c7 ff       	sbrs	r28, 7
 284:	f9 cf       	rjmp	.-14     	; 0x278
         }
		 CONTROL_PORT |= (1<<CSN);
 286:	94 9a       	sbi	0x12, 4	; 18
 288:	cf 91       	pop	r28
 28a:	1f 91       	pop	r17
 28c:	0f 91       	pop	r16
 28e:	08 95       	ret

00000290 <nrf905_init>:
}

//nrf905初始化
void nrf905_init(void)
{
	unsigned char i;
	delay_nms(10);
 290:	8a e0       	ldi	r24, 0x0A	; 10
 292:	90 e0       	ldi	r25, 0x00	; 0
 294:	57 df       	rcall	.-338    	; 0x144
	//STANDBY和SPI编程模式
	CONTROL_PORT |= (1<<PWR_UP);  
 296:	97 9a       	sbi	0x12, 7	; 18
	CONTROL_PORT &= ~(1<<TRX_CE);
 298:	96 98       	cbi	0x12, 6	; 18
	CONTROL_PORT &= ~(1<<TXEN);
 29a:	95 98       	cbi	0x12, 5	; 18
	CONTROL_PORT |= (1<<CSN);
 29c:	94 9a       	sbi	0x12, 4	; 18
 29e:	a9 e9       	ldi	r26, 0x99	; 153
 2a0:	b0 e0       	ldi	r27, 0x00	; 0
 2a2:	e9 e7       	ldi	r30, 0x79	; 121
 2a4:	f0 e0       	ldi	r31, 0x00	; 0
 2a6:	8f e1       	ldi	r24, 0x1F	; 31
	
	i=0;

	for(i=0;i<32;i++)	//Clear the data buffer 清接收缓冲区
	{	
		rx_data_buf[i]=0;
 2a8:	11 92       	st	Z+, r1
		tx_data_buf[i]=0;
 2aa:	1d 92       	st	X+, r1
 2ac:	81 50       	subi	r24, 0x01	; 1
 2ae:	87 ff       	sbrs	r24, 7
 2b0:	fb cf       	rjmp	.-10     	; 0x2a8
	}
	write_config();
 2b2:	d9 df       	rcall	.-78     	; 0x266
 2b4:	08 95       	ret

000002b6 <__vector_1>:
	
}

//外部中断0中断服务函数
SIGNAL(SIG_INTERRUPT0)
{
 2b6:	1f 92       	push	r1
 2b8:	0f 92       	push	r0
 2ba:	0f b6       	in	r0, 0x3f	; 63
 2bc:	0f 92       	push	r0
 2be:	11 24       	eor	r1, r1
 2c0:	2f 93       	push	r18
 2c2:	3f 93       	push	r19
 2c4:	4f 93       	push	r20
 2c6:	5f 93       	push	r21
 2c8:	6f 93       	push	r22
 2ca:	7f 93       	push	r23
 2cc:	8f 93       	push	r24
 2ce:	9f 93       	push	r25
 2d0:	af 93       	push	r26
 2d2:	bf 93       	push	r27
 2d4:	ef 93       	push	r30
 2d6:	ff 93       	push	r31
  read_rx_payload(32);  //保存在rx_data_buf里
 2d8:	80 e2       	ldi	r24, 0x20	; 32
 2da:	6b df       	rcall	.-298    	; 0x1b2
  re_ok=1;
 2dc:	81 e0       	ldi	r24, 0x01	; 1
 2de:	80 93 6e 00 	sts	0x006E, r24
 2e2:	ff 91       	pop	r31
 2e4:	ef 91       	pop	r30
 2e6:	bf 91       	pop	r27
 2e8:	af 91       	pop	r26
 2ea:	9f 91       	pop	r25
 2ec:	8f 91       	pop	r24
 2ee:	7f 91       	pop	r23
 2f0:	6f 91       	pop	r22
 2f2:	5f 91       	pop	r21
 2f4:	4f 91       	pop	r20
 2f6:	3f 91       	pop	r19
 2f8:	2f 91       	pop	r18
 2fa:	0f 90       	pop	r0
 2fc:	0f be       	out	0x3f, r0	; 63
 2fe:	0f 90       	pop	r0
 300:	1f 90       	pop	r1
 302:	18 95       	reti

00000304 <main>:
}

//====================================================================
//主程序开始
//====================================================================
int main(void)
{
 304:	cf e5       	ldi	r28, 0x5F	; 95
 306:	d4 e0       	ldi	r29, 0x04	; 4
 308:	de bf       	out	0x3e, r29	; 62
 30a:	cd bf       	out	0x3d, r28	; 61
 //------------------------
 cli();
 30c:	f8 94       	cli
 port_init();
 30e:	a6 de       	rcall	.-692    	; 0x5c
 uart_init();
 310:	ad de       	rcall	.-678    	; 0x6c
 SPI_MasterInit();
 312:	b6 de       	rcall	.-660    	; 0x80
 sei();
 314:	78 94       	sei
 
 DDRD |= (1<<PD3);   //LED
 316:	8b 9a       	sbi	0x11, 3	; 17
 
 CONTROL_DDR |= (1<<TRX_CE);
 318:	8e 9a       	sbi	0x11, 6	; 17
 CONTROL_DDR |= (1<<TXEN);
 31a:	8d 9a       	sbi	0x11, 5	; 17
 CONTROL_DDR |= (1<<PWR_UP);
 31c:	8f 9a       	sbi	0x11, 7	; 17
 CONTROL_DDR |= (1<<CSN);
 31e:	8c 9a       	sbi	0x11, 4	; 17
 
 //standby 模式
 CONTROL_PORT |= (1<<PWR_UP); 
 320:	97 9a       	sbi	0x12, 7	; 18
 CONTROL_PORT &= ~(1<<TRX_CE);
 322:	96 98       	cbi	0x12, 6	; 18
 
 nrf905_init();
 324:	b5 df       	rcall	.-150    	; 0x290
 
 receive_mode();  //接收模式
 326:	83 df       	rcall	.-250    	; 0x22e
 
 delay_nms(5);
 328:	85 e0       	ldi	r24, 0x05	; 5
 32a:	90 e0       	ldi	r25, 0x00	; 0
 32c:	0b df       	rcall	.-490    	; 0x144
 
 //外部中断0上升沿中断
 MCUCR |= (1<<ISC01)|(1<<ISC00);
 32e:	85 b7       	in	r24, 0x35	; 53
 330:	83 60       	ori	r24, 0x03	; 3
 332:	85 bf       	out	0x35, r24	; 53
 GICR |= (1<<INT0);  
 334:	8b b7       	in	r24, 0x3b	; 59
 336:	80 64       	ori	r24, 0x40	; 64
 338:	8b bf       	out	0x3b, r24	; 59
 
 tx_data_buf[0]=0x18;
 33a:	88 e1       	ldi	r24, 0x18	; 24
 33c:	80 93 99 00 	sts	0x0099, r24
 tx_data_buf[1]=0xea;
 340:	8a ee       	ldi	r24, 0xEA	; 234
 342:	80 93 9a 00 	sts	0x009A, r24
 tx_data_buf[2]=0x23;
 346:	83 e2       	ldi	r24, 0x23	; 35
 348:	80 93 9b 00 	sts	0x009B, r24
 tx_data_buf[3]=0xe2;
 34c:	82 ee       	ldi	r24, 0xE2	; 226
 34e:	80 93 9c 00 	sts	0x009C, r24
 tx_data_buf[4]=0xf5;
 352:	85 ef       	ldi	r24, 0xF5	; 245
 354:	80 93 9d 00 	sts	0x009D, r24
 
 while(1)
   {
    if(get1char()==0x26)
 358:	b1 de       	rcall	.-670    	; 0xbc
 35a:	86 32       	cpi	r24, 0x26	; 38
 35c:	39 f4       	brne	.+14     	; 0x36c
	{
	 transmit_mode();  //发射模式
 35e:	60 df       	rcall	.-320    	; 0x220
	 send_rf_data();		//发送数据包
 360:	54 df       	rcall	.-344    	; 0x20a
	 receive_mode();   //接收模式
 362:	65 df       	rcall	.-310    	; 0x22e
	 
	 PORTD ^= (1<<PD3);   //LED
 364:	82 b3       	in	r24, 0x12	; 18
 366:	98 e0       	ldi	r25, 0x08	; 8
 368:	89 27       	eor	r24, r25
 36a:	82 bb       	out	0x12, r24	; 18
	}
   
   if(re_ok==1)
 36c:	80 91 6e 00 	lds	r24, 0x006E
 370:	81 30       	cpi	r24, 0x01	; 1
 372:	91 f7       	brne	.-28     	; 0x358
    {
     re_ok=0;
 374:	10 92 6e 00 	sts	0x006E, r1
	 send_rx_data_to_pc();
 378:	37 df       	rcall	.-402    	; 0x1e8
 37a:	ee cf       	rjmp	.-36     	; 0x358

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -