uygulama1 Led yak söndür
PIC PROGRAMLAMA
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 regulatö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).
ve mpasm programı yardımıyla derleyin,
derleme işlemi sonunda elde ettiğiniz 1_led_yak.hex dosyasını programlar 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 mapasm da 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 bilinki include dosyasında tanımlanmayan bir şey girmişsinizdir.
Ardından gelen __CONFIG satırı configürasyon bitleridir. Kullandığınız osilatör tipi
WDT özelliği kod koruması gibi tanımlamalar var. bu özellikler progamamı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ğlayack 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 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 |
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 |
CALL GECIKME |
Bir süre bekle. |
GOTO SAY |
SAY etiketine git ve bozuluncaya kadar yada elektriğin kesilinceye kadar |
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.
Eğer programı çalıştırmayı başardıysanız çayınızı kahvenizi yada biranızı yudumlayıp yeni şeyler yapmaya başlayabilirsiniz,
Mesela 3 nolu bölüm de 1, 10,100,1000,10000,100000,1000000,10000000
diye sayı saydırın, bu ne oluyor?
Kaynak : http://www.elektromania.net/pic/?id=9