Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanSu Yeşilnil Değiştirilmiş 7 yıl önce
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
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.