Mikroişlemciler dersinde kullanılan programlar ile örnek çalışmaların bulunduğu PIC16F877 Alet Çantası yazısından sonra 1. haftada verilen programları paylaşayım dedim.
Not : Programlar deney setinde çalıştırılmamıştır.
Birinci Öğretim Ödevi
RB0 pinine bağlı olan bir tuşa her basıldığında kesme üreten ve bu kesmeyle
PD0 – PD7 pinlerine bağlı olan 8 adet ilk başta sönük bulunan ledlerde
İlk tuşa basıldığında ilk ledi yakan ve her tuşa basıldığında yanan ledi bir sola kaydıran
Devreyi tasarlayarak çalıştırınız.
İkinci Öğretim Ödevi
RB0 pinine bağlı olan bir tuşa her basıldığında kesme üreten ve PD4-PD7 pinlerine bağlı olan 4 adet led ile 0-9 arasında binary sayan bir devreyi tasarlayarak çalıştırınız.
İndirme Adresleri
Mikroişlemciler Birinci Öğretim Ödev 1 indir
Mikroişlemciler İkinci Öğretim Ödev 1 indir
BİRİNCİ ÖĞRETİM ÖDEVİ
Birinci Öğretim Ödevinin Kodları
list p=16F877 include "p16f877.inc" Degisken equ 0x21 ORG 0 goto Ana_program clrf PCLATH ORG 4 Kesme movf Degisken,0 ; Workinge değişken değeri atılıyor movwf PORTD ; Portd ye working değeri atılıyor btfss Degisken,7 ; Son led yanıyorsa bir komut atlıyarak 2 defa sola kayarak tüm ledler sönmeden tekrar ilk ledi yakar hale geliyor. goto Bir_Defa_Sola_Kay rlf Degisken,1 ; Buraya son led yanıkken ancak gelir. Bir_Defa_Sola_Kay rlf Degisken,1 bcf INTCON,INTF ; Flag indiriliyor tekrar kesmeyi algılayabilsin retfie ; Dönüş Ana_program clrf PORTD ; Portd sıfırlanıyor clrf PORTB ; Portb sıfırlanıyor movlw d'1' ; Değişkene 1 değeri veriliyor movwf Degisken banksel TRISD clrf TRISD ; D Portu çıkış movlw d'1' movwf TRISB ; B portunun ilk pini buton için giriş olarak ayarlanıyor movlw b'01000000' ; Pull-up dirençleri aktif movwf OPTION_REG movlw b'11010000' ; Kesmelere aktif, RB0 flag indiriliyor movwf INTCON banksel PORTD Dongu goto Dongu ; Dongu end
Birinci Öğretim Ödevinin Devre Şeması

İKİNCİ ÖĞRETİM ÖDEVİ
İkinci Öğretim Ödevinin Kodları
list p=16F877 #include <P16F877.INC> ORG 0 goto Ana_Program Sayac equ 0x21 ORG 4 Kesme incf Sayac ; Sayac 1 artır Kontrol_4_bit btfss Sayac,3 ; Sayacın 4. biti 1 olmuşsa bir satır atlıyarak 2.biti kontrol etmeye gider. 1 Olmamışsa yazdıra dallanır. goto Yazdir Kontrol_2_bit btfss Sayac,1 ; Sayacın 4. biti 1 olmuşsa buraya gelir, Burdada 2. biti kontrol eder 2. bit 1 değilse Yazdıra dallanır. Eğer 2. bitte 1 olmuşsa Sayac değeri 00001010 olmuş demektir buda 10 na denk gelir ve 1 komut atlıyarak Sayac değerini sıfırlar. goto Yazdir clrf Sayac ; 10 olmuşda Sayac sıfırlanır. Yazdir swapf Sayac,1 ; Sayac değişkenindeki en önemsiz 4 bitle diğer 4 bitin yerini değiştirir. movf Sayac,0 ; Sayac değerini working registırına atar movwf PORTD ; Workingteki değeri PORTD ye atar swapf Sayac,1 ; Sayac değişkenindeki en önemsiz 4 bitle diğer 4 bitin yerini değiştirir. Eski haline döndürür. bcf INTCON,INTF ; Flagı indirirki tekrar kesme oluşabilsin. retfie ; Dongüye dönüş. Ana_Program clrf Sayac ; Sayac sıfırla clrf PORTD ; PORTD sıfırla bcf STATUS,RP1 ; Bank1 e geç bsf STATUS,RP0 clrf TRISD ; D Portunun tüm pinleri çıkış movlw b'00000001' ; Tuş için Portb nin ilk biti giriş movwf TRISB movlw b'01000000' ; Pull-up dirençleri aktif, Düşen kenarda kesme movwf OPTION_REG movlw b'11010000' ; Kesmeler aktif, RB0 Flag indirildi movwf INTCON bcf STATUS,RP0 ; Bank0 geç movlw b'00000001' movwf PORTB Dongu goto Dongu ; Kesme oluşana kadar döngü end
İkinci Öğretim Ödevinin Devre Şeması

Ortagım teşekkürler
oyle olsun bakalım