Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

PIC Mikrodenetleyiciler Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU1 PIC MCU= CPU + I/O pinleri+ Bellek(RAM/ROM)

Benzer bir sunumlar


... konulu sunumlar: "PIC Mikrodenetleyiciler Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU1 PIC MCU= CPU + I/O pinleri+ Bellek(RAM/ROM)"— Sunum transkripti:

1 PIC Mikrodenetleyiciler Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU1 PIC MCU= CPU + I/O pinleri+ Bellek(RAM/ROM)

2 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 isletti ğ 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 ile makine diline (.hex) çevrilir.bilgisayar Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU2

3 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. Kelime boyu 12 bit olan PIC' lerin farklı, 14 olanların farklı, 16 olanların farklı komut kümeleri 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:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU3

4 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 bir sonraki hafta anlatılacak olan 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 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:http://www.microchip.com Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU4

5 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:MOVLWh’0F’; W kaydedicisine heksadesimal 0F sayısını aktarılmıştır Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU5

6 ASSEMBLER TAL İ MATLARI Daha önce ortalama bir 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 KomutuAçı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. Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU6

7 Konfigürasyon bitleri ve işlevleri  Power-up timer (PWRTE)  Osilatör start-up timer  BOR (Brown Out Reset)  Yonga içindeki bir RC osilatör devresi ile belirli bir frekansta çalışması denetlenen WDT (Watch Dog Timer)  Kesmeler  Kod koruma güvenli ğ i  Id yerleşimleri  Güç harcamasının azaltılması istendi ğ i durumlar için uyku (sleep) modu  İ ste ğ e ba ğ lı osilatör seçenekleri: RC/ XT/ HS/ LS  Devre içi seri programlama (iki pin ile seri olarak programlanabilme)  Devre içi düşük gerilimle programlama  Devre içi hata arayıcı (Debugger) Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU7 __CONFIG _XT_OSC & _PWRTE_ON & _BODEN_OFF & _CP_OFF & _WDT_OFF & _LVP_OFF & _CPD_OFF __CONFIG h’3F31’ ;__CONFIG b’ ’ Not: Program belleğinin 2007h adresinde olup 14 bittir. Bu bitlere sadece PIC programlama aşamasında erişilebilmektedir.

8 Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU8

9 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ımSayı Tabanı 23Onaltılık (hexadecimal) sayı sistemi 0x23Onaltılık (hexadecimal) sayı sistemi 23hOnaltılık (hexadecimal) sayı sistemi h'23'Onaltılık (hexadecimal) sayı sistemi d'12'Onluk(Decimal) sayı sistemi.12 Onluk(Decimal) sayı sistemi b'1011'İkili(Binary) sayı sistemi ‘G’ veya A ‘G’ASCII O‘574’Octal(Sekizli) sayı sistemi Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU9

10 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ı; SembolAçıklama b8 bitlik kaydedicinin ilgili bitini gösteren tanımlayıcı dHedef 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. fKaydedici (file register) {örneğin PORTB, STATUS gibi} kSabit bir sayı veya etiket WW kaydedicisi (akümülatör) PCProgram Sayıcı (Program Counter) PIC16F84 / PIC16F877 KOMUT SET İ Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU10

11 .Sabit (direkt veri) işleyen komutlar ve kontrol komutları: Bit yönlendirmeli komutlar: Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU11

12 .Byte yönlendirmeli komutlar: Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU12

13 PIC16F84 / PIC16F877 KOMUT SET İ Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU13

14 Aritmetiksel-Mantıksal İ şlemler Soru: 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 S4. 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’ Soru: W=W*3 işlemini PIC Assembly komutları ile gerçekleştiriniz? Çözüm: 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ırkandı 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* Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU14

15 Örnek 1: PORB nin 7. bitine bağlı ledi yakıp söndüren program ;==LED.ASM === LIST P=16F84 #INCLUDE BSF STATUS,5 CLRF TRISB ; PORTB nin tüm uçları çıkış yapıldı BCF STATUS,5 CLRF PORTB; PORTB’ ye b’ ’ de ğ eri yüklendi DON: BSF PORTB,7 ; PORTB nin 7.bitini yak BCF PORTB,7 ; PORTB nin 7. bitini söndür GOTO DON END // C dilinde gerçekleştirimi #include main(void) { TRISB = 0; // PORTB bitleri cikis yap for(;;) //sonsuz dongu { RB7 = 0; // LED OFF DelayMs(250); //250ms bekle RB7 = 1; //LED ON DelayMs(250); //250ms bekle } } Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU15

16 Örnek2: Tek bir buton ile led yakıp söndüren program parçası 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 GOTO BASLA END Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU16

17 Örnek 2: PORTB ‘ye bağlı 8 ledi dörtlü olarak (ilk önce LSB tarafı daha sonra MSB tarafı olacak şekilde) yakıp, söndüren söndüren bir flashör devresi ve programı: Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU17

18 ÖRNEK 3. YURUYEN IŞIK UYGULAMASI Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU18

19 Örnek 4: 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: LIST P=16F84 #INCLUDE sayac1 equ h'09' sayac2 equ h'08' CLRF PORTA ;PORTA temizlenir CLRF PORTB;PORTB temizlenir BSF STATUS, 5 ;BANK1’e geçilir MOVLW h'0F' MOVWFTRISA ;PORTA nın tüm uçları giriş CLRF TRISB ;PORTB nin tüm uçları çıkış olacaktır BCF STATUS, 5 ;BANK0’a geçilir don: BTFSSPORTA, 0 ;PORTA 0. bitini test et INCF PORTB, 1 ;Artır butonu basılı ise PORTB’yi bir artır CALLBekle;Bekle isimli gecikme programını ça ğ ır BTFSS PORTA, 1 ;PORTA 1. bitini test et DECF PORTB, 1 ;Azalt butonu basılı ise PORTB’yi bir azalt GOTO don ;Başa dön Bekle;Gecikme alt programı Loop1:decfszsayac1,1 goto Loop1 decfszsayac2,1 goto Loop1 return END Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU19

20 Örnek 5: PORTA ‘nın 0.bitine ba ğ lı butona basınca (PORTB nin 0 bitine ba ğ lı) ledi yakan/söndüren program LIST P=16F84 ; kullandı ğ ımız pic'i tanıttık. #INCLUDE ; mplab da bulunan 16f84 dosyalarını çagırdık BSF STATUS,5 ; bank 1'e gec MOVLW 0XFF ; w<--< 0xff yükledik MOVWF TRISA ; portanın hepsi giriş CLRF TRISB ; portbnin hepsi çıkış BCF STATUS,5 ; bank 0'a geç CLRF PORTB ; portb yi sıfırla BUTONBTFSC PORTA,0 ; portanın 0'ıncı pini 0' mı? GOTO BUTON ; hayırsa tekrar kontrol et BUTON1BTFSS PORTA,0 ; portanın 0'ıncı pini 1' mi? GOTO BUTON1 ; hayırsa tekrar kontrol et BTFSC PORTB,0 ; led sönükmü? GOTO SON ; hayırsa sön'git BSF PORTB,0 ; evetse ledi yak GOTO BUTON ; tekrar butonu kontrol et SONBCF PORTB,0 ; ledi söndür GOTO BUTON ; tekrar butonu kontrol et END ; programı bitir Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU20

21 Örnek 6: 7 segment display de 5 sayısını gösteren programı yazınız. Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU21

22 Örnek 7: 0 dan 9 kadar olan sayıları PORB uçlarına ba ğ lı 7 segment display’de gösteren programı gerçekleştiriniz. LIST P=16F84A #INCLUDE SAYAC1 EQU h'0D' BSFSTATUS,5 ;BANK1 e geçiş yap CLRF TRISB ;PORTB nin tüm uçları çıkış seçildi BCFSTATUS,5 ;BANK0 a geçiş yap CLRFPORTB;PORTB yi temizle Basla MOVLW h'00' ;W kaydedicisine h'00' değerini yükle MOVWF SAYAC1 DONMOVF SAYAC1,W CALLDIZI MOVWF PORTB; W içeriğini PORTB ye aktar INCF SAYAC1,F; SAYAC1 değerini artır GOTODON DIZI ADDWF PCL, F;W içeriğini PCL ye aktar RETLW b' ';W ya 0 değeri yüklendi RETLW b' ';W ya 1 değeri yüklendi RETLW b' ';W ya 2 değeri yüklendi RETLW b' ';W ya 3 değeri yüklendi RETLW b' ';W ya 4 değeri yüklendi RETLW b' ';W ya 5 değeri yüklendi RETLW b' ';W ya 6 değeri yüklendi RETLW b' ';W ya 7 değeri yüklendi RETLW b' ';W ya 8 değeri yüklendi RETLW b' ';W ya 9 değeri yüklendi END Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU22


"PIC Mikrodenetleyiciler Hazırlayan:Ö ğ r.Gör.Bülent ÇOBANO Ğ LU1 PIC MCU= CPU + I/O pinleri+ Bellek(RAM/ROM)" indir ppt

Benzer bir sunumlar


Google Reklamları