3. 1 PIC16F628A’nın DIŞ GÖRÜNÜŞÜ
Microchip PIC16F628A’yı üç farklı kılıf tipiyle üretmektedir. Kullanımı en koly olan
PDIP tipi piyasada en kolay bulunandır. Bunun dışında 20 bacaklı SSOP kılıflı ve 28
bacaklı QFN tipleri de mevcuttur.
4. PIC16F628A’nın ÇALIŞMASI
Harvard mimarisi ile üretilen PIC16F628 8-bit’lik bir RISC işlemcidir. program
belleği ve veri belleğine farklı adres/veri yolu ile ulaşır.
Mikroişlemcinin çalışmasını çizilebilecek en basit bir blok diyagram üzerinde
görelim. Bu diyagram tüm PIC’lerin çalışması için geçerlidir.
5. CPU: İçerisinde PC-program counter (Program sayıcısı), ALU (ritmetic-Logic-Unit)
bulunan ve diğer bloklar arasındaki çalışmayı organize eden ve flash bellekteki kullanıcı
programını çalıştırankısımdır.
Program belleği (FLASH) : Programların saklandığı ve defalarca yazılıp,
silinebilen flash bellek.
Veri belliği (EEPROM) : PIC Üzerindeki gerilim sessizde bile kaybolması
istenmeyen verilerin saklandığı bellek. Bu bellek üzerine de defalarca
yazma/silme yapılabilir.
Veri belliği (RAM) : Programın çalışması esnasında geçici olarak saklanması
gereken veriler için kullanılır. GBR (General Purpose Register-Genel amaçlı
saklayıcı) olarak da adlandırılan bu bellekte programı yazılması esnasında değişkenler
içerisine atanacak veriler bu alanda saklanır. Bu bellekte ayrıca SPR (Special Function
Register-Özel amaçlı saklayıcı) adı verilen saklayıcılar da vardır. Bunlara
PIC’in çalışma biçimini yönlendiren veriler yazılır.
6. PORTA ve PORTB : Mikrodenetleyicinin dışarıya açılan elektronik kapısıdır.
PIC’e girilecek ve PIC’ten dışarıya aktarılacak tüm veriler Bugün yoklar içerisindeki
elektronik devreler aracılığı ile yapılır.
Zamanlayıcı (TIMER0/TIMER1/TIMER2) : Programın çalışmasından bağımsız
olarak içerisindeki sayı binary olarak artan 8-bit’lik (Not: TIMER1=16-bit) bir
saklayıcıdır. Her 4 harici saat yedide bir defa içerisindeki sayı bir defa artarak
255’e ulaştığında tekrar 0’dan başlayarak saymaya devam eder.
Bir mikroişlemcinin çalışması kısaca şöyledir; Program belleğinden CPU
tarafından alınan komutu kodu çözerek işlenir. komut işleme göre diğer ünitelerden
veri okunabilir ya da bu ünitelere veri gönderilebilir. Program komutları gerektiriyorsa
zamanlayıcıdan da veri alabilir. Sonuç olarak bir ortama elektronik olarak bağlantısı
bulunan PORTA/PORTB’den gönderilen lojik veri mikroişlemcinin kontrol ettiği
7. 3 BESLEME GERİLİMİ
PIC'in çalışması için gerekli olan gerilim 5 ve 14 numaralı pin'lerden uygulanır. 14
numaralı Vdd ucu +5 V'a, 5 numaralı Vss ucu da toprağa bağlanır. PIC'e gerilim 15
uygulandığında devredeki fazla akım çeken elemanların devreye girmesiyle ya da
şebekedeki gerilim dalgalanmaları nedeniyle PIC'in resetlenmesini önlemek amacıyla
Vdd ile Vss arasına 0.1 µf lık bir dekuplaj kondansatörü bağlamak gerekir. Bu durumda
kararlı bir gerilim değeri elde edilmiş olur.
10. • Bacak Yapısı
• PIC16F877 'nin 40 pininden 33 tanesi I/O (
input/output - giriş/çıkış ) pinleridir.
PIC16F877; 6 bitlik A portu, her biri 8 bitlik
B,C ve D portları ve 3 bitlik E portu olmak
üzere 5 porta sahiptir. I/O pinlerinin gerekli
konfigürasyonlar yapılarak başka
amaçlarla kullanılması da mümkündür.
11. PIC 16F877A ÖZELLİKLER
• Temel Özellikleri
• *İşlem hızı DC-20 MHz dir. (bir komut DC-200 ns hızında çalışmaktadır.)
*Dallanma komutları iki çevrim (cycle) sürede, bunların dışındaki komutlar ise bir
çevrimlik sürede
uygulanır.
*8 Kword Flash ROM programlama belleği (EEPROM özellikli program belleği), 368
Byte kullanıcı RAM belleği ve 256 Byte EEPROM belleği olmak üzere üç adet bellek
bloğu vardır.
*8 Kword 'lük Flash ROM programlama belleği 1000000 kez programlanabilir.
*CPU azaltılmış komut setine sahiptir.
*Statik RAM üzerinde 32 adet özel işlem kaydedicisi (SFR - Special Function
Register) vardır.
*RISC temeline dayanır.
*CPU azaltılmış komut setine sahiptir.
*Öğrenilecek gereken her biri 14 bitlik 35 komut vardır.
*Pin çıkışları PIC 16C73B/74B/76 ve 77 ile uyumludur.
* 8 bitlik veri yolu (databus) vardır.
*14 kaynaktan kesme yapabilir.
12. PIC ASSEMBLY DİLİ ve DERLEYİCİ
Derleyici (assembler), bir text editöründe assembly dili kurallarına göre yazılmış
olan komutların PIC’in anlayabileceği hexadesimal kodlara çeviren (derleyen) bir
programdır. Microchip firmasının MPASM bu işi yapan assembler programıdır.
Assembler’e çoğu zaman compiler de (derleyici) denilir.
Assembly dili, bir PIC’e Yaptırılması isteyen işlerin belirli kurallara göre yazılmış
komutlar dizisidir. Assembly dili komutları İngilizce dilindeki bazı kısaltmalardan
meydana gelir. Bu kısaltmalar genellikle bir komutan çalışmasını ifade eden cümlenin
baş harflerinden oluşur. Böylece elde edilen komut, bellekte tutulması kolay
(mnemonic) bir hale getirilmiştir. Örneğin:
BTFSC (Bit Test File register Skip if Clear) - saklayıcıdaki bit’i test et, eğer
sıfırsa bir sonraki komutu atla, anlamında kullanılan İngilizce cümlenin kısaltmasıdır.
Buarada: 8 bit’lik bir saklayıcıdaki 1 bit’i ifade eder. Test : kontrol etmek anlamındadır.
File register : 8 bit’lik port saklayıcı veya değişken ifade eder. Skip : Atlamak, bir
sonrakine geçmek anlamına gelir. If : Eğer. Clear : ‘0’ anlamına gelir.
13. PIC ASSEMBLY DİLİ YAZIM KURALLARI
PIC assembly programlarının yazılması için kullanılan metin editörlerinden
1.bölümde bahsetmiştik. Bu editörlerden, Windows altında çalışan NOTPAD veya DOS
altında çalışan EDIT en kolay elde edilebilenlerdir. Bunların dışında printer kontrol
…
komutları içermeyen ve ASCII kodunda dosya üretebilen herhangi bir editör de
kullanılabilir. MPLAB kullanıldığında ayrıca bir editör kullanmaya gerek yoktur.
Çünkü MPLAB’ın içinde hem bir metin editörü hemde MPASM bulunmaktadır
MPASM asembler programının yazılan komutlaru doğru olarak algılayıp, PIC’in
anlayabileceği heksadesimal kodlara dönüştürebilmesi için şu bilgiler program içinde
özel formatta yazılması gerekir :
Komutların hangi PIC16XX için yazıldığı,
Programın bellekteki hangi adres başlayacağı,
Komutların ve etkiketlerin neler olduğu,
Programın bitiş yeri.
Basit bir örnekle bu bilgilerin program içinde nasıl yazıldığını gösterelim. Program
ilk olarak PIC16F628A’ya B port’unun 8 ucunu da çıkış tanıtacaktır. Daha sonra bu
port’un ilk dört bit’ini lojik 1, sonrakş dört bit’ini de lojik 0 yapacak. Son olarak
program sonsuz bir döngüye girecektir. Bu işlemleri yapacak olan programın akış
diyagramı ve komutları aşağıdaki gibi olacaktır.
14. 4.2.1 Noktalı Virgül (;)
Baş tarafına (;) konulan satır, assembler tarafından heksadesimal kodlara
dönüştürülmez. Bu satırlar programın geliştirilmesi esnasında hatırlatıcı açıklamaların
yazılmasında kullanılır. Örneğin CLRF ile başlayan satırda ‘porB’nin içini
sıfırla’ cümlesi, CLRF komutunun ne iş yaptığını açıklar. Programın bölümlerini
birbirinden ayırmak için (---------veya =====) çizgileri kullanmak, programı görsel
olarak daha okunur hale getirdiği gibi bu çizgiler arasına uyarılar ve açıklamalarda
yazılabilir.
4.2.2 Girintiler ve Program Bölümleri
Metin editörlerin de birbirinden farklı uzunlukta girintiler veren TAB (
sekme) özelliği vardır. Bu özellikten yararlanarak assembly komutları üç kolona
...
bölünerek yazılır. Bir assembly programı temel olarak dört bölüme
ayrılır. Bunlar; Başlık, atama, program ve sonuç bölümleridir.
15. 4.3 PIC ASSEMBLY KOMUTLARININ YAZILIŞ BİÇİMİ
PIC16F628A’nın toplam 35 tane komutu vardır. Bu komutların yazılış biçimini üç
grupta toplayabiliriz.
1. Byte-yönlendirmeli komutlar.
2. Bit-yönlendirlemli komutlar.
3. Sabit işleyen komutlar.
4. Kontrol komutları
Komutların yazılış biçimleri ne açıklarken bazı tanımlama harfleri
kullanacağız. bu tanımlama harfleri mikroçipin veri kataloglarında da aynı şekilde
geçtiğinden orijinal biçiminde verilmiştir. Önce bu harflerin anlamları verelim:
f = fiel register (özel veya genel amaçlı saklayıcı)
d = destination (hedef, gönderilen yer)
d=0 Verinin gönderileceği yer (W saklayıcı.)
d=1 Verinin gönderileceği yer ( özel veya genel amaçlı saklayıcı.)
k = Sabit sayı veya adres etiketi
b = bit tanımlayıcı
b = binary sayıları belirleyen harf (Örneğin b’00001111’ gibi)
d = desimal sayıları belirleyen harf (Örneğin d ‘16’ gibi)
16. • *PIC16F877 dolaylı ve göreceli adresleme yapabilme özelliğine sahiptir.
• *CMOSFlash EEPROM teknoloji ile düşük güçle yüksek hıza erişebilir.
• *Enerji verildiğinde sistemi resetleme özelliği (Power-on Reset),
• *Power-up zamanlayıcı (Power-up Timer)
• *Osilatör başlatma zamanlayıcısı (Osilatör Start-up Timer)
• *Özel tip zamanlayıcı (Watch-dog Timer), devre içi RC osilatör
• *Hata ayıklamada kullanılanabilecek modül (devre içi Debugger)
• *Seçimli osilatör özellikleri
• *Statik tasarım
• *Enerji tasarrufu sağlayan uyku modu ( Sleep Mode) özelliği vardır.
• *Programla kod güvenliği sağlanabilir.
• *Düşük gerilimli programalama özelliğine sahiptir.
• *Sadece 5 V giriş ile devre içi seri programlanabilir.
• *2 pinle programlanabilir.
• *Program belleğine okuma/yazma özelliği ile erişilebilir.
• *2,0 V ile 5,0 V arasında değişen geniş işletim aralığına sahiptir.
• *Kaynak akımı 25 mA dir.
• *Geniş sıcaklık aralığında ve düşük güçle çalışabilir.
• *Devre içi iki pin ile hata ayıklama özelliği vardır.
19. PIC ASSEMBLY 35 KOMUTU
PIC ASSEMBLY KOMUTLARI
Yer Değiştirme ve Yükleme Komutları
Komut ve Örnek İngilizce
tanımı
Türkçe açıklaması
MOVLW K Move
Literal to
W
k sabit değerini W saklayıcısına yükler.
MOVLW h'1A' W←1A. Hexadecimal 1A sayısı W registerine yüklenir.
MOVF f,d Move f f saklayıcısının içeriğini W veya f'e yükler.
MOVF SAYAC,0
d=0 W←SAYAC
d=1 SAYAC←SAYAC
MOVWF F
Move W to
f
W saklayıcısının içeriğini f saklayıcısına yükler.
MOVWF PORTA PORTA←W
Saklayıcı İçeriğini Değiştire Komutları
CLRF F CleaR f f saklayıcısının içeriğini siler (sıfırlar).
CLRF TRISB TRISB←00000000
CLRW CleaR W W saklayıcısının içeriğini siler (sıfırlar).
CLRW W←00000000
COMF f,d Complement f
F saklayıcısının içindeki sayı terslenir. Yani tüm 1'ler
0, 0'lar 1 olur. Sonuç W veya f saklayıcısına yüklenir.
Diğer bir anlamda sayının tümleyeni alınır.
COMF SAYAC,0
SAYAC=10110110 ise,
d=0 W←01001001
d=1 olsaydı SAYAC←01001001
DECF f,d Decrement f
F registerinin içerisindeki sayıyı "1" eksiltir. Registerin içeriği h'00'
ise, "1" eksiltildiğinde h'FF' olur. Sonuç W veya f registerine yazılır.
DECF GIT,1
GIT=h'2C' ise 2C-1=2B
d=1 GIT←2B
d=0 olsaydı W←2B
INCF f,d Increment f
F registerinin içerisindeki sayıyı "1" artırır. Registerin içeriği h'FF' ise,
"1" arttırıldığında h'00' olur. Sonuç W veya f Registerine yazılır.
20. INCF GIT,0
GIT=h'2C' ise 2C+1=2D
d=0 W←2D
d=1 olsaydı GIT←2D
BCF Bit Clear f f registerinin içerisindeki sayının b.ninci bit'ini sıfırlar.
BCF PORTB,5
PORTB=b'1111111’
ise, PORTB←b'11011111'
BSF f,b Bit Set f F registerinin içerisindeki sayının b.ninci Bit'ini 1 yapar.
BSF PORTA,3 PORTA=b'00000000' ise, PORTA←b'00001000'
RLF f,d Rotate Left f
F registeri içerisideki sayıyı bir pozisyon sola kaydırır. Registeriden
taşarak Carry bayrağına yazılan bit, LSB'ye yazılır. Sonuç W veya f
registerine yüklenir.
RLF KAY,0
KAY=b'10110110' ise,
d=0 olduğundan W←01101101
d=1 olsaydı KAY←01101101
RRF f,d Rotate Right f
F registeri içerisindeki sayıyı bir pozisyon sağa kaydırılır.Registeriden
taşarak Carry bayrağına yazılan bit, MSB'ye yazılır. Sonuç W veya f
registerine yüklenir.
RRF KAY,1
KAY=b'10110111' ise,
d=1 olduğundan KAY←11011011
d=0 olsaydı W←11011011
21. Komut ve Örnek İngilizce
tanımı
Türkçe Açıklaması
SWAPF f,d
Swap nibbles
in f
F registerinin içerisindeki ilk dört bit ile son dört biti
yer değiştirir. Sonuç W veya f registerine yüklenirç
SWAPF DEG,1
DEG=b'00101111' ise,
d=1 olduğundan
d=0 olsaydı
DEG←11110010
W←11110010
Program Akışını Kontrol Etme Komutları
GOTO
GOTO
k
DONGU
Go to
address
Program akışı k adresine dallanır.
Program, DONGU etiketinin yazıldığı yere dallanır ve
burdan itibaren devam eder.
CALL
CALL
k
TIMER
Call
subroutine
Program akışı k etiketinin bulunduğu yerdeki alt
programa dallanır Program TIMER etiketinin yazıldığı
alt program satırının bailangıcına dallanır ve buradan
itibaren devam eder.
RETURN
Return from
subrautine
Alt program komutlarının en sonuna yazılan bu
komut, program akışını ana programa geri döndürür.
RETLW
Return With
Literal in W
Program akışını alt programdan ana programa
döndürür ve W regis- terine k sabitini yükler
RETLW H'2F'
Alt programdan ana programa döndürür ve W
registerine 2F yüklenir.
RETFIE
Return From
Interrup
Program akışını kesme alt programından ana
programa döndürür.
BTFSC f,b
Bit Test F,
Skip if
Clerar
F registerinin b.ninci bitini test eder. Eğer bu bit "0" sa
program akışı bir sonraki komuta geçer.
22. BTFSC PORTA,2 PORTA=b'0000100' ise, →1
PORTA=b'00000000' ise, →2
↓←← BTFSC PORTA,2
→→↓
"2"
↓
GOTO
↓
START
←←↓
"1"
↓→→ MOVLW h'FF'
BTFSS f,b
Bit Test F,
Skip if Set
F registerinin b.ninci bitini test eder. Eğer bu bit "1"
se program akışı bir sonraki komuta geçer.
BTFSS PORTA,0 PORTA=b'00000001' ise, →1
PORTA=b'00000000' ise, →2
↓←← BTFSS PORTA,0
→→↓
"1"
↓
GOTO
↓
START
←←↓
"2"
↓→→ MOVLW h'FF'
DECFSZ f,d
Decrement f,
Skip if Zero
F registerinin içeriğini "1" azaltır. Registerinin içeriği
0'sa bir sonraki komuta atlar. Sonuç W veya f
registerine yazılır.
DECFSZSAYAC,1
SAYAC=h'2F' ise, 2F-1=2E
d=0 olsaydı W← h'2E' d=1
olduğundan SAYAC← h'2E'
INCFSZ
INCFSZ
F,d
Increment f,
Skip if Zero
F Registerinin içeriğini "1" arttırır. Registerin
içeriği 0'sa bir sonraki komuta atlar. Sonuç W veya
f registerine yazılır.
SAYAC=h'2F' ise, 2F+1=30
d=1 SAYAC←h'30'
d=0 W←h'30'
23. Mikrodenetleyici Kontorol Komutları
Komut ve
Örnek
İngilizc
e
Tanımı
Türkçe Açıklaması
CLRWD
T
Clear
Watchdog
Timer
Watchdog timer'ı sıfırlar. Ayrıca watchdog timer'ın prescalar
değerini de sıfırlar. Status bit'lerinden TO ve PD'yi "1" yapar.
SLEEP
Go
into
stand
y
mode
Mikrodenetleyiciyi uyuma moduna geçirerek güç harcamasını
azaltır. Mikrodenetleyici uyuma modundan reseti watchdog
timer ce TOCKI giriş vasıtasıyla çıkar.
Mantıksal Komutlar
ANDLW k
AND
Literal With
W
W registerinin içeriği ile k sabitine AND işlemi uygular.
Sonuç W registerine yazılır.
ANDLW
b'0011000
1'
W=b'10011101' ise,
b'00110001' sabitinin
değeri b'00010001'
AND işlemi
sonucu
W←b'00010001'
ANDWF f,d
AND W
with f
W registeri ile file registeri içeriğine AND işelemi uygular.
Sonuç W registerine yazılır.
ANDWF SAYAC,1
W=b'1111111
1' ise,
SAYAC=b'11011
11 ise,
b'11011110' AND işlemi
sonucu
d=0 ise W←b'11011110'
d=1 olursa SAYAC←b'11011110'
24. IORLW k
Inclusive
OR
Literal
with W
W registerinin içeriği ile k sabitine OR işlemi uygular. Sonuç
W registerine yazılır.
IORLW
b'00101000
'
W=b'10000100' ise
b'00101000' sabitin
değeri b'10101100'
OR
sonucu
W ← b'10101100'
IORWF f,d
W registerinin içeriği ile file registerinin içeriğine OR işlemi
uygular. Sonuç W veya f registerine yazılır.
IORWF SAYAC,1
W=b'10000100
' ise,
SAYAC=b'001010
0 ise,
b'10101100' OR sonucu
d=o ise W ← b'10101100'd=1 olursa SAYAC←b'10101100'
XORL
W
k
Exclusive
OR Literal
with W
W registerinin içeriği ile k sabitine XOR işlemi uygular. Sonuç
W registerine yazılır.
XORL
W
b'00101100
'
W= b'11111111' ise
XOR b'00101100 sabitin değeri
b'11010011 XOR sonucu
W ← b'11010011'
XORW
F
F,d
Exclusiv
e OR W
with f
W registeri ile f register file register içeriğine XOR işlemini
uygular. Sonuç W veya f registerine yazılır.
XORW
F
SAYAC,1
W=b'00100000
' ise,
SAYAC=b'001010
0 ise,
b'00001000' XOR sonucu
d=0 ise W ← b'00001000'
d=1 olursa SAYAC←b'00001000'
25. Aritmetik İşlem Komutları
Komut ve Örnek İngilizce
Tanımı
Türkçe Açıklaması
ADDWF f,d
Add W with
f
W registerinin içeriğini f registeri ile toplar. Sonuç W veya f
registe- rine yazılır.
ADDWF TOP,0
W=h'2A' ise, TOP=h'31'ise,
h'2A'+h'31'=h'5B2
d=1 ise
TOP←h'5B' d=0
olduğundan
W←h'5B'
ADDLW k
Add Literal
and W
W registerinin içeriğini k sabit değeri ile tolar. Sonuç W
registerine yazılır.
ADDLW h'2A'
W=h'B0' ise,
h'B0'+h'2A'=h'DA' W← h'DA'
SUBLW k
Subtract W
from
Literal
K sabit değerinden W registerinin içeriğini çıkarır. Sonuç W
registerine yazılır.
SUBLW H'93'
W=h'83' ise,
h'93'-h'83'=h'1 W← h'10'
SUBWF f,d
Subtract W
from
File register
F registerinin içeriğinden W registerinin içeriğini çıkarır.
Sonuç W veya f registerine yazılır.
SUBWF CIK,1
W=h'73' ise,
CIK=h'90' ise, h'90'-h'73'=h'17'
d=0 ise W←h'17'
d=1 olduğundan CIK←h'17'
Sonucun pozitif, negatif veya sıfır olmasına göre
STATUS registerinin C ve Z bitleri kontrol edilir.