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

📄 si4700.lss

📁 mega8控制的fm程序(SI4700)。
💻 LSS
📖 第 1 页 / 共 5 页
字号:

	//clear seek bit
	error_ind = OperationSi4700_2w(WRITE,&(si4700_channel_seek_stop[0]), 1);
 4ee:	41 e0       	ldi	r20, 0x01	; 1
 4f0:	be 01       	movw	r22, r28
 4f2:	6e 5d       	subi	r22, 0xDE	; 222
 4f4:	7f 4f       	sbci	r23, 0xFF	; 255
 4f6:	80 e2       	ldi	r24, 0x20	; 32
 4f8:	c4 dd       	rcall	.-1144   	; 0x82 <OperationSi4700_2w>
	if(error_ind)
 4fa:	88 23       	and	r24, r24
 4fc:	99 f4       	brne	.+38     	; 0x524 <Si4700_Channel_Seek_DOWN+0x88>
		return 1;	

	//wait STC=0
	do
	{	
		error_ind = OperationSi4700_2w(READ,&(si4700_reg_data[0]), 1);
 4fe:	41 e0       	ldi	r20, 0x01	; 1
 500:	be 01       	movw	r22, r28
 502:	6f 5f       	subi	r22, 0xFF	; 255
 504:	7f 4f       	sbci	r23, 0xFF	; 255
 506:	81 e2       	ldi	r24, 0x21	; 33
 508:	bc dd       	rcall	.-1160   	; 0x82 <OperationSi4700_2w>
		if(error_ind)
 50a:	88 23       	and	r24, r24
 50c:	59 f4       	brne	.+22     	; 0x524 <Si4700_Channel_Seek_DOWN+0x88>
			return 1;	
		loop_counter++;
	}
 50e:	89 81       	ldd	r24, Y+1	; 0x01
 510:	86 fd       	sbrc	r24, 6
 512:	f5 cf       	rjmp	.-22     	; 0x4fe <Si4700_Channel_Seek_DOWN+0x62>
	while((si4700_reg_data[0]&0x40) != 0);
	//while(((si4700_reg_data[0]&0x40) != 0) && (loop_counter < 0xff));	
	loop_counter = 0;

	//you can read REG0A&0B for channel number or RSSI here
	error_ind = OperationSi4700_2w(READ,&(si4700_reg_data[0]), 4);	
 514:	44 e0       	ldi	r20, 0x04	; 4
 516:	be 01       	movw	r22, r28
 518:	6f 5f       	subi	r22, 0xFF	; 255
 51a:	7f 4f       	sbci	r23, 0xFF	; 255
 51c:	81 e2       	ldi	r24, 0x21	; 33
 51e:	b1 dd       	rcall	.-1182   	; 0x82 <OperationSi4700_2w>
	if(error_ind)
 520:	88 23       	and	r24, r24
 522:	29 f0       	breq	.+10     	; 0x52e <Si4700_Channel_Seek_DOWN+0x92>
 524:	21 e0       	ldi	r18, 0x01	; 1
 526:	30 e0       	ldi	r19, 0x00	; 0
 528:	40 e0       	ldi	r20, 0x00	; 0
 52a:	50 e0       	ldi	r21, 0x00	; 0
 52c:	2c c0       	rjmp	.+88     	; 0x586 <Si4700_Channel_Seek_DOWN+0xea>
		return 1;	
	frq=(((UINT32)si4700_reg_data[2]<<8)|(UINT32)si4700_reg_data[3])&0x03ff;
 52e:	8b 81       	ldd	r24, Y+3	; 0x03
 530:	99 27       	eor	r25, r25
 532:	aa 27       	eor	r26, r26
 534:	bb 27       	eor	r27, r27
 536:	22 27       	eor	r18, r18
 538:	38 2f       	mov	r19, r24
 53a:	49 2f       	mov	r20, r25
 53c:	5a 2f       	mov	r21, r26
 53e:	8c 81       	ldd	r24, Y+4	; 0x04
 540:	99 27       	eor	r25, r25
 542:	aa 27       	eor	r26, r26
 544:	bb 27       	eor	r27, r27
 546:	28 2b       	or	r18, r24
 548:	39 2b       	or	r19, r25
 54a:	4a 2b       	or	r20, r26
 54c:	5b 2b       	or	r21, r27
 54e:	33 70       	andi	r19, 0x03	; 3
 550:	40 70       	andi	r20, 0x00	; 0
 552:	50 70       	andi	r21, 0x00	; 0
	return frq*g_space+g_bandl;
 554:	80 91 61 00 	lds	r24, 0x0061
 558:	e8 2e       	mov	r14, r24
 55a:	ff 24       	eor	r15, r15
 55c:	00 27       	eor	r16, r16
 55e:	11 27       	eor	r17, r17
 560:	ca 01       	movw	r24, r20
 562:	b9 01       	movw	r22, r18
 564:	a8 01       	movw	r20, r16
 566:	97 01       	movw	r18, r14
 568:	c6 d1       	rcall	.+908    	; 0x8f6 <__mulsi3>
 56a:	9b 01       	movw	r18, r22
 56c:	ac 01       	movw	r20, r24
 56e:	80 91 66 00 	lds	r24, 0x0066
 572:	90 91 67 00 	lds	r25, 0x0067
 576:	a0 91 68 00 	lds	r26, 0x0068
 57a:	b0 91 69 00 	lds	r27, 0x0069
 57e:	28 0f       	add	r18, r24
 580:	39 1f       	adc	r19, r25
 582:	4a 1f       	adc	r20, r26
 584:	5b 1f       	adc	r21, r27
	//return seek_error;
	
}
 586:	ca 01       	movw	r24, r20
 588:	b9 01       	movw	r22, r18
 58a:	a2 96       	adiw	r28, 0x22	; 34
 58c:	0f b6       	in	r0, 0x3f	; 63
 58e:	f8 94       	cli
 590:	de bf       	out	0x3e, r29	; 62
 592:	0f be       	out	0x3f, r0	; 63
 594:	cd bf       	out	0x3d, r28	; 61
 596:	df 91       	pop	r29
 598:	cf 91       	pop	r28
 59a:	1f 91       	pop	r17
 59c:	0f 91       	pop	r16
 59e:	ff 90       	pop	r15
 5a0:	ef 90       	pop	r14
 5a2:	08 95       	ret

000005a4 <Si4700_mute_en>:
void Si4700_mute_en(void){
 5a4:	cf 93       	push	r28
 5a6:	df 93       	push	r29
 5a8:	cd b7       	in	r28, 0x3d	; 61
 5aa:	de b7       	in	r29, 0x3e	; 62
 5ac:	21 97       	sbiw	r28, 0x01	; 1
 5ae:	0f b6       	in	r0, 0x3f	; 63
 5b0:	f8 94       	cli
 5b2:	de bf       	out	0x3e, r29	; 62
 5b4:	0f be       	out	0x3f, r0	; 63
 5b6:	cd bf       	out	0x3d, r28	; 61
	unsigned char si4700_mute_data[1]={0x00};
 5b8:	19 82       	std	Y+1, r1	; 0x01
	OperationSi4700_2w(WRITE,si4700_mute_data, 1);	
 5ba:	41 e0       	ldi	r20, 0x01	; 1
 5bc:	be 01       	movw	r22, r28
 5be:	6f 5f       	subi	r22, 0xFF	; 255
 5c0:	7f 4f       	sbci	r23, 0xFF	; 255
 5c2:	80 e2       	ldi	r24, 0x20	; 32
 5c4:	5e dd       	rcall	.-1348   	; 0x82 <OperationSi4700_2w>
 5c6:	21 96       	adiw	r28, 0x01	; 1
 5c8:	0f b6       	in	r0, 0x3f	; 63
 5ca:	f8 94       	cli
 5cc:	de bf       	out	0x3e, r29	; 62
 5ce:	0f be       	out	0x3f, r0	; 63
 5d0:	cd bf       	out	0x3d, r28	; 61
 5d2:	df 91       	pop	r29
 5d4:	cf 91       	pop	r28
 5d6:	08 95       	ret

000005d8 <Si4700_mute_dis>:
}

void Si4700_mute_dis(void){
 5d8:	cf 93       	push	r28
 5da:	df 93       	push	r29
 5dc:	cd b7       	in	r28, 0x3d	; 61
 5de:	de b7       	in	r29, 0x3e	; 62
 5e0:	21 97       	sbiw	r28, 0x01	; 1
 5e2:	0f b6       	in	r0, 0x3f	; 63
 5e4:	f8 94       	cli
 5e6:	de bf       	out	0x3e, r29	; 62
 5e8:	0f be       	out	0x3f, r0	; 63
 5ea:	cd bf       	out	0x3d, r28	; 61
	unsigned char si4700_mute_data[1]={0x40};
 5ec:	80 e4       	ldi	r24, 0x40	; 64
 5ee:	89 83       	std	Y+1, r24	; 0x01
	OperationSi4700_2w(WRITE,si4700_mute_data, 1);	
 5f0:	41 e0       	ldi	r20, 0x01	; 1
 5f2:	be 01       	movw	r22, r28
 5f4:	6f 5f       	subi	r22, 0xFF	; 255
 5f6:	7f 4f       	sbci	r23, 0xFF	; 255
 5f8:	80 e2       	ldi	r24, 0x20	; 32
 5fa:	43 dd       	rcall	.-1402   	; 0x82 <OperationSi4700_2w>
 5fc:	21 96       	adiw	r28, 0x01	; 1
 5fe:	0f b6       	in	r0, 0x3f	; 63
 600:	f8 94       	cli
 602:	de bf       	out	0x3e, r29	; 62
 604:	0f be       	out	0x3f, r0	; 63
 606:	cd bf       	out	0x3d, r28	; 61
 608:	df 91       	pop	r29
 60a:	cf 91       	pop	r28
 60c:	08 95       	ret

0000060e <Si4700_vol_up>:
}

void Si4700_vol_up(void){
 60e:	cf 93       	push	r28
 610:	df 93       	push	r29
 612:	cd b7       	in	r28, 0x3d	; 61
 614:	de b7       	in	r29, 0x3e	; 62
 616:	28 97       	sbiw	r28, 0x08	; 8
 618:	0f b6       	in	r0, 0x3f	; 63
 61a:	f8 94       	cli
 61c:	de bf       	out	0x3e, r29	; 62
 61e:	0f be       	out	0x3f, r0	; 63
 620:	cd bf       	out	0x3d, r28	; 61
	unsigned char si4700_vol_data[] = {0x40,0x01,0x00,0x00,0x90,0x04,0x0c,0x1f};
 622:	de 01       	movw	r26, r28
 624:	11 96       	adiw	r26, 0x01	; 1
 626:	e9 e7       	ldi	r30, 0x79	; 121
 628:	f0 e0       	ldi	r31, 0x00	; 0
 62a:	88 e0       	ldi	r24, 0x08	; 8
 62c:	01 90       	ld	r0, Z+
 62e:	0d 92       	st	X+, r0
 630:	81 50       	subi	r24, 0x01	; 1
 632:	e1 f7       	brne	.-8      	; 0x62c <Si4700_vol_up+0x1e>
	g_vol_level++;
 634:	80 91 60 00 	lds	r24, 0x0060
 638:	8f 5f       	subi	r24, 0xFF	; 255
 63a:	80 93 60 00 	sts	0x0060, r24
	if(g_vol_level<0||g_vol_level>15)
 63e:	80 31       	cpi	r24, 0x10	; 16
 640:	20 f0       	brcs	.+8      	; 0x64a <Si4700_vol_up+0x3c>
		g_vol_level=15;
 642:	8f e0       	ldi	r24, 0x0F	; 15
 644:	80 93 60 00 	sts	0x0060, r24
 648:	08 c0       	rjmp	.+16     	; 0x65a <Si4700_vol_up+0x4c>
	else{
		si4700_vol_data[7]=g_vol_level|0x10;
 64a:	80 61       	ori	r24, 0x10	; 16
 64c:	88 87       	std	Y+8, r24	; 0x08
		OperationSi4700_2w(WRITE,si4700_vol_data, 8);
 64e:	48 e0       	ldi	r20, 0x08	; 8
 650:	be 01       	movw	r22, r28
 652:	6f 5f       	subi	r22, 0xFF	; 255
 654:	7f 4f       	sbci	r23, 0xFF	; 255
 656:	80 e2       	ldi	r24, 0x20	; 32
 658:	14 dd       	rcall	.-1496   	; 0x82 <OperationSi4700_2w>
 65a:	28 96       	adiw	r28, 0x08	; 8
 65c:	0f b6       	in	r0, 0x3f	; 63
 65e:	f8 94       	cli
 660:	de bf       	out	0x3e, r29	; 62
 662:	0f be       	out	0x3f, r0	; 63
 664:	cd bf       	out	0x3d, r28	; 61
 666:	df 91       	pop	r29
 668:	cf 91       	pop	r28
 66a:	08 95       	ret

0000066c <Si4700_vol_down>:
	}
		
}

void Si4700_vol_down(void){
 66c:	cf 93       	push	r28
 66e:	df 93       	push	r29
 670:	cd b7       	in	r28, 0x3d	; 61
 672:	de b7       	in	r29, 0x3e	; 62
 674:	28 97       	sbiw	r28, 0x08	; 8
 676:	0f b6       	in	r0, 0x3f	; 63
 678:	f8 94       	cli
 67a:	de bf       	out	0x3e, r29	; 62
 67c:	0f be       	out	0x3f, r0	; 63
 67e:	cd bf       	out	0x3d, r28	; 61
	unsigned char si4700_vol_data[] = {0x40,0x01,0x00,0x00,0x90,0x04,0x0c,0x1f};
 680:	de 01       	movw	r26, r28
 682:	11 96       	adiw	r26, 0x01	; 1
 684:	e9 e7       	ldi	r30, 0x79	; 121
 686:	f0 e0       	ldi	r31, 0x00	; 0
 688:	98 e0       	ldi	r25, 0x08	; 8
 68a:	01 90       	ld	r0, Z+
 68c:	0d 92       	st	X+, r0
 68e:	91 50       	subi	r25, 0x01	; 1
 690:	e1 f7       	brne	.-8      	; 0x68a <Si4700_vol_down+0x1e>
	g_vol_level--;
 692:	80 91 60 00 	lds	r24, 0x0060
 696:	81 50       	subi	r24, 0x01	; 1
 698:	80 93 60 00 	sts	0x0060, r24
	if(g_vol_level<0||g_vol_level>15)
 69c:	80 31       	cpi	r24, 0x10	; 16
 69e:	18 f0       	brcs	.+6      	; 0x6a6 <Si4700_vol_down+0x3a>
		g_vol_level=0;
 6a0:	90 93 60 00 	sts	0x0060, r25
 6a4:	08 c0       	rjmp	.+16     	; 0x6b6 <Si4700_vol_down+0x4a>
	else{
		si4700_vol_data[7]=g_vol_level|0x10;
 6a6:	80 61       	ori	r24, 0x10	; 16
 6a8:	88 87       	std	Y+8, r24	; 0x08
		OperationSi4700_2w(WRITE,si4700_vol_data, 8);
 6aa:	48 e0       	ldi	r20, 0x08	; 8
 6ac:	be 01       	movw	r22, r28
 6ae:	6f 5f       	subi	r22, 0xFF	; 255
 6b0:	7f 4f       	sbci	r23, 0xFF	; 255
 6b2:	80 e2       	ldi	r24, 0x20	; 32
 6b4:	e6 dc       	rcall	.-1588   	; 0x82 <OperationSi4700_2w>
 6b6:	28 96       	adiw	r28, 0x08	; 8
 6b8:	0f b6       	in	r0, 0x3f	; 63
 6ba:	f8 94       	cli
 6bc:	de bf       	out	0x3e, r29	; 62
 6be:	0f be       	out	0x3f, r0	; 63
 6c0:	cd bf       	out	0x3d, r28	; 61
 6c2:	df 91       	pop	r29
 6c4:	cf 91       	pop	r28
 6c6:	08 95       	ret

000006c8 <ini_uart>:
	}
		
}
void ini_uart(uint16_t m_baud)//m_baud=207时,bode=4800 f=8M //12,9600,1//25,4800,1
{
 6c8:	9c 01       	movw	r18, r24
	UBRRH = (uint8_t)(m_baud>>8);
 6ca:	89 2f       	mov	r24, r25
 6cc:	99 27       	eor	r25, r25
 6ce:	80 bd       	out	0x20, r24	; 32
	UBRRL = (uint8_t)m_baud;
 6d0:	29 b9       	out	0x09, r18	; 9
	UCSRA = (1<<U2X);
 6d2:	82 e0       	ldi	r24, 0x02	; 2
 6d4:	8b b9       	out	0x0b, r24	; 11
	/* 设置帧格式: 8 个数据位, 1 个停止位*/
	UCSRC = (1<<URSEL)|(3<<UCSZ0);
 6d6:	86 e8       	ldi	r24, 0x86	; 134
 6d8:	80 bd       	out	0x20, r24	; 32
	/* 接收器与发送器终端使能,接收器与发送器使能*/
	UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//|(1<<TXCIE);
 6da:	88 e9       	ldi	r24, 0x98	; 152
 6dc:	8a b9       	out	0x0a, r24	; 10
 6de:	08 95       	ret

000006e0 <__vector_11>:
	/*禁用终端
	cli();*/
}

SIGNAL(SIG_UART_RECV){
 6e0:	1f 92       	push	r1
 6e2:	0f 92       	push	r0
 6e4:	0f b6       	in	r0, 0x3f	; 63
 6e6:	0f 92       	push	r0
 6e8:	11 24       	eor	r1, r1
 6ea:	8f 93       	push	r24
	com_buf=UDR;
 6ec:	8c b1       	in	r24, 0x0c	; 12
 6ee:	80 93 82 00 	sts	0x0082, r24
	while(!(UCSRA & (1<<UDRE)));//等待发送缓冲器为空
 6f2:	5d 9b       	sbis	0x0b, 5	; 11
 6f4:	fe cf       	rjmp	.-4      	; 0x6f2 <__vector_11+0x12>
	UDR=com_buf;
 6f6:	80 91 82 00 	lds	r24, 0x0082
 6fa:	8c b9       	out	0x0c, r24	; 12
 6fc:	8f 91       	pop	r24
 6fe:	0f 90       	pop	r0
 700:	0f be       	out	0x3f, r0	; 63
 702:	0f 90       	pop	r0
 704:	1f 90       	pop	r1
 706:	18 95       	reti

00000708 <main>:
}
int main(){
 708:	cd e5       	ldi	r28, 0x5D	; 93
 70a:	d4 e0       	ldi	r29, 0x04	; 4
 70c:	de bf       	out	0x3e, r29	; 62
 70e:	cd bf       	out	0x3d, r28	; 61
	//UINT8 txt[14],i;
	UINT32 frq;
	UINT8 reg[2];
	UINT16 i;
	ini_uart(12);//9600/1M
 710:	8c e0       	ldi	r24, 0x0C	; 12
 712:	90 e0       	ldi	r25, 0x00	; 0
 714:	d9 df       	rcall	.-78     	; 0x6c8 <ini_uart>
	sei();
 716:	78 94       	sei
	UDR=0xaa;
 718:	8a ea       	ldi	r24, 0xAA	; 170

⌨️ 快捷键说明

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