Salvo
Kayıtlı Üye
LED YAKIP SÖNDÜRME
Pic16F84 ile Led uygulaması;
Şimdi genel bağlantı şemasına uyarak 16F84 ile 4 MHz lik bir kristal osilatörle aşağıdaki uygulamayı çalıştırın. Uygulamada portb nin 1 nolu pinine 220- 470 Ohm seri bir direnç ile led bağlayacaksınız, fakat pic in güç girişinde regülatör devresi bağlamayı ihmal etmeyin, yanabilir.
Aşağıdaki kodları not defteri gibi bir uygulamayla uzantısı asm olacak şekilde kaydedin. Hazır kodlarını almak isterseniz buraya tıklayın(1_led_yak.asm). Mpasm programı yardımıyla derleyin,
Derleme işlemi sonunda elde ettiğiniz 1_led_yak.hex dosyasını Download-Program bölümündeki Cardwriter programını kullanarak pic'e yükleyin.
Aşağıda uygulamanın asm dosyasının içeriği görünüyor.
Şimdi kısaca açıklayalım bunları.
1) Burası bizim kullandığımız pic in tanımları, burada girdiğimiz list ile kullanacağımız pic türünü ve ardından da bu pic’e ait bir takım tanımlamaların bulunduğu include dosyasının adını giriyoruz. Bu include dosyası zaten mpasm de mevcut, yani bu iki satırda tek yapacağımız şey pic i belirlemek, eğer bunları yapmazsanız, include dosyasının içinde ne var ne yok burada yazmalısınız, örneğin portb, trisb gibi yazmaçların tanımları bu dosyanın içinde bulunur, eğer derleme sırasında bunlarla ilgili
uyarılar alırsanız bilin ki include dosyasında tanımlanmayan bir şey girmişsinizdir. Ardından gelen __CONFIG satırı configurasyon bitleridir. Kullandığınız osilatör tipi WDT özelliği kod koruması gibi tanımlamalar var. Bu özellikler programımızı pic'e yükleyen programlarda mevcuttur oradan da ayarlayabiliriz.
Şimdilik burayı aynen alın ve geçin.
2) Bu bölüm başındaki org 0x0 başlangıç reset vektörü. Ardından gelenlerde bizim kendimize ait tanımladığımız değişkenlerimiz.
3) BASLA . bu programda herhangi bir yerde tekrar buraya dönmemizi sağlayacak olan etiketimiz.
Esas şu an için bundan sonrakiler önemli. Açıklayalım, (ve aslında en basit yeri burası)
BASLA
CLRF PORTB
Portb temizle (sıfır yükledik, çıkışlar sıfır)
CLRF SAYICI
Sayıcı olarak tanımlanmış değişkeni temizle
BSF STATUS,5
Bank 1'e geç. (TRISA ve TRISB yazmaçları ile ilgili işlem yapmak için, TRISA ve TRISB yazmacının bulunduğu bank 1 e geçmeliyiz
CLRF TRISB
Port B yi çıkış pozisyonuna getir
BCF STATUS,5
Bank 0'a geç. bunu yapmazsak BANK 1 de kalmış oluruz ve PORTA VE PORTB ile ilgili işlem yapmak için BANK 0 a geçmemiz gerekli.
SAY
SAY etiketi. Lazım olduğu yerde programın bu satırına gelebilmek için.
MOVLW B'00000001'
Working register’e binary 1 sayısını al.
Bir sayıyı önce W registere alıyoruz sonrada
kullanacağımız yerde W registerden alıp hedefe yüklüyoruz.
Yani şu an ileride kullanmak üzere w register'a atama işlemi yaptık.
Buradaki B ifadesi sayının binary (ikilik tabanda) olduğunu gösteriyor. Bunun yerine;
D’1’ yazarsak Desimal 1,
H ‘1’ yazarsak hexadecimal 1 vermiş oluruz,
Hepside aynı kapıya çıkmaktadır.
Ve birde B'00000001' yerine B’1’ yazmamız yeterli.
MOVWF PORTB
W registerdeki sayı yı PORT B ye gönder.
w de 1 sayısı vardı, bu durumda portb nin ilk biti (led’in bağlı olduğu pin) 1 oldu yani led şu an yandı.
CALL GECIKME
Gecikme yordamını çağır RETURN komutunun olduğu yerden geri dön.
Bunu yanma işleminden sonra LED'in bir süre yanık kalması için yaptık.
MOVLW B'00000000'
W reigstere binary 0 sayısını yükle.
W de 1 vardı silindi yerine sıfır yazıldı.
MOVWF PORTB
W registerdeki sayı yı PORT B ye gönder.
W registerde en son sıfır vardı bu değer port b
ye gitti, ve portb nin tüm bitleri sıfırlandı yani çıkışlar LOW konumunda. Bu durumda led söndü.
CALL GECIKME
Bir süre bekle.
GOTO SAY
SAY etiketine git ve bozuluncaya kadar yada elektriğin kesilinceye kadar aynı şeyleri tekrarla.
4) Gecikme bölümü,
Burada birtakım döngülerle pici oyalıyoruz ve portlar bu oyalanma sırasında yeni bir işlem yapılmadığı için konumunu koruyor. Burada yapılan tek şey iç içe döngüler oluşturarak gecikme sağlamak. Şimdilik buraya da fazla girmeyin programı bu şekilde öncelikle çalıştırın.
5) End. Programın sonu.
Pic16F84 ile Led uygulaması;
Şimdi genel bağlantı şemasına uyarak 16F84 ile 4 MHz lik bir kristal osilatörle aşağıdaki uygulamayı çalıştırın. Uygulamada portb nin 1 nolu pinine 220- 470 Ohm seri bir direnç ile led bağlayacaksınız, fakat pic in güç girişinde regülatör devresi bağlamayı ihmal etmeyin, yanabilir.
Aşağıdaki kodları not defteri gibi bir uygulamayla uzantısı asm olacak şekilde kaydedin. Hazır kodlarını almak isterseniz buraya tıklayın(1_led_yak.asm). Mpasm programı yardımıyla derleyin,
Derleme işlemi sonunda elde ettiğiniz 1_led_yak.hex dosyasını Download-Program bölümündeki Cardwriter programını kullanarak pic'e yükleyin.
Aşağıda uygulamanın asm dosyasının içeriği görünüyor.
Şimdi kısaca açıklayalım bunları.
1) Burası bizim kullandığımız pic in tanımları, burada girdiğimiz list ile kullanacağımız pic türünü ve ardından da bu pic’e ait bir takım tanımlamaların bulunduğu include dosyasının adını giriyoruz. Bu include dosyası zaten mpasm de mevcut, yani bu iki satırda tek yapacağımız şey pic i belirlemek, eğer bunları yapmazsanız, include dosyasının içinde ne var ne yok burada yazmalısınız, örneğin portb, trisb gibi yazmaçların tanımları bu dosyanın içinde bulunur, eğer derleme sırasında bunlarla ilgili
uyarılar alırsanız bilin ki include dosyasında tanımlanmayan bir şey girmişsinizdir. Ardından gelen __CONFIG satırı configurasyon bitleridir. Kullandığınız osilatör tipi WDT özelliği kod koruması gibi tanımlamalar var. Bu özellikler programımızı pic'e yükleyen programlarda mevcuttur oradan da ayarlayabiliriz.
Şimdilik burayı aynen alın ve geçin.
2) Bu bölüm başındaki org 0x0 başlangıç reset vektörü. Ardından gelenlerde bizim kendimize ait tanımladığımız değişkenlerimiz.
3) BASLA . bu programda herhangi bir yerde tekrar buraya dönmemizi sağlayacak olan etiketimiz.
Esas şu an için bundan sonrakiler önemli. Açıklayalım, (ve aslında en basit yeri burası)
BASLA
CLRF PORTB
Portb temizle (sıfır yükledik, çıkışlar sıfır)
CLRF SAYICI
Sayıcı olarak tanımlanmış değişkeni temizle
BSF STATUS,5
Bank 1'e geç. (TRISA ve TRISB yazmaçları ile ilgili işlem yapmak için, TRISA ve TRISB yazmacının bulunduğu bank 1 e geçmeliyiz
CLRF TRISB
Port B yi çıkış pozisyonuna getir
BCF STATUS,5
Bank 0'a geç. bunu yapmazsak BANK 1 de kalmış oluruz ve PORTA VE PORTB ile ilgili işlem yapmak için BANK 0 a geçmemiz gerekli.
SAY
SAY etiketi. Lazım olduğu yerde programın bu satırına gelebilmek için.
MOVLW B'00000001'
Working register’e binary 1 sayısını al.
Bir sayıyı önce W registere alıyoruz sonrada
kullanacağımız yerde W registerden alıp hedefe yüklüyoruz.
Yani şu an ileride kullanmak üzere w register'a atama işlemi yaptık.
Buradaki B ifadesi sayının binary (ikilik tabanda) olduğunu gösteriyor. Bunun yerine;
D’1’ yazarsak Desimal 1,
H ‘1’ yazarsak hexadecimal 1 vermiş oluruz,
Hepside aynı kapıya çıkmaktadır.
Ve birde B'00000001' yerine B’1’ yazmamız yeterli.
MOVWF PORTB
W registerdeki sayı yı PORT B ye gönder.
w de 1 sayısı vardı, bu durumda portb nin ilk biti (led’in bağlı olduğu pin) 1 oldu yani led şu an yandı.
CALL GECIKME
Gecikme yordamını çağır RETURN komutunun olduğu yerden geri dön.
Bunu yanma işleminden sonra LED'in bir süre yanık kalması için yaptık.
MOVLW B'00000000'
W reigstere binary 0 sayısını yükle.
W de 1 vardı silindi yerine sıfır yazıldı.
MOVWF PORTB
W registerdeki sayı yı PORT B ye gönder.
W registerde en son sıfır vardı bu değer port b
ye gitti, ve portb nin tüm bitleri sıfırlandı yani çıkışlar LOW konumunda. Bu durumda led söndü.
CALL GECIKME
Bir süre bekle.
GOTO SAY
SAY etiketine git ve bozuluncaya kadar yada elektriğin kesilinceye kadar aynı şeyleri tekrarla.
4) Gecikme bölümü,
Burada birtakım döngülerle pici oyalıyoruz ve portlar bu oyalanma sırasında yeni bir işlem yapılmadığı için konumunu koruyor. Burada yapılan tek şey iç içe döngüler oluşturarak gecikme sağlamak. Şimdilik buraya da fazla girmeyin programı bu şekilde öncelikle çalıştırın.
5) End. Programın sonu.