Mikroişlemciler ve Mikrodenetleyiciler: PIC Programlama

Slides:



Advertisements
Benzer bir sunumlar
PIC Mikrodenetleyiciler
Advertisements

PROGRAMLAMA VE ASSEMBLY DİLİ
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
Hat Dengeleme.
SAYISAL DEVRELER BÖLÜM-2 Sayı Sistemleri ve Kodlar
Dosya Yönetimi Dosya, Klasör ve Sürücüler HÜSEYİN ALİOSMANOĞLU.
Arduino nedir ? Atmega 328P Microcontroller USB ile bilgisayara bağlanır. Basit bir kullanımı olup kullanıcı dostudur. C++ tabanlı Arduino yazılımı ile.
LUCA Bilgisayarlı muhasebe programı
TC Windows Editörü DevC++. KURULUM PROGRAMIN KURULACAĞI YER BURADA BELİRLENİYOR.
BSE 207 Mantık Devreleri Sayı sistemleri Sakarya Üniversitesi.
9. HAFTA 25 Nisan2016. Fonksiyon M-Dosyaları Fonksiyon dosyaları ilk satırda “function” kelimesi bulunan “.m” uzantısı bulunan dosyalardır. MATLAB içinde.
Bağlama ve Kapsam Kavramları
HAZIRLAYANLAR ZELİHA OKÇU ÖZGÜL ERGÜL  Bir hesap tablosu programıdır. Excel, her türlü veriyi (özellikle sayısal verileri) tablolar ya da listeler halinde.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bölüm 2 C Dilinin Temelleri
GAZİ ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
APP INVENTOR Emre ANLAR.
BİLGİSAYAR PROGRAMLAMA DERSİ
Excel 2007.
C Programlama Dili Çağdaş Hakan Aladağ.
Algoritma ve Programlamaya Giriş
KDV BEYANNAMESİ / MUHTASAR BEYANNAME / KURUMLAR VERGİSİ BEYANNAMESİ / GEÇİCİ VERGİ BEYANNAMESİ’NDE ORTAK ÖZELLİKLER F5 PENCERESİ Beyannamelerde yer alacak.
PROGRAMLI ÖĞRETİM Tanımı:
Altera ile proje hazırlama
EETE233 Mikrodenetleyiciler ArduIno ile Programlama
PROGRAMLAMAYA GİRİŞ VE ALGORİTMA
Sayı Sistemleri.
Bilgisayar Donanım ve Sistem Yazılımı
DERS 6 PIC 16F84 PROGRAMLAMA.
Mikroişlemciler Temel I/O Arayüzleri.
ELT205 MİKRODENETLEYİCİLER DERSİ
APARTMANLAR OYUNU NEDİR?
PROGRAMLAMA TEMELLERİ
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H05
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı
TANIMLAYICI İSTATİSTİKLER
Mikroişlemciler Temel I/O Arayüzleri.
DOSYA BÜYÜKLÜKLERİ İkili Sistem Dosya Büyüklükleri ve Hesaplamalar
Klavye Kullanımı.
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
Bilgisayar Donanım ve Sistem Yazılımı
Dosya, Klasör ve Sürücüler
BLP 4210 PLATFORM BAĞIMSIZ PROGRAMLAMA
Bilgisayar Mühendisliğine Giriş
3.hafta METODLAR.
1. Konfigürasyon oluşturma
PARAMETRİK HİPOTEZ TESTLERİ
Bölüm 7 İfadeler ve atamalar.
BİLGİSAYAR programlama II
NİŞANTAŞI ÜNİVERSİTESİ
MİKROİŞLEMCİLER VE MİKROBİLGİSAYARLAR
NİŞANTAŞI ÜNİVERSİTESİ
DERS 13 PIC 16F84 ile DONANIM SAYICI KULLANIMI
PROGRAMLAMAYA GİRİŞ VE ALGORİTMA
Bilgisayarım Simgesinin Kullanımı Dosyaların Yönetimi
Bilgisayar Bilimi Koşullu Durumlar.
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Fonksiyonlar ve Alt Programlar
6. DÖNGÜ (TEKRARLAMA) DEYİMLERİ
Bilgisayar Bilimi Fonksiyon Yazma.
Değerler ve Değişkenler
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
MTM216 GÖRSEL PROGRAMLAMA
Bilgehan Arslan, Süreyya Gülnar
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
Sunum transkripti:

Mikroişlemciler ve Mikrodenetleyiciler: PIC Programlama B Yrd. Doç.Dr. Bülent ÇOBANOĞLU Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

PIC Mikro denetleyici Programlama Assembly programlama dili, çoğu zaman özel alanlarda geliştirilen yazılımlarda kullanılan alt seviyeli bir yazılım dili olarak tanımlanır. Bu dilin komutları, bilgisayarın doğrudan işlettiği makine dili komutlarının birebir karşılığıdır. Bu nedenle bu dil için makine dili de denilebilir. Her ne kadar uzman programcıların özel alanlarda kullandığı bir dil olarak tanımlansa da, programcılar istedikleri takdirde her türlü uygulamayı bu dil ile geliştirebilirler ya da kullandıkları üst düzey dilaltından çağırabilecekleri procedurler/altprogramlar yazabilirler. Assembly diliyle yazılmış bir program( .asm) assembler derleyicisi (MPASM) ile makine diline (.hex) çevrilir. PIC’lerin belki de yaygın olarak kullanılmasının sebeplerinden biride Assembly haricinde C, Basic, Pascal ve Fortran dilleri ile de programlanabilmesidir. En yaygın kullanılan C derleyicileri arasında ; Hitech PIC C/XC8, CCS C, MicroC, FED C, C30 C derleyicileri sayılabilir. C Dili ile MCU programlama aşamaları Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

MPLAB Programı içinde tanımlanan Derleyiciler ve Farkları http://www.microchip.com/developmenttools/getting_started/gs_mplab3.aspx Örnek bir programda derleyici bellek kullanım oranları Genellikle Assembly kod satırları C den daha fazladır. Fakat daha az bellek kullanımı sağlar. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

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

.C den .hex uzantıya dönüşüm Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

.C den .hex uzantıya dönüşüm Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

PIC mikro denetleyicileri assembly dili ile programlayabileceğimiz gibi C, BASIC, PASCAL gibi yüksek seviyeli bir programlama dili ile de programlamayabilirsiniz. Assembly dilinin kendine özgü komutları ve bu komutların yazılış şekilleri vardır. Ortalama bir PIC mikro denetleyicisi (PIC16F84, PIC16F877 gibi) komut setinde 35 adet komut bulunmaktadır. Azaltılmış komut seti (RISC) kullanılması, komutlarının öğrenilmesinin ve program yazılmasının kolay olması yanında programın kısa sürede yazılabilmesini sağlar. Bu 35 komutun ne işe yaradığını ve PIC-Assembly yazım kurallarını bilerek PIC'ler için her çeşit programı yazabilirsiniz. Komutların büyük bir kısmı 1 saat çevrimi (tetikleme sinyali - clock/4) sırasında gerçekleştirilirken, test ve dallanma komutları 2 saat çevrimi/saykılı sırasında gerçekleştirilir. Komutların kullanımı sırasında, komutların içerisine farklı anlamlara sahip semboller / harfler yerleştirilir. Şekil 1'de, PIC MCU’da kullanılan komutların içerisinde bulunan sembollerin / harflerin anlamları tablo şeklinde sunulmaktadır. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Kodları yazmak için herhangi bir programa ihtiyacımız yoktur Kodları yazmak için herhangi bir programa ihtiyacımız yoktur. Kod yazma işlemini her türlü metin editöründe yapabiliriz. Örneğin Windows içindeki not defteri (notpad) programı bunun için uygundur. Fakat MPLAB (http://www.microchip.com adresinden indirilebilir) programı içindeki editörün kullanılması görsel açıdan kolaylık sağlayacaktır. Çünkü MPLAB içindeki assembly editörü komutları özelliklerine göre farklı renklerde, sabitleri farklı renklerde, açıklamaları farklı renklerde vs. yazmakta ve program içerisindeki MPASM isimli assembler derleyicisi ile yazılan programın anında simülasyonu yapılabilmekte ve test edilebilmektedir. Aşağıda aynı programın (BTP202.ASM) hem not defteri hem de MPLAB ile yazılmış halini görüyorsunuz: Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

GENEL ASSEMBLY KOMUT FORMATI PIC Assembly komut yapısında yer alan simgeler; Komut/İşlem kodu (OpCode); Örnek: ADDWF  f,d Kaydedici/Değişken (f); Örnek: ADDWF  f,d Hedef (d); Örnek: ADDWF  f,d İşlenen (Operand); Sabit/Literal yada etiket,Örnek: ADDLW k, GOTO Don ve bit (b) Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

ASSEMBLY KOD YAZIM BİÇİMİ Assembly dili yazım formatı/biçimi 4 alandan oluşmaktadır, bunlar; Etiket(Label), Komut kodu (OpCode), İşlenen (Operand) ve Açıklama (Comment) alanlarıdır. Etiket ve açıklama alanları seçimliktir yani isteğe bağlıdır. Etiket Alanı Komut Kodu (OpCode) İşlenen (Operand) Açıklama DON: MOVLW h’0F’ ; W kaydedicisine heksadesimal 0F sayısını aktarılmıştır Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

ASSEMBLY KOD YAZIM BİÇİMİ Assembly dili yazım formatı/biçimi 4 alandan oluşmaktadır, bunlar; Etiket(Label), Komut kodu (OpCode), İşlenen (Operand) ve Açıklama (Comment) alanlarıdır. Etiket ve açıklama alanları seçimliktir yani isteğe bağlıdır. Etiket Alanı Komut Kodu (OpCode) ve Direktifler İşlenen (Operand) Açıklama Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

ASSEMBLER TALİMATLARI PIC mikro denetleyici (PIC16F84, PIC16F877 gibi) komut setinde 35 adet komut bulunduğunu söylemiştik. Program yazarken bu komutlar haricinde bazı Assembler derleyici talimatlarını da kullanmamız gerekir. Bunlar; Assembler Komutu Açıklama LIST PIC Mikro denetleyici seçme komutudur. Program, hangi PIC için yazıldı ise programın başında LIST P=16F877 komutuyla mutlaka belirtilmelidir #INCLUDE Normalde program yazmaya başlamadan önce program içinde tüm kaydedicileri tek tek tanıtmamız gerekir. Bunu her seferinde yapmak yerine tüm bu tanımlamaların yapıldığı ve .inc uzantısı ile kaydedilmiş dosyaları programımız içinden çağırabiliriz. Böylece her program için bu zahmetten kurtulmuş oluruz. Bu dosyalarda ayrıca kaydedicilerin bitlerinin isimleri gibi bilgiler de yer almaktadır. Dolayısıyla dosyayı programımıza ekledikten sonra bitleri numaraları ile değil, isimleri ile belirtebiliriz. Kullanım şekli: INCLUDE "P16F877.INC” ORG Hangi programın MCU belleğinde hangi adreste tutulacağını tanımlar. Origin kelimesinden türetilen ORG komutu iki amaç için kullanılır; 1.Program komutlarının hangi adresten itibaren başlayacağını belirtmek için kullanılır. Reset vektörünün 0000h adresinde olduğunu daha önce söylemiştik. { ORG 0x00; burada program başlangıcını belirledik } 2. Eğer donanım kesmesi (interrupt) kullanılacaksa, ORG komutu ile donanım kesmesi ile çalıştırılacak program parçacığının adresi de belirtilmelidir. Kesme vektörü de 0004h adresinde yer alıyordu. { ORG 0x04; burada ise kesme programcığı başlangıcını belirledik}. EQU Atama komutudur. Bu komut İngilizce EQUAL kelimesinden türetilmiştir. Assembler sabitlerini veya RAM adreslerini tanımlar. Kullanım şekli: SAYAC EQU 48h; SAYAC isimli GPR kaydedicisi 48 nolu adrese atar. CBLOCK-ENDC Kullanıcının tanımladığı kaydedicilere adres atarken, eğer kaydedici sayısı fazla ise tek tek EQU komutu kullamak yerine CBLOCK-ENDC komutları kullanılabilir. Aşağıdaki komut satırı ile sırası ile 05,05 ve 07. adreslere SAYAC1, SAYAC2 ve SAYAC3 değişkenleri atanmıştır. CBLOCK H’05’ SAYAC1, SAYAC2, SAYAC3 ENDC END Programın sonu. Programın nerede bittiği END komutu ile mutlaka belirtilmelidir. Derleyici END komutunu bulamadığı zaman programı derleyemez ve hata verir. $ Program sayıcının o anki yerini döndürür. 5 komut aşağı gitmek için $ +5, yukarı gitmek için $ -5 şeklinde de kullanılabilir. Kullanım şekli: GOTO $ dt RETLW komutu yerine kullanılır. RETLW komutu ile alt alta yazılan veriler, dt komutu ile yan yana yazılır. BANKSEL, BANKISEL Bank değiştirme komutu. Örneğin BANK1’ e geçmek için BSF STATUS,5 komutu yerine Bank1 deki herhangi bir kaydedicinin ismi yazılarak BANKSEL TRISB bank1 e geçilir. BANKISEL ise BANK2 ve BANK3 ü kullanmak için IRP bitini 1 yapar Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

ASSEMBLER TALİMATLARI Assembler Komutu Açıklama #DEFINE Sembolik sabitlerin tanımlanmasını sağlar. C dilinde de geçerlidir. Örnek: #define LED PORTB,0 #define _XTAL_FREQ 10000000 , #define position(X,Y,Z) (Y-(2 * Z +X)) #UNDEFINE #DEFINE ile bildirilen sembolik sabitlerin değerini program içerisinde değiştirmek için kullanılır. Örnek: #undefine LED #define LED PORTD,7 fill Fill komutu, program belleğinin kullanılmayan bellek alanlarını belli bir sabit veya Assembly komutu ile doldurur. Örneğin; fill (NOP), 10 gibi constant, variable Sabit tanımlamak için kullanılır. Değişkenlere başlangııç değeri vermede kullanılır. Program içerisinde değeri tekrar değişecekse variable tercih edilir. SET EQU komutunun işlevine sahiptir. code [Etiket] code [ROM bellek adresi] ORG komutuna benzer. Bellek adresini etiketler __config __config _HS_OSC & _WDT_OFF & _LVP_OFF Konfigürasyon bitlerini ayarlar da/db/de/dw/ data Prgoram belleğinde string veya karakter saklarlar. db, de, dt, dw, data benzer işlevlere sahiptir. Örnek; da "abcdef" Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

ASSEMBLER TALİMATLARI Assembler Komutu Açıklama If, else if, else, endif if sayi < 50 incf speed, F else decf speed, F endif while, endw Koşul doğru olduğu sürece döngü çalışır. #Ifdef, #ifndef Ifdef, bir sembolik ismin bildirildiğini sorgulamaktayken, ifndef bir sembolik ismin bildirilmediğini sorgulamaktadır. Örnek Kullanım; define UsePORTB #ifndef UsePORTB MyPort equ PORTC ;Eğer UsePORTB tanımlı değilse Port C yi kullan MyTris equ TRISC #else MyPort equ PORTB ; Eğer UsePORTB tanımlı ise Port B yi kullan MyTris equ TRISB #endif macro Assembly diline özgü fonksiyon tanımlamak (makro yazmak) için kullanılır. Kullanım şekli; Etiket macro [arg1, arg2 ..., argn] :: endm Koşullu karar yapısıdır. If bloğu endif ile sonlandırılır Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

ASSEMBLER TALİMATLARI: macro örneği add macro num1,num2 if num1>0xff ;Eğer num1>255 ise exitm ;makrodan çık else if num2>0xff ;Eğer num2>255 ise movlw num1 ; W=num1 movwf Sonuc ;Sonuc=W movlw num2 ; W=num2 addwf Sonuc,F ;Sonuc=Sonuc+W endif endm ;'add' isimli MACRO yu sonlandır Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

SAYILARIN GÖSTERİMİ Yazım formatında bir önemli konu da sayıların gösterim şeklidir. Assembly içinde aksi belirtilmedikçe her sayı onaltılık tabanda kabul edilir. Aşağıdaki tabloda hangi tabandaki sayının nasıl gösterildiği yer almaktadır Kullanım Sayı Tabanı 23 Onaltılık (hexadecimal) sayı sistemi 0x23 23h h'23' d'12' Onluk(Decimal) sayı sistemi .12 b'1011' İkili(Binary) sayı sistemi ‘G’ veya A ‘G’ ASCII O‘574’ Octal(Sekizli) sayı sistemi Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Byte yönlendirmeli komutlar Bit yönlendirmeli komutlar PIC16F84 / PIC16F877 KOMUT SETİ Ortalama bir PIC mikro denetleyicisi (PIC16F84/PIC16F877 gibi) komut setinde 35 adet komut bulunmaktadır. PIC komutlarını 3 ayrı başlık altında inceleyebiliriz; Byte yönlendirmeli komutlar Bit yönlendirmeli komutlar Sabit (direkt veri) işleyen komutlar ve kontrol komutları Komutların yazılış biçimlerini açıklarken bazı tanımlama harfleri kullanacağız, bunların anlamı; Sembol Açıklama b 8 bitlik kaydedicinin ilgili bitini gösteren tanımlayıcı d Hedef seçici; d = 0 veya W ise Sonuç W kaydedicisinde tutulur   d = 1 veya F ise Sonuç f kaydedicisinde tutulur Varsayılan değer d = 1 dir. f Kaydedici (file register) {örneğin PORTB, STATUS gibi} k Sabit bir sayı veya etiket W W kaydedicisi (akümülatör) PC Program Sayıcı (Program Counter) Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Assembly Komutları Hazırlayan: Y.Doç.Dr.Bülent ÇOBANOĞLU

Byte yönlendirmeli komutlar: Sembol Tanımlamaları : f - Register File Adress: kayıtçı adı veya adresi (0x00 ile 0x7F) w - Akümülatör, çalışma kayıtçısı b - Bit tanımlayıcısı; 8 bitlik kayıtçının 0~7 arasındaki bir biti veya etiket. (EQU komutu ile adresi tanımlanmış olması gerekir) d - Destination : Gönderilecek yer; komutun çalıştırılmasından sonra sonucun nereye yazılacağını belirler. d = 0 - W kayıtçısına, d = 1 - dosya kayıtçısına k - Sabit bir sayı (0x0C veya 0CH, 00001100B, 10D) veya adres etiketi x - “0” yada “1” önemli değil TO - Zaman aşımı biti (Time-out bit) PD - Güç kesimi biti (Power-down)

BİT İŞLEM KOMUTLARI – Sabit (Direkt Veri) İşleyen Komutlar Ve Kontrol Komutları: Sembol Tanımlamaları : f - Register File Adress: kayıtçı adı veya adresi (0x00 ile 0x7F) w - Akümülatör, çalışma kayıtçısı b - Bit tanımlayıcısı; 8 bitlik kayıtçının 0~7 arasındaki bir biti veya etiket. (EQU komutu ile adresi tanımlanmış olması gerekir) d - Destination : Gönderilecek yer; komutun çalıştırılmasından sonra sonucun nereye yazılacağını belirler. d = 0 - W kayıtçısına, d = 1 - dosya kayıtçısına k - Sabit bir sayı (0x0C veya 0CH, 00001100B, 10D) veya adres etiketi x - “0” yada “1” önemli değil TO - Zaman aşımı biti (Time-out bit) PD - Güç kesimi biti (Power-down)

Mantıksal Komutlar RLF, sayıyı 2 ile çarpmada RRF, sayıyı 2 ye bölmede Kullanılabilir. Elde bitinin işleme katıldığını unutmayalım. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Aritmetiksel-Mantıksal İşlem Örnekleri (3/3) S7. k=i+j+20 işlemini Assembly dili ile gerçekleştiriniz. C Dili Assembly Karşılığı Açıklama Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Çalışma Sorusu: Dereceyi- Fahrenayta çeviren programı yazınız. Formül: 1’e Tümleyen – 2’ye Tümleyen Aritmetiği (1s Complement & 2s Complement) Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Assembly Komutlarını C Dili İçerisinde Çalıştırma XC8 derleyici için MicroC için asm { //birden fazla Assembly komutu } asm tek bir asm komutu Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Aritmetiksel-Mantıksal İşlem Örnekleri (1/3) S1: W kaydedicisi  içerisindeki h’0A’ sayısı  ile h’13’ sayısını  toplayıp, sonucu B portunda  gösteren program parçasını yazınız?  Çözüm:  MOVLW h’0A’  ADDLW h’13’  MOVWF PORTB  S2. W  kaydedicisinin  ilk  4  bitini  (LSB  tarafını)  sıfırlayan  fakat  son  4  bitini  (MSB  tarafın ı) olduğu gibi bırakan komut satırını yazınız.  Çözüm: MOVLW h’37’ ANDLW h’F0’ S3: W=W*3 işlemini PIC Assembly komutları ile gerçekleştiriniz?  MOVLW d’03’  ; W kaydedicisine bir değer aktardık. W=03  MOVWF PORTB  ; W içeriği PORTB’ ye aktarıldı. PORTB=03  BCF STATUS,C ; Öncesinde elde bayrağı(C biti) sıfırlandı RLF PORTB,F ;PORTB içeriği C ile birlikte bir bit sola kaydırıldı. PORTB=03*2  ADDWF PORTB,W ;PORTB ile W kaydedicisinin içeriğini topla sonucu W kaydedicisine aktar. W= 03*2 + 03  Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Aritmetiksel-Mantıksal İşlem Örnekleri (2/3) S4: PORTB ye bağlı ledleri sürekli yakıp- söndüren program parçasını yazınız. Çözüm: S5. Sürekli bir şekilde PORTB deki verileri PORTC ye gönderen programı yazınız. Çözüm: S6. Farzedelim ki odanın içerisindeki lambayı RB5 ile odanın dışındaki lambayı ise RB2 ile kontrol ediyoruz. Odanın dışındaki lamba açıkken odanın içerisindeki lambayı söndüren programı yazınız. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Assembly Kod Şablonu #INCLUDE "P16F877.INC" ORG 0X00 GOTO BASLA LIST P=16F877 #INCLUDE "P16F877.INC" ORG 0X00 GOTO BASLA BASLA BANKSEL TRISB CLRF TRISB BANKSEL PORTB MOVLW 0X0A ADDLW 0X13 MOVWF PORTB GOTO $ END Tanımlamalar, Başlık/Kütüphane dosya tanımlamaları Ana program Program Sonu Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

MPLAB Kod ve Simülasyon Ortamı 1/4 Önce Proje dosyası oluşturulur. Bunun için Project Project Wizard seçilir Gelen «Welcome» penceresi «Next-İleri» butonuna basılarak geçilir. Bir sonraki pencereden «Select Device» kullanacağımız PIC seçilir. Kullanacağımız C veya Assembly derleyicisini seçiyoruz. Assembly için MPASM seçilir. Bir sonraki pencereden Proje klasörü seçilir ve projeye isim verilir. İsim vermede değişken ismi tanımlama kurallarına dikkat edilir. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

MPLAB Kod ve Simülasyon Ortamı 2/4 Proje klasörünün oluştuğu solda gelen .mcp uzantılı dosya ile Görülür. «.asm» uzantılı kaynak dosyasını yazmak için File New File Seçilir. Artık programımızı yazıp File  Save As menüsünden ‘.asm’ uzantılı olarak kaydediyoruz. Bu ‘.asm’ uzantılı dosyayı Projemize eklemek için Source File üzerinde iken mouse ile Sağ Click  Add Files seçilir. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

MPLAB Kod ve Simülasyon Ortamı 3/4 S4 de sorulan PORTB ye bağlı ledleri sürekli yakıp- söndüren programın tamamını yazıp MPLAB SIM ile simülasyonunu yapalım. MPLAB SIM, Debugger menüsünden seçilir. ‘Step into’ simgesi ile adım adım çalıştırılır. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

MPLAB Kod ve Simülasyon Ortamı 3/4 S4 de sorulan PORTB ye bağlı ledleri sürekli yakıp- söndüren programın tamamını yazıp MPLAB SIM ile simülasyonunu yapalım. Değişken ve kaydedici içeriklerini görmek İçin ya MPLAB da View’den Watch seçilerek yada Proteus ile simülasyon yapılır. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Örnek 2: PORD nin 0. bitine bağlı ledi yakan/söndüren program LED ve Buton Uygulamaları Assembly Örnek 2: PORD nin 0. bitine bağlı ledi yakan/söndüren program MicroC XC8 Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

__delay_ms(100); //çift alt tire asm ("SWAPF _PORTB,F"); Örnek 3: PORTB ‘ye bağlı 8 ledi dörtlü olarak (ilk önce MSB tarafı daha sonra LSB tarafı olacak şekilde) yakıp, söndüren bir flaşör devresi ve programı: C kodu #include <xc.h> #define _XTAL_FREQ 4000000 void main(void)  {  TRISB = 0;  PORTB = 0b11110000;     while(1) { __delay_ms(100); //çift alt tire asm ("SWAPF _PORTB,F"); __delay_ms(100); } }    Assembly kodu Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Örnek4: Tek bir buton ile led yakıp söndüren program parçası ;Assembly Kodu BASLA BTFSC PORTA,0 ;Butona basıldı mı GOTO BASLA BSF PORTB,0 ; LED i yak. BUTON_OFF BTFSS PORTA,0 ;Butonu serbest bırak GOTO BUTON_OFF BCF PORTB,0 ; LED i söndür END //C Kodu while(1){ if (RA0==0) RB0=0x01; else RB0=0; } Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

LED ve Buton Uygulamaları Örnek 4: PORD nin 0. bitine bağlı buton basılı olduğu sürece RB0’a bağlı Ledi yakan programın Assembly kodu C kodu; Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Örnek 5: PORTA ‘nın 0.bitine (RA0) bağlı butona basınca PORTC ilk iki bitini yakan, 1. bitine (RA1) bağlı butona basılınca ise bu iki ledi söndüren programı yazınız. LIST P=16F877A INCLUDE <P16F877A.INC> ORG 0X00 GOTO BASLA BASLA BANKSEL TRISC ;BANK1'E GEC MOVLW 0X07 MOVWF TRISA ;PORTA GIRIS MOVWF ADCON1 ;PORTA VE PORTE DIGITAL CLRF TRISC ;PORTC CIKIS BANKSEL PORTC ;BANK0'A GEÇ CLRF PORTC BUTON1 BTFSC PORTA,0 ;RA0==0 mı? GOTO BUTON1 BUTON2 BTFSC PORTA,1 ;RA1==0 mi? GOTO LEDYAK GOTO BUTON1 LEDYAK MOVLW 0XFF MOVWF PORTC GOTO BUTON2 END Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Örnek 6. Yürüyen Işık (Kara Şimşek)Uygulaması Assembly Kodu C Kodu #include<xc.h> void main() { PORTB=0; TRISB=0; PORTB=1; STATUS=0; #asm SOL NOP RLF PORTB,F BTFSS PORTB,7 GOTO SOL SAG RRF PORTB,F BTFSS PORTB,0 GOTO SAG #endasm } Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Çalışma Soruları RA0’a bağlı butona basınca PORTBye bağlı ledlerin ilk dördü, RA1’e bağlı butona basınca son dördünü yakan programı yazınız. PORTB ye bağlı ledler üzerinde binary (ikili) saydırma işlemi yapan PORTA nın RA0 ucuna bağlı butona basıldığında azaltacak, RA1 ucuna bağlı butona basıldığında artıracak programı yazınız. PORTB ye bağlı ledler üzerinde PORTA nın RA0 ucuna bağlı butona basıldığında tek sayıları, RA1 ucuna bağlı butona basıldığında çift sayıları saydıracak programı yazınız. Örnek 6’da verilen yürüyen ışık uygulamasını tamamen C komutları ile (1 sn lik gecikme) yazınız. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU