Zamuda pri oznako vida

E

Elnegm

Guest
Živjo
Hočem vedeti kodo, kode ne vid da za svoje dellay funkcijo v milisecond in mikrosekundo, Ali oni s časovnik ali zanke in rabim vedeti, kako bi zamude pri časa za časovno vrednost večja od 16 bitni števec za (8MHZ ) ura
Hvala vnaprej

 
živjo

Zamude pri codevision je narejen z uporabo nadzornika časa, tako da če uporabljate varuh časa - kar je zelo priporočljiva uporaba WDT - zamuda funkcija deluje lep, vendar pa bo onesposobiti nadzornika časa.paziti pri uporabi te funkcije, in bi bilo bolje preoblikovati svojo programsko opremo za zmanjšanje uporabe zamude funkcij ali možnosti elliminate to sploh.če vi še vedno potreba zamudo svojo funkcijo do zamude funkcijo z uporabo katerega koli drugega časa, kot pes čuvaj časa.to nas pripelje do zamude večji od vrednosti 16-bitni števec za 8MHz uro, ki ste jih.

njihove sta dve možni rešitvi:
1), ki jo nastavite timer, da izda prekinitev vsakem trenutku znane 1 ali 5 sekund, kot vam je potrebno, to pomeni, da si nastavite timer v avto reload.in prekine storitev rutinsko uporabljate globalne spremenljivke za štetje prekinjajo prišlo, da je porast globalne spremenljivke v ISR.Torej, kjer koli drugje v programu (lahko je v vašem velike zamude funkcijo) lahko zanka indefinetly čaka ta spremenljivka doseže določeno vrednost ustvarja zamudo, ki lahko dosežejo 65.535-krat času osnove auto-reload časa, ki ga uporabljate, da če globalni spremenljivka je spremenljivka 16 bit.

2), druga rešitev je uporaba uporabo note iz ATMEL

http://www.atmel.com/dyn/resources/prod_documents/doc1268.pdf

To sporočilo vam omogoča, da ustvarite dolgih zamud, brez uporabe CPU za obdelavo prekine za časa bo to omogočilo, da dajo CPU v načinu mirovanja, če ste ustvarjajo dnevnik zamudo.

če potrebujete več pomoči potipati prost pm me

Salam,
shereef

 
Ko se zberejo, codevision ustvarja. ASM datoteko

tam lahko vidite, kaj je to početje

 
Glede na pogostost uro mikrokrmilniška prevajalnik CodeVision uporablja makre DELAY_USB (mikrosekund Byte) ali DELAY_USW (mikrosekund Word), da dobimo 1 mikrosekundo zamude.Funkcija delay_ms vključuje sklicevanja na ustrezne makro za pridobitev zamude v milisekundah.Funkcija delay_ms samodejno ponastavi časovnik varuh vsako 1ms, ki jih ustvarjajo WDR navodila.

Naslednja koda je ustvarila za ATMEGA16 in pogostost ura 8 MHz.V tem primeru za pridobitev zamude 1 mikrosekundo makro _DELAY_USW uporablja:. MAKRO __DELAY_USB
LDI R24, LOW (@ 0)
__DELAY_USB_LOOP:
December R24
BRNE __DELAY_USB_LOOP
. ENDM

. MAKRO __DELAY_USW
LDI R24, LOW (@ 0)
LDI R25, HIGH (@ 0)
__DELAY_USW_LOOP:
SBIW R24, 1
BRNE __DELAY_USW_LOOP
. ENDM_delay_ms:
ld R30, y
ld R31, y
adiw R30, 0
breq __delay_ms1
__delay_ms0:
__DELAY_USW 0x7D0
WDR
sbiw R30, 1
brne __delay_ms0
__delay_ms1:
ret

 
popravi me, če sem narobe, ampak WDR navodil se doda codevision prepričati "vaš" varuh ne bo obnovljena v teh zamud.To is'nt jo uporabljajo za ustvarjanje kakršne koli zamude ..

 
Ja, prav imaš.
WDR pouk je dodal codevision prepričati "vaš" varuh ne bo obnovljena v teh zamud.

 
**********
; Zamude Library
;************************************************* *********************
INCLUDE "p16F876A.inc"
ERRORLEVEL 0, -305, -302
;*******************************
; Uvoženi Data
;*******************************
Extern W_TEMP, S_TEMP, DelayCount
;*******************************
; Izvozni Subs
;*******************************
GLOBAL DelayMSec, DelayUSec
;************************************************* *********************
DelayCode CODE
;************************************************* *********************
movlw B'00100000 "
movwf STATUS
movlw B'11100000 '; Timer0 v Timer Mode Prescaler 1:2
movwf OPTION_REG
BSF PCLATH, 3
BCF PCLATH, 4
goto $
;*******************************
DelayUSec; Delay vrednost W USeconds (4 <odlašanja <256)
;*******************************
NOP
NOP
NOP
NOP
addlw 0x0FB

sublw ,254; 1 Inst = 1/5usec
nop
addlw 1
btfss STATUS, Z; Delay Loop = 5 inst * 5 / 2 = 2u
goto $ -3; Total Delay = W reg usec

nop
nop
NOP
NOP
NOP
NOP
donos
;*******************************
DelayMSec; Delay vrednost W v msecs
;*******************************
NOP
NOP
NOP
NOP

movwf DelayCount; 1 Inst = 2/5usec
MSecLoop
movlw ,250
klic DelayUSec
movlw ,250
klic DelayUSec
movlw ,250
klic DelayUSec
movlw ,250
klic DelayUSec

clrwdt
decfsz DelayCount; Total Delay = W reg msec
goto MSecLoop

NOP
NOP
NOP
NOP
donos
;*******************************
konec
;************************************************* *********************

 

Welcome to EDABoard.com

Sponsor

Back
Top