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

📄 fft.asm

📁 AVR单片机实现FFT
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	brcc notzeroh
	clr AH
notzeroh:
	st	Y+, AH		;/
	dec	CH
	rjne	ub_l1h
	ret




rfsh_bars: ;Draw spectrum bars
	cbi portd, Sync
	ldi	DL, LCD_H-7	; (This routine refreshes LCD with bar length
	nop
	nop
	nop
	nop
	nop		;Sync verl鋘gern
	nop
	nop
	sbi portd, Sync	;  component, 2nd value is fundamental freq
sendl:	
	 rcall	ds_hl		;  and last value is highest freq)
	subi	DL, 8
	brcc	sendl
	ret

make2p:
	ld	AH, Y+
	cp AL, AH
	brlo tausche1
rjmp weiter
tausche1:
	mov AL, AH
rjmp weiter

make3p:
	ld	AH, Y+
	cp AL, AH
	brlo tausche3
	rjmp weitert1
tausche3:
	mov AL, AH
weitert1:			;AL=Max(1,2)
	ld	AH, Y+
	cp AL, AH
	brlo tausche4b
rjmp weiter
tausche4b:
	mov AL, AH
rjmp weiter			;AL=Max(AL,AH)=Max(1,2,3




ds_hl:	ldiw	Y, LvlBuf+1
	ldi	CL, 16		;24 Werte werden zu 16 zusammengefasst: 43-1333Hz
senl:	
	ld	AL, Y+		;1-8		8

	cpi CL, 5		;17-24		4
	brlo make3p		;3 Werte zu einem zusammenfassen

	cpi CL, 9		;9-16		4
	brlo make2p		;2 Werte zu einem zusammenfassen
weiter:	
	sub	AL, DL
	brcc	gnull	
	ldi	AH, 0	
	rjmp	inull
gnull:
	ldi	AH, 0xFF
	cpi	AL, 8
	brcc	inull
	ldi	AH, bit7
loope:	
	subi	AL, 1
	brcs	inull
	asr	AH
	rjmp	loope
inull:
	mov	AL, AH
	 rcall	lcd_put
	dec	CL
	brne	senl
	rjmp ds_hl2

make2p2:
	ld	AH, Y+
	cp AL, AH
	brlo tausche12
rjmp weiter2
tausche12:
	mov AL, AH
rjmp weiter2

make3p2:
	ld	AH, Y+
	cp AL, AH
	brlo tausche32
	rjmp weitert12
tausche32:
	mov AL, AH
weitert12:			;AL=Max(1,2)
	ld	AH, Y+
	cp AL, AH
	brlo tausche4b2
rjmp weiter2
tausche4b2:
	mov AL, AH
rjmp weiter2			;AL=Max(AL,AH)=Max(1,2,3)

make4p2:
	ld	AH, Y+
	cp AL, AH
	brlo tausche42
rjmp weitert22
tausche42:
	mov AL, AH
weitert22:			;AL=Max(1,2)
	ld	BL, Y+
	ld	BH, Y+
	cp BL, BH
	brlo tausche52
rjmp weitert32
tausche52:
	mov BL, BH
weitert32:			;BL=Max(3,4)
	cp AL, BL
	brlo tausche62
rjmp weiter2			;AL=Max(AL,BL)=Max(1,2,3,4)
tausche62:
	mov AL, BL
rjmp weiter2			;AL=Max(AL,BL)=Max(1,2,3,4)


ds_hl2:	ldiw	Y, LvlBuf2+5
	ldi	CL, 16		;59 Werte werden zu 16 zusammengefasst: 1731-20021Hz
senl2:	
	ld	AL, Y+		;1-5		5

	cpi CL, 2		;17-31		2
	brlo make8p2		;8 Werte zu einem zusammenfassen			

	cpi CL, 4		;17-31		2
	brlo make6p2		;6 Werte zu einem zusammenfassen

	cpi CL, 6		;23-22		2
	brlo make4p2		;4 Werte zu einem zusammenfassen

	cpi CL, 9		;17-22		3
	brlo make3p2		;3 Werte zu einem zusammenfassen

	cpi CL, 12		;5-10		3
	brlo make2p2		;2 Werte zu einem zusammenfassen
weiter2:	
	sub	AL, DL
	brcc	gnull2	
	ldi	AH, 0	
	rjmp	inull2
gnull2:
	ldi	AH, 0xFF
	cpi	AL, 8
	brcc	inull2
	ldi	AH, bit7
loope2:	
	subi	AL, 1
	brcs	inull2
	asr	AH
	rjmp	loope2
inull2:
	mov	AL, AH
	 rcall	lcd_put
	dec	CL
	brne	senl2
	ret

make6p2:
	ld	AH, Y+
	cp AL, AH
	brlo tausche72
rjmp weitert42
tausche72:
	mov AL, AH
weitert42:			;AL=Max(1,2)
	ld	BL, Y+
	ld	BH, Y+
	cp BL, BH
	brlo tausche82
rjmp weitert52
tausche82:
	mov BL, BH
weitert52:			;BL=Max(3,4)
	cp AL, BL
	brlo tausche92
rjmp weitert62			;AL=Max(AL,BL)=Max(1,2,3,4)
tausche92:
	mov AL, BL
weitert62:				;AL=Max(AL,BL)=Max(1,2,3,4)
	ld	BL, Y+
	ld	BH, Y+
	cp BL, BH
	brlo tausche102
rjmp weitert72
tausche102:
	mov BL, BH
weitert72:				;BL=Max(5,6)
	cp AL, BL
	brlo tausche112
rjmp weiter2			;AL=Max(AL,BL)=Max(1,2,3,4,5,6)
tausche112:
	mov AL, BL
rjmp weiter2			;AL=Max(AL,BL)=Max(1,2,3,4,5,6)

make8p2:
	ld	AH, Y+
	cp AL, AH
	brlo tausche122
rjmp weitert82
tausche122:
	mov AL, AH
weitert82:				;AL=Max(1,2)
	ld	BL, Y+
	ld	BH, Y+
	cp BL, BH
	brlo tausche132
rjmp weitert92
tausche132:
	mov BL, BH
weitert92:				;BL=Max(3,4)
	cp AL, BL
	brlo tausche142
rjmp weitert102			;AL=Max(AL,BL)=Max(1,2,3,4)
tausche142:
	mov AL, BL
weitert102:				;AL=Max(AL,BL)=Max(1,2,3,4)
	ld	BL, Y+
	ld	BH, Y+
	cp BL, BH
	brlo tausche152
rjmp weitert112
tausche152:
	mov BL, BH
weitert112:				;BL=Max(5,6)
	ld	AH, Y+
	ld	BH, Y+
	cp AH, BH
	brlo tausche162
rjmp weitert122			;AH=Max(AH,BH)=Max(7,8)
tausche162:
	mov AH, BH
weitert122:				;AH=Max(AH,BH)=Max(7,8)
	cp AH, BL
	brlo tausche172
rjmp weitert132			;AH=Max(AH,BL)=Max(5,6,7,8)
tausche172:
	mov AH, BL
weitert132:				;AH=Max(AH,BH)=Max(5,6,7,8)
	cp AL, AH
	brlo tausche182
rjmp weiter2			;AL=Max(AL,BL)=Max(1,2,3,4,5,6)
tausche182:
	mov AL, BH
rjmp weiter2			;AL=Max(AL,BL)=Max(1,2,3,4,5,6)



lcd_put:
	sbis ucsra, udre
	rjmp lcd_put
	out udr, AL
	inc	BL
	cpi	BL, FFT_N
	brne	exitm
	inc	BH
	clr	BL
exitm:
	ret


; These tables must be rebuilt when change FFT_N

t_cos_sin128:	; {cos(x),sin(x)} table (0 <= x < pi, in 64 steps)
	.dw	32767, 0, 32727, 1607, 32609, 3211, 32412, 4807
	.dw	32137, 6392, 31785, 7961, 31356, 9511, 30851, 11038
	.dw	30272, 12539, 29621, 14009, 28897, 15446, 28105, 16845
	.dw	27244, 18204, 26318, 19519, 25329, 20787, 24278, 22004
	.dw	23169, 23169, 22004, 24278, 20787, 25329, 19519, 26318
	.dw	18204, 27244, 16845, 28105, 15446, 28897, 14009, 29621
	.dw	12539, 30272, 11038, 30851, 9511, 31356, 7961, 31785
	.dw	6392, 32137, 4807, 32412, 3211, 32609, 1607, 32727
	.dw	0, 32767, -1607, 32727, -3211, 32609, -4807, 32412
	.dw	-6392, 32137, -7961, 31785, -9511, 31356, -11038, 30851
	.dw	-12539, 30272, -14009, 29621, -15446, 28897, -16845, 28105
	.dw	-18204, 27244, -19519, 26318, -20787, 25329, -22004, 24278
	.dw	-23169, 23169, -24278, 22005, -25329, 20787, -26318, 19519
	.dw	-27244, 18204, -28105, 16845, -28897, 15446, -29620, 14009
	.dw	-30272, 12539, -30851, 11038, -31356, 9511, -31784, 7961
	.dw	-32137, 6392, -32412, 4807, -32609, 3211, -32727, 1607

t_hamming128: ; Hamming window (for 128 samples)
	.dw	2621, 2639, 2693, 2784, 2910, 3073, 3270, 3502
	.dw	3768, 4068, 4401, 4765, 5161, 5587, 6042, 6525
	.dw	7036, 7571, 8132, 8715, 9320, 9945, 10588, 11249
	.dw	11926, 12616, 13318, 14031, 14753, 15482, 16216, 16954
	.dw	17694, 18433, 19171, 19905, 20634, 21356, 22069, 22772
	.dw	23462, 24138, 24799, 25443, 26068, 26673, 27256, 27816
	.dw	28352, 28862, 29345, 29800, 30226, 30622, 30987, 31319
	.dw	31619, 31885, 32117, 32315, 32477, 32603, 32694, 32748
	.dw	32767, 32748, 32694, 32603, 32477, 32315, 32117, 31885
	.dw	31619, 31319, 30987, 30622, 30226, 29800, 29345, 28862
	.dw	28352, 27816, 27256, 26673, 26068, 25443, 24799, 24138
	.dw	23462, 22772, 22069, 21356, 20634, 19905, 19171, 18433
	.dw	17694, 16954, 16216, 15482, 14753, 14031, 13318, 12616
	.dw	11926, 11249, 10588, 9945, 9320, 8715, 8132, 7571
	.dw	7036, 6526, 6042, 5587, 5161, 4765, 4401, 4068
	.dw	3768, 3502, 3270, 3073, 2910, 2784, 2693, 2639

t_desc128:	; Descramble table (for 128 point FFT)
	.dw	0*4, 64*4, 32*4, 96*4, 16*4, 80*4, 48*4, 112*4
	.dw	8*4, 72*4, 40*4, 104*4, 24*4, 88*4, 56*4, 120*4
	.dw	4*4, 68*4, 36*4, 100*4, 20*4, 84*4, 52*4, 116*4
	.dw	12*4, 76*4, 44*4, 108*4, 28*4, 92*4, 60*4, 124*4
	.dw	2*4, 66*4, 34*4, 98*4, 18*4, 82*4, 50*4, 114*4
	.dw	10*4, 74*4, 42*4, 106*4, 26*4, 90*4, 58*4, 122*4
	.dw	6*4, 70*4, 38*4, 102*4, 22*4, 86*4, 54*4, 118*4
	.dw	14*4, 78*4, 46*4, 110*4, 30*4, 94*4, 62*4, 126*4

⌨️ 快捷键说明

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