19
PIC Mikrodenetleyiciler

PIC Mikrodenetleyiciler

  • Upload
    gali

  • View
    87

  • Download
    2

Embed Size (px)

DESCRIPTION

PIC Mikrodenetleyiciler. PIC MİKRODENETLEYİCİ AİLESİNE GENEL BAKIŞ. PIC, Microchip firması tarafından üretilen, Harvard mimarisine ve RISC işlemcisine sahip bir mikro denetleyicidir. [1] - PowerPoint PPT Presentation

Citation preview

Page 1: PIC Mikrodenetleyiciler

PIC Mikrodenetleyiciler

Page 2: PIC Mikrodenetleyiciler

PIC MİKRODENETLEYİCİ AİLESİNE GENEL BAKIŞ

PIC, Microchip firması tarafından üretilen, Harvard mimarisine ve RISC işlemcisine sahip bir mikro denetleyicidir. [1] PIC kelimesi, “Peripheral Interface Controller- Çevresel Arabirim Denetleyicisi” den türetilmiş olsada farklı kaynaklarda “Programmable Interface Controller -Programlanabilir Arabirim Denetleyicisi” veya “Programmable Intelligent Computer -Programlanabilir Akıllı Bilgisayar” olarak adlandırılmıştır.[2]

PIC Mikro denetleyicilerinin birçok çeşidi vardır, veri yolu genişliği baz alınarak PIC mikro denetleyicileri; 8-bit(PIC10,PIC12,PIC16,PIC18), 16-bit(PIC24) ve 32-bit(PIC32) olarak sınıflandırabiliriz.

PIC MCU= CPU + I/O pinleri+ Bellek(RAM/ROM)

Page 3: PIC Mikrodenetleyiciler

PIC Mikro denetleyici PIC Mikro denetleyici ProgramlamaProgramlamaAssembly 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.

Page 4: PIC Mikrodenetleyiciler

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.

Page 5: PIC Mikrodenetleyiciler

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:

Page 6: PIC Mikrodenetleyiciler

YAZIM BİÇİMİ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çıklamaDON: MOVLW h’0F’ ; W kaydedicisine heksadesimal 0F sayısını

aktarılmıştır

Page 7: PIC Mikrodenetleyiciler

ASSEMBLERASSEMBLER TALİMATLARITALİ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 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.

Page 8: PIC Mikrodenetleyiciler

SAYILARIN GÖSTERİMİ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 Onaltılık (hexadecimal) sayı sistemi

23h Onaltılık (hexadecimal) sayı sistemi

h'23' Onaltılık (hexadecimal) sayı sistemi

d'12' Onluk(Decimal) sayı sistemi

b'1011' İkili(Binary) sayı sistemi

‘G’ veya A ‘G’ ASCII

O‘574’ Octal(Sekizli) sayı sistemi

Page 9: PIC Mikrodenetleyiciler

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)

PIC16F84 / PIC16F877 KOMUT SETİ

Page 10: PIC Mikrodenetleyiciler

.Sabit (direkt veri) işleyen komutlar ve kontrol .Sabit (direkt veri) işleyen komutlar ve kontrol komutlarıkomutları::

•Bit yönlendirmeli komutlar:

Page 11: PIC Mikrodenetleyiciler

..Byte yönlendirmeli Byte yönlendirmeli komutlarkomutlar::

Page 12: PIC Mikrodenetleyiciler

PIC16F84 / PIC16F877 KOMUT SETİ

Page 13: PIC Mikrodenetleyiciler

Örnek 1: PORB nin 7. bitine bağlı ledi yakıp Örnek 1: PORB nin 7. bitine bağlı ledi yakıp söndüren programsöndüren program

OSC1/CLKIN16

RB0/INT 6

RB1 7

RB2 8

RB3 9

RB4 10

RB5 11

RB6 12

RB7 13

RA0 17

RA1 18

RA2 1

RA3 2

RA4/T0CKI 3

OSC2/CLKOUT15

MCLR4

U1

PIC16F84A

X11Mhz

C1

1nF

C2

1nF

+5V

R330

;==LED.ASM === LIST P=16F84#INCLUDE<P16F84.INC>BSF STATUS,5 CLRF TRISB ; PORTB nin tüm uçları çıkış

yapıldı BCF STATUS,5 CLRF PORTB ; PORTB’ ye b’0000 0000’ değeri yüklendiDON:

BSF PORTB,7 ; PORTB nin 7.bitini yakBCF PORTB,7 ; PORTB nin 7. bitini söndürGOTO DONEND

// C dilinde gerçekleştirimi#include <pic.h> #include <delay.c> 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 }  } 

Page 14: PIC Mikrodenetleyiciler

Ö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ı:

OSC1/CLKIN16

RB0/INT6

RB17

RB28

RB39

RB410

RB511

RB612

RB713

RA017

RA118

RA21

RA32

RA4/T0CKI3

OSC2/CLKOUT15

MCLR4

U1

PIC16F84A

X11Mhz

C1

1nF

C2

1nF

+5V

R7330

R6330

R5330

R4330

R3330

R2330

R1330

R0330

Page 15: PIC Mikrodenetleyiciler

ÖRNEK 3. YURUYEN IŞIK UYGULAMASIÖRNEK 3. YURUYEN IŞIK UYGULAMASI

Öğr. Gör. Bülent ÇOBANOĞLU 15

Page 16: PIC Mikrodenetleyiciler

Örnek 4: PORTB ye bağlı ledler Örnek 4: PORTB ye bağlı ledler üzerinde binary (ikili) saydırma üzerinde binary (ikili) saydırma işlemi yapan PORTA nın RA0 ucuna işlemi yapan PORTA nın RA0 ucuna bağlı butona basıldığında azaltacak, bağlı butona basıldığında azaltacak, RA1 ucuna bağlı butona basıldığında RA1 ucuna bağlı butona basıldığında artıracak program:artıracak program:

OSC1/CLKIN16

RB0/INT 6

RB1 7

RB2 8

RB3 9

RB4 10

RB5 11

RB6 12

RB7 13

RA0 17

RA1 18

RA2 1

RA3 2

RA4/T0CKI 3

OSC2/CLKOUT15

MCLR4

U1

PIC16F84A

X11Mhz

C1

1nF

C2

1nF

+5V

R7330

R6330

R5330

R4330

R3330

R2330

R1330

R0330

R8330

R9330

+5V +5V

Azalt

Artır

LIST P=16F84#INCLUDE<P16F84.INC>sayac1 equ h'09' sayac2 equ h'08'CLRF PORTA ;PORTA temizlenirCLRF PORTB ;PORTB temizlenirBSF STATUS, 5 ;BANK1’e

geçilirMOVLW h'0F' MOVWF TRISA ;PORTA nın tüm uçları girişCLRF TRISB ;PORTB nin tüm uçları çıkış

olacaktırBCF STATUS, 5 ;BANK0’a

geçilirdon:

BTFSS PORTA, 0 ;PORTA 0. bitini test etINCF PORTB, 1 ;Artır butonu basılı ise PORTB’yi

bir artırCALL Bekle ;Bekle isimli gecikme programını

çağırBTFSS PORTA, 1 ;PORTA 1. bitini test etDECF PORTB, 1 ;Azalt butonu basılı ise PORTB’yi

bir azaltGOTO don ;Başa dön

Bekle ;Gecikme alt programıLoop1: decfsz sayac1,1

goto Loop1 decfsz sayac2,1goto Loop1returnEND

Page 17: PIC Mikrodenetleyiciler

Örnek 5: PORTA ‘nın 0.bitine bağlı butona basınca (PORTB nin 0 Örnek 5: PORTA ‘nın 0.bitine bağlı butona basınca (PORTB nin 0 bitine bağlı) ledi yakan/söndüren programbitine bağlı) ledi yakan/söndüren program

LIST P=16F84 ; kullandığımız pic'i tanıttık.

#INCLUDE<P16F84.INC> ; 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

BUTON BTFSC PORTA,0 ; portanın 0'ıncı pini 0' mı?

GOTO BUTON ; hayırsa tekrar kontrol et

BUTON1 BTFSS 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

SON BCF PORTB,0 ; ledi söndür

GOTO BUTON ; tekrar butonu kontrol et

END ; programı bitir

Öğr. Gör. Bülent ÇOBANOĞLU 17

Page 18: PIC Mikrodenetleyiciler

Örnek 6: 7 segment display de 5 sayısını Örnek 6: 7 segment display de 5 sayısını gösteren programı yazınız.gösteren programı yazınız.

Page 19: PIC Mikrodenetleyiciler

Örnek 7: Örnek 7: 0 dan 9 kadar olan sayıları PORB uçlarına bağlı 7 0 dan 9 kadar olan sayıları PORB uçlarına bağlı 7 segment display’de gösteren programı gerçekleştiriniz.segment display’de gösteren programı gerçekleştiriniz.

LIST P=16F84A#INCLUDE <P16F84A.INC>SAYAC1 EQU h'0D'BSF STATUS,5 ;BANK1 e geçiş yapCLRF TRISB ;PORTB nin tüm uçları çıkış seçildi

BCF STATUS,5 ;BANK0 a geçiş yap CLRF PORTB ;PORTB yi temizleBasla

MOVLW h'00' ;W kaydedicisine h'00' değerini yükleMOVWF SAYAC1

DON MOVF SAYAC1,WCALL DIZIMOVWF PORTB ; W içeriğini PORTB ye aktarINCF SAYAC1,F ; SAYAC1 değerini artırGOTO DON

DIZIADDWF PCL, F ;W içeriğini PCL ye aktar RETLW b'00111111' ;W ya 0 değeri yüklendiRETLW b'00000110' ;W ya 1 değeri yüklendiRETLW b'01011011' ;W ya 2 değeri yüklendiRETLW b'01001111' ;W ya 3 değeri yüklendiRETLW b'01100110' ;W ya 4 değeri yüklendiRETLW b'01101101' ;W ya 5 değeri yüklendiRETLW b'01111101' ;W ya 6 değeri yüklendiRETLW b'00000111' ;W ya 7 değeri yüklendiRETLW b'01111111' ;W ya 8 değeri yüklendiRETLW b'01101111' ;W ya 9 değeri yüklendiEND