Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Mikroişlemciler ve Mikrodenetleyiciler: PIC Programlama

Benzer bir sunumlar


... konulu sunumlar: "Mikroişlemciler ve Mikrodenetleyiciler: PIC Programlama"— Sunum transkripti:

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

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

3 MPLAB Programı içinde tanımlanan Derleyiciler ve Farkları
Ö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

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

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

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

7 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

8 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 ( 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

9 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

10 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

11 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

12 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

13 ASSEMBLER TALİMATLARI
Assembler Komutu Açıklama #DEFINE Sembolik sabitlerin tanımlanmasını sağlar. C dilinde de geçerlidir. Örnek: #define LED PORTB, #define _XTAL_FREQ , #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

14 ASSEMBLER TALİMATLARI
Assembler Komutu Açıklama If, else if, else, endif if sayi < 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

15 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

16 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

17 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

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

19 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, B, 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)

20 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, B, 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)

21 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

22 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

23 Ç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

24 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

25 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

26 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

27 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

28 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

29 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

30 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

31 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

32 Ö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

33 __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 void main(void)  TRISB = 0;  PORTB = 0b ;     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

34 Ö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

35 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

36 Ö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

37 Ö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

38 Ç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


"Mikroişlemciler ve Mikrodenetleyiciler: PIC Programlama" indir ppt

Benzer bir sunumlar


Google Reklamları