ahmetguven52
Üye
- Katılım
- 23 Eyl 2011
- Mesajlar
- 7
- Puanları
- 1
- Yaş
- 33
iyi günler assembly diliyle pic programlama çalışıyorum.Kafama takılan bazı noktalar var aşağıda verdiğim kodlar üzerinden yardımcı olursanız sevinirim.
Aşağıdaki kodlara göre 1 sn aralıklarla 10 defa ledleri yakan ve son yanışta ledler devamlı yanmaya devam edecek.
Yukardaki kodların işleyişinde basamakları ilerlettiğimde ben 20 defa yanıp sönmesi gerektiğini anlıyorum.Ama programı derleyip çalıştırdığımda program 10 defa yanıp sönüyor. Nedenini açıklarsanız sevinirim. Ayrıca tekrar etiketinin altında çalışan SUBWF SAYAC,W basamağında sonuç W=h'01'- h'13'= -h'12' bu sonuca göre -h'12'<h'01' den olacak ve status bayrağı durumundan dolayı tekrar etiketine dönecek buradan birer azalarak döngü devam etmeyecek mi?
Aşağıdaki kodlara göre 1 sn aralıklarla 10 defa ledleri yakan ve son yanışta ledler devamlı yanmaya devam edecek.
Kod:
LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF
;----------------------------------------------------------
SAYAC EQU h'20' ;SAYAC saklayıcısını tanımla
SAYAC1 EQU h'21' ;SAYAC saklayıcısını tanımla
SAYAC2 EQU h'22' ;SAYAC saklayıcısını tanımla
BANKSEL TRISB ;BANK1'e geç
CLRF TRISB ;PORTB uçları çıkış
BANKSEL PORTB ;BANK0'a geç
CLRF PORTB ;PortB'deki LED'leri söndür.
BASLA
CLRF PORTB ;portB'yi sil
CLRF SAYAC ;SAYAC'ı sil
TEKRAR
CALL GECIKME
COMF PORTB,F ;W saklayıcıyı PortB'ye gönder
CALL GECIKME
MOVF SAYAC, W ;SAYAC'ı W'ye yükle(sıfırla)
INCF SAYAC, F ;SAYAC <-- SAYAC+1
MOVLW h'13' ;W saklayıcıya h'13' (desimal 19) yükle.
SUBWF SAYAC, W ;W <-- SAYAC-W
BTFSS STATUS, 2 ;STATUS bit2=1 mi? (Zero flag)
GOTO TEKRAR ;Hayır, TEKRAR'a git
DONGU
GOTO DONGU
GECIKME ;Alt program başlangıcı
MOVLW h'FF' ;Dış döngü (M sayısı)
MOVWF SAYAC1
DONGU1
MOVLW h'FF' ;İç döngü (Nsayısı)
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYAC1, F
GOTO DONGU1
RETURN
Yukardaki kodların işleyişinde basamakları ilerlettiğimde ben 20 defa yanıp sönmesi gerektiğini anlıyorum.Ama programı derleyip çalıştırdığımda program 10 defa yanıp sönüyor. Nedenini açıklarsanız sevinirim. Ayrıca tekrar etiketinin altında çalışan SUBWF SAYAC,W basamağında sonuç W=h'01'- h'13'= -h'12' bu sonuca göre -h'12'<h'01' den olacak ve status bayrağı durumundan dolayı tekrar etiketine dönecek buradan birer azalarak döngü devam etmeyecek mi?