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

📄 ledmux32.a51

📁 AVR单片机实现FFT
💻 A51
字号:
; 31.12.2004 16:31:58

#cpu = AT89C2051	; @22,1184 MHz

#Exclude Byte 64 - 127		;Datenpuffer
#Exclude Byte 0 - 47		;Bits, Stack
#Bit Empfang, Clk=P3.7, Dat=P3.3, Latch=P3.4, OE=P3.5
#Byte MuxPos, Writepointer

ajmp Initialisierung

EXTI0:						; externer Interrupt 0
	Writepointer=#64		;Sync Eingang
reti

Timer 0:					; Timer 0 Interrupt
mov TH0, #250
ajmp Timer 0 Interrupt

SINT:						; serieller Interrupt
		clr RI
		push psw
		push acc
		r1=Writepointer
		@r1=sbuf	
		inc Writepointer
		inc Writepointer		
		a=Writepointer
		if a=#128 then
			Writepointer=#65
		elseif a=#129 then
			Writepointer=#64
		end if
		exsub:
		pop acc
		pop psw
reti

Initialisierung:

r0=#64
clr a
for r2=#64
	@r0=a
	inc r0
next

; Serieller Port
mov SCON, # 50h	; Modus 1, asynchron, 8 Bit, Baudrate Timer 1 躡erlauf, Datenempfang freigeben
mov TMOD, # 20h	; Timer 1 Autoreloadmodus
mov TH1, # FFh	; Reloadwert f黵 Baudrate 19200
setb TR1	; Timer 1 Start
orl PCON, # 80h	; Bit SMOD f黵 Baudratenverdoppelung setzen
orl TMOD, # 01h	; Timer 0 als 16-Bit Timer. 
; Die 躡erlauffrequenz des Timer 0 betr鋑t 28,125 Hz, die Periodendauer 35,55556 ms.
mov TH0, # 250
setb TR0	; Timer 0 l鋟ft.


; Interrupts
setb EX0	; externen Interrupt 0 freigeben
setb IT0		; Ausl鰏er: negative Flanke an P3.2
setb PX0	; Priorit鋞 f黵 externen Interrupt 0
setb ET0	; Timer 0 Interrupt freigeben
 setb ES		; seriellen Interrupt freigeben
setb PS		; Priorit鋞 f黵 seriellen Interrupt
setb EA		; globale Interruptfreigabe

MuxPos=#0
Writepointer=#64

loop	; Routine f黵 seriellen Empfang
	if bit Empfang then
		clr Empfang
		Serielle Daten auswerten
	end if
end loop
; * * * Hauptprogramm Ende * * *

Serielle Daten auswerten:
	mov a, SBUF
	; weitere Befehle
ret

Timer 0 Interrupt:
	inc MuxPos
	a=MuxPos
	if a=#16 then
		MuxPos=#0
		a=#0
	end if
	rl a
	setb acc.6
	push acc
	setb acc.5
	r0=a				;Rechte H鋖fte
	inc r0
	a= @r0
	for r7=#8
		clr Clk
		rlc a
		Dat=c
		nop
		setb Clk
	next	
	dec r0
	a= @r0
	for r7=#8
		clr Clk
		rlc a
		Dat=c
		nop
		setb Clk
	next	
	
	pop acc
	r0=a				;Linke H鋖fte
	inc r0
	a= @r0
	for r7=#8
		clr Clk
		rlc a
		Dat=c
		nop
		setb Clk
	next	
	dec r0
	a= @r0
	for r7=#8
		clr Clk
		rlc a
		Dat=c
		nop
		setb Clk
	next	
	
	clr OE
	a=MuxPos
	swap a
	P1=a	
	setb Latch
	nop
	clr Latch
	nop
	setb OE
reti

⌨️ 快捷键说明

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