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

📄 main.lss

📁 本程序是NRF950的程序,主要包括发送和接受程序,希望能对大家有帮助
💻 LSS
📖 第 1 页 / 共 2 页
字号:

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
 
 while(1)
   {
    if(re_ok==1)
 33a:	80 91 6e 00 	lds	r24, 0x006E
 33e:	81 30       	cpi	r24, 0x01	; 1
 340:	91 f5       	brne	.+100    	; 0x3a6
	{
	 re_ok=0;
 342:	10 92 6e 00 	sts	0x006E, r1
     send_rx_data_to_pc();
 346:	50 df       	rcall	.-352    	; 0x1e8
	 
	 tx_data_buf[0]=rx_data_buf[0]++;
 348:	80 91 79 00 	lds	r24, 0x0079
 34c:	98 2f       	mov	r25, r24
 34e:	8f 5f       	subi	r24, 0xFF	; 255
 350:	80 93 79 00 	sts	0x0079, r24
 354:	90 93 99 00 	sts	0x0099, r25
	 tx_data_buf[1]=rx_data_buf[1]++;
 358:	80 91 7a 00 	lds	r24, 0x007A
 35c:	98 2f       	mov	r25, r24
 35e:	8f 5f       	subi	r24, 0xFF	; 255
 360:	80 93 7a 00 	sts	0x007A, r24
 364:	90 93 9a 00 	sts	0x009A, r25
	 tx_data_buf[2]=rx_data_buf[2]++;
 368:	80 91 7b 00 	lds	r24, 0x007B
 36c:	98 2f       	mov	r25, r24
 36e:	8f 5f       	subi	r24, 0xFF	; 255
 370:	80 93 7b 00 	sts	0x007B, r24
 374:	90 93 9b 00 	sts	0x009B, r25
	 tx_data_buf[3]=rx_data_buf[3]++;
 378:	80 91 7c 00 	lds	r24, 0x007C
 37c:	98 2f       	mov	r25, r24
 37e:	8f 5f       	subi	r24, 0xFF	; 255
 380:	80 93 7c 00 	sts	0x007C, r24
 384:	90 93 9c 00 	sts	0x009C, r25
	 tx_data_buf[4]=rx_data_buf[4]++;
 388:	80 91 7d 00 	lds	r24, 0x007D
 38c:	98 2f       	mov	r25, r24
 38e:	8f 5f       	subi	r24, 0xFF	; 255
 390:	80 93 7d 00 	sts	0x007D, r24
 394:	90 93 9d 00 	sts	0x009D, r25
	 
	 transmit_mode();  //发射模式
 398:	43 df       	rcall	.-378    	; 0x220
	 send_rf_data(); 
 39a:	37 df       	rcall	.-402    	; 0x20a
	 receive_mode();  //接收模式
 39c:	48 df       	rcall	.-368    	; 0x22e
	 
	 PORTD ^= (1<<PD3);   //LED
 39e:	82 b3       	in	r24, 0x12	; 18
 3a0:	98 e0       	ldi	r25, 0x08	; 8
 3a2:	89 27       	eor	r24, r25
 3a4:	82 bb       	out	0x12, r24	; 18
    }
	
	if(get1char()==0x26)
 3a6:	8a de       	rcall	.-748    	; 0xbc
 3a8:	86 32       	cpi	r24, 0x26	; 38
 3aa:	39 f6       	brne	.-114    	; 0x33a
	{
	 tx_data_buf[0]=0x88;
 3ac:	88 e8       	ldi	r24, 0x88	; 136
 3ae:	80 93 99 00 	sts	0x0099, r24
	 tx_data_buf[1]=0x77;
 3b2:	87 e7       	ldi	r24, 0x77	; 119
 3b4:	80 93 9a 00 	sts	0x009A, r24
	 tx_data_buf[2]=0x66;
 3b8:	86 e6       	ldi	r24, 0x66	; 102
 3ba:	80 93 9b 00 	sts	0x009B, r24
	 tx_data_buf[3]=0x55;
 3be:	85 e5       	ldi	r24, 0x55	; 85
 3c0:	80 93 9c 00 	sts	0x009C, r24
	 tx_data_buf[4]=0x33;
 3c4:	83 e3       	ldi	r24, 0x33	; 51
 3c6:	80 93 9d 00 	sts	0x009D, r24
	 
	 transmit_mode();  //发射模式
 3ca:	2a df       	rcall	.-428    	; 0x220
	 send_rf_data(); 
 3cc:	1e df       	rcall	.-452    	; 0x20a
	 receive_mode();  //接收模式
 3ce:	2f df       	rcall	.-418    	; 0x22e
	 
	  PORTD ^= (1<<PD3);   //LED
 3d0:	82 b3       	in	r24, 0x12	; 18
 3d2:	98 e0       	ldi	r25, 0x08	; 8
 3d4:	89 27       	eor	r24, r25
 3d6:	82 bb       	out	0x12, r24	; 18
 3d8:	b0 cf       	rjmp	.-160    	; 0x33a

⌨️ 快捷键说明

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