Gecikme Döngüsü (TMR0 olmadan)

agradecido

Üye
Katılım
13 Ara 2018
Mesajlar
12
Puanları
1
Yaş
26
Öncelikle merhaba. Aşağıda yazdığım kod PIC16F84A için 1sn gecikme kodu. Ancak hesapladığım zaman her seferinde 0,25sn gecikme çıkıyor. PIC'in 4Mhz olduğunu düşünüyorum KÇS=1x10^(-6)saniye.(10x100x250/1.000.000=0,25sn) Sizce bu hesaplamada hatayı nerede yapıyorum? Kodun mantığı ve gecikmenin 1 saniye çıkması konusunda yardımcı olabilir misiniz?
Kod:
; ----1SN_GECIKME.ASM---------

   list p=16F84

   include "P16F84.INC"

   org h'00'

;-----------------------------------

clrf PORTA

clrf PORTB

bsf STATUS, RP0

clrf TRISA

bcf STATUS, RP0

cblock h'0C'

            SAY1, SAY2, SAY3, LEDR

endc

clrf LEDR

;----------------------------

RESET    comf LEDR, 1

              movf LEDR, 0

              movwf PORTA

DONGU movlw d'10'

              movwf SAY1

K1                movlw            d'100'

                    movwf            SAY2

K2                       movlw     d'249'

                           movwf     SAY3

K3                       NOP

                           decfsz      SAY3, 1

                           goto K3

                    decfsz             SAY2, 1

                    goto K2

              decfsz SAY1, 1

              goto K1

              goto RESET

              end
 
Moderatör tarafında düzenlendi:
her komutun kendi işlem süreleri vardır,bazıları bir cycle alırken bazıları 2-3 cycle alabiliyor.onun için en güzeli programınızı kalibre etmektir.say degiskenlerine yüklenen degerler ile oynayarak süreyi kalibre edeceksiniz.mplab da simülatör kısmıda iken stopwatch ı sıfırlayarak süreleri tespit edebilirsiniz.
 
Önce komutların kendi işlem zamanını
gözardı edelim.
Led 1sn yanık 1sn kapalı kalacak ise
SAY1 -> 40.
Periyot 1sn ise SAY1 -> 20 olarak
deneyin.
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,849
Kullanıcılar
449,596
Son üye
anilhikmet

Yeni konular

Geri
Üst