Czy może mi ktoś wytłumaczyć, dlaczego poniższy program daje na Port Pd.5 przebieg o częstotliwości ok. 690 kHz, kiedy kwarc taktujący procesor ma 8MHz???
Procesor to Atmega8, program pisany w Bascomie.
Kod: Zaznacz cały
Do
Toggle Portd.5
Loop
End
Kod: Zaznacz cały
Do
Toggle Portd.5
Loop
End
Kod: Zaznacz cały
; test.asm
__vector:
RJMP __init
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
__init:
LDI R24,(_IRAMSTART+_RAMSIZE)
OUT SPL,R24
LDI R28,0xC0
LDI R30,0xB8
MOV R4,R30
CLR R29
MOV R5,R29
LDI R30,lo(_RAMSIZE)
LDI R31,hi(_RAMSIZE)
LDI R26,lo(_IRAMSTART)
LDI R27,hi(_IRAMSTART)
CLR R24
__initclriram:
ST X+,R24
SBIW R30,1
BRNE __initclriram
CLR R6
;2: Toggle Portd.5
__lbl0001:
IN R24,PORTD
LDI R25,0b00100000
EOR R24,R25
OUT PORTD,R24
;4: Loop
RJMP __lbl0001
;5: End
__lbl0002:
CLI
RJMP __lbl0002
__dec_Z:
SBIW R30,1
BRNE __dec_Z
RET
__seterr:
SET
BLD R6,2
RET
__clrerr:
CLT
BLD R6,2
RETPełen okres sinusoidy to dwie jej połówki: dodatnia i ujemna. Jak może i Ci wiadomo okres (przejście z punktu wyjścia do kolejnego punktu wyjścia sinusa) jest odwrotnością częstotliwości ze znanego z fizy wzoru: f = 1/t. Tak samo jest tu. Mamy stan wysoki i stan niski i ich czas trzymania sumuje na pełen okres. To z tego jest to 0,75us razy dwa a resztę już wyliczono.Tom27 pisze:Niestety pozostaje mi uznać po trochę „ w ciemno”, że tak właśnie jest, bo nic nie rozumiem z tego, co napisałeś.
To jest dokładnie twój program wydobyty z czeluści BASCOM.Tom27 pisze:To jest odpowiednik mojego krótkiego programu w asemblerze?
Kod: Zaznacz cały
Do
Set Portd.5
Reset Portd.5
Loop
End