[ valter @ 21.12.2005. 18:39 ] @
moze li neko da mi pojasni na koji nacin se u ovom podprogramu
javlja zakasnjenje od 1s.
Molim za odgovor jer meni nista nije jasno, treba mi formula kako se racunaju mikrosekunde da bi dobio 1s
Code:
 
_1s                                    ; Cekanje 1 sekunda

    bsf        STATUS,RP0                ; Bira se BANK1, radi pristupa registrima unutar ove banke
    movlw    b'00000111'                ; Ucitaj konstantu
    movwf    OPTION_REG                ; Preskaler dodeljen tajmeru, faktor deljenja je '256'
    bcf        STATUS,RP0                ; Bira se BANK0, radi pristupa registrima unutar ove banke
    
    clrf    TMR0                    ; Obrisi vrednost u tajmeru
    clrf    INTCON                    ; Obrisi poslednju setovanu vrednost 'T0IF'
    movlw    h'0F'                    ; Ucitaj '15' decimalno
    movwf    BR0                        ; Stavi u brojac BR0
L1    btfss    INTCON,T0IF                ; Da li je tajmer prekoracio vrednost d'65536'?
    goto    L1                        ; Nije, vrati se na ciklus
    clrf    INTCON                    ; Obrisi poslednju setovanu
    decfsz    BR0,f                    ; Jeste, umanji BR0 za 1, da li je BR0 '0'
    goto    L1                        ; Nije, vrati se na L1

    bsf        STATUS,RP0                ; Bira se BANK1, radi pristupa registrima unutar ove banke
    clrf    OPTION_REG                ; Preskaler dodeljen tajmeru, faktor deljenja je '2'
    bcf        STATUS,RP0                ; Bira se BANK0, radi pristupa registrima unutar ove banke
    
    clrf    TMR0                    ; Obrisi vrednost u tajmeru
    clrf    INTCON                    ; Obrisi poslednju setovanu vrednost 'T0IF'
    movlw    h'21'                    ; Ucitaj '33' decimalno
    movwf    BR0                        ; Stavi u brojac BR0
L2    btfss    INTCON,T0IF                ; Da li je tajmer prekoracio vrednost d'512'?
    goto    L2                        ; Nije, vrati se na ciklus
    clrf    INTCON                    ; Obrisi poslednju setovanu
    decfsz    BR0,f                    ; Jeste, umanji BR0 za 1, da li je BR0 '0'
    goto    L2                        ; Nije, vrati se na L2
    
    return    

i jos nesto zasto je movlw b'00000111' a ne b'10000111'
[ obranko @ 24.12.2005. 05:50 ] @
pozdrav,

ovo je kod za pic mikrokontroler. prva petlja (L1) ceka da se brojac 15 puta prepuni (sto daje 15*256*256 = 983040 taktova - 15 zadati broj, 256 preskaler drugih 256 timer ima osam bita).
druga petlja (L2) ceka da brojac 33 puta prepuni( sto daje 33 *2 * 256 = 16896, 33 zadati broj, 2 preskaler, 256 osmobitni brojac). zbir ova dva kasnjenja daje oko 1000000 taktova. posto je trazeno kasnjenje 1 sec, takt mora biti 1 mikro sekund. posto se verovatno koristi oscilator mikrokontrolera, njegova frekfrenicja treba da bude 4 puta veca (4MHz).