Bu uygulamada PIC 16F628A kullanarak LED ile flash yapacağız, yani LED'in parlaklığını artırarak önce yakacağız sonra söndüreceğiz ve bu işlem sürekli devam edecek.
Bu uygulama için şu konuda yer alan devreyi kullanabilirsiniz.
Pic Assembly Kodu
;LED
ile Flash Yapma
;Bu
kod Tuna Bulut tarafından yazılmıştır.
LIST P=16F628A
INCLUDE "P16F628A.INC"
__CONFIG
_XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;-------------DEĞİŞKENLERİ
BİR ADRESE ATA----------------
CBLOCK H'20'
i
IS
BEK
SAYAC
SAYAC1
SAYAC2
ENDC
;--------------------------------------------------------
MOVLW H'07'
MOVWF CMCON ;COMPARATOR ÖZELLİĞİ KAPALI VE PORTA I/O İÇİN AKTİF MODDA
CLRF PORTB ;PORTB Yİ SIFIRLA
;GİRİŞ-ÇIKIŞ
TANIMLAMALARI
BANKSEL TRISA ;BANK1
E GEÇİŞ YAP
MOVLW H'FF'
MOVWF TRISA ;PORTA
NIN BÜTÜN PİNLERİNİ GİRİŞ YAP
CLRF TRISB ;PORTB
NİN BÜTÜN PİNLERİNİ ÇIKIŞ YAP
BANKSEL PORTB ;TEKRAR
BANK0 A GEÇ
CLRF PORTB ;PORTB
Yİ SIFIRLA
;DEĞİŞKEN
DEĞERLERİNİ YÜKLÜYORUZ
MOVLW D'01'
MOVWF IS
MOVLW D'254'
MOVWF BEK
MOVLW D'03'
MOVWF i
YAK
BSF PORTB,0
MOVF IS,W
CALL GECIKME
BCF PORTB,0
MOVF BEK,W
CALL GECIKME
DECFSZ i,F
GOTO YAK
;--------------------IS DEĞİŞKENİNİN DEĞERİNİ ARTIRARAK GERİLİMİ
ARTIRIYORUZ-----------
ARTIR
MOVLW D'03'
MOVWF i
;IS
DEĞİŞKENİNİN 255'E ULAŞIP ULAŞMADIĞINI KONTROL EDİYORUZ
MOVF IS,W
XORLW H'FF'
BTFSC STATUS,2
;----------------------------------------------------------------------------------------------------
GOTO SONDUR
INCF IS,F
DECF BEK,F
GOTO YAK
;------------------------------------------------------------------------------------------------------------------------------
SONDUR
BCF PORTB,0
CALL UZUN_GECIKME
CALL UZUN_GECIKME
CALL UZUN_GECIKME
CALL UZUN_GECIKME
MOVLW D'01'
MOVWF IS
MOVLW D'254'
MOVWF BEK
GOTO YAK
;------------------KISA
GECİKME-----------------------------------------
GECIKME
MOVWF SAYAC
DONGU
DECFSZ SAYAC,F
GOTO DONGU
RETURN
;-------------------195 MS LİK
GECİKME----------------------------------
UZUN_GECIKME
MOVLW H'FF'
MOVWF SAYAC1 ;SAYAC1
E H'FF' DEĞERİNİ YÜKLE
DONGU1
MOVLW H'FF'
MOVWF SAYAC2 ;SAYAC2
YE H'FF' DEĞERİNİ YÜKLE
DONGU2
DECFSZ SAYAC2,1 ;SAYAC2
İ 1 AZALT VE SAYAC2 ÜZERİNE KAYDET 0 SA BİR SONRAKİ KOMUTU ATLA
GOTO DONGU2
DECFSZ SAYAC1,1 ;SAYAC1
İ 1 AZALT VE SAYAC1 ÜZERİNE KAYDET 0 SA BİR SONRAKİ KOMUTU ATLA
GOTO DONGU1
RETURN
END
Kodun Mantığı
LED'i yakarken çıkış gerilimini yavaş yavaş artırarak LED'in ışık şiddetini artırarak yakmış olduk. Önceki uygulamaların bir kısmında yaptığımız gibi bu uygulamada da çıkış gerilimini ayarlamak için PWM metodunu kullandık. Çıkışa düz bir sinyal değil de kare dalga göndererek gerilimi ayarlamış olduk. Kare dalgayı ise şu şekilde üretiyoruz: Önce çıkışı 1 yapıyor ardından bir süre gecikme koyuyoruz, sonra 0 yapıp gene ardından bir süre gecikme koyuyoruz. İşte çıkış gerilimini belirleyen de bu sürelerin uzunlukları oluyor. Çıkış geriliminin nasıl hesaplandığını şu konudan öğrenebilirsiniz. i değişkenine yüklediğimiz sayıyı artırarak ledin daha yavaş bir biçimde yanmasını sağlayabilirsiniz.
LED ile Flash Yapma ASM Kodu
|
süper
Yazan:: yahodan (Kayıtlı ) Tarih: 31-10-2008 01:14
» Yorumu cevapla...