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