Deney No
Deney Adı
Tarih
3
Mikrodenetleyici Portlarının Giriş Olarak Kullanılması
…/…/201...
3.1 AMAÇ: Assembly programlama dili kullanarak mikrodenetleyici portlarını giriş olarak kullanmak. GİRİŞ: Bir portun giriş olarak mı yoksa çıkış olarak mı kullanılacağını belirten TRIS kaydedicileridir. Bir pinin giriş olarak kullanılabilmesi için ilgili TRIS kaydedicisindeki biti lojik “1” yapılır. Çıkış olarak kullanmak için ise lojik “0” yapılmalıdır. RAM belleğin yapısı düşünüldüğünde PORT kaydedicileri Bank0’da yer alırken TRIS kaydedicileri Bank1’de yer almaktadır. Assembly dili ile portun giriş/çıkış yönlendirilmesi yapılırken TRIS kaydedicilerine veri yazmadan önce mutlaka bank değiştirme işlemi yapılır. Bunun için STATUS kaydedicisinin 5 nolu bitini(RP0 biti) lojik 1 yapmak yeterlidir. PORT’lara erişim için ise tekrar Bank0’a geri dönülür. Bunun için ise STATUS kaydedicisinin 5 nolu biti lojik “0” yapılır.
Status kaydedicisi programın akışını kontrol eden en önemli kaydedicidir. RP1,RP0 : Doğrudan adreslemede bank seçimi yapar. o 00 : Bank0 o 01 : Bank1 o 10 : Bank2 o 11 : Bank3 Z - Zero bit o Sıfır Biti: Aritmetik veya lojik bir işlemin sonucu 0 ise Z = 1 değilse Z = 0 DC - Digit carry/borrow bit o Yarım Elde Biti: İlk dört haneden elde veya borç oluşursa DC = 1 oluşmazsa DC = 0 C - Carry/Borrow bit o Elde Biti: işlem sonucunda elde veya borç oluşursa C = 1 oluşmazsa C = 0
DEVRE ŞEMASI:
Deney No
Deney Adı
Tarih
3
Mikrodenetleyici Portlarının Giriş Olarak Kullanılması
…/…/201...
UYGULAMA KODLARI
BEGIN
MAIN
LIST INCLUDE __config
P=16F877A "P16F877A.INC" 0x3FFA
ORG BSF CLRF MOVLW MOVLW BCF CLRF
20h STATUS, RP0 TRISD 0x3F TRISB STATUS, RP0 PORTD
MOVF MOVWF GOTO END
PORTB, W PORTD MAIN
Sorular: 1. Hatayı bulup, düzeltiniz. 2. ORG deyimini silip ne gibi değişiklik olduğunu gözlemleyiniz. 3. GOTO $-2 komutunu uygun satıra yerleştirip deneyiniz.
Deney No
Deney Adı
Tarih
3
Mikrodenetleyici Portlarının Giriş Olarak Kullanılması
…/…/201...
3.2 AMAÇ: Assembly programlama dili kullanarak mikrodenetleyici portlarında zaman gecikmeli olarak verinin değiştirilmesini sağlamak. GİRİŞ: Mikrodenetleyiciler program hafızasında yer alan komutları yüksek hızda işleme yeteneğine sahiptirler. PIC mikrodenetleyicisinde 4 saat darbesi (clock pals) sonucunda 1 komut işlenir. 4 Mhz kristal ile çalışan bir PIC mikrodenetleyicisi saniyede 1 milyon komut işler. Gömülü sistem programlamada bu komut işleme sayısı 1 MIPS(million instruction per second) olarak adlandırılır. Bir port üzerinde gözle görülebilir veri değişikli yapmak için iki veri yükleme komutu arasına gecikme oluşturacak kod bloğu yazılmalıdır. Aslında bu kod bloğu işlemciyi bir süre oyalamak içindir. Portlarda verinin ne kadar süre ile kalmasını istiyorsak ona göre süre arttırılıp azaltılabilir. Portlardaki verinin, yandaki şekilde verildiği gibi değiştirilebilmesi için, doğrudan porta veri yükleme(MOVLW, MOVWF) komutlarının yanı sıra, 4bit yer değiştirme(SWAPF) veya eşlenik alma(COMF) komutları da kullanılabilir.
DOĞRUDAN VERİ YÜKLEME ……………………………… MAIN MOVLW 0x0F MOVWF PORTD CALL DELAY MOVLW 0xF0 MOVWF PORTD CALL DELAY GOTO MAIN ………………………………
DEVRE ŞEMASI:
4 BİT YER DEĞİŞTİRME ……………………………… MAIN MOVLW 0x0F MOVWF PORTD CALL DELAY MAIN2 SWAPF PORTD, F CALL DELAY GOTO MAIN2 ………………………………
EŞLENİK ALMA ……………………………… MAIN MOVLW 0x0F MOVWF PORTD CALL DELAY MAIN2 COMF PORTD, F CALL DELAY GOTO MAIN2 ………………………………
Deney No
Deney Adı
Tarih
3
Mikrodenetleyici Portlarının Giriş Olarak Kullanılması
…/…/201...
UYGULAMA KODLARI
SAYAC1 SAYAC2
LIST INCLUDE __config EQU EQU ORG
P=16F877A "P16F877A.INC" 0x3FFA 0x21 0x22 20h
BSF CLRF BCF CLRF
STATUS,RP0 TRISD STATUS,RP0 PORTD
MOVLW MOVWF CALL MOVLW MOVWF CALL GOTO
0x0F PORTD DELAY 0xF0 PORTD DELAY MAIN
MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO DECFSZ GOTO RETURN END
0xFF SAYAC1 0xFF SAYAC2 SAYAC2,F SAY2 SAYAC1,F SAY1
BEGIN
MAIN
DELAY SAY1 SAY2
Sorular: 1. Üç yöntemi uygulayınız. 2. SAYAC adresleri hangi aralıkta olabilir, değiştiriniz ve ne gibi değişiklik olduğunu gözlemleyiniz. 3. SAYAC değişkenlerine atanan değerleri değiştirerek sonuçları gözlemleyiniz.
Deney No
Deney Adı
Tarih
3
Mikrodenetleyici Portlarının Giriş Olarak Kullanılması
…/…/201...
3.3 AMAÇ: Assembly programlama dili kullanarak PORTB VE PORTC’ye bağlı anahtarlardan aldığı giriş bilgisini lojik kapı işlemlerini gerçekleştirip sonucu PORTD’ye bağlı LED’ler ile gösteren MPASM kodlarını yazınız.
LIST P=16F877A INCLUDE "P16F877A.INC" __config 0x3F3A ORG 20h BEGIN BSF STATUS,RP0 CLRF TRISD CLRF TRISA MOVLW 0xFF MOVWF TRISB MOVWF TRISC BCF STATUS,RP0 MAIN BCF STATUS, C MOVF PORTB,w XORWF PORTC,w MOVWF PORTD MOVF STATUS, w MOVWF PORTA GOTO MAIN END Sorular: 1. Tüm aritmetik ve mantıksal komutları uygulayınız bayrak durumlarını gözlemleyiniz.
Deney No
Deney Adı
Tarih
3
Mikrodenetleyici Portlarının Giriş Olarak Kullanılması
…/…/201...
3.4 AMAÇ: Assembly programlama dili kullanarak mikrodenetleyici portuna bağlı ledler üzerinde yürüyen ışık uygulaması gerçekleştirmek. GİRİŞ: Mikrodenetleyici portlarına bağlı ledler üzerinde gözle görünebilir hız aralığında değişik verilerin görüntülenebilmesi için veriler arasında gecikme blokları yer almalıdır. Ledler üzerinde yandaki animasyonun sağlanması için farklı kodlar kullanılabilir. Doğrudan veri yüklemenin yanı sıra kaydırma(RRF, RLF) komutları kullanılabilir. Ayrıca görüntülenmek istenen veriler bir hafıza bloğuna yazılıp, buradan sıra ile okunması sağlanabilir. DEVRE ŞEMASI:
UYGULAMA KODLARI
SAYAC1 SAYAC2
LIST INCLUDE __config EQU EQU ORG
P=16F877A "P16F877A.INC" 0x3FFA 0x21 0x22 20h
……… SAGA_KAY
BSF CLRF BCF BCF CLRF
STATUS, RP0 TRISD STATUS, RP0 STATUS, C PORTD
DELAY
MOVLW MOVWF
0x01 PORTD
CALL RLF BTFSS GOTO
DELAY PORTD,F PORTD,7 SOLA_KAY
BEGIN
MAIN
SAY2
SOLA_KAY
………
SAY1
CALL RRF BTFSS GOTO GOTO
DELAY PORTD,F PORTD,0 SAGA_KAY SOLA_KAY
MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO DECFSZ GOTO RETURN END
0xFF SAYAC1 0xFF SAYAC2 SAYAC2,F SAY2 SAYAC1,F SAY1