MİKRO DENETLEYİCİLER II DERS NOTLARI (Vize) Prof. Dr. Hakan Ündil Bahar

Benzer belgeler
MİKRO DENETLEYİCİLER II DERS NOTLARI (VİZE KONULARI) Prof. Dr. Hakan Ündil Bahar-Vize

5. BÖLÜM - DÖNGÜ (ÇEVRİM) ve Z BAYRAĞI

16F84 ü tanıt, PORTB çıkış MOVLW h FF MOWF PORTB

MİKRODENETLEYİCİLER 2 DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-Final Kısmı

# PIC enerjilendiğinde PORTB nin 0. biti 1 olacak #PIC enerjilendiğinde PORTA içeriğinin tersini PORTB de karşılık gelen biti 0 olacak

MİKRODENETLEYİCİLER II DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-FİNAL KISMI

MİKROİŞLEMCİLER VE MİKRO DENETLEYİCİLER 2 DERS NOTLARI Prof. Dr. Hakan Ündil Bahar-Final

KONFİGÜRASYON BİTLERİ

MİKRO DENETLEYİCİLER 1 DERS NOTLARI (Final) Prof. Dr. Hakan Ündil Güz

1. PORTB ye bağlı 8 adet LED i ikili sayı sisteminde yukarı saydıracak programı

W SAYAC SAYAC SAYAC. SAYAC= ise, d=0 W

BÖLÜM 3 3. PIC 16F8X KOMUTLARI 3.1.KULLANILAN SEMBOLLER: 3.2.KOMUTLAR VE KULLANIM ÖRNEKLERİ

KOMUT AÇIKLAMALARI VE ÖRNEKLERİ

B.Ç. / E.B. MİKROİŞLEMCİLER

Mikroişlemciler Ara Sınav---Sınav Süresi 90 Dk.

MİKRODENETLEYİCİLER II DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-FİNAL KISMI

BSF STATUS,5 ;bank1 e geçiş CLRF TRISB ;TRISB= BCF STATUS,5 ;bank0 a geçiş

UYGULAMA 05_01 MİKRODENETLEYİCİLER 5.HAFTA UYGULAMA_05_01 UYGULAMA_05_01. Doç.Dr. SERDAR KÜÇÜK

MİKRODENETLEYİCİLER I DERS NOTLARI Prof. Dr. Hakan Ündil Güz (Vize sonuna kadar olan kısımdır.)

Deney No Deney Adı Tarih. 3 Mikrodenetleyici Portlarının Giriş Olarak Kullanılması / /201...

DERS 7 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 örnek programlar Dallanma komutları Sonsuz döngü

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu

PIC TABANLI, 4 BASAMAKLI VE SER

LCD (Liquid Crystal Display )

Assembler program yazımında direkt olarak çizgi ile gösterilmemesine rağmen ekranınız ya da kağıdınız 4 ayrı sütunmuş gibi düşünülür.

LCD (Liquid Crystal Display)

3.2 PIC16F84 Yazılımı PIC Assembly Assembler Nedir?

Sistem Gereksinimleri: Uygulama Gelistirme: PIC Mikroislemcisinin Programlanmasi: PIC Programlama Örnekleri -1

PIC MİKRODENETLEYİCİLERİN HAFIZA YAPISI. Temel olarak bir PIC içerisinde de iki tür hafıza bulunur:

IŞIĞA YÖNELEN PANEL. Muhammet Emre Irmak. Mustafa Kemal Üniversitesi Mühendislik Fakültesi. Elektrik-Elektronik Mühendisliği Bölümü

T.C. MİLLÎ EĞİTİM BAKANLIĞI DENİZCİLİK MİKRODENETLEYİCİ 2

Hacettepe Robot Topluluğu

Bu yürütme, Prof. Dr. Hakan ÜNDİL (Bir haftalık derse ait ders notudur)

Bank değiştirme Bir banktan diğerine geçmek için STATUS register denilen özel registerin 5. ve 6. bitinin durumunu değiştirmek gerekir.

# PIC enerjilendiğinde PORTB nin 0. biti 1 olacak #PIC enerjilendiğinde PORTA içeriğinin tersini PORTB de karşılık gelen biti 0 olacak

PIC MİKROKONTROLÖR TABANLI MİNİ-KLAVYE TASARIMI

PIC 16F84 VE TEK BUTONLA BĐR LED KONTROLÜ

Program Kodları. void main() { trisb=0; portb=0; while(1) { portb.b5=1; delay_ms(1000); portb.b5=0; delay_ms(1000); } }

PIC MIKRODENETLEYICILER-3: GECĠKME ve KESME PROGRAMLARI

PIC16F877A nın Genel Özellikleri

PIC Mikrodenetleyiciler. Hazırlayan:Öğr.Gör.Bülent ÇOBANOĞLU 1

DERS 11 PIC 16F84 ile ALT PROGRAMLARIN ve ÇEVRİM TABLOLARININ KULLANIMI İÇERİK. Alt Program Çevrim Tabloları Program Sayıcı ( Program Counter PC )

MİKROİŞLEMCİ (MİKROPROSESÖR - CPU) NEDİR? Prof. Dr. Hakan ÜNDİL (Bir haftalık derse ait ders notudur)

Hyper Terminal programı çalıştırıp Uygun COM portu ve iletişim parametrelerinin ayarları yapılıp bekletilmelidir.

ELEKTRİK-ELEKTRONİK TEKNOLOJİSİ

Hacettepe Robot Topluluğu

Mikroişlemci: Merkezi işlem biriminin fonksiyonlarını tek bir yarı iletken tümleşik devrede birleştiren programlanabilir sayısal elektronik devre

8 Ledli Havada Kayan Yazı

HUNRobotX - Makaleler - Hız Ayarlı Çoklu DC Motor Kontrolü. Makaleler Hız Ayarlı Çoklu DC Motor Kontrolü

HUNRobotX - Makaleler - Gecikme Kodları Hazırlama ve Gecikme Rutini Hazırlayıcı. Makaleler Gecikme Kodları Hazırlama ve Gecikme Rutini Hazırlayıcı

PİC BASİC PROFESSİONAL

DERS 5 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 bacak bağlantıları PIC 16F84 bellek yapısı Program belleği RAM bellek Değişken kullanımı Komutlar

Yrd.Doç. Dr. Bülent ÇOBANOĞLU. Sakarya Üniversitesi, Teknoloji Fakültesi

ÖĞRENME FAALİYETİ-1 1. MİKRODENETLEYİCİ PROGRAMI YAZMA

Komutların İşlem Süresi

BÖLÜM 1 ALT PROGRAMLAR 1.1.ALTPROGRAM NEDİR?

ONDOKUZ MAYIS ÜNİVERSİTESİ

DEVRELENDİRİLMİŞ LOJİK

MIKROBILGISAYARLAR ve PIC PROGRAMLAMA TEST ÇALIŞMA SORULARI

PIC UYGULAMALARI. Öğr.Gör.Bülent Çobanoğlu

MİKRODENETLEYİCİ GELİŞTİRME SETİ TASARIM VE UYGULAMALARI. öğrencilerine eğitimleri esnasında iş hayatında karşılaşabilecekleri kontrol işlemleri ve

T.C. MİLLÎ EĞİTİM BAKANLIĞI MEGEP (MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN GÜÇLENDİRİLMESİ PROJESİ) ENDÜSTRİYEL OTOMASYON TEKNOLOJİLERİ

YILDIZ TEKNİK ÜNİVERSİTESİ ELEKTRİK - ELEKTRONİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ. EasyPic6 Deney Seti Kullanım Kılavuzu

Yrd. Doç.Dr. Bülent ÇOBANOĞLU. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU 1

Hacettepe Robot Topluluğu

T.C. MİLLÎ EĞİTİM BAKANLIĞI MEGEP (MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN GÜÇLENDİRİLMESİ PROJESİ) ENDÜSTRİYEL OTOMASYON TEKNOLOJİLERİ

T.C. MİLLÎ EĞİTİM BAKANLIĞI MEGEP (MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN GÜÇLENDİRİLMESİ PROJESİ) ELEKTRİK ELEKTRONİK TEKNOLOJİSİ

T.C FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ EET-302 MİKROİŞLEMCİLER LABORATUVARI DENEY FÖYÜ

PIC MİKRODENETLEYİCİ KULLANARAK BİR SİSTEMİN TELEFONLA UZAKTAN KONTROLÜ

T.C FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ EET-302 MİKROİŞLEMCİLER LABORATUVARI DENEY FÖYÜ

ELEKTRİK-ELEKTRONİK TEKNOLOJİSİ

MİKRODENETLEYİCİLER ÖRNEK PROGRAMLAR

MİKRODENETLEYİCİLER I DERS NOTLARI Güz-Final. 1. BÖLÜM GİRİŞ ve SAYI SİSTEMLERİ 1.1. Devrelendirilmiş Lojik

Hacettepe Robot Topluluğu

Microprocessors and Programming

BÖLÜM 1

MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUARI İKİLİ TABANDA ÇOK BAYTLI ÇARPMA

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

MİKROİŞLEMCİ (Microprocessor) NEDİR?

PIC Mikrodenetleyicileri

BİLİŞİM TEKNOLOJİLERİ

PROGRAMLANABİLİR ZAMANLAYICI

Mikroişlemciler Laboratuar Deney Föyü

DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ. İçerik

Mikroişlemcili Sistemler ve Laboratuvarı 8.Hafta

Her bir kapının girişine sinyal verilmesi zamanı ile çıkışın alınması zamanı arasında çok kısa da olsa fark bulunmaktadır -> kapı gecikmesi

MANCHESTER MODUL ASM YAZILIM NOTU

Sayı sistemleri iki ana gruba ayrılır. 1. Sabit Noktalı Sayı Sistemleri. 2. Kayan Noktalı Sayı Sistemleri

ÖĞRENME FAALİYETİ-1 ÖĞRENME FAALİYETİ 1

Giriş MİKROİŞLEMCİ SİSTEMLERİ. Elektronik Öncesi Kuşak. Bilgisayar Tarihi. Elektronik Kuşak. Elektronik Kuşak. Bilgisayar teknolojisindeki gelişme

DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI İÇERİK

T.C. MİLLÎ EĞİTİM BAKANLIĞI ELEKTRİK ELEKTRONİK TEKNOLOJİSİ MİKRODENETLEYİCİYLE ANALOG İŞLEMLER 523EO0022

Mikro denetleyicili Uygulama devresi bileşenleri

PIC ASSEMBLY VE MAKROLAR

PIC16F87X te ADC MODÜLÜNÜN KULLANIMI

SAYI SİSTEMLERİ. Sayı Sistemleri için Genel Tanım

Yrd. Doç. Dr. Caner ÖZCAN

Bu dersimizde pic pinlerinin nasıl input yani giriş olarak ayarlandığını ve bu işlemin nerelerde kullanıldığını öğreneceğiz.

EEM 419-Mikroişlemciler Güz 2017

Transkript:

MİKRO DENETLEYİCİLER II DERS NOTLARI (Vize) Prof. Dr. Hakan Ündil 2016-2017 Bahar (MİKRODENETLEYİCİLER I DERS NOTLARI nın devamıdır. Sadece VİZE için olan kısımdır) 6. BÖLÜM - ALT PROGRAMLAR Program içerisinde birden fazla kullanılacak rutinler ( program parçaları ) varsa bunlar tekrar yazılmaz. Bu suretle hem Program Hafızası tasarrufu sağlanır hem de programın okunabilirliği arttırılır. Bunun için tekrar kullanılacak program parçaları ALTPROGRAM olarak düzenlenir. Ana (asıl) Programdan Alt Programa CALL komutu ile gidilir, RETURN komutu ile ana programdaki CALL komutunu hemen takip eden komuta geri dönülür. Dönüşün PIC içersinde gerçekleştirilebilmesi için CALL komutuyla atlanırken geri dönüş adresinin saklanması gerekir. Bunun için STACK REGISTER denilen özel bir registerden faydalanılır. Bu işlem otomatik yapıldığı için programcının bu işlemle ayrıca ilgilenmesi gerekmez. 6.1. Bir Alt Programın Çağrılması ile PIC İçersindeki Olaylar Bir alt programın çalışmasını şematik çizersek ve numaralanmış olarak gerçekleşen işlemleri gösterirsek : Ana Program CALL ALTP END STACK REG Alt Program İlk Komut RETURN Bu işlemleri sırayla yazarsak; 1. Ana program başlangıçtan itibaren çalışır. 2. CALL _ ALTP komutu ile Alt programın ilk komutuna atlanır. 3. Ana programdan ayrılma adresi STACK Registere otomatik olarak saklanır. 4. Alt program ilk komuttan itibaren icra edilir. 5. RETURN komutu ile karşılaşınca Alt programın bittiği anlaşılır ve Ana programda kaldığımız yere geri dönülür. 6. STACK Registerde saklanmış ayrılma adresi alınır. 7. Ana program devam eder ve normal olarak END komutu ile son bulur. 1

şeklinde Alt Programa ait aşamalar elde edilir. Burada Programcı sadece CALL komutunu ve alt programı yazmak ve bunların isimlerinin (etiketin) aynı olmasını sağlamakla yükümlüdür. Alt Program sonuna RETURN yazılması, tüm programın (ana ve alt Programın) en altında END komutu bulunması zorunludur. Diğer yukarıda sıralanan işlemler zaten PIC tarafından otomatik olarak yapılmaktadır. 6.2. Altprogramlı Program Parçası Örnekleri Örnek : Bir çıkartma işlemi için ana programda 2. sayı PORTA ve akümülatöre alınacak daha sonra altprogram çağrılıp burada PORTB deki 1. sayıdan 2. sayı çıkarılarak tekrar ana programa dönülecektir ve sonuç tekrar PORTB ye yüklenecektir. Gerekli Program parçası ile altprogramı yazınız. Program Parçası CIKART AltProgramı MOVF PORTA,W CIKART SUBWF PORTB,W CALL CIKART RETURN MOVWF PORTB (Altprogram END komutundan önce yer almalıdır.) Örnek : Bir AltProgram şeklinde bir Zaman Geciktirme Döngüsü kullanarak PORTB ye bağlı LED lerin tamamını belli aralıklarla yakıp söndüren bir Program Parçası yazınız. Program Parçası GECIKME Altprogramı MOVLW h 00 GECIKME MOVLW h FF MOVWF PORTB MOVWF SAYAC1 CALL GECIKME DONGU1 MOVLW h FF MOVLW h FF MOVWF SAYAC2 MOVWF PORTB DONGU2 DECFSZ SAYAC2,F CALL GECIKME GOTO DONGU2 GOTO TEKRAR DECFSZ SAYAC1,F GOTO DONGU1 (Altprogram END komutundan önce yer almalıdır.) Program Örneği: Gecikme altprogramı kullanarak Port B ye bağlı tüm LED leri yakıp söndüren bir program için akış diyagramı çizerek gerekli assembly programını PIC 16F84 için yapınız. ;PROGRAM.ASM 15 / 10 / 2009 LIST P = 16F84 INCLUDE P16F84.INC SAYAC1 EQU h 0C SAYAC2 EQU h 0D BSF STATUS,5 CLRF TRISB BCF STATUS,5 DEVAM MOVLW h 00 MOVWF PORTB CALL GECİKME MOVLW h FF MOWF PORTB CALL GECİKME GOTO DEVAM GECİKME MOVLW h FF MOWF SAYAC1 BAŞLA 16F84 ü tanıt, PORTB çıkış PORTB yi sıfırla CALL GECİKME PORTB h FF CALL GECİKME 2

TEKRAR1 MOWF TEKRAR2 DECFSZ GOTO DECFSZ GOTO RETURN END SAYAC2 SAYAC2, F TEKRAR2 SAYAC1, F TEKRAR1 BÖLÜM 7 - ARİTMETİK İŞLEMLER PIC Mikrodenetleyicilerde aritmetik işlem komutları diğer komutlar kadar gerekli olmakta, özellikle toplama, çıkartma ve (2 n =2,4,8,16) ile çarpma ve (2 n =2,4,8,16) ile bölme işlemleri bu komutlarla kolaylıkla gerçekleştirilebilmektedir. PIC16F84 de bulunan Temel Aritmetik İşlem Komutları şöylece özetlenebilir : ADDLW : Bir sabiti W register ile toplar. Ve sonucu yine W registerine yazar. ADDWF : W register ile File registeri toplar. Sonucu File registere ya da W ye yazar. SUBLW : Bir sabitten W yi çıkarır. Ve sonucu yine W registerine yazar SUBWF : File registerden W yi çıkarır. Sonucu File registere yada W ye yazar. RLF : C bayrağı üzerinden bitleri sola kaydırır (döndürür) [2 ile çarpma]. RRF : C bayrağı üzerinden bitleri sağa kaydırır (döndürür) [2 ile bölme]. ( Dağıtılan Komut tablosunu ve önceki dönem konularını inceleyiniz) NOT: 1) 8 bit toplamada C (elde-carry) bayrağı sonucun 8 bit dışına taşıp taşmadığını gösterir. Şayet toplama komutu sonunda C = 0 ise sonuç 8 biti (h FF sayısını) aşmamıştır. C = 1 ise sonuç 8 biti (h FF sayısını) aşmıştır. NOT: 2) 8 bitlik işaretsiz çıkartmada (0...255) 10 = (0.FF) 16 aralığında elde edilen sonuçta; C = 1 ise sonuç pozitiftir. [Yani 1.sayı 2.sayıdan BÜYÜK dür]. Borç (ödünç) yoktur C = 0 ise sonuç negatiftir. [Yani 1.sayı 2. sayıdan KÜÇÜK dür]. Borç (ödünç) vardır NOT: 3) İşaretli sayılarla yapılan çıkartma işlemlerinde C bayrağı dikkate alınmaz. Eğer ( -128... +127) aralığı dışına çıkılmamışsa sadece 7. bit (Sonuç byte ının en solundaki bit) işareti tayin eder! Bu bit 0 ise sonuç pozitif, 1 ise sonuç negatiftir! Bu dönemki çalışmalarda işaretli sayılar üzerinde işlem yapılmayacaktır. 7.1. 8 Bit Toplama: PIC16F84 de 8 bit toplama için 2 komut mevcuttur: 3

1) ADDLW Komutu: Sabit sayı ile W (Aküde) registerinde bulunan sayıyı toplar ve neticeyi W registerine yazar. Örn: ADDLW h 08 ; h 08 sayısını W ye ekler. 2) ADDWF Komutu : W registerinde bulunan sayı ile File registeri toplar ve sonucu File registere yada W registere yazar. Örn: ADDWF MEM, F ; W ile MEM registeri toplanır, sonuç tekrar MEM e yazılır. Çeşitli Hex. (16 lı tabanda) Toplama İşlemleri: 1) h 09 2) h 03 3) h F8 4) h FE h DE h FB h 08 h 08 h E7 h FE 1 h 00 1 h 06 C Bayrağı : 0 oldu. C Bayrağı : 0 oldu. C Bayrağı : 1 oldu C Bayrağı :1 oldu O halde sonuç h FF den büyükse toplama işleminde C bayrağı= (1) olmaktadır. Örnek : Önce W registerine h 5D yazdıktan sonra bu sayıyı h 42 ile toplayıp neticeyi hem W registerine ve hem de PORTB ye yazmak için akış diyagramı çizerek assembly program parçasını yazınız. Sonucu ve C bayrağını bulunuz. MOVLW h 5D ; h 5D yi W ye yükle ADDLW h 42 ; h 42 ile topla MOVWF PORTB ;W deki sonuç PORTB ye İşlemleri yaparsak : İşlemi hem 16 lı (heksadesimal) hem de 2 li (binary) tabanda yaparsak; Heks. olarak; Binary olarak; 5D 0101 1101 42 0100 0010 9F 1001 1111 C bayrağı = 0 C bayrağı = 0 (Sonuç FF den küçük olduğu için) 7.2. 16 Bit (İki Byte) Toplama : Toplama işleminde h FF = d 255 (1 byte) den daha büyük sayılar kullanıyorsak toplama yapmadan önce bu sayıyı 2 byte lık parçalar halinde ifade ederiz. Ve sonucu da 2 byte olarak buluruz. Örnek olarak h 019F sayısını ele alalım. Burada 01 i ise üst byte ve 9F i alt byte, olmak üzere 16 bitlik (16 lı olarak 4 haneli) sayıyı iki kısma ayırırız. Daha sonra toplanacak diğer sayıyı da aynen ikiye ayırıp alt byte ları birlikte, üst byte ları da yine kendi aralarında topladıktan sonra alt byte ların toplamını bir registere, üst byte ların toplamını bir başka registere yazarız. Bu arada alt byte ların toplamından (elde-carry) oluşursa bu eldeyi üst byte lardan birine eklemek gerekir. Bu durumda akış diyagramını bu program parçası için çizersek: 4

Örnek : h 32A6 sabit sayısı ile h 2E9C sabit sayısını toplayarak sonucun alt-byte ını PORTB ye yazın. Daha sonra Program parçası GECIKME alt programına giderek neticenin bu kez üst-byte ını UST adlı registere gönderip yine GECIKME ye gidecek ve tekrar en başa dönerek işlemleri sürekli tekrarlayacaktır. Akış diyagramını çizip, program parçasını yazın (GECIKME alt programı yazılmayacaktır). X. sayısı 32 A6 Y. sayısı 2E 9C 1. sayı alt byte (XL) 2. sayı alt byte (YL) 1. sayı üst byte (XH) 2. sayı üst byte (YH) Önce toplama işlemini yapalım: Hex. Desimal Binary 32 A6 12966 0011 0010 1010 0110 + 2E 9C + 11932 + 0010 1110 1001 1100 61 42 24898 0110 0001 0100 0010 Akış Diyagramı Program Parçası XL EQU h 0C ; XL için 1 byte lık yer ayır. XH EQU h 0D ; XH için 1 byte lık yer ayır. YL EQU h 0E ; YL için 1 byte lık yer ayır. YH EQU h 0F ; YH için 1 byte lık yer ayır. BASLA MOVLW h A6 MOVWF XL MOVLW h 32 MOVWF XH MOVLW h 9C MOVWF YL MOVLW h 2E ; Verilen değerler X,Y lere yazıldı. MOVWF YH ; X ve Y byte ları ayrılan registerler yükle. TOPLA MOVF XL, W 5

ADDWF YL, W ; XL ve YL yi topla. MOVWF PORTB ;Sonucu PORTB ye yaz BTFSC STATUS, 0 ; C = 0 mı? INCF XH, F ; Hayırsa XH ı (1) arttır CALL GECIKME ;Gecikme alt prog. çağır MOVF XH, W ADDWF YH, W ; YH ile XH ı topla. MOVWF UST ; Sonucu UST e yaz CALL GECIKME ;Gecikme altprogramını çağır GOTO BASLA 7.3. 8 Bit Çıkartma: PIC16F84 Mikrodenetleyicisinde 2 tür çıkartma komutu vardır. Daha önce karşılaştırma işlemi için (Bkz. Mikroişlemciler ve Mikrodenetleyiciler 1 Ders Notları) kullanılan bu komutlar SUBLW ve SUBWF şeklindedir. Kısaca hatırlarsak; SUBLW komutunda sabit sayıdan W registerinin içeriği çıkarılarak sonuç W ye yazılır. Örn: SUBLW h 09 ; h 09 dan W registeri çıkarılır, sonuç W ye yazılır. SUBWF komutunda ise File registerden W çıkarılır ve sonuç W ye yada File registere yazılır. Örn: SUBWF MEM, F ; MEM adı ile tanımlı registerin içeriğinden W çıkarılır ; ve sonuç F e yazılır. Örn: SUBWF h 20, W ;0x20 adresinde bulunan sayından W çıkarılır,wye yazılır İşaretsiz Sayılarla Çeşitli Çıkartma İşlemleri: 1) h 08 2) h 08 h 09 h 07 h FF (Binaryde Tümleyen Arit. kullanarak) h 01 C bayrağı = 0 (sonuç negatif) C bayrağı = 1 (sonuç pozitif) Örnek : PORTA da bulunan h 1B sayısından h 0A sayısını çıkaran ve neticeyi PORTB ye yazan bir program parçasını ve ilgili akış diyagramı ile yapınız. Sonucu ve C bayrağının değerini veriniz. MOVLW h 0A SUBWF PORTA, W ; PORTA (0A) MOVWF PORTB ; Sonuç PORTB ye 6

İşlem: Hex. Komplement Aritmetiği İle h 1B 0001 1011 0001 1011 h 0A 0000 1010 1111 0110 h 11 0001 0001 C bayrağı = 1(Borç yok) C bayrağı = 1 olur. Örnek : MEM1 adlı registerde bulunan h 35 sayısından h 4C sayısını çıkardıktan sonra elde edilen negatif sayıyı PORTB deki LED leri yakarak ( 1 yaparak) gösteren bir program parçası yazınız. Yanacak LED leri ve C bayrağını bulunuz. Program Parçası: MOVLW h 4C SUBWF MEM1, F COMPF MEM1, F ; 0 1, 0 1 koyar. INCF MEM1 ; 1 arttırır, tabana göre komplement i(tümleyeni) bulur. MOVF MEM1, W ; MEM1 i W ye alır. MOVWF PORTB ; sonucu PORTB ye yazar. Hex. Yapalım Binary Yapalım h 35 0011 0101 0011 0101 h 4C 0100 1100 1011 0100 h -17 1110 1001 (negatif) PORTB de RB4, RB2, RB1, RB0 bağlı LED ler yanacaktır. 7.4. 16 Bit (İki byte) Çıkartma: 16 bit toplamaya benzerdir. Eksilen ve çıkan sayıların üst ve alt byte ları için birer olmak üzere 4 byte kullanılması gerekir. Örnek olarak h 53A8 sayısından h 24F6 sayısını çıkarmak için; Borç Genel bir akış diyagramı parçası çizersek : 53 A8 yandaki gibi bir durum ortaya çıkacaktır. 24 F6 2E B2 Bu defa altbyte ların çıkartılamasından borç kaldıysa 1. sayının üstbayt ından [burada 53 den] (1) çıkarılmalıdır. Tümleyen alınırsa 0001 0111 Hayır h 17 (C=0) Cevap: -17 Alt byteları çıkar (Borç varmı?) C = 0 mı? Evet 1. sayının üst byte ından (1) çıkar Üst byteları çıkar Örnek : Yukarıda verilen 2 byte lık 1.sayının sırasıyla düşük ve yüksek anlamlı byte lar olmak üzere MEM1L ve MEM1H adlı registerlerde bulunduğu, yine 2 byte lık 2. sayının MEM2L ve MEM2H adlı registerlerde mevcut olduğunu varsayarak çıkarma işlemini yapınız. Sonucun alt byte nı PORTB ye yazınız, üst byte nı ise RA0 biti = 0 olduktan sonra yine PORTB ye gönderilmesini sağlayan bir program parçası yazınız. 7

Program Parçası: CIKAR MOVF MEM2L, W SUBWF MEM1L, F ; MEM1L den MEM2L yi çıkart. BTFSS STATUS, 0 ; C = 0 mı? (Borç var mı?) DECF MEM1H, F ; Evetse MEM1H dan 1 eksilt MOVF MEM2H, W ; Hayırsa W MEM2H SUBWF MEM1H, F ; Üst byte sonucunu yine MEM1H a yaz. MOVF MEM1L, W ; W MEM1L MOVWF PORTB ; Alt byte sonucunu PORTB ye TEST BTFSC PORTA, 0 ; RA0 a basıldı mı? GOTO TEST ; Hayırsa TEST e git. MOVF MEM1H, W ; Evetse MEM1H ı W ye aktar. MOVWF PORTB ; Üst byte ı PORTB ye yükle. BÖLÜM 8 - LOJİK İŞLEM KOMUTLARI 8.1. RLF Komutu (Bir bit Sola Kaydırma) Bir file register içinde bulunan bitlerin birer bit sola kaydırılması işlemidir. Bu durumda en solda bulunan ( 7. bit ) C ( elde ) bayrağına geçmekte, daha önce C de bulunan bit ise en sağdaki ( 0.) bite geçmektedir. Komutun formatı; Komutu şematik gösterirsek; RFL FİLE REGISTER, d W yada F ( Sonucun Yeri ) Program Örneği : Bir programla önce PORTB ye h 01 yükleyin. Daha sonra 1 defa bu biti sola kaydırın. Bu işlemin daha iyi görülebilmesi için üst üste 2 kere GECIKME alt programı kullanın. BASLA 16F84 ü tanıt PORTB çıkış PORTB 01 CALL GECIKME CALL GECIKME ; PROGRAM.ASM LIST P = 16F84 INCLUDE P16F84.INC GECİK1 EQU h 0C GECİK2 EQU h 0D BCF STATUS, 0 ; Elde yi sıfırla BSF STATUS, 5 ; Bank1 e geç CLRF TRISB ; PORTB Çıkış BCF STATUS, 5 ; Bank0 a geç MOVLW h 01 MOVWF PORTB ;PORTB ye 01 yaz CALL GECIKME ; Bekleme yap CALL GECIKME ; Tekrar Bekleme yap RLF PORT B SON 8

RLF PORTB,F ; 1 bit sola ötele BEKLE GOTO BEKLE GECIKME MOVLF h FF ; Önceki Gecikme Alt Prog ile aynı MOVWF GECIK1 DONGU 1 MOVLW h FF MOVWF GECIK2 DONGU2 DECFSZ GECIK2, F GOTO DONGU2 DECFSZ GECIK1, F GOTO DONGU1 RETURN END 8.2. RRF Komutu (Bir Bit Sağa Kaydırma) RRF komutu da RLF komutuna benzer olup fark bu defa kaydırma işleminin sağa olması dolayısıyla en sağdaki bit (0.bit) C ( elde ) bayrağına geçecektir. Daha önce C bayrağında bulunan bit ise bu sefer en soldaki (7.bite) geçecektir. Komut formatı; RRF FİLE REGİSTER, d Sonucun gideceği yer W yada F Mesela MEM adlı bir file registere hex 30 sayısını yazın. Aynı anda C bayrağı da (C= 1) ise RRF komutunun icrasından önce ve sonraki durum: Bu işlem için kullanılacak program komutları : MOVLW h 49 ; W Registerine (49) 16 yükle MOVWF MEM ; W yi MEM adresine sakla RRF MEM, F ; MEM i Sağa bir bit ötele şeklinde olacaktır. 8.3. COMF ve SWAPF Komutları COMF komutu ile istenen bir file register içinde (0) lar (1) ve (1) ler (0) yapılabilir [1 e göre tümleyen işlemi!.. ]. Komut formatı; COMF FILE REGISTER, d Sonucun gideceği yer ( destination ) ( W yada F yazılır ) 9

şeklindedir. Örnek: HAFIZA1 adlı registere ( 1F ) 16 yüklendikten sonra bunun tersini bularak HAFIZA2 ye saklayan Program Parçasını yazın. HAFIZA1 MOVLW MOVWF COMF MOVWF h 0F HAFIZA1 HAFIZA1, W HAFIZA2 0001 1111 HAFIZA2 1110 0000 SWAPF komutu ise bir file register içindeki ilk dört bit (Yüksek anlamlı Nibble) ile son dört bitlerin (Düşük anlamlı Nibble) yerlerini değiştirir. Komut formatı; SWAPF FILE REGISTER, d şeklindedir. Örnek: PORTB ye ( 3F ) yazdıktan sonra ilk ve son 4 lü bitlerin yerini değiştiren ve sonucu W ye yazan Program parçası yazın. MOVLW MOVWF h 3F PORTB BÖLÜM 7 - ARİTMETİK İŞLEMLER PIC Mikrodenetleyicilerde aritmetik işlem komutları diğer komutlar kadar gerekli olmakta, özellikle toplama, çıkartma ve (2 n =2,4,8,16) ile çarpma ve (2 n =2,4,8,16) ile bölme işlemleri bu komutlarla kolaylıkla gerçekleştirilebilmektedir. PIC16F84 de bulunan Temel Aritmetik İşlem Komutları şöylece özetlenebilir : ADDLW : Bir sabiti W register ile toplar. Ve sonucu yine W registerine yazar. ADDWF : W register ile File registeri toplar. Sonucu File registere ya da W ye yazar. SUBLW : Bir sabitten W yi çıkarır. Ve sonucu yine W registerine yazar SUBWF : File registerden W yi çıkarır. Sonucu File registere yada W ye yazar. RLF : C bayrağı üzerinden bitleri sola kaydırır (döndürür) [2 ile çarpma]. RRF : C bayrağı üzerinden bitleri sağa kaydırır (döndürür) [2 ile bölme]. ( Dağıtılan Komut tablosunu ve önceki dönem konularını inceleyiniz) NOT: 1) 8 bit toplamada C (elde-carry) bayrağı sonucun 8 bit dışına taşıp taşmadığını gösterir. Şayet toplama komutu sonunda C = 0 ise sonuç 8 biti (h FF sayısını) aşmamıştır. 10

C = 1 ise sonuç 8 biti (h FF sayısını) aşmıştır. NOT: 2) 8 bitlik işaretsiz çıkartmada (0...255) 10 = (0.FF) 16 aralığında elde edilen sonuçta; C = 1 ise sonuç pozitiftir. [Yani 1.sayı 2.sayıdan BÜYÜK dür]. Borç (ödünç) yoktur C = 0 ise sonuç negatiftir. [Yani 1.sayı 2. sayıdan KÜÇÜK dür]. Borç (ödünç) vardır NOT: 3) İşaretli sayılarla yapılan çıkartma işlemlerinde C bayrağı dikkate alınmaz. Eğer ( -128... +127) aralığı dışına çıkılmamışsa sadece 7. bit (Sonuç byte ının en solundaki bit) işareti tayin eder! Bu bit 0 ise sonuç pozitif, 1 ise sonuç negatiftir! Bu dönemki çalışmalarda işaretli sayılar üzerinde işlem yapılmayacaktır. 7.1. 8 Bit Toplama: PIC16F84 de 8 bit toplama için 2 komut mevcuttur: 2) ADDLW Komutu: Sabit sayı ile W (Aküde) registerinde bulunan sayıyı toplar ve neticeyi W registerine yazar. Örn: ADDLW h 08 ; h 08 sayısını W ye ekler. 2) ADDWF Komutu : W registerinde bulunan sayı ile File registeri toplar ve sonucu File registere yada W registere yazar. Örn: ADDWF MEM, F ; W ile MEM registeri toplanır, sonuç tekrar MEM e yazılır. Çeşitli Hex. (16 lı tabanda) Toplama İşlemleri: 1) h 09 2) h 03 3) h F8 4) h FE h DE h FB h 08 h 08 h E7 h FE 1 h 00 1 h 06 C Bayrağı : 0 oldu. C Bayrağı : 0 oldu. C Bayrağı : 1 oldu C Bayrağı :1 oldu O halde sonuç h FF den büyükse toplama işleminde C bayrağı= (1) olmaktadır. Örnek : Önce W registerine h 5D yazdıktan sonra bu sayıyı h 42 ile toplayıp neticeyi hem W registerine ve hem de PORTB ye yazmak için akış diyagramı çizerek assembly program parçasını yazınız. Sonucu ve C bayrağını bulunuz. MOVLW h 5D ; h 5D yi W ye yükle ADDLW h 42 ; h 42 ile topla MOVWF PORTB ;W deki sonuç PORTB ye İşlemleri yaparsak : 11

İşlemi hem 16 lı (heksadesimal) hem de 2 li (binary) tabanda yaparsak; Heks. olarak; Binary olarak; 5D 0101 1101 42 0100 0010 9F 1001 1111 C bayrağı = 0 C bayrağı = 0 (Sonuç FF den küçük olduğu için) 7.2. 16 Bit (İki Byte) Toplama : Toplama işleminde h FF = d 255 (1 byte) den daha büyük sayılar kullanıyorsak toplama yapmadan önce bu sayıyı 2 byte lık parçalar halinde ifade ederiz. Ve sonucu da 2 byte olarak buluruz. Örnek olarak h 019F sayısını ele alalım. Burada 01 i ise üst byte ve 9F i alt byte, olmak üzere 16 bitlik (16 lı olarak 4 haneli) sayıyı iki kısma ayırırız. Daha sonra toplanacak diğer sayıyı da aynen ikiye ayırıp alt byte ları birlikte, üst byte ları da yine kendi aralarında topladıktan sonra alt byte ların toplamını bir registere, üst byte ların toplamını bir başka registere yazarız. Bu arada alt byte ların toplamından (elde-carry) oluşursa bu eldeyi üst byte lardan birine eklemek gerekir. Bu durumda akış diyagramını bu program parçası için çizersek: Örnek : h 32A6 sabit sayısı ile h 2E9C sabit sayısını toplayarak sonucun alt-byte ını PORTB ye yazın. Daha sonra Program parçası GECIKME alt programına giderek neticenin bu kez üst-byte ını UST adlı registere gönderip yine GECIKME ye gidecek ve tekrar en başa dönerek işlemleri sürekli tekrarlayacaktır. Akış diyagramını çizip, program parçasını yazın (GECIKME alt programı yazılmayacaktır). X. sayısı 32 A6 Y. sayısı 2E 9C 1. sayı alt byte (XL) 2. sayı alt byte (YL) 1. sayı üst byte (XH) 2. sayı üst byte (YH) 12

Önce toplama işlemini yapalım: Hex. Desimal Binary 32 A6 12966 0011 0010 1010 0110 + 2E 9C + 11932 + 0010 1110 1001 1100 62 42 24898 0110 0001 0100 0010 Akış Diyagramı Program Parçası XL EQU h 0C ; XL için 1 byte lık yer ayır. XH EQU h 0D ; XH için 1 byte lık yer ayır. YL EQU h 0E ; YL için 1 byte lık yer ayır. YH EQU h 0F ; YH için 1 byte lık yer ayır. BASLA MOVLW h A6 MOVWF XL MOVLW h 32 MOVWF XH MOVLW h 9C MOVWF YL MOVLW h 2E ; Verilen değerler X,Y lere yazıldı. MOVWF YH ; X ve Y byte ları ayrılan registerler yükle. TOPLA MOVF XL, W ADDWF YL, W ; XL ve YL yi topla. MOVWF PORTB ;Sonucu PORTB ye yaz BTFSC STATUS, 0 ; C = 0 mı? INCF XH, F ; Hayırsa XH ı (1) arttır CALL GECIKME ;Gecikme alt prog. çağır MOVF XH, W ADDWF YH, W ; YH ile XH ı topla. MOVWF UST ; Sonucu UST e yaz CALL GECIKME ;Gecikme altprogramını çağır GOTO BASLA 7.3. 8 Bit Çıkartma: PIC16F84 Mikrodenetleyicisinde 2 tür çıkartma komutu vardır. Daha önce karşılaştırma işlemi için (Bkz. Mikroişlemciler ve Mikrodenetleyiciler 1 Ders Notları) kullanılan bu komutlar SUBLW ve SUBWF şeklindedir. Kısaca hatırlarsak; SUBLW komutunda sabit sayıdan W registerinin içeriği çıkarılarak sonuç W ye yazılır. Örn: SUBLW h 09 ; h 09 dan W registeri çıkarılır, sonuç W ye yazılır. SUBWF komutunda ise File registerden W çıkarılır ve sonuç W ye yada File registere yazılır. Örn: SUBWF MEM, F ; MEM adı ile tanımlı registerin içeriğinden W çıkarılır ; ve sonuç F e yazılır. 13

Örn: SUBWF h 20, W ;0x20 adresinde bulunan sayından W çıkarılır,wye yazılır İşaretsiz Sayılarla Çeşitli Çıkartma İşlemleri: 1) h 08 2) h 08 h 09 h 07 h FF (Binaryde Tümleyen Arit. kullanarak) h 01 C bayrağı = 0 (sonuç negatif) C bayrağı = 1 (sonuç pozitif) Örnek : PORTA da bulunan h 1B sayısından h 0A sayısını çıkaran ve neticeyi PORTB ye yazan bir program parçasını ve ilgili akış diyagramı ile yapınız. Sonucu ve C bayrağının değerini veriniz. MOVLW h 0A SUBWF PORTA, W ; PORTA (0A) MOVWF PORTB ; Sonuç PORTB ye İşlem: Hex. Komplement Aritmetiği İle h 1B 0001 1011 0001 1011 h 0A 0000 1010 1111 0110 h 11 0001 0001 C bayrağı = 1(Borç yok) C bayrağı = 1 olur. Örnek : MEM1 adlı registerde bulunan h 35 sayısından h 4C sayısını çıkardıktan sonra elde edilen negatif sayıyı PORTB deki LED leri yakarak ( 1 yaparak) gösteren bir program parçası yazınız. Yanacak LED leri ve C bayrağını bulunuz. Program Parçası: MOVLW h 4C SUBWF MEM1, F COMPF MEM1, F ; 0 1, 0 1 koyar. INCF MEM1 ; 1 arttırır, tabana göre komplement i(tümleyeni) bulur. MOVF MEM1, W ; MEM1 i W ye alır. MOVWF PORTB ; sonucu PORTB ye yazar. Hex. Yapalım Binary Yapalım h 35 0011 0101 0011 0101 h 4C 0100 1100 1011 0100 h -17 1110 1001 (negatif) PORTB de RB4, RB2, RB1, RB0 bağlı LED ler yanacaktır. Tümleyen alınırsa 14

0001 0111 7.4. 16 Bit (İki byte) Çıkartma: 16 bit toplamaya benzerdir. Eksilen ve çıkan sayıların üst ve alt byte ları için birer olmak üzere 4 byte kullanılması gerekir. Örnek olarak h 53A8 sayısından h 24F6 sayısını çıkarmak için; Borç Genel bir akış diyagramı parçası çizersek : 54 A8 yandaki gibi bir durum ortaya çıkacaktır. 25 F6 2E B2 Bu defa altbyte ların çıkartılamasından borç kaldıysa 1. sayının üstbayt ından [burada 53 den] (1) çıkarılmalıdır. Hayır h 17 (C=0) Cevap: -17 Alt byteları çıkar (Borç varmı?) C = 0 mı? Evet 1. sayının üst byte ından (1) çıkar Üst byteları çıkar Örnek : Yukarıda verilen 2 byte lık 1.sayının sırasıyla düşük ve yüksek anlamlı byte lar olmak üzere MEM1L ve MEM1H adlı registerlerde bulunduğu, yine 2 byte lık 2. sayının MEM2L ve MEM2H adlı registerlerde mevcut olduğunu varsayarak çıkarma işlemini yapınız. Sonucun alt byte nı PORTB ye yazınız, üst byte nı ise RA0 biti = 0 olduktan sonra yine PORTB ye gönderilmesini sağlayan bir program parçası yazınız. Program Parçası: CIKAR MOVF MEM2L, W SUBWF MEM1L, F ; MEM1L den MEM2L yi çıkart. BTFSS STATUS, 0 ; C = 0 mı? (Borç var mı?) DECF MEM1H, F ; Evetse MEM1H dan 1 eksilt MOVF MEM2H, W ; Hayırsa W MEM2H SUBWF MEM1H, F ; Üst byte sonucunu yine MEM1H a yaz. MOVF MEM1L, W ; W MEM1L MOVWF PORTB ; Alt byte sonucunu PORTB ye TEST BTFSC PORTA, 0 ; RA0 a basıldı mı? GOTO TEST ; Hayırsa TEST e git. MOVF MEM1H, W ; Evetse MEM1H ı W ye aktar. MOVWF PORTB ; Üst byte ı PORTB ye yükle. BÖLÜM 8 - LOJİK İŞLEM KOMUTLARI 8.1. RLF Komutu (Bir bit Sola Kaydırma) Bir file register içinde bulunan bitlerin birer bit sola kaydırılması işlemidir. Bu durumda en solda bulunan ( 7. bit ) C ( elde ) bayrağına geçmekte, daha önce C de bulunan bit ise en sağdaki ( 0.) bite geçmektedir. Komutun formatı; 15

Komutu şematik gösterirsek; RFL FİLE REGISTER, d W yada F ( Sonucun Yeri ) Program Örneği : Bir programla önce PORTB ye h 01 yükleyin. Daha sonra 1 defa bu biti sola kaydırın. Bu işlemin daha iyi görülebilmesi için üst üste 2 kere GECIKME alt programı kullanın. BASLA 16F84 ü tanıt PORTB çıkış PORTB 01 CALL GECIKME CALL GECIKME RLF PORT B SON ; PROGRAM.ASM LIST P = 16F84 INCLUDE P16F84.INC GECİK1 EQU h 0C GECİK2 EQU h 0D BCF STATUS, 0 ; Elde yi sıfırla BSF STATUS, 5 ; Bank1 e geç CLRF TRISB ; PORTB Çıkış BCF STATUS, 5 ; Bank0 a geç MOVLW h 01 MOVWF PORTB ;PORTB ye 01 yaz CALL GECIKME ; Bekleme yap CALL GECIKME ; Tekrar Bekleme yap RLF PORTB,F ; 1 bit sola ötele BEKLE GOTO BEKLE GECIKME MOVLF h FF ; Önceki Gecikme Alt Prog ile aynı MOVWF GECIK1 DONGU 1 MOVLW h FF MOVWF GECIK2 DONGU2 DECFSZ GECIK2, F GOTO DONGU2 DECFSZ GECIK1, F GOTO DONGU1 RETURN END 8.2. RRF Komutu (Bir Bit Sağa Kaydırma) RRF komutu da RLF komutuna benzer olup fark bu defa kaydırma işleminin sağa olması dolayısıyla en sağdaki bit (0.bit) C ( elde ) bayrağına geçecektir. Daha önce C bayrağında bulunan bit ise bu sefer en soldaki (7.bite) geçecektir. Komut formatı; RRF FİLE REGİSTER, d Sonucun gideceği yer W yada F Mesela MEM adlı bir file registere hex 30 sayısını yazın. Aynı anda C bayrağı da (C= 1) ise RRF komutunun icrasından önce ve sonraki durum: 16

Bu işlem için kullanılacak program komutları : MOVLW h 49 ; W Registerine (49) 16 yükle MOVWF MEM ; W yi MEM adresine sakla RRF MEM, F ; MEM i Sağa bir bit ötele şeklinde olacaktır. 8.3. COMF ve SWAPF Komutları COMF komutu ile istenen bir file register içinde (0) lar (1) ve (1) ler (0) yapılabilir [1 e göre tümleyen işlemi!.. ]. Komut formatı; COMF FILE REGISTER, d Sonucun gideceği yer ( destination ) ( W yada F yazılır ) şeklindedir. Örnek: HAFIZA1 adlı registere ( 1F ) 16 yüklendikten sonra bunun tersini bularak HAFIZA2 ye saklayan Program Parçasını yazın. HAFIZA1 MOVLW MOVWF COMF MOVWF h 0F HAFIZA1 HAFIZA1, W HAFIZA2 0001 1111 HAFIZA2 1110 0000 SWAPF komutu ise bir file register içindeki ilk dört bit (Yüksek anlamlı Nibble) ile son dört bitlerin (Düşük anlamlı Nibble) yerlerini değiştirir. Komut formatı; SWAPF FILE REGISTER, d şeklindedir. Örnek: PORTB ye ( 3F ) yazdıktan sonra ilk ve son 4 lü bitlerin yerini değiştiren ve sonucu W ye yazan Program parçası yazın. MOVLW h 3F 17

MOVWF SWAPF PORTB PORTB, W f e a g d b c nokta BÖLÜM 9 DÖNÜŞÜM TABLOLARI (LOOKUP TABLEs) Dönüşüm tabloları bir kodu bir başka koda dönüştürmek için kullanılır. Örnek olarak belli bir sayı ile o sayıyı göstergede yakmak için göstergeye uygulanması gereken sayı arasında fark vardır. 3 sayısını herhangi bir şekilde bir mikrodenetleyiciye bağlı display ya da göstergede yazmak için 3 sayısının ikili tabandaki karşılığından farklı bir dijital (sayısal) bilginin mikrodenetleyiciden (PIC den) gönderilmesi gerekir. 9.1. 7 Parçalı (Segment) Gösterge (Display) Uygulaması Mesela; PORTB 'ye bağladığımız bir 7- segment (parçalı) display in (göstergenin) üzerinde heksadesimal (0,1,2...E,F) sayıları göstermek istersek bu tür bir tablo kullanabiliriz. (Nokta dahil) toplam 8 tane segment bulunmaktadır. PB0 (a) PB7 ( ) 7-segment(parçalı) gösterge (display) Ortak katod lu ise bu uç GND' a (Besleme kaynağının (-) ucuna bağlanmalıdır. Bu dijitte noktasız olarak 0 yakmak için a,b, c, d, e, f segmentleri (parçaları) yanmalı diğer parçalar (g ve nokta) sönük kalmalıdır. O halde h 00 sayısından (kodundan) h 3F = b 0011 1111 (kodu) elde edilmelidir. Bir başka ifade ile bu Dönüşüm Tablosuna biz h 00 verdiğimizde o bize h 3F yollamalıdır. Zira bu durumda a segmenti RB0 dan (PORTB nin 0. biti) başlamak üzere,. g f e d c b a 0 0 1 1 1 1 1 1 olmalıdır. O halde PORTB' ye h 3F yüklenmelidir. RB7... RB0 Benzer şekilde (2) sayısını yakmak için aşağıda belirtilen segmentlerin yanması gereklidir. e a g d b Dönüşüm tablosu kullanımına ait örnek program yazmadan evvel Program Sayacı nı (Program Counter PC ) ve RETLW komutunu inceleyelim. 18

9.1.1. Program Sayacı (Program Counter PC ) 16F84' de 13 bitlik bir program sayacı (PC) vardır. GOTO ve CALL komutları gerçekte 11 bitlik adres kullanılır ki bu sayı 16F84 de 1K olan program hafızası için yeterlidir. Hatta 11 bit ile 2K adreslemek de mümkündür. (Hatırlatma: 2 11 = 2048 = 2 K) Genelde Program Sayacının alt (8) bitine PCL, üst (5) bitine PCH denir. PCH PCL Bu iki bit 2k' dan fazla hafızaya sahip PIC' ler içindir (PIC 16F877 gibi) 11 bit 2 kb hafızaya sahip PIC' ler için yeterlidir. (PIC 16F84' de 1kB program hafızası vardır). Program sayacının üst 5 bitini (PCH) doğrudan okumak veya buraya yazmak mümkün değildir. Ancak PCH a, veri hafızasında Özel Fonk. Registerlerinden Bank 0 ' da bulunan 5 bitlik PCLATH adı verilen özel file registerinden faydalanarak veri yüklenebilir, böylece program hafızasında daha uzun adres bölgelerini kullanmak mümkün olabilir. Bu derste yazılacak programların uzunlukları normalde 256 satırı (komutu) geçmeyeceği için sadece 8 bitlik kısım olan (PCL) ile ilgilenmek yeterli olacaktır (2 8 = 256). 9.1.2. RETLW Komutu: Aslında RETLW komutu, RETURN komutu gibi bir alt programdan dönüş komutudur. Farklı olarak RETLW ana programa dönerken Akümülatör (W) içinde bir sayı getirir. Şimdi örnek bir program üzerinde bu komutun çalışmasını incelerken Dönüşüm tablosunu da anlamaya çalışalım. Örnek : PORTB' de bulunan bir 7 segment göstergede (3) sayısını gösteren bir program parçasını DONUSUM alt programı ile RETLW komutu kullanarak yazın. ;(Program Parçası) MOVLW h 03 CALL DONUSUM ; DONUSUM Alt programına git MOVWF PORTB ;(DONUSUM Alt Programı) DONUSUM ADDWF PCL, F ; PCL + W işlemini yap,neticeyi PCL ye yaz.(w=03 idi) RETLW h 3F ; W= 0 olsaydı bu satıra atlayacaktı. RETLW h 06 ; W= 1 olsaydı bu satıra atlayacaktı RETLW h 5B ; W= 2 olsaydı bu satıra atlayacaktı RETLW h 4F ; W= 3 olduğu için bu satıra atlayacak RETLW h 66 ; W= 4 olsaydı bu satıra atlayacaktı.. Program çalışmasını adım adım takip edersek ; 19

Önce MOVLW h 03 ile W ye h 03 yüklendi. CALL DONUSUM ile program DONUSUM alt programına atladı. ADDWF PCL, F komutu ile PCL' ye (03) sayısı eklenerek PCL (03) kadar arttırılmış oldu ve artık program 3 satır atlayarak RETLW h 4F komutunun bulunduğu satıra gelerek W'ye (4F) yükler ve geriye CALL komutunun bir alt satırına döner. Bundan sonra da program parçasında, W deki bu sayı (4F) PORTB' ye yüklenmektedir. Dolayısıyla (3) sayısının göstergede yakılması için b 01001111 = 4F sayısının PORTB ye yüklenmesi yeterli olmaktadır. Örnek : PORTB' nin uçlarına bağlı 7 segment (parça) göstergede 0,1,2,3... E,F şeklinde sürekli olarak ileri saydıran ve sayılar arasında GECIKME alt programına giden bir program parçası yazınız (Not: GECIKME alt programı yazılmayacaktır). ;(Program Parçası) TEKRAR MOVLW h 00 MOVWF SAYAC ; SAYAC sıfırlandı GIT MOVF SAYAC, W CALL DONUSUM ; DONUSUM alt programına atla. MOVWF PORTB ; Alt programdan gelen W değerini PORTB ye yaz CALL GECIKME ;GECIKME alt programına(gösterilmemiştir) git,bekle,gel INCF SAYAC, F ; SAYAC ı bir arttır MOVLW h 10 ; Son olarak SAYAC=15 dir,incf ile (16) 10 =(10) 16 oldu SUBWF SAYAC,W ; SAYAC dan Aküyü çıkart, İkisi eşitse netice (00) 16 olur BTFSS STATUS,2 ; Z=1 mi? GOTO GIT ; Değilse saymaya devam et. GOTO TEKRAR ; Evetse Saymaya yeniden 0 dan başla ;(DONUSUM Alt Programı) DONUSUM ADDWF PCL, F ; PCL + W işlemini yap,neticeyi PCL ye yaz RETLW h 3F ; 0 yazdırmak için dönüşüm kodu RETLW h 06 ; 1 yazdırmak için dönüşüm kodu RETLW h 5B ; 2 yazdırmak için dönüşüm kodu RETLW h 4F ; 3 yazdırmak için dönüşüm kodu RETLW h 66 ; 4 yazdırmak için dönüşüm kodu RETLW h 6D ; 5 yazdırmak için dönüşüm kodu RETLW h 7D ; 6 yazdırmak için dönüşüm kodu RETLW h 07 ; 7 yazdırmak için dönüşüm kodu RETLW h 7F ; 8 yazdırmak için dönüşüm kodu RETLW h 6F ; 9 yazdırmak için dönüşüm kodu RETLW h 77 ; A yazdırmak için dönüşüm kodu RETLW h 7C ; b yazdırmak için dönüşüm kodu RETLW h 39 ; C yazdırmak için dönüşüm kodu RETLW h 5E ; d yazdırmak için dönüşüm kodu RETLW h 79 ; E yazdırmak için dönüşüm kodu RETLW h 71 ; F yazdırmak için dönüşüm kodu END Faydalanılan Kaynaklar : 1- Mikroişlemciler Ders Notları 1-2 (6502), Doç. Dr. Hakan ÜNDİL 20

2- Mikrodenetleyiciler ve PIC Programlama, Orhan ALTINBAŞ 3- PIC Mikrodenetleyiciler, Fevzi AKAR Mustafa YAĞIMLI 4- Adım Adım PIC Programlama, Yaşar BODUR 5- PIC Microcontroller Uygulama Devreleri, Gökhan DİNÇER 6- Microchip PIC16F8X ve PIC16F877 PIC Data Sheet, 7- www.microchip.com web adresi. 21