Slayt 1 - cobanoglu

Transkript

Slayt 1 - cobanoglu
Mikro denetleyicili Uygulama devresi bileşenleri
Bir PIC mikro denetleyici ile uygulama
gerçekleştirebilmek için ;
• Besleme devresi,
• Reset sinyali,
• Osilatör devresi,
• Uygulama devresi elemanlarına
İhtiyaç vardır.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Besleme Devresi ve Bacak Bağlantıları
Besleme geriliminin bağlandığı bacaklar Vdd (PIC16F84 için 14 nolu bacak,
PIC16F877 için ise 11 ve 32 nolu iki farklı bacak) isimli bacaklardır.
Toprak/Şase bağlantısı için ise Vss (PIC16F84 için 5 nolu bacak, PIC16F877
için ise 12 ve 31 nolu iki farklı bacak) isimli bacaklar kullanılır. Şekildeki 16F877
entegresinin bacak bağlantılarına bakıldığında besleme ve toprak girişleri, iki
yanda birer tane olacak şekilde konumlandırılmıştır. Vdd' ile 'Vss' uçları arasına
devreye ilk gerilim uygulaması anında (PIC'e enerji verme sırasında) olabilecek
gerilim dalgalanmalarının sebep olabileceği arızaları önlemek amacıyla 0,1
mikroF'lık bir 'dekuplaj kondansatörü' bağlanır.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Reset Uçları ve Devresi:
PIC mikro denetleyicilerin MCLR ucu (16F84 için 4 nolu, 16F877 için 1 nolu bacak)
reset bacağıdır. Bacak bağlantılarında MCLR üzerinde bulunan çizgi, lojik 0 da iken
reset işleminin gerçekleştiğini göstermektedir. Bu bacak lojik 0 (0V) seviyesine
çekildiğinde program kesilir ve tekrar lojik 1 (+5V) seviyesine gelince program ilk
satırdan itibaren çalışmaya başlar. Reset devresi aşağıdaki gibi kurulur.
MCLR pininin yanlışlıkla lojik '0' değeri ile aktif hale gelmesini engellemek amacıyla
bir direnç üzerinden + besleme ucuna bağlanması gereklidir. Bağlandığı ucu sabit
olarak lojik '1' değerinde tutan bu direnç, 'pull-up' direnci olarak isimlendirilir.
PIC microcontrollers aşağıdaki
durumlarda RESET oluşur:
• PIC e ilk güç verildiğinde (POR –
Power On Reset),
•MCLR
girişi
mantıksal
0
yapıldığında,
• Watchdog zamanlayıcısında taşma
olduğunda.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Osilatör devresi ve bağlantısı: (1/2)
PIC bir mikroişlemcili sistem olduğundan, komutları işleyebilmesi için
saat(clock) sinyali dediğimiz, frekansı belli olan bir kare dalga işarete ihtiyaç
duyar. PIC mikro denetleyicilerin saat sinyali girişi için kullanılan iki ucu
vardır; bunlar OSC1 (16F84 için 16. pin, 16F877 için 13. pin olmak üzere) ve
OSC2 (16F84 için 15. pin, 16F877 için 14. pin olmak üzere) uçlarıdır.
Bu uçlara farklı tipte osilatörlerden elde edilen clock sinyalleri uygulanabilir.
Seçilecek osilatör tipi Pic’in kontrol ettiği devrenin hız gereksinimine bağlı olarak
seçilir. Clock osilatör tipleri şunlardır:
○ RC: Direnç/Kondansatör
○ XT: Kristal veya seramik resonetör
○ HS: Yüksek hızlı kristal veya seramik resonetör
○ LP: Düşük frekanslı kristal
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Osilatör devresi ve bağlantısı: (2/2)
Kristal Osc. genelde C1 ve C2 kondansatörünün birbirine eşit olması gerekir.
Seramik Resonator
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
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)
Not: Kullanılan osilatör tipi programlama esnasında PIC içerisinde bulunan
konfigürasyon bitlerine yazılmalıdır.
__CONFIG _XT_OSC & _PWRTE_ON & _BODEN_OFF & _CP_OFF & _WDT_OFF & _LVP_OFF & _CPD_OFF
__CONFIG 0x3F31;__CONFIG b’11111100110001’
__CONFIG(UNPROTECT & LVPDIS & BORDIS & MCLREN & WDTDIS & PWRTEN & INTIO); //C için
__CONFIG( HS & WDTDIS & PWRTDIS & BORDIS & LVPDIS & WRTEN & DEBUGDIS & UNPROTECT ); // C için
Not: Program belleğinin 2007h adresinde olup 14 bittir. Bu bitlere sadece PIC programlama aşamasında
erişilebilmektedir.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Konfigürasyon bitleri ve işlevleri
CP1,CP0 : Flash Program Memory Code Protection Bits.
All of the CP1:CP0 pairs have to be given the same value to enable the code protection scheme listed.
11 : Code protection off
10 : 1F00h to 1FFFh code protected
01 : 1000h to 1FFFh code protected
00 : 0000h to 1FFFh code protected
DEBUG : In-Circuit Debugger Mode
1 : In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins.
0 : In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger.
WRT : Flash Program Memory Write Enable
1 : Unprotected program memory may be written to by EECON control
0 : Unprotected program memory may not be written to by EECON control
CPD : Data EEPROM memory Code Protection
1 : Code protection off
0 : Data EEPROM memory code protected
LVP : Low Voltage In-Circuit Serial Programming Enable bit
1 : RB3/PGM pin has PGM function, low voltage programming enabled
The high voltage programming mode is always available, regardless of the state of the LVP bit.
0 : RB3 is digital I/O, High Voltage on MCLR must be used for programming
BODEN : Brown-out Reset Enable bit
1 : BOR enabled
0 : BOR disabled
PWRTE : Power-up Timer Enable bit
1 : PWRT disabled
0 : PWRT enabled
WDTE : Watchdog Timer Enable bit
1 : WDT enabled
0 : WDT disabled
FOSC1,FOSC0 : Oscillator Selection bits
11 : RC : Resistor/Capacitor oscillator ( Less than 1MHz )
10 : HS : High Speed Crystal/Resonator oscillator ( 4MHz to 20MHz )
01 : XT : Crystal/Resonator oscillator ( Less than 4MHz )
00 : LP : Low Power Crystal oscillator ( Less than 200KHz )
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
I/O Portları: Analog/Digital Seçimi
16F877’de 8 tane 10 bitlik A/D çevirme
kanalı bulunur. A / D kanalları için RA4
hariç diğer A ve E portları kullanılır. A/D
çevirme işlemi 4 adet kaydediciyle
yapılmaktadır.
Aşağıda ilgili register lar ve adresleri
gösterilmiştir.
ADRESH
kaydedicisi
ADRESL
kaydedicisi
ADCON0
kaydedicisi
ADCON1
kaydedicisi
0x1E
(high register)
0x9E
(low register)
0x1F
0
0x9F
1
; A / D sonuç
; A / D sonuç
; A / D kontrol
; A / D kontrol
ADFM biti dönüştürme işlemi sonunda 10 bitlik sayının formatını belirler.1: Sayı sağa kaydırılır.0: Sayı sola kaydırılır.
PCFG3 – PCFG0 bitleri A/D portlarının durumunu belirler. Tümü 0 yapılırsa bu durumda 8 tane analog kanal seçilmiş olur ve
her kanalın referans gerilimi VDD olarak ayarlanır.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
I/O Portları: Analog/Digital Seçimi
ADCON1,
PORTA portunu
dijital giriş çıkış yapmaya izin
verir. Eğer bunu yapmasaydık
PORTA analog olacak ve dijital
olarak giriş ve çıkış işlemleri
yapamayacaktık. Ayrıntılı bilgi
için lütfen datasheet’e ve ileride
anlatacağımız ADC konusuna
göz atınız.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Gecikme Programları
Örnek 1: Tek bir döngü ile yaklaşık 1000 saykıllık bir gecikme sağlayacak
programı yazınız.
Çözüm: Toplam Gecikme= Döngü dışındakiler + SAYAC* Döngü içindekiler
= 1+1+ (249*4) + 2=1000 saykıl
Tabii 1000
saykıllık
gecikme programının ne
kadar
sürelik bekleme
sağlayacağı PIC mikro denetleyicinin çalışma frekansına bağlıdır. 10 MHz lik PIC
MCU için toplam gecikme;
1000*0.1µS*4=400µS lik bir gecikme sağlayacaktır.
MOVLW d’250’ ;1 saykıl
MOVWF SAYAC ;1 saykıl
DON
DECFSZ SAYAC, F ;1*250
NOP
;1*249
GOTO DON
;2*249 +1
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
İçiçe Gecikme Programları
Tek bir döngü ile genelde istediğimiz zaman gecikmesini elde edemeyebiliriz.
Çünkü bir kaydedici içine yazabileceğimiz en büyük değer ondalık olarak 255 tir.
Bu da 255 ten fazla tekrar yaptıramayacağımız anlamına gelir. Bu durumda iç
içe döngüler kullanarak bu sayıyı çok çok büyütebiliriz. İç içe döngüler
kullandığımızda hem tekrarlanan komut sayısı artacağından döngünün bir
adımının harcadığı süre uzayacak, hem de içi içe döngüler sebebiyle iki (veya
daha fazla) döngünün çarpımı kadar sayıda tekrar olabilecektir.
TG= 4+5*255+3*255*255+2
= 196356 saykıl
Bu programda yaklaşık toplam gecikme 3*SAYAC1*SAYAC2 değeri kadardır. Yaklaşık
toplam gecikme = 3*255*255 kadardır. 1MHz lik dahili sat saykılında bu süre yaklaşık
195µS lik bir gecikme sağlayacaktır. İç içe döngüleriÖğr.Gör.Dr.
çoğaltarak
Bülentgecikmenin
ÇOBANOĞLU süresini
Örnek 1: Bir gecikme alt programı kullanarak PORTB ‘ye bağlı 8 ledi dörtlü
olarak (ilk önce LSB tarafı daha sonra MSB tarafı olacak şekilde) belirli
zaman aralıkları ile yakıp, söndüren bir programı gerçekleştiriniz
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Zamanlayıcı kullanan Gecikme Programı
TMR0 ve Watchdog Timer Devresi
PSA ; 0 ise TMR0
1 ise WDT
TOCS; 0 ise dahili komut saykılı
1
ise harici digital sinyal
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Frekans Bölme(Prescaler) Oranı:
Bir PIC’te OSC1 girişinden girilen işaretin frekansının dörde bölündüğü ve bu
bölünmüş işaretin OSC2 çıkışından alınabildiğinden bahsedilmişti. PIC’te bir
komutun işletilmesi için geçecek zaman, OSC1 girişinden verilen sinyalin dörde
bölümü ile bulunan frekansla belirlenir. Örneğin, OSC1 girişine 4MHz’lik bir osilatör
bağlanmışsa, bu işaret PIC içinde dörde bölünür ve dahili komut sinyalinin frekansı
1MHz olur. Bu 1MHz lik işaret PIC’in OSC2 çıkışından alınabilir. Bu örnekte, dahili
komut frekansının 1MHz olması, 1 saniye içinde 1 milyon tane komut işletilebildiği
anlamı taşır. Diğer bir deyişle, 1 komutun işletilebilmesi için geçecek süre saniyenin
milyonda biri, yani 1μs olacaktır .
Frekans bölme oranı OPTION kaydedicisinin ilk üç biti tarafından belirlenir.
TMR0 daki artışın frekans bölme oranı ile çarpılması bir komut zamanı verir.
Mesela frekans bölme oranı 1/4 ise, bir komut zamanı TMR0 daki artışın
dörtte birine denk geliyor demektir. Bu da her 4 komut zamanında bir, TMR0
içeriği 1 sayı artıyor anlamına gelir.
Ornek: Osilator frekans. 8MHz olan bir PIC için, OPTION kaydedicisindeki
PS2, PS1 ve PS0 bitlerinin değerleri sırasıyla «101» şeklindedir. TMR0
zamanlayıcısının 00h değerinden saymaya başladığı kabulü ile bu PIC kaç
saniye sonra TMR0 tarafından bir kesme oluşturur?
Cozum:
8 MHz saat frekansı ise peryot , TOSC =1/fosc =0.125 µs
PS2:PS0 = “101” olduğundan Prescaler= 1:64
Kesme gecikmesi = 4 *0.125 µs * 64 *(256 – 0)Öğr.Gör.Dr.
= 8192Bülent
µs =ÇOBANOĞLU
8 ms.
Frekans Bölme (Prescaler)
Oranı:
MOVLW b’11010111’; TMRO, dahili sinyal kaynağı ve prescaler:111 seç
MOVWF OPTION_REG
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
TMR0 ile Gecikme
TMR0 sayıcısının FF (255) den 00 ‘a geçmesi TMR0 kesmesine sebep o
lur ve bu kesme sonucunda INTCON kesme kaydedicisinin 2. (T0IF) biti
1 değerini alır. Bu kesmeyi kullanabilmek için daha öncesinde INTCON
kaydedicisinin
TOIE
bitinin
1
yapılarak
kesmeye izin verilmesi gerektiği unutulmamalıdır.
TMR0 hem yazılabilir, hem okunabilir bir sayıcıdır. OPTION kaydedicisi ile
belirlenebilen frekans
bölme
seçeneği
vardır.
Saymaya ana
programda,
alt
programlarda
ve
kesme
alt programlarında
da
devam eder. Bu bir avantajdır. En önemli özelliği ise, saydığı değer FFh
sayısından 00h sayısına geçerken oluşan taşmada, INTCON kaydedicisin
de T0IF bayrağı 1 değerini alır ve bu değer kullanılarak bir kesme alt programı
çalıştırılabilir. Öncesinde TOIE biti <1> yapılarak TMRO da taşma olması
halinde kesmeye izin verilmesi sağlanmalıdır.
Tosc=1/Fosc
 Kesme gecikmesi (Overflow time)= 4 *TOSC * Prescaler *(256 –
TMR0 başlangıç değeri)
 Bu formülden TMR0 başlangıç değeri de çekilebilir. O zaman
TMR0 = 256 – (Gecikme zamanı)/(4 *TOSC* Prescaler)
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
TMR0 Gecikme Alt programı
Örnek2: Osilatör frekansı 4MHz olan bir PIC için, OPTION kaydedicisindek
i PS2, PS1 ve PS0 bitlerinin değerleri sırasıyla b’111’ şeklindedir. TMR0 z
amanlayıcısının sıfır(0) değerinden saymaya başladığı kabulü ile bu PIC kaç s
aniye sonra TMR0 tarafından bir kesme oluşturur?
Çözüm:
4 MHz saat frekansı ise peryot , TOSC =1/fosc =0.25 µs
PS2:PS0 = “111” olduğundan Prescaler= 1:256
Kesme gecikmesi (Overflow time) = 4 *0.25 µs * 256 *(256 – 0)
= 65536 µs =65.536ms
MOVLW b’11010111’ ;TMR0, DAHİLİ SİNYAL,1:256
MOVWF OPTION_REG
…
GECIKME
CLRF TMR0
DON
BTFSS INTCON, TOIF
GOTO DON
BCF INTCON, TOIF
RETURN
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama Devreleri için başka bir gecikme programı:1 sn lik
gecikme programı
Eğer 32.768 Hz’lik bir kristal seçilirse ¼*32.768=8.192 Hz lik bir çalışma frekansı
elde edilebilir. Buda bir LED i 1 sn süre ile yakmak için 8192 kez komut saykılı
saymak gerekir. OPTION kaydedicisinin PS2:PS0 bitleri ile bu sayı 2 ile 256
arasında bölünür. Prescaler 256 seçilirse 8192/256=32Hz yapar. Bu hız
seçildiğinde 1 saniyede 32 sinyal üretilir. Böylece TMR0’ı 32’ye kadar
saydırdığımızda LED’i 1 sn gecikme ile yakabiliriz.
MOVLW B’00000111’
MOVWF OPTION_REG ;PRESCALER : 1/256
;*********************************************************
;32/32=1 Saniyelik gecikme programı
BEKLE
CLRF TMR0 ;TMR0 başlat
DON
MOVF TMR0,W
;TMR0 değerini W taşı
SUBLW .32
;TMR -32
BTFSS STATUS,Z ; Sonuc 0 mı?
GOTO DON
;32 kez don
RETLW 0
;W içeriğini 0 layarak ana programa
don.
;*********************************************************
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Örnek 3: 4 Bitlik Binary(ikili) Geri Sayıcı(15-0)
LIST P=16F84A
#INCLUDE<P16F84A.INC>
CLRF
PORTB
BSF
STATUS, 5
MOVLW b'11010111'
MOVWF OPTION_REG
MOVLW
h'0F'
MOVWF
TRISA
CLRF
TRISB
BCF
STATUS, 5
;PORTB temizlenir
;BANK1’e geçilir
;TMR0, DAHİLİ SİNYAL,1:256
;PORTA nın tüm uçları giriş
;PORTB nin tüm uçları çıkış olacaktır
;BANK0’a geçilir
BASLA
MOVLW d'16'
MOVWF PORTB
TEST:
BTFSC PORTA,0
GOTO TEST
CALL BEKLE ;65,53ms
CALL BEKLE ;65,53+65,53=131ms lik gecikme
DECFSZ PORTB,F
GOTO TEST
GOTO BASLA
;Başa dön
BEKLE:
PORTB ye bağlı ledlerde binary sayım:
;gecikme alt programı
CLRF TMR0
DON
BTFSS INTCON,T0IF
GOTO DON
BCF INTCON,T0IF
RETURN
END
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Çevrim Tabloları
Uygulaması
Ve
7
Segment
Display
Çevrim / Bakış tabloları ile bir kodu başka bir koda dönüştürmek
için kullanılırlar. Örneğin PIC mikro denetleyiciyi portlarına bağlı 7
Segment display / gösterge üzerinde hexadecimal (onaltılık
tabandaki)
sayıları
göstermek, sıcaklık dönüşümü(derecefahrenayt gibi) yapma, sinus, kosinus alma gibi işlemlerde
dönüşüm/çevrim tabloları kullanılar. 7 Segment display kodlaması
için aşağıdaki tablo kullanılır.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Çevrim tablosunda uygun kodu seçmek için program sayıcıyı
(PCL‐ Program Counter), seçilen kodu ana programa göndermek
için de RETLW komutunu kullanırız
Birden fazla display bağlantısı
Çevrim tablosundaki verilere sıralı olarak erişerek PCL’ye yani o anki
adrese istediğimiz sayıyı ekleyerek istediğimiz adrese / elemana ulaşırız.
PCL’nin o anki değerine ADDWF ile istediğimiz sayıyı ekleriz.
Kullanım Şekli: ADDWF PCL, F
İstediğimiz değeri geri döndürecek komut ise RETLW (RETLW h’3F’ gibi) dir.
RETLW komutu ile alt alta yazılan sayı değerleri dt komutu yanyana yazılabilir.
DIZI
ADDWF PCL, F
dt h’3F’, h’06’, h’5b’,….
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Örnek 4: 7 segment display de 5 sayısını gösteren programı yazınız.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama-5: 0 dan 9 kadar olan sayıları PORB uçlarına bağlı 7 segment display’de
gösteren programı gerçekleştiriniz.
SAYAC1
LIST P=16F84A
#INCLUDE <P16F84A.INC>
EQU h'0D'
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5
CLRF
PORTB
;BANK1 e geçiş yap
;PORTB nin tüm uçları çıkış seçildi
;BANK0 a geçiş yap
;PORTB yi temizle
Basla
DON
MOVLW
MOVWF
MOVF
CALL
MOVWF
INCF
GOTO
h'00'
SAYAC1
SAYAC1,W
DIZI
PORTB
SAYAC1,F
DON
;W kaydedicisine h'00' değerini yükle
; W içeriğini PORTB ye aktar
; SAYAC1 değerini artır
DIZI
ADDWF PCL, F
RETLW b'00111111'
RETLW b'00000110'
RETLW b'01011011'
RETLW b'01001111'
RETLW b'01100110'
RETLW b'01101101'
RETLW b'01111101'
RETLW b'00000111'
RETLW b'01111111'
RETLW b'01101111'
END
;W içeriğini PCL ye aktar
;W ya 0 değeri yüklendi
;W ya 1 değeri yüklendi
;W ya 2 değeri yüklendi
;W ya 3 değeri yüklendi
;W ya 4 değeri yüklendi
;W ya 5 değeri yüklendi
;W ya 6 değeri yüklendi
;W ya 7 değeri yüklendi
;W ya 8 değeri yüklendi
;W ya 9 değeri yüklendi
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama-6: 0 dan F ileri sayıcı (PIC16F877 için)
LIST P=16F877
#INCLUDE <P16F877.INC>
SAYAC1 EQU h'21'
BSF
STATUS,5
;BANK1 e geçiş yap
CLRF
TRISB
;PORTB nin tüm uçları çıkış seçildi
BCF
STATUS,5
;BANK0 a geçiş yap
CLRF
PORTB
;PORTB yi temizle
Basla
MOVLW h'00'
;W kaydedicisine h'00' değerini yükle
MOVWF SAYAC1
DON
MOVF
SAYAC1,W
CALL
DIZI
MOVWF PORTB ; W içeriğini PORTB ye aktar
INCF
SAYAC1,F
GOTO
DON
DIZI
ADDWF PCL, F
;W içeriğini PCL ye aktar
dt 0x3F,0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F,0x6F
dt h'77',h'7C',h'39',h'5E',h'79',h'71'
END
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama-7: Sürekli bir şekilde F den 0 ‘a geri sayıcı (PIC16F877 için)
LIST P=16F877
#INCLUDE <P16F77.INC>
SAYAC1 EQU h'21'
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5
CLRF PORTB
BASLA
MOVLW h'10'
MOVWF SAYAC1
DON
MOVF
SAYAC1,W
CALL DIZI
MOVWF PORTB
DECF
SAYAC1,F
GOTO DON
DIZI
ADDWF PCL, F
GOTO BASLA
dt 0x3F,0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F,0x6F
dt h'77',h'7C',h'39',h'5E',h'79',h'71'
END
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama-8: 9 Dan 0 A Geri Sayıcı
(Alternatif)
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC EQU h'0C'
CLRF PORTB
CLRF SAYAC
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
BASLA
INCF SAYAC,F
MOVF SAYAC,W
SUBLW d'10' ;W=10-W
BTFSS STATUS,Z
GOTO DISPLAY
MOVLW h'00'
MOVWF SAYAC
GOTO DISPLAY
GOTO BASLA
DISPLAY
CALL DIZI
MOVWF PORTB
GOTO BASLA
DIZI
ADDWF PCL,F
RETLW b'00111111';0GFEDCBA
RETLW b'00000110'
RETLW b'01011011'
RETLW b'01001111'
RETLW b'01100110'
RETLW b'01101101'
RETLW b'01111101'
RETLW b'00000111'
RETLW b'01111111'
RETLW b'01101111'
END
Uygulama 9: F den 0 a kadar Geri Sayıcı (Alternatif)
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC EQU h'0C'
CLRF PORTB
CLRF SAYAC
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
BASLA
INCF SAYAC,F
MOVF SAYAC,W
SUBLW d'16'
;W=16-W
BTFSS STATUS,Z
GOTO DISPLAY
MOVLW h'00'
MOVWF SAYAC
GOTO DISPLAY
GOTO BASLA
DISPLAY
CALL DIZI
MOVWF PORTB
GOTO BASLA
DIZI
ADDWF PCL,F
dt h'3F',h'06',h'5B',h'4F',h'66',h'6D',
dt h'7D',h'07',h'7F',h'6F',h'77',h'7C',
dt h'39',h'5E',h'79',h'71'
END
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama 10: 0 dan F ye İleri Sayıcı Gecikmeli
SAYAC
SAYAC2
SAYAC3
LIST P=16F84
INCLUDE "P16F84.INC"
EQU h'0C'
EQU h'0D'
EQU h'0E'
CLRF PORTB
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
CLRF SAYAC
DON
MOVF SAYAC,W
CALL DIZI
MOVWF PORTB
CALL BEKLE
INCF SAYAC,F
GOTO DON
BEKLE
MOVLW h'FF'
MOVWF SAYAC2
DON1
MOVLW h'FF'
MOVWF SAYAC3
DON2
DECFSZ SAYAC3,F
GOTO DON2
DECFSZ SAYAC2,F
GOTO DON1
RETURN
DIZI
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
ADDWF PCL,F
dt h'3F',h'06',h'5B',h'4F',h'66',h'6D',
dt h'7D',h'07',h'7F',h'6F',h'77',h'7C',
dt h'39',h'5E',h'79',h'71
Uygulama 11: Trafik Işığı Programı
K
S
Y
K
S
Y
41
23
B7
B6
B5
B4
B3
B2
B1
B0
0
Y
S
K
0
Y S
K
1
1
1
14
32
1
1
1
1
1
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
1
1
Kesmeler
Kesme (Interrupt), mikro denetleyicinin gerçekleştirdiği işleme bakmaksı
zın belirli durumların/olayların olması durumunda isteklere / olaylara ce
vap verilmesini sağlayan mekanizmadır. Bu mekanizma, mikro denetleyi
ci ile çevre birimleri arasındaki bağlantıları oluşturması ve ilişkileri düzenl
emesi nedeniyle çok önemli bir yere sahiptir.
Oluşan her kesme programı ile programın normal işlenme süreci deği
ştirilerek program durdurulur ve kesme ile ilgili rutin/altprogram gerçekl
eştirildikten sonra ana programın işlenmesi kalınan noktadan devam edilir
PIC16F84 mikro denetleyicisi dört farklı kaynaktan kesme alabilir. Bunlar;
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
RB0/INT Pini Harici Kesme Örneği
RB0/INT pini harici kesmesi kenar tetiklemelidir. Yani bu uçtaki sinyalin 1 d
en 0’a veya 0 dan 1’e geçişi kesmeye sebep olur. Kesmenin yükselen kenar
da mı yoksa düşen kenarda mı gerçekleşeceğine programcı karar verir. Bu
nun için OPTION_REG kaydedicisinin INTEDG biti kullanılır. INTEDG biti
1 ise kesme yükselen kenarda, 0 ise düşen kenarda gerçekleşir.
INT kesmesini kullanabilmek için INTCON kaydedicisinin INTE biti 1 yapılar
ak kesmeye izin verilmelidir. INT kesmesi oluştuğunda INTCON kaydedici
sinin INTF biti 1 olur.
Programda kesme alt programı içerisinde INTF=0 yapılmalıdır.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama-12:
PORTB nin RB0/INT ucundan gelen bir kesme gerçekleşince kesme alt progr
amında PORTA ya bağlı LED’leri yakan programı yazalım
Program Algoritması:
•
•
•
•
RB0/INT ucunu giriş olarak seç ,
OPTION_REG kaydedicisinin INTEDG biti ile düşen veya yükselen kenar tetiklemesini seç ,
INTCON kaydedicisinin GIE ve INTE bitleri 1 yapılarak kesmeye izin verilir,
Kesme oluşup, program kesme alt programına dallandığında INTF bitini 0 yap.
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
PORTB Değişim Kesmesi Örneği
PORTB nin 4 ve 7. bitlerinde (RB4RB7) bitlerinde bir değişim meydana gelmesi PORTB değişim kesmesine sebep o
lur. Bu kesmeyi aktif hale getirmek için INTCON kaydedicisinin RBIE bitinin 1 ya
pılması gerekir. PORTB değişim kesmesi oluştuğunda RBIF=1 olur ve program ke
sme alt programına dallanır. Program RBIF bitini otomatik sıfırlayamadığı için
kesme alt programı içerisinde RBIF=0 yapılır.
UYGULAMA - 9 : PORTB nin RB4RB7 uçlarına bağlı butonlardan bir veya bir kaçına basıldığında PORTA’nın ilk 4 bit
ini yakan program.
Program Algoritması:
• PORTB nin 4, 5, 6 ve 7. Bitlerini giriş olarak seç ,
• INTCON kaydedicisinin GIE ve RBIE bitini 1 yaparak PORTB değişim kesmesi
ne izin ver.
• Kesme oluşup, program kesme alt programına dallandığında RBIF bitini 0 yap
Öğr.Gör.Dr. Bülent ÇOBANOĞLU
Uygulama-13: PORTB nin RB4-RB7
uçlarından gelen bir kesme gerçekleşince kesme alt progr
amında PORTA ya bağlı LED’leri yakan programı yazalım
LIST P=16F84
INCLUDE "P16F84.INC"
CBLOCK H'0C'
SAYAC1,SAYAC2
ENDC
ORG 0X00
GOTO BASLA
ORG 0X04
GOTO KESME
BASLA
BSF
STATUS,5
;BANK1 e geçiş yap
CLRF TRISA
;PORTA çıkış seçildi
MOVLW 0XFF
MOVWF TRISB
;PORTB GIRIŞ
BCF
STATUS,5
;BANK0 a geçiş yap
CLRF
PORTA
;PORTA ya bağlı ledleri söndür
BSF
INTCON,RBIE;RB değişim kesmesine izin ver
BSF
INTCON,GIE ;Tüm kesmelere izin ver
GOTO BASLA
KESME
MOVLW 0X0F
MOVWF PORTA
CLRF INTCON
CALL BEKLE
RETFIE
BEKLE
MOVLW 0X05
MOVWF SAYAC1
DON1
MOVLW 0X06
MOVWF SAYAC2
DON2
DECFSZ SAYAC2,F
GOTO DON1
DECFSZ SAYAC1,F
GOTO DON2
RETURN
END
Öğr.Gör.Dr. Bülent ÇOBANOĞLU

Benzer belgeler

Slayt 1 - cobanoglu

Slayt 1 - cobanoglu Kesme (Interrupt), mikro denetleyicinin gerçekleştirdiği işleme bakmaksı zın belirli durumların/olayların olması durumunda isteklere / olaylara ce vap verilmesini sağlayan mekanizmadır. Bu mekanizm...

Detaylı

Slayt 1 - cobanoglu

Slayt 1 - cobanoglu devam eder. Bu bir avantajdır. En önemli özelliği ise, saydığı değer FFh sayısından 00h sayısına geçerken oluşan taşmada, INTCON kaydedicisinde T0IF bayrağı 1 değerini alır ve bu değer kullanılarak...

Detaylı

ARİTMETİK İŞLEMLER

ARİTMETİK İŞLEMLER Uygulama-5: 0 dan 9 kadar olan sayıları PORB uçlarına bağlı 7 segment display’de gösteren programı gerçekleştiriniz.

Detaylı