|
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.
|