5 snlik gecikme alt programı ve osilatörler yardımı

Başlatan achilis, 18 Temmuz 2006, 09:28:55

achilis

pic için assemblyde 5 saniyelik gecikme alt programı yazmak istiyorum bu gecikme programı için hangi osilatör kullanmam faydalı olur frekansın daha sabit olması için,,,   birde sizden ricam bu alt programı nasıl yazabilirim, işin içinden çıkamadım

Logan

Kullanacağın osilatörün stabil olmasını istiyorsan, 4 mhz rezonatör kullanmalısın. Ayrıca 5 sn'lik gecikme yapman için, 1 saniyelik bir gecime yapmalı ve 5 kez tekrar etmelisin.Bu şekilde yap dememin sebebi, daha sonra 6 veya daha fazla gecikmeler yapmak istersen, elinde sabit 1 sn'lik gecikme olması içindir.Gecikme programına gelince, en basit haliyle ancak bu şekilde anlatılabilir;

gecikme
     movlw h'05'
     movwf sayac
delay
     movlw h'100'
     movwf sayac1
delay1
     movlw h'100'
     movwf sayac2
delay2
     movlw h'100'
     movwf sayac3
delay3
     [color=red]decfsz sayac3,f
     goto delay3[/color]
     [color=blue]decfsz sayac2,f
     goto delay2[/color]
     [color=green]decfsz sayac1,f
     goto delay1[/color]
     [color=yellow]decfsz sayac,f
     goto delay[/color]
     return

     Buradaki mantık şudur; Program gecikme alt programına dallandığı zaman, sayac * sayac1 * sayac2 * sayac* =5*100*100*100 defa alt programı tekrar eder.Burada sayac registerlerinin değerleriyle oynayarak gerekli gecikmeyi yapabilirsin.Fakat bu işlem karambole veya göz kararı ile olmaz.Hesap yapmalısın.Her satırın kaç mikro saniye zaman harcadığını hesaplayıp, değerleri ona göre yazmalısın.Bu alt programda, en çok tekrarlanan satır, kırmızı ile yazılı olan satırlardır.Bu satırlarrın harcadığı zamanı hesaplamak için şu formülü kullanmalısın;
"decfsz" komutu, olasılık doğrulanmadığı zaman 1 saykıl, yani 1 mikro saniye(4 Mhz'de) zaman harcar.Goto komutu da 1mikro saniye zaman harcar.Dolayısıyla Decfsz sayac3,f komut satırının zaman formülü,
1*sayac3*sayac2*saya1*sayac=1*100*100*100*5=5000000 Mikrosaniyedir.Aynı formül goto delay3 satırı içinde geçerlidir.
Fakat şunu da unutmamalısın ki, yukarıdaki delay-delay1-delay2 etiketlerinin altında yer alan komutlarda bu öngüye dahildir ve onlarıda hesaplaman gerekir.Eğer içinden çıkabilirsen, çok rahat edersin.Fakat zor geldiyse, otomatik gecikme hesaplayan programlar var.Onları kullanabilirsin.Kolay gelsin.

Mod notu: Lütfen kod kopyaladığınızda kod tagı içine kopyalayın. Kod tagı : Mesaj yazma alanının bir üstünde sol baştaki buton.
İmza.

toxin

GECİKME=5 SN
4 MHZ DIR. başka zaman dilim lerine ihtiyacın olursa foruma yaz

; BASLA
R0L EQU 0x20
R0H EQU 0x21
R1L EQU 0x22
R1H EQU 0x23
R2L EQU 0x24
 R2H EQU 0x25
R3L EQU 0x26
R3H EQU 0x27
R4L EQU 0x28
R4H EQU 0x29
R5L EQU 0x2A
R5H EQU 0x2B
ORG 0x0000
BCF PCLATH,3
BCF PCLATH,4
GOTO L0001
ORG 0x0004
RETFIE
L0001:
MOVLW 0x88
MOVWF R0L
MOVLW 0x13
MOVWF R0H
CALL W001
L0002:
              GOTO L0002
W001:
             MOVF R0L,F
BTFSC STATUS,Z
GOTO W002
CALL W003
DECF R0L,F
NOP
NOP
NOP
NOP
NOP
GOTO W001
W002:
             MOVF R0H,F
BTFSC STATUS,Z
RETURN
CALL W003
DECF R0H,F
DECF R0L,F
GOTO W001
W003:
               MOVLW 0x0C
MOVWF R2H
W004:
               DECFSZ R2H,F
GOTO W004
NOP
NOP
MOVLW 0x12
MOVWF R1L
W005:
                DECFSZ R1L,F
GOTO W006
CALL W007
CALL W007
NOP
NOP
RETURN
W006:
             CALL W007
GOTO W005
W007:
              MOVLW 0x0D
MOVWF R2L
W008:
              DECFSZ R2L,F
GOTO W008
NOP
RETURN
END