Professional Documents
Culture Documents
GR...........................................................................................................................................
MKROLEMC NEDR? ......................................................................................................
MKRODENETLEYC NEDR?............................................................................................
Neden Mikroilemci Deil de Mikrodenetleyici Kullanlyor? ...............................................
MKROLEMC NEDR?
MKRODENETLEYC NEDR?
MKRODENETLEYCLER HAKKINDA GENEL BLGLER
PIC PROGRAMLAMA N NEYE HTYACIMIZ VAR
MKROLEMC NEDR?
Gnmzde kullanlan bilgisayarlarn zelliklerinden bahsedilirken duyduunuz 80386, 80486, Pentium-ll,
Pentium-lll birer mikroilemcidir (Microprocessor). Mikroilemciler bilgisayar programlarnn yapmak istedii tm ilemleri
yerine getirdii iin, ou zaman merkezi ilem nitesi (CPU- Central Processing Unit) olarak da adlandrlr. PC adn
verdiimiz kiisel bilgisayarlarda kullanld gibi, bilgisayarla kontrol edilen sanayi tezgahlarnda ve ev aygtlarnda da
kullanlabilmektedir. Bir mikroilemci ilevini yerine getirebilmesi iin aadaki yardmc elemanlara ihtiya duyar. Bunlar:
Bu niteler CPU chip'inin dnda, bilgisayarn ana kart zerinde bir yerde farkl chip'lerden veya elektronik
elemanlardan oluur. Aralarndaki iletiimi ise veri yolu (Data bus), adres yolu (Address bus) denilen iletim hatlar yapar.
Intel, Cyrix, AMD, Motorola mikroilemci reticilerden birkadr, Gnmzde mikroilemciler genellikle PC
adn verdiimiz kiisel bilgisayarlarda kullanlmaktadr.
MKRODENETLEYC NEDR?
Bir bilgisayar ierisinde bulunmas gereken temel bileenlerden RAM, I/O nitesinin tek bir chip ierisinde
retilmi biimine mikrodenetleyici (Microcontroller) denir. Bilgisayar teknolojisi gerektiren uygulamalarda kullanlmak
zere tasarlanm olan mikrodenetleyiciler, mikroilemcilere gre ok daha basit ve ucuzdur. Gnmz mikrodenetleyicileri
otomobillerde, kameralarda, cep telefonlarnda, fax-modem cihazlarnda, fotokopi, radyo, TV, baz oyuncaklar gibi
saylamayacak kadar pek ok alanda kullanlmaktadr.
Gnmz mikrodenetleyicileri birok chip reticisi tarafndan retilmektedir. Her firma rettii chip'e farkl isimler
vermektedir. rnein Microchip firmas rettiklerine PIC adn verirken, Intel'in rettii ve 1980'lerin banda piyasaya
srd 8051, bazen MCS-51 olarak da adlandrlr.
Bir uygulamaya balamadan nce hangi firmann rn kullanlacana, daha sonra da hangi numaral denetleyicinin
kullanlacana karar vermek gerekir. Bunun iin mikrodenetleyici gerektiren uygulamada hangi zelliklerin olmas gerektii
nceden bilinmesi gereklidir. Aada bu zellikler sralanmtr:
Programlanabilir dijital paralel giri/k.
Programlanabilir analog giri/k.
Seri giri/k ( senkron, asenkron ve cihaz denetimi gibi).
Motor veya servo kontrol iin pals sinyali k.
Harici giri vastasyla kesme.
Timer vastasyla ile kesme.
Harici bellek arabirimi.
Harici bus arabirimi (PC ISA gibi).
Dahili bellek tipi seenekleri(ROM, EPROM, PROM ve EEPROM).
Dahili RAM seenei.
Kayan nokta hesaplamas.
Daha da ayrntya girecek olursak bu listede sralanacak zellikler uzayp gidecektir. imdi de bizim bu kitapta ele
aldmz Microchip'in rn olan PIC'i neden setiimize deinelim. Microchip, 8-bit'lik mikrodenetleyici ve EEPROM
reten bir Amerikan irketidir. Arizona eyaletinde iki, Tayland ve Tayvan'da da birer tane olmak zere toplam drt fabrika ile
kendi alannda dnyada sz sahibi olan bir chip reticisidir.
Neden PIC?
Bilgisayar denetimi gerektiren bir uygulamay gelitirirken seilecek mikrodenetleyicinin ilk olarak tm isteklerinizi
yerine getirip getirmeyeceine, daha sonra da maliyetinin dklne bakmalsnz. Ayrca, yapacanz uygulamann
devresini kurmadan nce setiiniz mikrodenetleyicinin destekledii bir yazlm zerinde simlasyonunu yapp
yapamayacanz da dikkate almalsnz.
Yukarda saydmz zellikleri gz nne aldmzda Microchip'in rettii PIC'leri kullanmak en aklc bir yol olduunu
grlmektedir. te, bu kitapta PIC'leri ele alnmamzn nedenlerini yle sralayabiliriz.
Yazlmn Microchip'ten veya internetten parasz olarak elde edilebilmesi.
ok geni bir kullanc kitlesinin bulunmas.
PIC'lerin ok kolaylkla ve ucuz olarak elde edilebilmesi.
Elektronikle hobi olarak uraanlarn bile kullanabildikleri basit elemanlar kullanarak yaplan donanmla
programlanabilmesi.
ok basit reset, clock sinyali ve g devreleri gerektirmeleri.
PIC, adn ngilizce'deki Peripheral Interface Controller cmlesindeki kelimelerin ba harflerinden alm olan bir
mikrodenetleyicidir. Eer bu cmleyi Trke'ye evirirsek, evresel niteleri denetleyici arabirim gibi bir anlam kacaktr.
PIC gerekten de evresel niteler ad verilen lamba, motor, role, s ve k sensr gibi 1/0 elemanlarn denetimini ok hzl
olarak yapabilecek ekilde dizayn edilmi bir chip'tir. RISC mimarisi ad verilen bir yntem kullanlarak retildiklerinden bir
PIC'i programlamak iin kullanlacak olan komutlar olduka basit ve say olarak da azdr. 1980'lerin bandan itibaren
uygulanan bir tasarm yntemi olan RISC (Reduced Instruction Set Computer) mimarisindeki temel dnce, daha basit ve
daha az komut kullanlmasdr. rnein PIC16F84 microdenetleyicisi toplam 35 komut kullanlarak programlanabilmektedir.
Neden PIC16F84?
Bu kitapta programlanmas ve rnek uygulamalar verilen PlC'in 16F84 serisi olmasnn en nemli nedeni: PIC16F84
(veya PIC16F84A) mikrodenetleyicisinin program belleinin flash teknolojisi ile retilmi olmasdr.
Flash memory teknolojisi ile retilen bir bellee yklenen program, chip'e uygulanan enerji kesilse bile silinmez. Yine
bu tip bir bellee stenirse yeniden yazlabilir. Flash bellekler bu zellikleri ile EEPROM bellekler ile ayn grnmektedirler.
Gerekten de Flash ile EEPROM bellek ayn eylerdir. Ancak baz reticiler tarafndan EEPROM bellee Flash ROM da
denilmektedir.
Flash bellee sahip olan PIC16F84'i programlayp ve deneylerde kullandktan sonra, silip yeniden program yazmak
PIC ile yeni almaya balayanlar iin byk kolaylktr. Bylece ie yeni balayanlar yaptklar programlama hatalar
nedeniyle chip'i atmak zorunda kalmayacaklardr. Geri EPROM program memory'si olan chip'lere de yeniden yazmak
mmkndr ama, bu durumda bir EPROM silici cihazna ihtiya vardr. Bir silici cihaz bulunsa bile program bellekten
silmek iin en azndan 10-15 dk beklemek zorunda kalnacaktr. te PIC16F84'n bu zellii mikrodenetleyici kullanmaya
yeni balayanlar iin ideal bir seenektir.
PIC16F84' sememizin ikinci nedeni de, programlama donanmnn ok ucuz ve kullanl olmas ve hatta ou
merakl elektronik kullanc tarafndan bile retilebilmesidir. Kitabn Ekler blmnde adresini verdiimiz firmann rettii
programlayc donanm ve yazlm demeli olarak istenebilmesi Trkiye'deki kullanclar iin ok byk bir avantajdr.
PIC16F84' programlamak iin rendiiniz her eyi dier PIC 16/17 mikrodenetleyicilerinin uygulamalarnda da
'kullanabilmeniz, yaplan seimin doruluunu gstermektedir.
Metin Editr
Assembly dili komutlarn yazp bir metin dosyas oluturmak iin EDIT veya NotPad gibi bir editr
kullanabilmeniz gerekir. sterseniz ASM uzantl metin dosyalarnz yazabileceiniz PFE editrn de kullanabilirsiniz. Bu
editrn hem DOS hem de VVINDOVVS altnda alan versiyonlar bulunmaktadr ve PIC konusunda destek veren bir
internet sitesinden alnmtr. Ekler blmnde adn verdiimiz firma da bu program disket ierisinde sunmaktadr.
Assembler Program
PIC Assembly dili ad verilen ve toplam 35 komuttan oluan programlama dilini bu kitapta reneceksiniz. Bu
komutlar basit bir editrde yazabiliyoruz. Ancak, ngilizce'deki baz kelimelerin ksaltmasndan oluan bu dilin komutlarn
PIC'in anlayabilecei makine diline eviren bir programa ihtiyacmz vardr. Bu programa assembler adn veriyoruz. Text
dosyas biiminde kaydedilmi olan assembly dili komutlarn makine diline eviren MPASM'nin hem DOS altnda hem de
WINDOWS altnda alan versiyonu bulunmaktadr. Bu program Microchip firmasnn internetteki www.microchip.com
adl sitesinden parasz olarak download edilebilecei gibi kitabn Ekler blmnde adresi verilen firmadan da elde
edebilirsiniz. MPASM'nin kullanm hakknda detayl bilgiyi 5. blmde bulacaksnz.
Microchip bir de ierisinde hem metin editr hem MPASM assembler programn bulunduran MPLAB programn
PIC programlayclarnn kullanmna sunmaktadr. Bu programn bulunduu CD-ROM yine www.microchip.com adresinden
parasz olarak istenebilir. MPLAB'n kurulumu ve kullanlmasyla ilgili gerekli detay bilgiyi Ekler blmnde bulacaksnz.
Yukarda (sada) PIC16F84 ve PIC16C84 mikrodenetleyicileri programlayabileceiniz, ok basit bir donanm
bulunan programlama kart resmi verilmitir. Bu kartla ilgili detayl bilgiyi Ekler blmnde bulacaksnz.
PIC ETLER
Microchip rettii mikrodenetleyicileri 4 farkl gruba (Genellikle aile diye adlandrlr.) ayrarak isimlendirmitir. PIC
ailelerine isim verilirken kelime boyu (VVord lenght) gz nne alnmtr. imdi kelime boyunun ne anlama geldiine
bakalm. Microprocessor veya mikrodenetleyiciler kendi ilerindeki dahili veri saklama alanlar olan registerleri arasndaki
veri al veriini farkl saydaki bit'lerle yaparlar. rnein 8088 mikro ilemcisi chip ierisindeki veri al veriini 16-bit ile
yaparken, Pentium ilemcileri 32-bit'lik verilerle iletiim kurarlar. Bir CPU veya MCU'nun dahili veri yolu uzunluuna
kelime boyu denir.
Microchip PIC'leri 12/14/16 bit'lik kelime boylarnda retmektedir ve buna gre aadaki aile isimlerini vermektedir.
PIC16C5XXailesi 12-bit kelime boyu,
PIC16CXXX ailesi 14-bit kelime boyu,
PIC17CXXX ailesi 16-bit kelime boyu,
PIC12CXXX ailesi 12-bit/14-bit kelime boyuna sahiptir.
Bir CPU veya MCU'nun chip dndaki harici nitelerle veri alveriini ka bit ile yapyorsa buna veri yolu bit says
denir. PIC'ler farkl kelime boylarnda retilmelerine ramen harici veri yolu tm PIC ailesinde 8-bit'tir. Yani bir PIC, I/O
portu aracl ile evresel nitelerle veri alverii yaparken 8-bit'lik veri yolu kullanr.
PIC programlayclar program kodlarn yazarken bir komutun ka bit'lik bir kelime boyundan olutuuyla pek fazla
ilgilenmezler. Seilen bir chip'i programlarken uyulmas gereken kurallar ve o chip'le ilgili zelliklerin bilinmesi yeterlidir.
Bu zellikler PIC'in bellek miktar, I/O portu says, A/D dntrcye sahip olup olmad, kesme (interrupt)
fonksiyonlarnn bulunup bulunmad, bellek tipinin ne olduu (Flash, EPROM, EEPROM vb.) gibi bilgilerdir. Bu
zelliklerin en son deiikliklerini ieren gncel ve tam bir listesine microchip'in kataloglarndan ulamak mmkndr.
Aadaki tabloda Nisan 1997 tarihine kadar retilen PIC'lerin listesi verilmitir. Katalogdan alnan bu tablo orijinali
bozulmadan zellikle ngilizce olarak verilmitir. nk bu gibi bilgilere ulamak istenildiinde Trke kataloglar bulmak
mmkn deildir. Bylece katalog okurken PIC'lerle ilgili zellikleri veren ngilizce kelimeleri renmeye zorlanm
olacaksnz. Tablo ierisinde anlayamadnz kelimelerin anlamlarn kitabn sonundaki szlkten bulabilirsiniz.
PIC'LERIN DI GRN
PIC'ler ok farkl ambalajlarla piyasaya sunulmaktadrlar. Bu kitapta
program rnekleri verilen PIC16F84, 18-pinli DIP tipinde
ambalajlanm olandr. Standart DIP (Dual In-Line Package) olarak
ambalajlanm olan PIC'ler 0.3 in geniliindedir. Her iki tarafnda
0.1 in aralklarla yerletirilmi 9 pin bulunmaktadr. PIC16F84 ekil-a
da grlmektedir. ekil-b de ise 0.6 in geniliinde, her iki tarafnda
0.1 in aralklarla yerletirilmi 20 pini bulunan PIC16C74
grlmektedir. Bu rneklerin dnda farkl pin saysna sahip baka
DIP ambalajl PIC'ler de bulunmaktadr. Geni bilgi iin Microchip'in
kataloglarna bakmanz neririz.
Her bir bellek tipinin kullanlaca uygulamaya gre avantajlar ve dezavantajlar vardr. Bu avantajlar; fiyat, hz,
defalarca kullanmaya yatknlk gibi faktrlerdir.
EPROM bellek hcrelerine elektrik sinyali uygulayarak kayt yaplr. EPROM zerindeki enerji kesilse bile bu program
bellekte kalr. Ancak silip yeniden baka bir program yazmak iin ultra-viole n altnda belirli bir sre tutmak gerekir. Bu
ilemler EPROM silici denilen zel aygtlarla yaplr. EPROM bellekli PIC'ler iki farkl ambalajl olarak bulunmaktadr:
Seramik ambalajl ve cam pencereli olan tip, silinebilir olan tiptir.
Plastik ambalajl ve penceresiz olan tipler ise silinemez (OTP) tiptir.
Seramik ambalajl ve pencereli olan bellek ierisindeki programn silinmemesi iin pencere zerine k geirmeyen bir
bant yaptrlr. Ultra-viole ile silinmesi istenildiinde bu pencere alr ve silici aygt ierisinde belirli bir sre
bekletilir. Plastik ambalajl EPROM'lar ise programlandktan sonra silinmesi mmkn deildir ve fiyat silinebilen tipe gre
olduka ucuzdur. Silinemeyen tipe OTP (One Time Programmable - Bir defa programlanabilir) olarak adlandrlr.
EEPROM bellei bulunan bir PIC ierisine program yazmak iin PIC programlayc vastasyla elektriksel sinyal
gnderilir. EEPROM zerindeki enerji kesilse bile bu program bellekte kalr. Program silmek veya farkl yeni bir program
yazmak istendiinde PIC programlaycdan elektriksel sinyal gnderilir. Bu tip bellee sahip olan PIC'ler genellikle
uygulama gelitirme amacyla kullanlrlar. Microchip bu tip bellee ou zaman FLASH bellek olarak da adlandrmaktadr.
Fiyatlar silinemeyen tiplere gre biraz pahaldr. Bellek eriim hzlar ise EPROM ve ROM'lara gre daha yavatr. PIC
16C84 ve PIC 16F84'ler bu tip program belleine sahiptir.
ROM program belleine sahip PIC'lerin programlar fabrikasyon olarak yazlrlar. EPROM ve EEPROM edeerlerine
nazaran fiyatlar olduka dktr. Ancak fiyatnn dklnden dolay gelen avantaj bazen ok pahalya da mal olabilir.
ROM bellekli PIC programlarnn fabrikasyon olarak yazlmas nedeniyle PIC'in elde edilme sresi uzundur. Programda
oluabilecek bir hatann PIC'e program yazldktan sonra tespit edilmesi, eldeki tm PIC'lerin atlmasna da neden olabilir. Bu
tip PIC'ler ok miktarda retilecek bir rnn maliyetini drmek amacyla seilir. Program hatalar giderilemedii iin
uygulama gelitirmek iin uygun deildir. Microchip, ROM program bellekli PIC'lere para numaras verirken "CR"
(PIC16CR62, PIC16CR84 gibi) harfleri kullanlr.
3
PIC16F84
PIC16F84N PIN GRN
BESLEME GERLM
CLOCK ULARI VE CLOCK OSLATR ETLER
RESET UCU VE RESET DEVRES
I/O PORTLARI
PIC16F84N BELLE
CMOS teknolojisi ile retilmi olan PIC16F84 ok az enerji harcar. Flash bellee sahip olmas nedeniyle clock
giriine uygulanan sinyal kesildiinde registerleri ierisindeki veri aynen kalr. Clock sinyali tekrar verildiinde PIC
ierisindeki program kald yerden itibaren almaya balar. RAO-RA3 pinleri ve RBO-RB7 pinleri I/O portlandr. Bu
portlardan girilen dijital sinyaller vastasyla PIC ierisinde alan programa veri girilmi olur. Program verileri
deerlendirerek portlar kullanmak suretiyle d ortama dijital sinyaller gnderir. D ortama gnderilen bu sinyallerin akm
yeterli olmad durumda ykselte devreleri (rle, transistr v.s) ile ykseltilerek kumanda edilecek cihaza uygulanr.
Portlarn maksimum sink ve source akmlan aada verilmitir. Bu akmlar genellikle bir LED srmek iin yeterli
olduundan, bu kitapta verilen uygulama devrelerinde herhangi bir ykseltme ilemi yaplmamtr.
I/O pini
Sink akm 25 mA
Source akm 20 mA
Hatrlatma amacyla sink ve source akmlarnn ne olduudan bahsedelim. Sink akm, gerilim kaynandan k
potuna doru akan akma, source akm ise 1/0 pininden GND ucuna doru akan akma denir.
PIC16F84'n ektii akm, besleme gerilimine, clock giriine uygulanan sinyalin frekansna ve l/O pinlerindeki yke
bal olarak deiir. Tipik olarak 4 MHz'lik clock frekansnda ektii akm 2 mA' kadardr. Bu akm uyuma modunda (Sleep
mode) yaklak olarak 40 ^A' e der. Bilindii gibi CMOS entegrelerdeki giri ular muhakkak bir yere balanr. Bu
nedenle kullanlmayan tm giriler besleme geriliminin +5V luk ucuna balanmaldr.
PIC16C84 ve PIC16F84 zellikleri tamamen ayns olan PIC'lerdir. Her ikisi de FLASH bellee sahip olmalarna
ramen Microchip ilk rettii EEPROM bellekli PIC'ler "C" harfi (C harfi CMOS'dan gelmektedir.) ile tanmlarken, son
zamanlarda rettii EEPROM bellekli PIC'leri "F" harfi (FLASH) ile tanmlamaktadr. Bizim bu kitapta rneklerini
verdiimiz programlar iin her iki PIC de kullanlabilir. PIC16F84A ile PIC16F84 arasnda da herhangi bir fark yoktur. PIC'i
tanmlayan bu harf ve rakamlardan sonra yazlan 10/P, 04/P clock giriine uygulanacak maksimum frekans belirtir. rnein
10 MHz'e kadar frekanslarda PIC16F84-10/P kullanlrken, 4 MHz'e kadar frekanslarda PIC16F84-04/P kullanlabilir.
BESLEME GERLM
PIC'in besleme gerilimi 5 ve 14 numaral pinlerden uygulanr. 5 numaral Vdd ucu +5 V'a, 14 numaral Vss ucu da
topraa balanr. PIC'e ilk defa enerji verildii anda meydana gelebilecek gerilim dalgalanmalar nedeniyle istenmeyen
arzalar nlemek amacyla Vdd ile Vss arasna 0.1 F lk bir dekuplaj kondansatr balamak gerekir. PIC'ler CMOS
teknolojisi ile retildiklerinden ok geni besleme gerilimi aralnda (2 ~ 6 V) almalarna ramen 5 V luk gerilim
deneyler iin ideal bir deerdir.
Seilecek olan osilatr tipi PIC'in kontrol ettii devrenin hz gereksinimine bal olarak seilir. Aadaki tablo hangi
osilatr tipinin hangi frekans snrlar ierisinde kullanlabileceini gsterir.
RC clock osilatr, PIC'in kontrol ettii elektronik devredeki zamanlamann ok hassas olmas gerekmedii durumda
kullanlr. Belirlenen deerden yaklak %20 sapma gsterebilirler. Bir diren ve kondansatrden oluan bu osilatrn
maliyeti olduka dktr. OSC1 ucundan uygulanan clock frekans R ve C deerlerine baldr. ekilde RC osilatrn clock
giriine balan ve eitli R, C deerlerinde elde edilen osilatr frekanslar rnek olarak verilmitir.
R C fOSC (yaklak)
10 K 20 pF 625 KHz
10 K 220 pF 80 KHz
10 K 0,1 F 85 KHz
Kristal kontroll clock osilatrleri zamanlamann ok hassas olmas gerektiinde kullanlr. Bu tip clock osilatrleri
metal bir kutu grnmndedir ve ekilde grlmektedir. Bu tip osilatrlere kondansatr balants gerekmez. PIC assembly
programlama dili ile yazlan zaman geciktirme (Time delay) dnglerinde yaplacak hesaplamalar kolaylatrmak iin
genellikle 4 MHz'lik kristal clock osilatrleri kullanlmas tavsiye edilir. Bu durumda harici clock frekans (OSC1) 4'e
blndnde, dahili clock frekans 1 MHz olur (OSC2). ou PIC assembly komutu bir komut saykl sresinde (dahili
clock) altndan, bir komutun ilevini gerekletirme sresi 1 mikro saniye olur. Bu sre ise deneysel almalar iin
olduka uygundur.
Kristal ve kondansatr kullanlarak yaplan osilatrler de zamanlamann nemli olduu yerlerde kullanlr. Kristal
osilatrlerin kullanld devrelerde kristale balanacak kondansatrn seimine zen gstermek gerekr. Aada hangi
frekansta ka (F lk kondansatr kullanlacan gsteren tablo grlmektedir.
Seilen kondansatr deerlerinin yukardaki deerlerden yksek olmas, elde edilen kare dalgalarn bozuk olmasna ve PIC'in
almamasna neden olur. C1 ve C2 kondansatrlerin deerleri birbirine eit olmaldr.
Seramik resonatrler, ierisinde kondansatrleri hazr bulunan osilatrlerdir. Fiyatlar ucuz ve hassastrlar
(+/- %1.3 ). Kk bir seramik kondansatre benzeyen resonatrlerin ucu vardr. Bu ulardan ortadaki topraa, dier iki
ucu da OSC1 ve OSC2 ularna balanrlar. Hangi ucun OSC1'e balanaca nemli deildir, her ikisi de balanabilir.
MCLR ucu ise kullancnn program kesip, kasti olarak balangca dndrebilmesi iin kullanlr. PIC'in 4 numaral
MCLR ucuna uygulanan gerilim 0 V olunca programn almas balang adresine dner. Programn ilk adresten itibaren
tekrar alabilmesi iin reset ucuna uygulanan gerilimin +5 V olmas gerekir. Bir buton aracl ile reset ilemini yapan
devre ekilde grlmektedir.
I/O PORTLARI
PIC16F84'n 13 adet giri/k portu vardr. Bunlardan 5 tanesine A portu (RAO-RA4), 8 tanesine de B portu (RBO-
RB7) denir. 13 portun her biri giri ya da k olarak kullanlabilir. PIC ierisinde adna TRIS denilen zel bir data
ynlendirme registeri vardr. Bu register aracl ile portlarn giri/k ynlendirmesinin nasl yaplaca hakknda detayl
bilgiyi programlama konusunda bulacaksnz. I/O portlarndan geebilecek 25 mA lik bir sink akm veya 20 mA lik source
akm LED'leri dorudan srebilir. Bu akmlar ayn zamanda LCD, lojik entegre ve hatta 220 V luk ehir ebekesine bal bir
lambay kontrol eden triyak bile tetiklemeye yeterlidir. k akm yetmedii durumda ykselte devreleri kullanarak daha
yksek akmlara kumanda etmek mmkn olabilir.
B portunun 8 ucu, PIC ierisinde dahili olarak 50 KQ luk direnlerle pull-up yaplm gb etk gsterir. Bu durum
ekilde temsili olarak grlmektedir PIC'in ierisinde gerekte bir pull-up direnci deil, farkl bir mantksal devre vardr.
Bu 8 pull-up direncinin tamam option register ierisindeki yazlm aracyla iptal (Disable) edilebilir veya geerli
(Enable) klnabilir. Port ularndan herhangi birisi k olarak ynlendirildiinde o utaki pull-up direnci otomatik olarak
iptal olur. PIC'e enerji verildiinde (Power-on-reset) ise tm pull-up'lar iptal edilir
A portunun 4. biti, TOCKI ad verilen harici timer/counter giri ucu ile ortaklaa kullanlr. Bu nedenle 16F84'n pin
grn zerinde 3 numaral pin ucuna RA4/TOCKI yazlmtr. RA4 ucu k otarak ynlendirildiinde ak kollektr
ozellgnden dolay harici olarak muhakkak bir pull-up direncine balanmaldr RA4 ucundan sadece sink akm geebilir,
kaynak (source) akm vermesi mmkn deildir.
PIC16F84'N BELLE
PIC16F84 mikrodenetleyicisinin bellei, program ve RAM bellei olmak zere iki ayr bellek bloundan oluur.
Microchip'in kataloglarnda PIC denetleyicilerin RISC ilemci olarak tantlmasnn nedeni de budur. nk Harvard
Mimarisi ile retilen RISC ilemcilerde program bellei ile data bellei birbirinden ayndr. Oysa PC'lerde kullanlan ou
mikroilemci mimarisinde byle bir ayrm yoktur. Bu da demektir ki; burada ayrntsna girmeye gerek grmediimiz
nedenlerden dolay mikroilemciler, mikrodenetleyicilere gre komut ilemede daha yavatrlar.
Program Bellei
PIC16F84'n 1 Kbyte'lk program bellei vardr. Her bir bellek hcresi ierisine 14 bit uzunluundaki program
komutlar saklanr. Program bellei flash (elektriksel olarak yazlp silinebilir.) olmasna ramen, programn almas
esnasnda sadece okunabilir.
PIC16F84'n program bellei ierisinde sadece assembly komutlar saklanr. Bu komutlar dnda RETLW komutu ile
birlikte kullanlan snrl miktarda data da yklenilebilir.
NOT: Yukarda PIC16F84'n program bellek haritasndaki adresler gsterilirken sol tarafta heksadesimal notasyon
kullanlmtr. PIC programlama esnasnda da bellek adresleri bu ekilde yazlr. 0xXX heksadesimal notasyonunda X'ler 0~F
arasndaki herhangi bir sayy, "0x" ise bu saylarn heksadesimal
olduunu belirtir. rnein 0x0F, heksadesimal OF says demektir. 0x3FF ise 3FF heksadesimal saysn gsterir.
PIC16F84'n program belleine 14 bit uzunluunda toplam 1024 tane komut yazlabilir. Bellek haritasnda son bellek
adresinin 0x3FF=1023 gsterilmesinin nedeni, adresin 0'dan balamasndandr. Adres 1'den balasayd son adres
0x400=1024 olacakt.
RAM Bellek
PIC16F84'n 0x00~0x4F adres aralnda ayrlm olan RAM bellei vardr. Bu bellek ierisindeki file registerleri
ierisine yerletirilen veriler PIC CPU'sunun almasn kontrol ederler. File registerlerin bellek uzunluu 8 bit'tir. Sadece
PCLATH registeri 5 bit uzunluundadr. File register ad verilen zel veri alanlarnn dnda kalan dier bellek alanlar,
normal RAM bellek olarak kullanlrlar. Yani bu alanlarda programda ierisindeki deikenler iin kullanlr.
PIC16F84'n RAM bellei iki sayfadan (Bank'tan) meydana gelir. Bank0'daki registerlerin adresleri 0x00~0x4F
arasnda, bank1'deki registerlerin adresleri de 0x80~0xCF arasndadr. Toplam 80 tane file register olmasna ramen
programlamaya yeni balayanlar bank1'de 80, bank 2'de 80 olmak zere 160 register alan olduunu sanrlar. Oysa, dikkat
edilirse baz zel amal registerler her iki bank'ta da grlr. rnein PCL, STATUS, PCLATH, INTCON gibi. Ayrca
0x0C adresinden sonra RAM (data bellei) olarak kullanlan blgedeki veriler 0x8C adresinden itibaren
glgelendirilmitir(shadowed). Glgeleme, otomatik kopyalama ilemi olarak alglandnda anlalmas daha kolay
olacaktr. rnekle izah edecek olursak: 0x8C adresine yazlan bir veri 0x00 adresinde de grlr. te bu sebeplerden dolay
160 deil toplam 80 file register alan vardr.
Bir bank'taki registeri kullanabilmek iin o bank'a gemek gerekir. Bank deitirme ilemi programlama rnekleri
verilirken detayl olarak ilenecektir. Yalnz burada bir eyden daha bahsetmek gerekir. Baz zel registerlerin her iki bank'ta
da grlmesinin nedeni, bank deitirme ilemine gerek duyulmakszn kullanlabilmesi iindir.
NOT: File register haritas zerinde adresleri verilmi olan zel registerlerin ilevini ve nasl kullanldn bu aamada
anlamaya almanz yararsz olacaktr. Programlama rnekleri verilirken ok daha kolay anlayacanz dnceyim.
W register
PIC16F84'n RAM bellek alannda grlmeyen bir de W registeri vardr. W register bir akmlatr veya geici
depolama alan olarak dnlebilir. W registerine direkt olarak ulamak mmkn deildir. Ancak dier registerlerin
ierisindeki verileri aktarrken erimek mmkndr. Bir PIC'te gerekleen tm aritmetik ilemler ve atama ilemleri iin W
register kullanma zorunluluu vardr. rnein iki register iindeki veriler toplanmak istendiinde, ilk olarak registerlerden
birinin ierii W registere aktarlr. Daha sonra da dier registerin ierisindeki veri W registeri ierindekiyle toplanr. Bu
registerin kullanm zellikleri yine programlama konusunda detayl olarak ele alnacaktr.
4
PIC ASSEMBLY
ASSEMBLER NEDR?
PIC ASSEMBLY DL NEDR?
PIC ASSEMBLY DILI YAZIM KURALLARI
PIC ASSEMBLY KONUTLARININ YAZILI BM
SAYI VE KARAKTERLERN YAZILI BM
PIC ASSEMBLY KOMUTLARI
ASSEMBLER NEDR?
Assembler, bir text editrnde assembly dili kurallarna gre yazlm olan komutlar PIC'in anlayabilecei
hexadesimal kodlara eviren (derleyen) bir programdr. Microchip firmasnn hazrlad MPASM bu ii yapan assembler
programdr. Assembler'e ou zaman compilerde (derleyici) denilir.
BTFSC (Bit Test F Skip if Clear) - File registerdeki bit'i test et, eer sfrsa bir sonraki komutu atla, anlamnda
kullanlan ingilizce cmlenin ksaltmasdr.
MPASM assembler programnn yazlan komutlar doru olarak alglayp, PIC'in anlayabilecei heksadesimal kodlara
dntrebilmesi iin u bilgiler program iinde zel formatta yazlmas gerekir:
Komutlarn hangi PIC16XX iin yazld,
Programn bellekteki hangi adresten balayaca,
Komutlarn ve etiketlerin neler olduu,
Programn biti yeri,
Basit bir rnekle bu bilgilerin program iinde nasl yazldn gsterelim. Program ilk olarak PIC16F84'e B portunun
8 ucunu da k olarak tantacak. Daha sonra bu porttaki ilk drt bitini lojik 1, sonraki drt bitini de lojik 0 yapacak. Son
olarak program sonsuz bir dngye girecektir. Bu ilemleri yapacak olan programn ak diyagram ve komutlar aadaki
gibi olacaktr.
Yukarda verdiimiz rnek, programlamaya yeni balayanlar iin karmak gelebilir. Ancak, uzun ve zor programlar
yazmaya baladktan sonra aklamalar yaplm, blmlere ayrlm pic pogramlarnn daha kullanl olduu grlr. nk
programlar bu ekilde yazldnda daha sonraki gelitirmelere aktr. Aradan zaman gese bile bir program gelitirmek iin
tekrar ele aldnzda, program ierisine yazlan aklamalar ihtiyacnz olan hatrlatmalar yapacaktr. imdi de verdiimiz
ayn rnei, her iki yazm biimi arasndaki tercihi kendiniz yapabilmeniz iin blmler arasna boluk vermeden,
aklamalar silerek sadece kolon halinde yeniden yazalm.
LIST P=16F84
STATUS EQU 0x03
PORTB EQU 0x06
TRISB EQU 0x86
ORG 0x00
START
CLRF PORTB
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
MOVLW 0x0F
MOVWF PORTB
DONGU
GOTO DONGU
END
Balk
Programn en bandaki bilgilere balk blm denilir.
========== PICTEST1.ASM =====================10/03/2000======
LIST P=16F84
Balk blmnde program dosyasnn ad ve hazrland tarih, istenirse hazrlayann ad da yazlabilir. lk satr, bir
aklama satrdr ve assembler tarafndan derlenmez.
LIST P=16F84 satr, programn hangi PIC iin yazldn belirtir. LIST bir compiler bildirisidir. Yani compiler'i ynlendiren
bir komuttur ve yegane kullan amac yeri burasdr.
Balk blmnde ayrca verdiimiz rnekte kullanlmayan NCLUDE komutu da kullanlabilir. NCLUDE komutu
adresleri sabit olan STATUS, PORTA, PORTB, TRISA, TRISB gibi zel registerlerin "atamalar" blounda adreslerini her
defasnda belirtme zorunluluunu ortadan kaldrmak iin kullanlan bir compiler bildirisidir. Bu bildirinin kullanl ilerdeki
program rneklerinde daha detayl olarak verilecektir.
Bu kitaptaki tm program rnekleri verilirken yukardaki rnekte verdiimiz bala benzer bir balk kullanlacaktr.
Etiketler
PIC belleindeki bir adresin atand, hatrlamay kolaylatran ksaltmalardan meydana gelen sembolik isimlere
etiket denilir. rnein PORTB etiketi, PIC16F84'n file register belleindeki B portunun bulunduu adresi temsil eden
etikettir. Etiketler program ierisinde 1. kolona yazlr.
PORTB EQU 0x06 ifadesi program ierisinde yazldktan sonra B portunun hangi adreste olduunu aklda tutmaya
gerek yoktur. EQU (eitleme) ifadesidir. Bu ifade BASIC programlama dilindeki (=), PASCAL programlama dilindeki (:=)
ifade ile ayn anlamdadr. Programn herhangi bir yerinde PORTB etiketi kullanldnda, B portunun adresi olan 0x06
yazlm gibi ilem grr.
Birinci kolona yazlan ve adres atanmayan etiketler de kullanlabilir. rnein START ve DONGU bu tip etiketlerdir.
Bu etiketler program akn istenilen bir yere dallanmasn salamak amacyla kullanlr. Program ak yukardan aaya
doru devam ederken GOTO DONGU komutu ile, ak DONGU yazlan etikete dallandrlr. Bu etiketin adresi bir zel
register adresi gibi fiziksel bir adres deildir. Bu ekilde tanmlanan bir etikete assembler otomatik olarak bir adres atar. Bu
adresi bizim bilmemiz gerekmez.
Etiket tanmlarken uyulmas gereken kurallar unlardr:
Etiketler 1. kolona yazlmaldr.
Etiketler bir harfle veya alt izgi( _) ile balamaldr.
Etiketler ierisinde Trke karakterler kullanlamaz.
Etiketler bir assembly komutundan oluamaz.
Etiketlerin ierisinde alt izgi, rakam, soru iareti bulunabilir.
Etiketler en fazla 31 karakter uzunluunda olabilir.
Etiketlerde byk/kk harf duyarll vardr. ("Dng" olarak tanmlanm bir etiketi program ierisinde
"dng" yazarak kullanlamaz.)
Atama deyimi (EQU)
EQU deyimi PIC16F84'n belleindeki bir hexadesimal adresi belirlenen bir etikete atamak iin kullanlr. Aada
atama deyimine birrnek gsterilmitir.
Sabitler
PIC assembly dilinde heksadesimal saylar birer sabittir, Sabitler MOVLW ve baz mantksal ve aritmetik ilem
komutlarnda kullanlrlar.
ORG Deyimi
ORG ingilizcedeki "origin" kelimesinden gelmektedir. ORG deyimi iki ama iin kullanlr.
Sonlandrma Blou
PIC16F84'n duraklama (halt) komutu yoktur. Program belirli bir yerde duraklatmak iin bazen sonsuz dng
kullanlr.
DONGU
GOTO DONGU
END
Yukardaki sonsuz dngde DONGU etiketine assembler otomatik olarak bir adres verir. GOTO DONGU komutu ise
program akn devaml olarak ayn adrese gnderir. Bu durumda program belirlenen adreste duraklatlm olur.
END deyimi ise program komutlarnn sona erdiini assembler'a bildirir. Her program sonunda END deyimi muhakkak
kullanlmaldr. Aksi halde program devam derlenirken dosya sonunun belirtilmediini belirten bir hata mesaj verecektir.
Komutlarn yazl biimlerini aklarken baz tanmlama harfleri kullanacaz. nce bu harflerin anlamlarn
verelim:
f = File register
d = destination (gnderilen yer)
d=0W register
d=1file register
k = Sabit veya adres etiketi b = Bit tanmlayc
b = Binary saylar belirleyen harf (rnein b'00001111' gibi)
d = Desimal saylar belirleyen harf (rnein d'16' gibi)
Byte-Ynlendirmeli Komutlar
rnek: MOVF 0x03, 0 ;0x03 adresindeki file registerin ieriini W registeri ierisine kopyalanr.
MOVF STATUS , 0 ;STATUS registerin ierii W registere kopyalanr.
MOVF STATUS ,1 ; STATUS registerinin ierii yine kendi iine yazlr.
NOT: Byte-ynlendirmeli komutlarda destination (gnderilecek'' yer) belirleyen d'nin yazld yere 0 veya 1 yazmak
hatrlatc olmayabilir. MPASM bunu dikkate alarak 0 yerine w, 1 yerine f yazmaya izin verir. MPASM'nin MS-DOS
versiyonunda ise w ve f harflerinin otomatik olarak kullanlmasna izin verilmez. Bu durumda her programn tanmlama
blmnde aadaki eitlikler yazlmaldr.
W EQU 0
F EQU 1
Bu eitliklerden sonra komutlarda destination belirlemek iin w ve f harfleri kullanlabilir. rnein:
INCF, w ; SAY registerinin ierii 1 arttrldktan sonra sonu W registerine yazlr.(W=SAY+1)
INCF, f ; SAY registerinin ierii 1 arttrldktan sonra sonu yine SAY registeri iine yazlr.
(SAY=SAY+1)
Bit-Ynlendirmeli Komutlar
Kontrol Komutlar
NOT: Program ierisinde yazlan etiketlere assembler'in otomatik olarak adres verdiini unutmayn.
Heksadesimal saylar
Heksadesimal saylar "0x", "0" veya "h" harfleriyle balamaldr. rnein, STATUS registerine 03 adresini atamak
iin aada gsterilen yazl biimleri kullanlabilir.
STATUS EQU 0X03
EQU 3
EQU 03
EQU 03h
EQU h03 (Bu kitapta rneklerde kullanlacak biim)
MOVLW komutu ile W registeri ierisine yklenecek olan FF heksadesimal sabitler ise aadaki gibi yazlabilir.
MOVLW 0xFF
hFF
Eer FF heksadesimal saysn aadaki gibi kullanmaya kalkarsanz almaz
MOVLW FP
FFh
nk kural olarak heksadesimal saylar muhakkak "0" veya "h" harfi ile balamaldr.
Binary Saylar
Binary saylar b harfi ile balamaldr. rnein 00001010 binary saysn W registeri ierisine yklemek iin
aadaki gibi yazlmaldr.
MOVLW b00001010
ANDLM b00001111
Desimal saylar
Desimal saylarn bana d harfi konularak trnak ierisinde yazlrlar. rnein 15 desimal says W registeri
ierisine yklemek iin aadaki gibi yazlmaldr.
MOVLW d15
MOVLW d255
ASCII Karakterler
Genellikle RETLVV komutu ile birlikte kullanlan ASCII karakterler trnak ierisine alnarak aadaki gibi yazlrlar.
RETLW A
RETLW T
CLRW W00000000
RRF F,d Rotate Right f F registeri iersindeki sayy bir pozisyon saa kaydrr.
Registerden taarak Carry bayrana yazlan bit, MSB'ye
yazlr. Sonu W veya f registerine yklenir.
RKF KAY,1
SWAPF f,d Swap nibbles inf f registerinin ierisindeki ilk drt bit ile son drt biti yer
deitirir. Sonu W veya f registerine yklenir.
SWAPF DEG,1 DEG = b' 00101111' ise,
d=1 olduundan DEG11110010
d=0 olsayd W11110010
Program Akn Kontrol Etme Komutlar
GOTO k Go to address Program ak k adresine dallanr.
GOTO DOMGU Program, DNG etiketinin yazld yere dallanr ve
buradan itibaren devam eder.
CALL k Call subroutine Program ak k etiketinin bulunduu yerdeki alt
programa dallanr.
CALL TIMER Program TIMER etiketinin yazld alt program
satrlarnn balangcna dallanr ve buradan itibaren
devam eder.
KETRN Return from subrouitine Alt program komutlarnn en sonuna yazlan bu komut,
program akn ana programa geri dndrr.
RETLW Return with Literal in W Program akn alt programdan ana programa dndrr
ve W registerine k sabitini ykler.
RETLW H'2F' Alt programdan ana programa dndrr ve W registerine
2F yklenir.
RETFIE Return From Interrupt Program akn interrupt alt programndan ana programa
dndrr.
BTFSC f,b Bit Test F, Skip if Clear F registerinin b.inci bit'ini test eder. Eer bu bit "0"sa
program ak bir sonraki komuta geer.
BTFSC PORTA,2
BTFSS f,b Bit Test F, Skip if Set F registerinin b.inci bit'ini test eder. Eer bu bit "1"se
program ak bir sonraki komuta geer.
BTFSS PORTA,0
DECFSZ f,d Decrement f, Skip if Zero F registerinin ieriini "1" azaltr. Register ierii 0'sa bir
sonraki komuta atlar. Sonu W veya f registere yazlr.
DECFSZ SAYAC,! SAYAC=h' 2F ise 2F-1=2E
d=0 olsayd Wh' 2E
d=1 olduundan SAYACh'2E'
INCFSZ F,d Increment f, Skip if Zero F registerinin ieriini "1" arttrr. register ierii "0"sa
bir sonraki komuta atlar. Sonu W veya f registere yazlr.
INCFSZ SAYAC, 1 SAYAC=h' 2F ise 2F+1=30
d=1 SAYACh' 30'
d=0 Wh'30"
Mantksal Komutlar
ANDLW K AND Literal with W W registerin ierii ile k sabitine AND ilemini uygular.
Sonu W registerine yazlr.
ANDLW b 0110001' W = b' 10011101' ise,
b' 00110001' sabitin deeri
b 00010001' AND ilemi sonucu
Wb 00010001'
ANDWF f,d AND W with f W registeri ile file register ieriine AND ilemini
uygular. Sonu W veya f registerine yazlr.
SUBWF f,d Subtract W from file f registerinin ieriinden W registerinin ieriini karr.
register Sonu W veya f registerine yazlr.
SUBWF CIK,1 W=h' 83' ise, CIK=h' 90' ise, h' 90'-h' 83'=h' 07
d=0 ise Wh' 07
d=1 olduundan CIKh07'
Program, PIC'e enerji verince portB'nin 0. bit'ine bal olan bir LED'i direkt olarak yakacaktr. Programa balamadan nce
kullanacamz zel file registerlerin adreslerini vereceiz. Daha sonra da STATUS registerini kullanarak bank deitirme
ileminin nasl yapldn greceiz.
Yukarda grlen RAM haritasnda sadece bu programda kullanlacak olan zel registerler gsterilmitir. Dier
registerlerin ne ie yarad ileriki programlarda sras geldiince verilecektir.
3. Blmde PIC16F84'n RAM'inden bahsedilirken RAM'in iki blmden (Bank0, Bank1) meydana geldiini
sylemitik. RAM ierisindeki bir zel registerin kullanlabilmesi iin, o registerin bulunduu bank'a gemek gerektiinden
de bahsetmitik. imdi bank deitirmenin nasl yapldn grelim.
Bank Deitirme
Bir bank'tan dier bank'a gemek iin STATUS register denilen zel registerin 5. ve 6. bit'inin durumunu deitirmek
gerekir.
STATUS REGSTER
00 Bank 0
01 Bank 1
10 Bank 2
11 Bank 3
PIC16F84'n sadece 2 bank' bulunduundan, sadece 5. bit'in deerini deitirmek yeterlidir. 6. bit'in deeri daima "0"
olmaldr. Zaten PIC'e enerji verildiinde (Power-on reset) 5. ve 6. bit'in deeri "0"dr. Bu bit'ler ayn zamanda dier reset
girileri (MCLR ucundan yaplan harici reset ve Watchdog timer reset) yapldnda da "0" olur. Yani PIC'i altrmak iin
enerji verildiinde direkt olarak bank0 seilmi olur. Bu durumda bank deitirme ilemine gerek duyulmakszn bank0'daki
registerler kullanlabilir.
STATUS registerinin 5. bit'ini "1" yapmak iin BSF komutu, "0" yapmak iin de BCF komutu kullanlr. Aada bank
deitirmek iin kullanlan komutlar grlmektedir.
PortA'nn sadece 5 ucu bulunduundan, TRISA registerinin ilk 5 biti ierisine yazlan veriler PORTA'y ynlendirir.
Dier bit'lerin 0 veya 1 olmasnn hibir nemi yoktur.
PortB'nin 2, 3, 6. bitlerini giri dierlerini k olarak ynlendirmek iin de aadaki konfigrasyon yaplr.
AKI DYAGRAMl
SEMBOLLER
Tm programlama dillerinde olduu gibi
assembly dili programlarn yazmadan nce ak
diyagram izmek iyi bir alkanlktr. Ksa
programlarda, genellikle karar ilemlerinin olmad programlarda ou zaman ak program izmeye gerek duyulmaz.
Ancak uzun ve karmak mantk ilemlerinin youn olduu programlar yazarken direkt olarak komutlar yazmaya balamak
ksa bir sre sonra iinden klmaz hale getirebilir. Bu nedenle programlar yazmadan nce ak diyagramn izerek,
komutlarn hangi sraya gre yazlacan grmek iin grsel bir dnme ortam yaratlm olunur.
Programlama dillerinde ortak olarak kullanlan ak sembolleri vardr. Bu sembollerin neler olduunu ve nerelerde
kullanlacan aada greceksiniz.
AKI DYAGRAMININ
ZILMESI
lk programmz, PIC'e enerji
verdiimizde PORTB'nin 0. bit'ine bal
LED'i otomatik olarak yakacaktr. Buna
gre ak diyagramn izelim.
imdi bu program MPASM'yi kullanarak derlemeden nce, ayn program daha anlalr ve daha ksa yazl biimlerine bir
gz atalm.
Dikkat ederseniz komutlar yazarken kullandmz register ve portlarn RAM bellekteki adreslerini belirttik. rnein;
CLRF h'06"
PORTB'nin RAM bellekteki adresi
BSF h'03", 5
STATUS registerin RAM bellekteki adresi
Registerlerin RAM'daki adreslerini kullanarak komutlar yazldnda, komutun hangi registeri kullandn ilk bakta
anlamak zordur. Bu durumda tm registerlerin adreslerini ezbere bilmek zorunluluunu getirmektedir. Halbuki atama deyimi
(EQU) kullanarak registerleri nceden tantmak daha anlalr komutlar yazmay salayacaktr.
NOT: Hazrladnz DENEME.ASM kaynak dosyasn hangi klasre kaydedeceiniz bazen nemli olabilir. rnein, bizim
bu kitaptaki programlar PIC'e yazdrmak iin kullandmz P16PRO program ".HEX" uzantl programlar sadece belirli
bir klasrden ykleyebilir. Bu klasr de P16PRO.EXE programnn bulunduu klasrdr. MPASM ise kaynak dosyay hangi
klasrden aldysa, oluturaca (.HEX) uzantl dosyay da ayn klasre kaydeder. Bu durumda editrnzde oluturduunuz
".ASM" uzantl dosyay kaydedeceiniz klasr nemli olmaktadr. Eer siz baka bir PIC programlayc program
kullanyorsanz yukarda anlattmz durum geerli olmayabilir. Bu nedenle kullandnz programlarn zelliklerini iyi
renmeniz gerekir.
;===DENEME.ASM====27/04/2000=======
LIST P=16F84 ;PIC16F84'n MPASM'ye tant
PORTB EQU h'06'
STATUSEQU h'03'
TRISB EQU h'86"
CLRF PORTB ;PORTB'ye bal LED'leri sndr
BSF STATUS, 5 ;BANKl'e ge
CLRF TRISB ;PORTB'nin ularn. k yap
BCF STATUS, 5 ;BANKO'a ge
BSF PORTB, 0 , ;PORTB'nin O.bitindeki LED'i yak
END ;Program komutlarnn sonu
Grld gibi komutlarn hangi registeri kulland kolayca anlalmaktadr mein;
BSF STATUS, 5 BANKl'e gemek iin STATUS registerin 5. bitini "1" yap
STATUS
BSF PORTB,0 ;PORTB'nin 0. ucuna bal LED'i ;yakmak iin 0. biti "1" yap.
PORTB
Programn baaryla derlendii "Assembly Successful" mesajyla" anlalr. Ayn zamanda derleme baarl
olduunda 100% yazan pencerenin yeil renge dnmesinden anlalr.
NOT: Kaynak programda(DE^EMEASM) hatalar varsa, pencere ierisindeki mesaj "Errors Found" biiminde olacaktr.
Pencerenin ortasndaki bandn rengi ise krmzya boyanacaktr Eer bylesi bir durumla karlarsanz hatann nedenlerini
bu aamada aratrmanza gerek yoktur. Tek yapacanz ey editr yeniden altrp program iyice inceleyip
kitaptakinden farkl yazdnz yerleri dzeltmenizdir. Elbette ki program kaydedip yeniden derlemeniz gerekecektir.
Hatalarn nedenini ve nasl dzeltileceini ilgili aklamalar ileride verilecektir.
Assembly programn derlediinizde DENEME.HEX adnda hexadesimal kodlara dntrlm olan bir dosya
otomatik olarak kaydedilecektir. Bu dosya, kaynak dosyann(.ASM uzantl) olduu klasrde bulunacaktr.
PIC'leri programlamak iin kullanlan ok deiik elektronik devreler kullanmak mmkndr. Bu devrelerin bazlar
bilgisayarn seri portuna, bazlarda paralel portuna balanmaktadr. Bizim bu kitaptaki programlan PIC'e yazdrmakta
kullandmz set 50'den fazla PIC'i programlayabilen ve adna ProtoPlC denilen elektronik devredir. ProtoPIC, bilgisayarn
paralel portuna balanmaktadr. Bu devrenin kullanm ve elde edilmesiyle ilgili detayl bilgi kitabn ekler blmnde
verilmitir. Programnz PIC'e yazdrmaya balamadan nce ltfen bu blm dikkatlice okuyunuz. Aada ProtoPIC
setinin bilgisayara balan grlmektedir.
HEX uzantl dosyadaki program kodlarn PIC programlama setine paralel veya seri port araclyla PlC'e gnderen
eitli yazlmlar bulunmaktadr. Ancak her yazlm elinizde bulunan programlama setine uygun olmayabilir. Bu nedenle
hangi programlama setini kullanyorsanz o sete uygun yazlm kullanmanz gerekir. ProtoPIC programlama seti iin
hazrlanm olan ve adna P16PRO denilen yazlm bulunmaktadr. Biz bu kitaptaki programlar PIC'e yazdrmak iin
P16PRO'yu kullandk.
P16PRO'nun Balatlmas
P16PRO bir DOS programdr. Ancak bu program Windows altndan da altrabilirsiniz. Eer bilgisayarnz her
alta Windows 95/98 ile balyorsa program DOS ortamndan altrmak iin;
Balat mensnden "MS-DOS Komut lstemi"ni seerek DOS ortamna dnLinnz. Daha sonra C:\P16PRO
klasrne geip, P16PRO yazp "Enter" tuuna basnz.
P16PRO'yu altrmak iin her defasnda DOS ortamna dnmek zor geliyorsa, programnz en kolay olarak masa
stnden altrmaktr. Bunun iin;
Masa stndeyken mouse'un sa tuuna tklaynz. Alan pencereden "Yeni"yi daha sonra da "Ksayol"u seiniz.
Ksayol olutur penceresi aldnda "Gzat" butonuna tklayarak hard diskinizdeki P16PRO.EXE programn
bulup, bu programa uygun bir simge seerek masastne yerletiriniz. Bundan sonra simge zerine tkladnzda
aadaki program penceresi ekrana gelecektir.
Bu pencerede, (.HEX) uzantl program ierisinde konfigrasyon bilgilerinin yer almad ynnde bir uyar
bulunmaktadr. Konfigrasyon bilgilerinin program ierisinde yer almasnn nemi yoktur. nk ayn konfigrasyon
bilgilerini ekrann sa st kesinde bulunan "Fuses" penceresinde grlen deerlere sonradan ayarlamak mmkndr.
F2 tuuna basn ve "Config" penceresindeki sekmeyi TAB ve boluk brakma SPACE BAR kullanarak
konfigrasyonu seip "Enter" tuuna basn. Yeniden ekrana dndnzde ekrann sa st kesinde setiiniz
konfgrasyonu "Fuses" penceresinde greceksiniz.
F4 tuuna basn.
PIC'i yerletirdikten sonra programlamaya balamak iin "Enter" tuuna basn. Yeni alan "Info" penceresinde
srasyla "Programrning", "Verifying", "Blowing fuses", "Verifying fuses" ve "Total time....sec" mesajlarn
greceksiniz. Bu esnada PIC programlama setinin yeil yanp snerek programlama ileminin yapldn
gsterecektir.
Devreye enerji verdiinizde PIC'in RBO bacana bal olan LED dorudan yanacaktr. DENEME.ASM assembly
programn yazarken yapmak istediimiz ey de zaten buydu.
NOT: Bu kitapta verilen programlar yukarda zelliklerini verdiimiz deneme kartnn dizaynna gre verilmitir. Bu
dizaynda PortB'nin tm klarna LED balanmtr. Bu durum programlamaya yeni balayanlarn port klarn
ynlendirme ilemlerindeki karmakl ortadan kaldrr. Kitabn arkasndaki adn verdiimiz firmadan farkl dizaynda
olan deneme kartn satn aldysanz programlarnz yazarken bu kartn zelliklerini dikkate almanz gerekir.
.LST Dosyas
.LST dosyasn kullandnz editrden aabilirsiniz. Bu dosya iki sayfadan olumutur. llksayfada (PAGE 1);
Bellek kullanm haritas ('X'ler kullanlan alan, '-' ler kullanlmayan alan gsterir.)
Kullanlan ve bo kalan alann miktar (DENEME.LST dosyasnda kullanlan alan=5, kullanlmayan alan=1019),
Hata (Error) says, uyar (Warning) says verilir.
.ERR Dosyas
Bu dosyay da kullandnz editrden aabilirsiniz. Eer assembly komutlarnn yazlnda bir hata yaptysanz, hatal
satr numaras ve hatann ne olduu yazldr. Hatasz programlarda bu dosyann ii botur. imdi DENEME.ASM
dosyasnda bir hata yaparak bu dosyada ne yazldn grelim.
Daha sonra da program MPASM ile derleyip, ERR dosyasn editrle grntleyin.
Warning[207) C:\P16PRO\DENEME.ASM 6 : Found label after column 1. (CLR)
Error[122] C:\P16PRO\DENEME.ASM 6 : Illegal opcode (PORTB)
Yazlan kaynak dosyada hata varsa, LST uzantl dosyada da bu hatalar gsterilir. LST uzantl dosyadaki hatalar,
hatann yapld satrdan hemen sonra yazlmas nedeniyle grlmesi daha kolaydr.
INCLUDE DOSYALARI
Assembly programlarn yazarken kullanlacak olan registerlerin adreslerini tanmlama blmnde kullanmak,
program daha anlalr hale getirmektedir. Aslnda PIC16F84 mikrodenetleyicisinin RAM belleindeki zel registerlerin
adresleri sabittir. yleyse adresleri sabit olan registerleri her program yazarken yeniden tanmlamak gereksiz grlmektedir.
Microchip bu durumu gz nne alarak INCLUDE dosyalarn kullanma sunmutur. Header file denilen bu dosyalar
kullanmak suretiyle programlar yazarken her defasnda register adreslerini tanmlama zorunluluu kaldrlmtr. MPASM
ile derlenebilecek her PIC iin ayr bir INCLUDE dosyas bulunmaktadr. Bu dosyalar MPASM programnn bulunduu
klasr ierisindedir. Dosyalar grmek iin editrnz kullanabilirsiniz ya da DOS ortamna dnp D[R komutu ile INC
uzantl dosyalar listeleyebilirsiniz. imdi INCLUDE dosyalarnn ne ie yaradn ve nasl kullanldn grelim.
Editrnzle MPASM klasr ierisine girerek P16F84.INC dosyasn anz. Aadaki listeyle karlaacaksnz.
LIST
;P1684.INC Standard Header File, Version 2.00 Microchip Technology, Inc. NOLIST
;This header file defines configurations,registers,and other useful bits o ;information for the PIC16F84 microcontroller. These names are
taken to match the ;data sheets as closely as possible.
;Note that the processor must be selected before this file is included. The ;processor may be selected the following ways:
;1. Command line switch:
; C:\ MPASM MYFILE.ASM /PIC16F84
; 2. LIST directive in the source file
; LIST P=PIC16F84
; 3. Processor Type entry in the MPASM full-screen interface
;--------------------------------------------------------------------------------
;Revision History
;--------------------------------------------------------------------------------
;Rev: Date: Reason:
Dosyay inceleyecek olursanz RAM ierisindeki tm file registerlerin adresleri EQU komutu ile
tanmlanmtr. Bu durumda P16F84.INC dosyasn kaynak program ierisinde MCUJDE "P16F84.INC" eklinde
yazarsak, aadaki komutlar yazmak zorunda kalmayacaz.
PORTB EQU h'06'
STATS EQU h'03'
TRISB EQU h'86'
Status registerin her bir bit'ine bir isim verildiinden (IRP EQU H'0007, RP1 EQU H'0006', RP0 EQU H'0005'... gibi)
hangi bit kullanlmak isteniyorsa o bitin numaras deil de ismi kullanlabilir. rnein;
BSF STATUS , 5 yerine
BSF STATUS,RPO yazlabilir.
Yukarda sylenenler INTCON, OPTION, EECON1 registerleri iin de geerlidir. Ayrca konfigrasyon bit'lerine de
isim verildiinden, PIC'e yazdrlmas gereken konfigrasyon bit'lerinin hexadesimal karlklar yerine tanmlanan isimler
kullanlr. imdi DENEME.ASM kaynak dosyasn INCLUDE dosyas kullanarak yeniden yazalm. Kodlarn daha da
azaldn greceksiniz.
;===DEMEME.ASM====27/04/2000======
LIST P=16F84 ;PIC16F84'n MPASM'ye tant.
INCLUDE 'P16F84.IMC"
CLRF PORTB ;PORTB'ye bal LED'leri sndr
BSF STATUS, RP0 ;BANKl'e ge
CLRF TRISB ;PORTB'nin ularn k yap
BCF STATS, RP0 ;BANKO'a ge
BSF PORTB, 0 ;PORTB'nin 0.bitindeki LED'i yak
END ;Program komutlarnn sonu
lk programmzda konfigrasyon bit'lerini yazmadmz grdnz. Aslnda program ierisinde yazma zorunluluu
da yoktur. nk ou PIC programlayc yazlm, bu bit'lerin program PIC'e yazdrma esnasnda yazlabilmesi veya
deitirilmesi iin olanaklar tanmtr. rnein, P16PRO programlaycsnda F2 tuuna basarak ekrana getirdiimiz
pencerede bu konfigrasyonu yapabiliyoruz.
Yukardaki konfigrasyon tanmlamalarn kullanarak DENEME.ASM programn yeniden yazalm. Koul tanmnn
"_CONPG" komutuyla baladna ve her bir koul tanm arasnda bir boluk ve "&" iareti bulunduuna dikkat ediniz.
;===DENEME.ASM====27/04/2000 =======
LIST P=16F84 ;PIC16F84'n MPASM'ye tant
INCLUDE "P16F84.INC"
_CONFIG _CP_OFF S_WDT_OFF ;_PWRTE_OFF S_RC_OSC
CLRF PORTB ;PORTB'ye bal LED'leri sndr
BSF STATUS, RP0 ;BANKle ge
CLRF TRISB ;PORTB'nin ularn k yap
BCF STATUS, RP0 ;BANK0a ge
BSF PORTB, 0 ;PORTBnin 0.bitindeki LED'i yak
END ;Program komutlarnn sonu
6
VER TRANSFER ve KARAR LEMLER
W REGISTERNN KULLANIMI (MOVLW, MOVWF KOMUTLARI)
BIT TEST EDEREK KARAR VERME (BTFSC, BTFSS)
lem Basamaklar
1. Program editrnzde yazdktan sonra, PROG1.ASM adyla kaydediniz. Daha sonra da MPASM ile derleyiniz.
2. PIC programlaycnz blgisayannza balayp PIC'i programlaynz. Programlama esnasnda aada verilen
konfigrasyona dikkat ediniz.
Osilatr tipi RC,
Watchdog timer(WDT) OFF,
Power Up Timer(PWRT) ON,
Code Protect (CP) OFF
P16PRO programnn sa st tarafndaki Fuses penceresi aadaki gibi olmaldr.
Sonsuz Dng
PIC16F84 mikrodenetleyicisinde duraklama komutu olmad iin yukardaki programda bu ilemin yerine geen
aldatc bir duraklama uyguladk. Programn en sonunda GOTO komutu ile programn ak DONGU etiketine gnderildi.
Grld gibi DONGU etiketi ile GOTO komutu arasnda ilem yapan hibir PIC komutu bulunmamaktadr. Bu durumda
program sonsuz dng ierisine girmitir.
Sonsuz dng ierisine istenirse komut yazlabilir. Bu durumda RESET tuuna baslana kadar ya da PIC'in enerjisi
kesilene kadar ayn komutlar defalarca tekrarlanabilir. imdi PROG1.ASM'de ok kk deiiklik yaparak bu ilemi
grelim.
PROGRAM-2) A portunun ularna bal butonlara basld srece, B portunda o butona karlk gelen LED'i sndren
program.
Bu programda A portundaki RA0-RA4 ularnn devaml olarak okunup B portuna gnderilmesi gerekiyor. Bunu
devaml olarak yapabilmek iin program "BASLA" etiketine gnderip, sonsuz dngy buraya kurmak gerekiyor. Ak
diyagramn yeniden izelim.
Programn PROG1.ASM ile arasndaki tek fark GOTO komutunun yazld satr
olacaktr.
lem Basamaklar
1. PROG1.ASM' yi editrnze ykleyerek GOTO ile balayan satr
aadaki gibi deitiriniz. Yeni program PROG2.ASM adyla
kaydediniz.
GOTO BASLA ;Okumay tekrarla
2. Program derledikten sonra PIC'e yazdrnz.
3. PIC16F84' yukarda kurduunuz devreye veya deneme kartna
yerletirip program altrnz.
4. Programn almas esnasnda buton/butonlara basarak snen
LED'leri izleyiniz.
PROGRAM-3) PortB'nln 0. bitine bal LED'i, A portunun 1. bit'indeki butona basnca yakan program.
;===PROG3.ASM====22/05/2000=======
LIST P=16F84
PORTA EQU h'05"
PORTB EQU h'06'
STATUS EQU h'03'
TRISA EQU h'85'
TRISB EQU h'86'
CLRF PORTB ;PORTB'ye bal LED'leri sndr
BSF STATUS, 5 ;BANKl'e ge
CLRF TRISB ;PORTB'nin ularna. k yap
MOVLW h'FF' ;W registere h'FF' ykle
MOVWF TRISA ;PortA'nn ularn giri yap
BCF STATUS, 5 ;BANKO'a ge
TEST_PORTA
BTFSC PORTA, 1 ;A portunun 1. bitini test et
GOTO TEST_PORTA ;0 deilse tekrar test et
BSF PORTB, 0 ;B portunun 0. Bitini l(Bet) yap
DONGU
GOTO DONGU
END
lem Basamaklar
1. Programn tanmlamalar blmnde INCLUDE komutunu kullannz. Program PROG3.ASM olarak kaydediniz.
2. Program derledikten sonra PIC'e yazdrnz.
3. PIC16F84' deneme kartna yerletiriniz.
4. Program altrdnzda LED'lerin snk olduunu izleyiniz.
5. A1 butonuna basarak RBO ucuna bal LED'in yandn grnz.
KENDNZ UYGULAYINIZ
Farkl butonlara (A2 veya A4'den birisini ) basnca, B portundaki (RBO-RB4 ularna bal herhangi birisi) bir LED'i
yakan program kendiniz yaznz ve deneme kart zerinde almasn grnz.
PROGRAM-4) A portunun 2. bit'indeki butona basnca B portuna bal tm LED'leri yakan program.
Bu programn PROG3.ASM'den tek fark portB'ye gnderilecek olan verinin farkl (b'00000001' yerine
b111111111) olmasdr. BCF veya BSF komutlaryla sadece bir bit'i 0(clear) veya 1(set) yapabiliyoruz. Bu nedenle bu
komutun kullanld yerde deiiklik yapmamz
lem Basamaklar
1. PROGS.ASM'yi editrnze ykleyip "TEST_PORTA" etiketinden sonra yazlanlar aadaki gibi deitiriniz.
Yeni program PROG4.ASM olarak kaydediniz.
TEST_PORTA
BTFSC PORTA, 2 ;PortA'nn 2. Biti 0(clear) nu.?
GOTO TEST_PORTA ;Tekrar test et
MOVLW H'FF' ;W registere b'11111111' ykle
MOVWF PORTB ;W registeri portB'ye gnder
DONGU
GOTO DONGU
END
2. Program derledikten sonra PIC16F84'e yazdrn.
3. PIC' breadboard zerine kurduunuz devre zerinde ya da deneme kartnda altrnz.
4. A2 butonuna basnca B portundaki tm LED'lerin yandn grnz.
PROGRAM-5) A portunun 4. bitine bal olan buton basl tutularak PIC'e enerji verildiinde, B portundaki LED'leri snk
tutan, butondan el ekildiinde ilk drt LED'i yakan program.
Bu programn PROG4.ASM'den fark BTFSC komutu yerine BTFSS komutunu kullanmak zorunda oluumuzdur.
nk A portunun 4. bit'indeki butonu basl tutuumuzda buradaki veri 0(clear)dr. Butondan elimizi ektiimizde veri
1(set)tir. Butona basl durumdayken LED'lerin snk kalabilmesini salamak iin BTFSS komutuyla program ak
"TEST_PORTA" etiketine gnderilmelidir. Buna gre ak diyagramnn sadece deien blmn yeniden izelim.
lem Basamaklar
1. Editrnze PROG4.ASM'yi ykleyerek aadaki deiiklikleri
yapnz. Yeni program PROG5.ASM adyla kaydediniz.
TEST_PORTA
BTFSS PORTA, 4 ;PortA'nn 4. bit'i l(set) mi?
GOTO TEST_PORTA ;Hayr, tekrar test et
MOVLN H'0F' ;Wregistere b00001111 ykle
MOVWF PORTB ;W registeri portB'ye gnder
DONGU
GOTO DONGU
END
2. Program PIC16F84'e yazdrdktan sonra deneme devresine
yerletiriniz.
3. A4 butonunu basl tutup, PIC'e gerilim uygulaynz.
4. Butona bastnz srece LED'lerin snk kaldn, elinizi eker ekmez B portundaki ilk 4 LED'in yandn
izleyiniz.
5. Yeni denemeler yapmak iin RESET butonuna basarak program tekrar altrn.
7
DNG DZENLEMEK
SAYA KULLANARAK DNG KULLANMAK (DECFSZ KOMUTU)
KARILATIRMA LE DNG DZENLEMEK (SUBLW, SUBWF KOMUTLARI)
STATUS REGSTER
DECPSZ SAYAC, F
;SAYAC=SAYAC-1, SAYAC=0 m?
GOTO TEST ;Hayr,
PortA'ya. test et
BSF PORTB, 0 ;Evet, PortB 0. bitini
1 yap
END
lem Basamaklar
1. Program yazdktan sonra PIC'i programlaynz.
2. PIC'i deneme kartna yerletiriniz.
3. A1 butonuna ksa srelerle 10 defa basnz.
NOT: Butona basma says 10'a ulamadan PortB'nin 0. bit'indeki LED'in yandn greceksiniz. Sebebini yle
aklayabiliriz;
A1 butonu pull-up yaplmtr. Yani butona baslmadnda +5V'ta dr. Basldnda ise OV olur. Butona 2 defa
basldmz dnerek PortA'nn RA1 ucundaki gerilimin erisini aadaki gibi izelim.
SUBWF Komutu
SUBWF komutu karma yapan bir komuttur. Aadaki yazm kuralna gre W registerin ieriini file registerden
karr. Sonucu W register ierisine yazar.
karma sonucunda etkilenen C ve Z flag ierisindeki deer, W ve file registerin byklklerine baldr.
SUBLW Komutu
SUBLW komutu karma yapan bir komuttur. Aadaki yazm kuralna gre sabit (L) ierisinden W registeri ieriini karr. Sonucu
W registere yazar.
lem Basamaklar
1. PIC' programlayp deneme kart zerine yerletiriniz.
2. PIC'i altrnz. PortB'nin LED'lerinin aadaki gibi yandn grnz.
76 543210 000Cr
Sabitin deeri h'05', W registerin deerinden h'04" byk olduundan C flag'n (STATUS registerin 0. bit'i) deeri
"1", Z flag'n (STATUS registerin 2. bit deeri de "0". olacaktr. Bu nedenle sadece portB'nin 0. bitine bal olan LED
yanacaktr. Dier LED'lerin neden yank olduunu anlamak iin STATUS register hakknda aada verilen detayl bilgileri
inceleyiniz.
KENDNZ UYGULAYINIZ
Sabit deere W registerden byk veya eit deerler girerek, PIC'i yenider programlaynz. Daha sonra da PIC'i
altrarak STATUS registerin durumunu LED'lerden izleyiniz.
STATUS REGISTER
STATUS register ALU'nun (Aritmetik Logic Unit) aritmetiksel durumunu (Zero ve Carry flag registerleri) ve RESET
durumunu ieren verileri bulundurur. Ayrca iki bitlik veri de data memory'deki (RAM) bank seme bitleri iin ayrlmtr.
STATUS registerin ierii bir ok komutun almas neticesinde bit'ler deiir. STATUS registerin Z, DC veya C
bitlerini etkileyen bir komut kullanldnda bu bitlere yazma ilemi yaplamaz. Bu bitlerin 1 veya 0 olm;
durumu kullanlan PIC'e baldr. Bank semek iin kullanlan RPO ve RP1 bitlerini yazmak mmkn olduu halde, TO ve
PD bitlerine yazma ilemi yasaklanmtr. Bu nedenle bir STATUS registeri etkileyen bir komutun altrlmas sonucunda
etkilenen bitler beklenenden farkl olabilir.
rnein, CLRF STATUS en yksek biti 0(sfr), Z bit'ini ise 1(bir) yapar. Bu durumda STATUS register "000u u1uu"
olarak kalr. (Buradaki "u" nun anlam unchanged deimezdir.)
Aadaki tablo STATUS registerin her bir bit'inin hangi durumlarda 1 ve 0 olacan gsterir.
RP1 RP0 TO PD Z DC C
IRP
;===PROG9.ASM====05/06/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
lem Basamaklar
1. Program PIC'e yazdrp, deneme katnza veya breadboard zerine kurduunuz devreye yerletiriniz.
2. PIC'e gerilim uygulaynz.
3. PortB'deki LED'ler birka mikrosaniye sonra h'06' saysn binary olarak gsterecektir.
76543210
oooooo
Sonu: PIC'e gerilim uyguladktan sonra, PortB'de yukardaki saynn gsterilmesine kadar geen sre, dngnn
alma sresidir. Bu sre dngnn tekrar saysyla doru orantldr. MOVLW h'07' satrnda W registeri ierisine atanan
h'07' says yerine baka bir say yazmak suretiyle dngnn tekrar etme says deitirilebilir.
Yukardaki programda, dng ierisine tekrar edilecek herhangi bir komut yazlmamtr (Programda verilmek istenen
konunun zn daha karmak hale getirmemek iin). Eer bir komutu nceden tespit ettiiniz sayda almasn
istiyorsanz, bu dng ierisine yazabilirsiniz.
KENDlNZ UYGULAYINIZ
SAYAC ierisine ve W register ierisine konulacak saylar kendiniz tespit ederek LED'lerin binary 9 saysn
gstermesini salayan program kendiniz yapnz. LED'ler aadaki gibi yanmas gerekir.
PIC16F84'n osilatr giriine 4 MHzlik bir kristal osilatr frekans uygulanrsa, PIC16F84 bu frekans kendi
ierisinde 4'e bldnde, 1 MHzlik bir dahili frekans elde edilir. Bu frekansn bir saykl (T=1/f=1/1MHz=1 S )bir
komutun icra sresidir.
rnein, PIC16F84" uygulanan XC osilatrn frekans 10 MHz ise, CLRF PORTB ve BSF STATUS, 5 komutlarnn
alma srelerini yle gsterebiliriz:
10 MHzlik frekansn bir saykl T=1/f =1/106 Sn=0.1 S eder. Dahili komut saykl ise 4x0.1S eder.
PIC16F84 mikrodenetleyicisinin komutlarndan 10 tanesi hari dierleri 1 komut saykl sresinde alr. Bu komutlar
aadakilerdir.
N saysnn bulunmas
PIC'e 4 MHzlik frekans uygulandnda bir komut sayklnn 1 S olacan biliyoruz. Bu durumda N saysn
belirlemek kolaydr. 100Slik bir gecikme iin 100 saykllk bir gecikme dngs oluturulmaldr. N saysn hesaplarsak
N=KSS/3= 100/3=33.3 olmaldr. Bu say yaklak 33 desimal saysdr. Heksadesimale dntrrsek, h'21'eder.
zetlersek, 4 MHzlik harici clock frekansnda 100 Slik gecikme oluturan dngde SAYAC registeri ierisine
atanan say h'21' olmaldr.
PIC'e uygulanan frekans 4 MHz dan farkl olursa bu defa KSS saysn bulmak iin bir forml retelim;
PIC'e uygulanan harici frekansa f, dahili komut frekansna fk dersek;
Dahil komut frekans(fk)= f/4 olur. Komut saykl Tk=1/fk olur. (Bir komutun alma sresi)
fk y yerine koyarsak:
KSS=3xN olduunu daha nce bulmutuk. imdi N'i yalnz brakarak KSS' nin yukarda bulduumuz eitliini yerine
koyarsak;
N=KSS/3 burada KSS'yi yerine koyalm.
GSf
GSf neticede N=GSxf/12 formlyle N says bulunur.
N= 4 =
3 12
rnek: 300 Slik gecikme yapan zaman geciktirme dngsnde, N says ka olmaldr?
(PIC'e bir kristal osilatrden 10 MHzlik frekans uygulanmaktadr.) GS=300S, f=10MHz N=GSxf/12 N=300x10/12=250
250 saysn heksadesimale dntrrsek, N=h'FA' olarak buluruz.
lem Basamaklar
1. PIC'i programlayarak deneme kartnza veya breadboard zerine kurduunuz devre zerine yerletiriniz.
2. Deneme setine gerilim uygulayarak PortB'deki tm LED'lerin belirli aralklarla yanp sndn grnz.
3. SAYAC1 ve SAYAC2 deikenleri ierisine atanan saylan deitirerek LED'lerin 0.5 sn aralklarla yanp-snmesini
salaynz.
PROGRAM-11) PortA'nn 1. Numaral ucuna bal butona 10 defa bastktan sonra PortB'deki tm LED'leri yakan program.
Bu program 7. blmde dngleri anlatrken yaptmz rnekte uygulamtk. Ancak A portuna bal butonda
meydana gelen ark sndrmek iin dzenlediimiz dng bunu engelleyemediini grdnz (Gecikme zaman ok ksa
olduu iin.) imdi gecikme zamann istediimiz kadar ayarlayabildiimiz program dnglerini rendiinize gre, bu
ilemi tam olarak gerekletiren PIC' programlayalm.
;===PROG11.ASM====08/06/2000=======
LIST P=16F84
INCLUDE "P16F84.IMC"
SAYACl EQU h'OC'
SAYAC2 EQU h0D
MEM EQU h'OE'
CLRF PORTB ;PortB'yi sfrla
BSF STATUS, 5 ;BANK2'ye ge
CLRF TRISB ;PortA'nn 1. Bit'i giri
BSF TRISA, 1 ;portB'nin ular k
BCF STATUS, 5 ;BANKl'e ge
CLRF MEM ;MEM registerini sfrla
TEKRAR
BTFSC PORTA, 1 ;PortA'nn l.bit'i 0 m?
GOTO TEKRAR ;Hayr, tekrar test et
INCF MEM ;Evet, MEM=MEM+1
MOVF MEM,W ;WMEM
SUBLW d'l0' ;W = d'l0' - W
BTFSC STATUS,2 ;STATUS'un 2.bit'i 0 m ?
GOTO YAK ;Hayr, Z=1
CALL GECIKME ;Evet, buton arknn snmesini bekle
GOTO TEKRAR ;Butonu test iin baa git YAK
MOVLW hFF ;WhFF
MOVWF PORTB ;PortB'deki tm LED'leri yak DONGU
GOTO DONGU
;===========; Gecikae alt program.===========
GECIKME
MOVLW h'FF'
MOVWF SAYACl
DONGU1
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYACl, F
GOTO DONGUl
RETURN
END
lem Basamaklar
1-) PIC'i programlayarak deneme kartnza yerletriniz.
2-) Deneme kartna gerilim vererek PIC' altrnz.
3-) A1 butonuna belirli aralklarla 10 defa basnz. Butona 10. defa bastnzda portB'deki tm LED'lerin yandn
grnz.
9
BT KAYDIRMA ve MANTIKSAL LEM
KOMUTLARI
SOLA KAYDIRMA (RLF)
SAA KAYDIRMA (RRF)
COMF ve SWAPF KOMUTLARI
MANTIKSAL LEM KOMUTLARI
PROGRAM-12) PortB'ye bal 8 LED zerindeki bir LED'in yann belirli aralklarla kaydran (LED0'dan LED7'ye doru)
program. Yanarak kayan LED en sona geldiinde tm LED'ler snk kalr.
;===PROG12.ASM====09/06/2000=======
LIST P=16F84
INCLUDE "P16F84.IHC"
SAYACl EQU h'0C'
SAYAC2 EQU h'0D'
CLRF PORTB ;PortB'yi sfrla
BCF STATUS, 0 ;Carry flag' sfrla
BSF STATUS, 5 ;BANKl'e ge.
CLRF TRISB ;PortB'nin tm ular ka.
BCF STATUS, 5 ;BANK0'a ge.
MOVLW h'0l' ;b'0000000l' saysn W'ye ykle
MOVWF PORTB ;W registerini PortB'ye ykle
TEKRAR
CALL GECIKME ;Gecikme yap
RLF PORTB, F ;PortB'deki veriyi sola kaydr.
BTFSS STATUS, 0 ;Carry flag 1 mi?
GOTO TEKRAR ;Hayr,
DONGU
GOTO DONGU ;Evet, Sonsuz dngye gir. GECIKME ;Gecikme alt program
MOVLW h'FF'
MOVWF SAYACl
DONGUl
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYACl, F
GOTO DONGUl
RETURN
END
lem Basamaklar
1. PlC'i programlaynz. Deneme kartnza yerletirerek gerilim uygulayp devreyi altrnz.
2. En soldaki bit'ten balayarak saa doru yanan LED'i izleyiniz. Program bittiinde tm LED'ler snk kalacaktr.
Program tekrar altrmak iin RES tuuna basnz.
SAA KAYDIRMA
RRF komutu, belirlenen bir file register ierisindeki bit'lerin pozisyonunu her defasnda bir saa kaydrmak iin kullanlr. Register
ierisindeki bit'ler saa kaydnda LSB bit'i, STATUS registerde bulunan carry flag ierisine yazlr. Carry flag ierii ise registerin
MSB bit'ine yazlr.
;===PROG13.ASM====12/06/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYACl EQU h'0C'
SAYAC2 EQU h'0D'
CLRF PORTB
BCF STATUS, 0 ;Carry flag' sfrla
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5
MOVLW h'0l' ;b'0000000l' saysn W'ye ykle
MOVWF PORTB ;W registerini PortB'ye ykle
SOL CALL GECIKME ;Gecikme yap
RLF PORTB, F ;PortB'deki veriyi sola kaydr.
BTFSS PORTB, 7 ;PortB 7. Bit 1 mi?
GOTO SOL ;Hayr, sola kaydr.
SAG CALL GECIKME ;Gecikme yap
RRF PORTB, F ;PortB'deki veriyi saa kaydr.
BTFSS PORTB, 0 ;PortB 0. Bit 1 mi?
GOTO SAG ;Hayr, saa kaydr
GOTO SOL ;Evet, sola kaydr.
GECIKME ;Gecikme alt program
MOVLW h'FF'
MOVWF SAYACl
DONGUl
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYACl, F
GOTO DONGUl
RETURN
END
lem Basamaklar
1. PIC'i programlayp, deneme kart zerine yerletirerek altrnz.
2. Yanan LED'in nce en sola ulatktan sonra bu defa saa doru kaydn ve bu ilemin devaml olarak tekrar
ettiini grnz.
Yanan LED'in en sola ulatnda PORTB'nin 7. Bitinin "1" olup olmad kontrol edildiine dikkat ediniz. Yanan
LED en saa ulatnda da 0. bit kontrol edilmektedir.
MOVNF MEM
COMF MEM, F MEM
0 0 0 0 1 1 1 1
1 1 1 1 0 0 0 0
PROGRAM-14) PortB'deki LED'leri dnml olarak ilk nce ilk drt bit'indeki, sonra da son drt bit'indeki LED'leri
yakan program.
===PROG14.ASM====14/06/2000=======
LIST P=16F84
INCUJDE "P16F84.INC"
SAYACl EQU h0C
SAYAC2 EQU h0D
CLRF PORTB
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5
MOVLW h0F ;b'00001111' saysn W'ye ykle
MOVWF PORTB ;w registerini PortB'ye ykle
TERSLE
COMF PORTB, F ;PortB'deki veriyi tersle
CALL GECIKME ;Gecikme yap
GOTO TERSLE
GECIKME ;Gecikme alt program
MOVLW h'FF'
MOVWF SAYACl
DONGUl
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYACl, F
GOTO DONGUl
RETURN
END
lem Basamaklar
1.
Program PIC'e yazdrdktan sonra deneme kartna takp, gerilim uygulaynz.
2. PortB'deki LED'lerin dnml olarak ilk nce ilk drt tanesi daha sonra son drt tanesinin aralklarla yandn
grnz.
SWAPF komutu, seilen bir file register ierisindeki verinin ilk drt bit'iyle son drt bit'ini yer deitirir. Yazl
aadaki gibidir.
SWAPF File Register d Destination (Gidecei yer) W veya F
MEM adl bir file register ierisine h'C6' verisi yerletirilirse SWAPF komutu altrldnda oluan durumu
ematik olarak aadaki gibi gsterebiliriz.
MOVLW hC6
MOVWF MEM
SWAPF MEM, F
ANDWF Komutu
Seilen bir f'le register ile W register ieriini AND'ler, sonu W veya F register ierisine yazlr. Komutun yazl
aadaki gibidir.
ANDWF File Register d Destination (Gidecei yer) W veya F
rnein, PORTA registerinin ierii b'00101100' olsun. W registerin ierisine b"l 1011111' verisi yerletirerek 5.
bit'in ieriini "0" yapan ve PORTB'ye gnderen komutlar yazalm.
MOVLW b'11011111
AMDWF PORTA, W
MOVWF PORTB
DONGU
GOTO DONGU
IORWF Komutu
Seilen bir file register ile W registerin ieriini OR'lar, sonucu W registere ya da file registere yazar. Komutun
yazl aadaki gibidir.
IORWF File Register d Gidecei yer W veya F
XORWFKomutu
Seilen bir file register ile W registerinin ierii XOR'lanr. Sonu W veya F register ierisine yazlr. Komutun
yazl aadaki gibidir.
XORWF File Register d Destination (Gidecei yer) W veya F
KOMUT AIKLAMA
ADDLW Sabiti W registerden karr.
ADDWF W registerle F(file) registerini toplar.
SUBLW Sabitten W registerini karr.
SUBWF F registerden W registerini karr.
RLF F register ierisindeki bit'leri bir sola kaydrr.
(Bit'lerin dn Carryflag aracl ile olur.)
RRF F register ierisindeki bit'leri birsaa kaydrr.
(Bit'lerin dn Carryflag aracl ile olur.)
PIC16, 0-255 arasndaki 8 bit'lik saylar pozitif saylar olarak ele alr. Negatif bir say 2'nin complement'i (tersi)
alnmas suretiyle ifade edilerek toplama veya karmas yaplabilir. Ancak bu ilem, kitabmzn hedefledii teknik bilginin
zerindedir. Bu nedenle sadece 8 ve 16 bit'lik pozitif saylar toplama karma \e arpma ilemlerini renerek mikro
denetleyicilerle yapabileceiniz olduka kullanl programlar yapabileceksiniz.
0-255 saylar arasndaki 8 bit'lik toplamada, carry flag elde edilen sonucun 8 bit'in dna tap tamadn gsterir.
Eer, Carry Flag=0 ise, sonu 8 bit'ten fazla deildir.
Carry Flag=1 ise, sonu 8 bit'ten fazladr. Yani tama vardr.
0-255 saylar arasndaki 8 bit'lik karmada,carry flag, elde edilen sonucun negatif veya pozitif olduunu gsterir.
Eer, Carry Flag=1 ise, sonu pozitiftir. Carry Flag=0 ise, sonu negatiftir.
karma ileminde Carry Flag (Tama bayra) gerekten bir tama ilemini gstermediine dikkat ediniz. PIC16'nn
STATUS registerinde dn alma (Borrovv Flag) olmadndan, Carry Flag'n "0" olma durumunu dn alma olarak
deerlendirilir. Bu konuyu 16 bit karma ilemini anlatrken daha jyi anlayacaksnz.
8 - BIT TOPLAMA
Bir byte'lk iki say iki ekilde toplanabilir. ilki, W register sabit bir say ile toplanr(ADDLW), sonu W registere
yazlr. ikincisi, W registerle bir file register ierii toplanr(ADDWF), sonu W veya F registere yazlr.
ADDLN h'02' ; h'02' saya-s W registere eklenir.
ADDWF MEM, F ; W ile MEM toplanp, MEM'e yazlr.
Heksadesimal say toplama rnekleri:
h'06' h'02' h'03" h'04' h'FF'
+ h'01' + h'FD' + h'FD' + h'FD' + h'01'
Sonu h'07' h'FF' h'00' h'0l' h'00'
CarryFlag 0 0 1 1 l
ki saynn toplamndan elde edilen sonu h'FF' den bykse, tama meydana gelecek ve Carry Flag "1" olduunda ne
yapmak gerektiini 16 bit toplamada anlatacaz.
PROGRAM-16) W register ierisindeki h'5A" saysyla, h'53' saysn toplayp,
sunucu B portundaki LED'lerde gsteren program. /s.
;===PROG16.ASM====17/06/2000=======
LIST P=16F84
INCLUDE "P16F84.IMC"
CLRF PORTB
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5
MOVLW h5A
ADDLW h53
MOVWF PORTB
DONGU
GOTO DONG
END
0 10101101 h'AD'
Carry Flag
lem Basamaklar
1. PIC16F84'u programlayarak deneme devrenizin zerine yerletirip, gerilim uygulaynz.
2. PortB'deki LED'lerin "ooo" biiminde yandn grnz
NOT: Deneme kart zerindeki LED'lerin sralanmasna dikkat ediniz. Bizim verdiimiz bit paterninin sras, en soldaki
MSB, en sadaki LSB'dir.
3. Toplamlar h'FF' i gemeyen iki sayy yukardaki programda kendiniz girerek sonucu devreniz zerinde
LED'lerden izleyiniz.
16- BT TOPLAMA
Toplama ileminde kullandmz saylar 1 byte=h'FF'=d'256' dan daha byk olduunda ne yapmamz gerekir?
Kolay, iki veya daha fazla byte ile gsteririz. rnein, h'01FD' saysn iki paraya blerek h'01' iin bir A registeri, h'FD'
iin bir B registeri kullanarak ilemleri yaparz. Aada 16-bit toplama ileminin nasl yapldn anlatrken B registerinin
ieriine alt byte, A registerinin ieriine de st byte diyeceiz.
16-bit toplama ilemlerinde vereceimiz rneklerde kullanacamz 2 byte, 0-65535 arasndaki desimal saylar ifade
etmeye yeterli olacaktr. Bilgisayar aritmetiinde 2 byte'lk veriler kullanarak yaplan ilemlere "Double precision - ift
duyarlkl" ilemler ad verilir. imdi double precision toplama ileminin nasl yaplacan grelim:
1. Toplanacak iki saynn nce alt byte'lar toplanr.
2. Eer alt byte'larn toplamnda tama varsa, st byte'lardan birisine "1" eklenir.
3. st byte'lar toplanr.
Double precision toplama ilemini bir ak diyagram izerek
ifade edelim:
rnein h'1613' saysyla h'01F0' saysn toplarsak alt byte'ta meydana gelen tamay heksadesimal ve binary olarak toplama
ileminde nasl meydana geldiini aadaki gibi gsterebiliriz.
h1613=d5651 =b0001011000010011
+h01F0 =d0496 =b0000000111110000
h1803 =d6147 =b0001100000000011
PROGRAM-17) h'61A3' ve h'2EE0' saylarn toplayan program. Program altnda toplamn alt byte' PortB'deki
LED'lerde grlr. st byte'n toplamn grmek iin A1 butonuna baslr.
2 byte'lk h'61A3' saysna A, h'2EE0' saysna da B dersek, bu saylar 1 byte'lk veri depolayabilen 2 tane file
register kullanmamz gerekir. imdi programda kullanacamz file registerlerin adn belirleyelim.
;===PROG17.ASM====22/06/2000======s=
LIST P=16F84
INCLUDE "P16F84.INC"
CLRF PORTB ;PORTB" yi sil.
BSF STATUS, 5 ;BANKl'e ge.
CLRF TRISB ;B portu tm ular k.
MOVLW h'FF' ;Wh'FF'
MOVWF TRISA ;A potu tm ular giri.
BCF STATUS, 5 ;BANK0'a ge.
AL EQU h'0C' ;AL registerinin adresi
AH EQU h'0D' ;AH registeri adresi
BL EQU h'0E' ;BL registerinin adresi
BH EQU h'0F' ;BH registerinin adresi
BASLA
MOVLW h'A3' ;Wh'A3'
MOVWF AL ;ALh'A3'
MOVLW h'61' ;Wh'61'
MOVWF AH ;AHh'61'
MOVLW h'E0' ;Wh'E0'
MOVWF BL ;BLh'E0'
MOVLW h'2E' ;Wh'2E'
MOVWF BH ;BHh'2E"
TOPLA
MOVF AL, W ;WAL
ADDWF BL, P ;BL=BL+W(AL), alt byte toplam
BTFSC STATUS, 0 ;CARRY FLAG=1 mi ?
INCF BH, P ;Evet, BH=BH+1
MOVF AH, W ;WAH
ADDWF BH, F ;BH=BH+W(AH) , st byte toplam
ALT_BYTE_GOSTER
MOVF BL, W ;WBL
MOVWF PORTB ;Alt byte toplamn gster
TEST_A1
BTFSC PORTA, 1 ;A1 butonuna basld m?
GOTO TEST_A1 ;Hayr, tekrar test et
UST_BYTE_GOSTER
MOVF BH, W ;Evet, W0BH
MOVWF PORTB ;st byte toplamn gster.
DONGU
GOTO DONGU
END
lem Basamaklar
1. PIC16F84' programlayarak deneme kartnza yerletiriniz.
2. Deneme kartnza gerilim uygulandnda LED'lerin "ooooo" biiminde yanarak alt byte'larn toplamn
gsterdiini izleyiniz. (h'83')
3. A1 butonuna basnz, bu defa st byte'larn toplamn LED'lerde "oooooo" biiminde grnz.(h'90')
4. Alt byte' tekrar grmek iin RESET butonuna basnz.
5. PROG17.ASM'de deikenler ierisine girilen verileri deitirerek yeni oluan toplam nce kendiniz hesaplaynz.
Daha sonra PIC' programlayarak sonucu deneme kartnz zerinde gzleyiniz.
8 - BIT IKARMA
Bir byte'lk iki saynn iki ekilde karmas yaplabilir. lki, sabit bir saydan W registerin ierii karlr(SUBLW).
ikincisi, seilen bir file register ieriinden W register ierii karlr(SUBWF), sonu W veya F registere yazlr.
SUBLW h'02' ;h'02'den W registeri karlr.
SUBWF MEM, F ;MEM'den W registeri karlr.
Kk saydan byk say karlnca Carry Flag=0, byk saydan kk say karlnca veya saylar birbirine eit
olunca Carry Flag=1 olur.
rnekler:
h'05' h'05' h'05'
- h'06' - h'05' - h'04'
hFF h00 h01
CarryFlag 0 1 1
CarryFlag 0 ise sonu negatif, 1 ise pozitiftir.
PROGRAM-18) PORTB registeri ierisindeki h'5A' saysndan W registeri ierisindeki h'53' saysn karan, sonucu
PORTB'ye bal LED'lerde gsteren program.(Byk saydan kk say karma rnei.)
;===PROG18.ASM====22706/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
CLRF PORTB ;PORTB'yi sil
BSF STATUS, 5 ;BANKl'e ge
CLRF TRISB ;B portu tm ular CIKIS
BCF STATUS, 5 ;BANK0'a ge
MOVLW h'5A' ;Wh'5A'
MOVWF PORTB ;PORTBW
MOVLW h'53' ;Wh'53'
SUBWF PORTB, F ;PORTBPORTB - W
DONGU
GOTO DONGU
END
lem Basamaklar
1. PIC16F84' programlayp deneme kartna yerletiriniz.
2. Deneme kartna gerilim uygulayp program altrdnzda portB'deki LED'ler "ooooo" biiminde yanacaktr.
PROGRAM-19) PORTB registeri ierisindeki h'52' saysndan W registeri ierisindeki h'53' saysn karan, sonucu
PORTB'ye bal LED'lerde gsteren program. (Kk saydan byk sayy karma rnei.)
;===PROG19.ASM====22/06/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
CLRF PORTB ;PORTB'yi SI
BSF STATUS, 5 ;BANKl'e ge
CLRF TRISB ;B portu tm ular k
BCF STATUS, 5 ;BANK0'a ge
MOVLW h'52' ;Wh'52'
MOVWF PORTB ;PORTBW
MOVLW h'53' ;Wh'53'
SUBWF PORTB, F ;PORTBPORTB - W
COMPF PORTB ;PortB'nin tersini al
INCF PORTB ;PortB'ye "1" ekle
DONGU
GOTO DONGU
END
lem Basamaklar
1. PIC16F84' programlayp deneme kartna yerletiriniz.
2. Deneme kartna gerilim uygulayp program altrdnzda portB'deki LED'lerin "ooooooo" biiminde yandn
grnz.
16- BITIKARMA
Double precision karmada iki byte'lk veriler kullanldndan saylar ifade etmek iin iki file register kullanmak
gerekir.
rnein, 2 byte'lk h'61A8' saysna A, h'2EE0' saysna da B dersek, bu saylardan her birini 1 byte'lk veri
depolayabilen 2 tane file register kullanmamz gerekir.
===PROG20.ASM====23706/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
CLRF PORTB ;PORTB' yi sil.
BSF STATUS, 5 ;BANKl'e ge.
CLRF TRISB ;B portu tm ular k.
MOVLW h'FF' ;Wh'FF'
MOVWF TRISA ;A potu tn ular giri.
BCF STATUS, 5 ;BANK0'a ge.
AL EQU h'0C' ;AL registerinin adresi
AH EQU h'0D' ;AH registeri adresi
BL EQU h'0F' ;BL registerinin adresi
BH EQU h'0D' ;BH registerinin adresi
BASLA
MOVLW h'04" ;Wh'04'
MOVWF AL ;ALh'04'
MOVLW h'00' ;Wh'00'
MOVWF AH ;AHh'00'
MOVLW h'0l' ;Wh'0l'
MOVWF BL ;BLh'0l'
MOVLW h'00' ;Wh'00'
MOVWF BH ;BHh'00'
CIKAR
MOVF BL, W ;WBL
SUBWF AL, F ;AL=AL-W(BL), alt byte sonucu
BTFSS STATUS, 0 ;CARRY FLAG=0 m ?
DECF AH, F ;Evet, AH=AH-1
MOVF BH, W ;Hayr, WBH
SUBWF AH, F ;AH=AH-W(BH), st byte sonucu
ALT_BYTE_GOSTER
MOVF AL, W ;WAL
MOVWF PORTB ;Alt byte sonucunu gster TEST_A1
BTFSC PORTA, 1 ;A1 butonuna basld m?
GOTO TEST_A1 ;Hayr, tekrar test et
MOVF AH, W ;Evet, WAH
MOVWF PORTB ;st byte sonucunu gster.
DONGU
GOTO DONGU
END
lem Basamaklar
1. PIC16F84' programlayarak deneme kartnza yerletiriniz.
2. Deneme kartnza gerilim uygulandnda LED'lerin "oooooo" biiminde yanarak alt byte'larn karma sonucunu
gsterdiini izleyiniz. (h'03')
3. A1 butonuna basnz, bu defa st byte'larn karma sonucunu LED'lerde
4. "oooooooo" biiminde grnz.(h'00')
5. PROG20.ASM'de deikenler ierisine girilen verileri deitirerek yeni oluan karma sonucunu nce kendiniz
hesaplaynz. Daha sonra PIC' programlayarak sonucu deneme kartnz zerinde gzleyiniz.
11 EVRM TABLOLARI
EVRM TABLOSU NEDR?
PROGRAM COUNTER
7 SEGMENT DISPLAY KULLANMAK
STEP MOTOR KONTROL
EVRM TABLOSU (LOOKUP TABLE) NEDR?
evrim tablolar bir kodu baka bir koda evirmek iin kullanlrlar. rnein PORTB'ye baladmz 7 segment
display'in zerinde heksadesimal karakterle grmek istediimizi dnelim. evrim tablosuna yerletirdiimiz heksadesima
koda karlk gelen uygun kodu seip, PORTB'ye gndermemiz gerekir. Aada ^ segment srcnn 0~F arasndaki
saylar gstermesi iin gereken kodla verilmitir. Bu kodlar rnek olarak vereceimiz programlarda kullanacaz.
(evrilecek evrilen 7 segment 7 segment 7 segment'te
kod Hex say) kodu (PORTB'ye) ularndaki veri grlecek say
rnek program vermeye balamadan nce evrim tablosuna yerletirilen uygun kodun seiminin nasl yaplacandan
bahsedelim. lk olarak bu seme iini gerekletiren program sayc'y (PROGRAM COUNTER), daha sonra da kodu ana programa
gnderen RETLW komutunu incelememiz gerekiyor.
2 Kbyte'tan daha fazla bellei olan PIC'lerde gereklidir. Bu tip PIC'lerde 1'den fazla BANK bulunmaktadr.
Dier BANK'lara geebilmek iin bu iki bit kullanlr.
14 bit program bellei olan PIC'lerde (PIC16CXXX ve PIC16FXX) herhangi bir adresi tanmlamak iin 11 bit
yeterlidir (211=2048=2 Kbyte). 1 Kbyte'lk bellei olanlarda ise 10 bit yeterlidir(210 =1024=1 Kbyte).
Bu kitapta rnekleri verilecek olan programlar genellikle 256 Kbyte' (28=256 byte) gemeyeceinden, program
belleinin ilk 8 bit'ini (PCL) kullanmak yetecektir. Eer 256 byte'tan daha fazla yer kaplayan programlar yazmak gerekirse
PCLATH registerinin 0, 1 ve 2. bit'ini de kullanmak gerekecektir. PCLATH kullanm bizim hedef aldmz teknik bilginin
stnde ar detay olduundan bu konuya girmeyeceiz.
RETLW Komutu
Bir alt programdan ana programa dn iin kullanlan RETURN komutuna ok benzer. RETLVV de ana programa dn iin
kullanlr. Tek bir farkla; ana programa dn esnasnda W registere bir sabit say yklenir. rnein, ana programa dnldnde W
registerinin ierisinde h'3F' says bulunmas isteniyorsa, komut aadaki gibi yazlr.
PROGRAM-21) 7 segment display zerinde "5" saysn gsteren program. NOT: Program 5 saysna karlk gelen h'6D'
saysn semek iin kullanlan PC ve evrim tablolarnn kullanlmasn aklamas bakmndan nemlidir.
;===PROG21.ASM====26/06/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
CLRF PORTB ;PortB'yi sil
BSF STATUS, 5 ;BANKl'e ge
CLRF TRISB ;PortB k
BCF STATUS, 5 ;BANK0a ge
BASLA
MOVLW h05 ;Wh05(test says)
CALL CEV_TAB
MOVWF PORTB
DONGU
GOTO DONGU
CEV_TAB
ADDWF PCL, F ;PCLW(h05)
RETLW h'3F'
RETLW h'06"
RETLW h'5B'
RETLW h'4F'
RETLW h'66'
RETLW h'6D ;Wh'6D'
RETLW h'7D'
RETLW h07
RETLW h'7F'
RETLW h6F'
RETLW h'77'
RETLW h'7C'
RETLW h'39'
RETLW h'5E'
RETLW h'79"
RETLW h'71"
RETLW h'80'
END
lem Basamaklar
1. Breadboard zerine yukarda verilen devreyi kurunuz. PROG21,ASI\/ programn deneme kart zerinde kolaylkla
altrabilirsiniz. Kart zerinde yaplacak ey, LED-SEGMENT seme anahtarn SEGMENT konumuna almaktr.
2. PIC16F84' programlayarak devreniz zerine yerletiriniz. PIC'e gerilim uyguladnzda 7 segment display
zerinde "5" saysn grnz.
PROGRAM-22) PORTB'nin ularna bal 7 segment display'de 0~F arasnda saydran program. Saylar arasndaki duru
GECIKME alt program tarafndan salanmtr.
;===PROG22.ASM====27/06/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYACl EQU h'0C'
SAYAC2 EQU h0D
SAYAC EQU h0E
CLRF PORTB
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5
BASLA
MOVLW h00 ;b'00001111' saysn W'ye ykle
MOVWF SAYAC ;SAYACW DONG
MOVF SAYAC, W ;WSAYAC
ANDLW B00001111 ;W'nin st drt bitini sfrla
CALL CEV7SEG ;Kod evinne alt programn ar
MOVWF PORTB ;Kodu 7 segmentte gster
INCF SAYAC, F ;SAYACSAYAC+1
CALL GECIKME ;Gecikme yap
GOTO DONGU ;Yeni bir say iin baa dn.
CEV7SEG
ADDWF PCL,F ;PCLW(SAYAC)
RETLW h3F ;1
RETLW h06 ;2
RETLW h5B ;3
RETLW h4F ;3
RETLW h'66 ;4
RETLW h6D ;5
RETLW h7D ;6
RETLW h07 ;7
RETLW h7P ;8
RETLW h6P ;9
RETLW h77 ;A
RETLW h7C ;b
RETLW h'39" ;C
RETLW h'5E' ;d
RETLW h'79' ;E
RETLW h'71' ;F
GECIKME ;Gecikme alt program
MOVLW hFF
MOVWF SAYACl
DONGUl
MQVLW hFF
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECPSZ SAYACl, F
GOTO DONGUl
RETURN
END
lem Basamaklar
1. PIC16F84' programlayarak, breadboard zerine kurduunuz devre veya deneme kartna yerletiriniz.
2. PIC'e gerilim uygulayarak program altrnz. 7 segment zerinde 0~F arasndaki saylarn belirli zaman
aralklaryla grlecektir. Say "F" e gelince tekrar 0a dnecektir.
Kullandmz step motor 2 phase (faz), 20 admldr. Bu da 360 lik tam bir dn ierisinde 18 lik admlarla
ilerleyen motor demektir. X-X ve Y-Y ularna uygulanacak gerilimler elektromknatslarda oluacak N-S kutuplarnn
ynn belirleyecektir. Step motorlarn dier bir eidi de unipolar step motorlardr. Bu motorlarda be kablo k vardr.
Bunlarda da yine iki sarm olmakla birlikte, her sarmn ortasndan bir u daha karlmtr. Bu ular birbirine
balanarak(COM) u elde edilmitir. Aada bu tip motorun ematik gsterilii verilmitir.
imdi de drt ulu bir step motorun saa doru dnmesi iin stator sarglarnda olumas gereken kutuplamay adm
adm gsterelim.
Yukardaki gerilimler tablosundaki "1" ler, motorun ularma uygulanacak olan pozitif gerilimleri ifade etmektedir.
Bu gerilim 5 V olabilecei gibi, motor src devresi (Transistrl bir ykselte devresi) tarafndan elde edilecek daha byk
bir gerilim de olabilir.
Biz uygulamalarmz denemek iin PORTB'ye baladmz LED'leri kullandmz iin bu tablodaki deerleri PIC
assembly programnda kullandmz evrim tablosuna (lookup table) yazmanz yeterlidir. Ancak bir motor src devresi
yapldysa transistrleri srmek iin daha farkl bir tablo gerekebilir. Step motor kullanlan gerek uygulama devresinde bu
durum gz nne alnmaldr.
PIC kndan step motora uygulanan sinyalin frekans ok yksek olduundan step motor bu frekansta uygulanan
gerilimlerle yeterli kutuplama salamayabilir. Bu nedenle evrim tablosundaki admlar arasnda gecikme salayan alt
program muhakkak kullanlmaldr. Aada PIC ularndan kmas gereken gerilimlerin zaman tablosu verilmitir,
inceleyiniz.
PROGRAM-23) Bipolar (4 ulu) bir step motoru bir yne doru A1 butonuna bastka adm adm dndren program. Step
motor Lilanna gnderilecek gerilimler PORB'deki RBO-RB3 ularna balanan LED'lerde grlr.
;===PROG23.ASM====30/06/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAClEQU h'0C'
SAYAC2EQU h'0D'
ADIM EQU h'0E'
CLRF PORTB ;PortB'yi sil
BSF STATUS, 5 ;BANKle ge
MOVLW h'FF' ;Wh'FF'
MOVWF TRISA ;PortA'nn tm ular giri
CLRF TRISB ;PortB'nin tm ular k
BCF STATUS, 5 ;BANK0'a ge
MOVLW h'FF' ;Wh'FF'
MOVWF ADIM ;ADIMW (h'FF')
BASLA
INCF ADIM, F ;ADIMADIM+1 (h'FF'+h'01' =h-00 )
MOVF ADIM, W ;WADIM
ANDLW b'00000111' ;Wnin st 5 bitini maskele.
CALL ADIMTBL ;Bifc paternini se.
ANDLW b00001111 ;W'nin st 4 bitini maskele.
MOVWF PORTB ;Bit paternini PORTB'de gster.
CALL GECIKME ;LED'leri bir sre yank tut.
GOTO BASLA ;Yeni bir bit paterni iin git.
ADIMTBL
ADDWF PCL, F
RETLW b'000l'
RETLW b'1001
RETLW b'1000
RETLW b'1010'
RETLW b'00l0'
RETLW b'0110'
RETLW b'0l00'
RETLW b'0l0l'
GECIKME ;Gecikme alt program
MOVLW h'FF'
MOVWF SAYACl
DONGUl
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, P
GOTO DOMGU2
DECFSZ SAYACl, F
GOTO DONGUl
RETURN
END
lem Basamaklar
1. PIC16F84' programlaynz. PIC deneme kartna veya breadboard zerinde kurduunuz devre zerine yerletiriniz.
2. PIC'e gerilim uygulayarak program altrnz.
3. A1 butonuna aralklarla basnz.
4. PORTB'nin 0, 1, 2, 3. ularna bal olan LED'lerin programdaki evrim tablosuna gre srayla yandn grnz.
PROGRAM-24) Bir step motoru PORTA'nn 1. bitine bal A1 butonuna basnca saa, A1 ve A2 butonlarna birlikte
basnca da sola dndren program. Step motor ularna gnderilecek olan gerilimler PORTB'deki LED'lerde grlr.
;===PROG24.ASM====02/07/2000=======
LIST P=16P84
INCLDE "P16F84.INC"
SAYACl EQU h'0C'
SAYAC2 EQU h'0D'
ADIM EQU h0E'
CLRF PORTB ;PortB'yi sil
BSF STATUS, 5 ;BANKl'e ge
MOVLW h'FF' ;Wh'FF'
MOVWF TRISA ;PortA'nn tm ular giri
CLRF TRISB ;PortB'nin tm ular k
BCF STATUS, 5 ;BANK0'a ge
MOVLW h'FF' ;Wh'FF'
MOVWF ADIM ;ADIMW (h'FF')
BASLA
BTFSC PORTA, 1 ;PORTA'nn l.biti 0 m?
GOTO BASLA ;Hayr, tekrar test et.
BTFSC PORTA, 2 ;PORT'nn 2. biti 0 m?
GOTO SAG ;Hayr, saa dndr.
SOL
INCF ADIM, F ;ADIMADIM+1 (h'FF+h01=h00)
MOVF ADIM, W ;WADIM
ANDLW b'00000111' ;W'nin st 5 bitini maskele.
CALL ADIMTBL ;Bit paternini se.
AMDLW b'00001111 ;w'nin st 4 bitini maskele.
MOVWF PORTB ;Bit paternini PORTB'de gster.
CALL GECIKME ;LED'leri bir sre yank tut.
GOTO
BASLA ;Yeni bir bit paterni iin git.
SAG
DECF ADIM, F ;ADIMADIM+1 (h'FF'+h'01' =h" 00 )
MOVF ADIM, W ;WADIM
ANDLW b'00000111 ;W'nin st 5 bitini maskele.
CALL ADIMTBL ;Bit paternini se.
AMDLW b'00001111 ;W'nin st 4 bitini maskele.
MOVWF PORTB ;Bit paternini PORTB'de gster.
CALL GECIKME ;LED'leri bir sre yank tut.
GOTO BASLA ;Yeni bir bit paterni iin git.
ADIMTBL ;evrim tablosu
ADDWF PCL, F
RETLW b000l
RETLW b'1001
RETLW b'l000'
RETLW b'1010'
RETLW b'00l0'
RETLW b'0110'
RETLW b'0100
RETLW b'0101
GECIKME ;Gecikme alt program
MOVLW h'FF'
MOVWF SAYACl
DONGUl
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZSAYAC2, F
GOTO DONGU2
DECFSZSAYACl, F
GOTO DONGUl
RETURN
END
lem Basamaklar
1. PIC16F84' programlayarak deneme kartnza yerletiriniz. PIC'e gerilim uygulayarak program altrnz.
2. A1 butonuna basarak motorun saa dnmesi iin PortB'den kan gerilimleri RB0-RB3 arasndaki LED'lerden
izleyiniz.
3. A1 ve A2 butonlarna birlikte basarak motoru ters ynde evirecek gerilimleri LED'lerden izleyiniz.
12
KESMELER (INTERRUPTS)
KESME (INTERRUPT) NEDR?
INTCON REGISTER
KESME KAYNAKLARI
KESME ALT PROGRAMLARININ DZENLENMES
lk bakta bir kesme meydana gelmesinin, alt program arma ileminden fark olmad izlenimi verebilir. Ancak
ok nemli bir fark vardr. Normal alt program arma, program ierisine yazlan komutlar vastasyla yaplr. Kesme alt
programlarnn arlmasn ise donanmda oluan deiiklikler yapar.
Bir kesme meydana geldiinde, o anda almakta olan komutun almas tamamlanr. Daha sonra program ak
PIC program belleinin h'0004' adresine (PIC16F84'de) atlar ve bu adresteki komutu altrr. Bu komut, "kesme servis
program" veya ksaca "kesme alt program" diyeceimiz alt programn aran bir GOTO komutudur. PIC, kesme alt
program altktan sonra ana programn hangi adresine geri dneceini unutmamaldr. Bu nedenle mikro denetleyici kesme
olutuu anda alan komutun adresini STACK(Yn) registerine kaydeder. Alt program ilevini tamamlayp, program ak
ana programa geince bu adresten itibaren devam eder. Kesme alt programndan ana programa dn komutu RETFIE
(Return From lnterrupt)'dir.
Kesme olay esnasnda meydana gelen olaylar sralayacak olursak;
Kesme olay meydana geldiinde STACK registerin olduau adrese (h'23F') atla.
Ana programn kald adresi STACK registere yaz.
h'04' adresindeki komutu altr(Bu komut kesme alt programn arr.)
Kesme alt programnn olduu adrese atla.
Kesme alt programn altr. Alt programn en son komutu RETFIE'dir.
STACK (Yn) registerin bulunduu adrese git.
Ana programa dn adresini al.
Ana programn kesildii yerdeki adresten bir sonraki adrese git ve devam et.
INTCON REGSTER
INTCON (Interrupt Control) registeri RAM bellekte h'0B' adresinde bulunan zel registerlerden bir tanesidir. Bu
register ierisinde her bir kesme kayna iin bir flag ve bir de global kesme bayra vardr. Tm kesme ilemlerinin kontrol
bu register aracl ile yaplr.
bit7 6 5 4 3 2 1 0
G E T0I INT RBI T0I INT RBI
IE EIE E E E F F F
KESME KAYNAKLARI
PIC16F84 kesmeleri aadaki 4 kaynaktan gelebilir:
1. Harici(External) kesme (PIC16F84'n RBO/INT ucundan giren sinyal.)
2. TMR0 saycsnda oluan zaman am kesmesi (TMRO saycsnn h'FF' den H'OO'a gelmesi.)
3. PORTB (4, 5, 6 ve 7 bit'ler) lojik seviye deiikliinden.
4. EEPROM bellee yazma ileminin tamamlanmasnda meydana gelen kesme
Harici Kesmeler
Harici kesmelerin kullanlabilmesi iin iki ey gereklidir; yazlm ve donanm. Yazlm aracl ile PORTB'nin
RBO/INT ucu dardan gelebilecek kesmeyi alabilecek biimde hazrlanmaldr. Bu hazrlama ilemi iin iki ilem yaplr;
1. RB0/INT ucu giri olarak ynlendirmeli.
2. INTCON registeri ierisindeki ilgili bayrak (INTE bayra) kullanlarak harici kesme ilemi aktif (geerli)
yaplmaldr.
Harici kesmenin kullanlabilmesi iin bir de donanm gereksinmesi vardr. Bu da RBO ucundan sinyal girmek iin
gerekli elektronik devredir.
RBO/INT giriinden uygulanacak sinyalin kenar tetiklemesi nemlidir. OPTION registerin 6. bit'i bu utan girilen
sinyalin ykselen kenarda m yoksa alalan kenarda m kesme oluturulacana karar vermekte kullanlr.
Kesme alt programnn almas esnasnda gelebilecek yeni kesmeleri engellemek iin, kesme olutuu zaman
INTCON register'deki 4. bit (INTE bayra) "0" yaplmaldr.
Eer bir harici kesme(RBO/INT ucundan sinyal girii) meydana gelirse, INTCON register ierisindeki INTF bayra
"1" olur. INTF bayra interrupt alt program ierisinde tekrar "0" yaplmaldr. Aksi halde tekrarlanan kesmelerle karlalr.
Yukarda sylediklerimizi ksaca zetlersek, bir harici kesme olutuunda yaplacak ilemlerin sras yledir:
Sonraki kesmeleri pasif (geersiz) yapmak iin (INTE bayran "0" yap.)
ORG h'004"
GOTO KESME_ALT_PROG
KESME_ALT_PROG
: MOVWF SAKLA_W ;W registerini ykle
2: SWAPF STATUS, W ;STATUS ieriini SWAP yap.
3: MOVWF SAKLA_S ;STATUS ieriini sakla
;Kesme alt program komutlar
4: SWAPF SAKLA_S, W ;STATUS ieriini yeniden SWAP yap
5: MOVWF STATUS ;STATUS registere yeniden ykle
6: SWAPF SAKLA_W, F ;W ieriini SWAP yap.
7: SWAPF SAKLA_W, W ;W'yi yeniden SWAP yap ve W'ye yaz
RETFIE
SWAPF komutu bir register ieriini baka bir registere STATUS registerini deitirmeden yklemek iin
kullanlmtr. SVVAPF komutuyla alt drt bit ile st drt bit'in yeri deiir. Bu nedenle alt programdan geri dnlmeden
nce tekrar SVVAPF komutu eski haline getirilmesi gerekir.
Belki, bu ilem iin neden MOVF komutu kullanmadmz aklnza gelebilir. Kullanamayz, nk MOVF komutu
STATUS registerdeki Z(zero-sfr) bayrann ieriini deitirir. Bu da zero flag'n durumunu kontrol ederek ilem yapan bir
programda hatalara neden olabilir.
imdi yukarda yaplan ilemlerin daha pekimesi iin bir rnek verelim. Kesme alt programna girmeden nce W
registerin ierii b'00001111', STATUS registerin ierii de b'00110100' olsun. Yukardaki program komutlarnn her birinde
W ve STATUS'un ieriklerini inceleyelim.
Grld gibi interrupt alt program ierisinde alan komutlar W ve STATUS'un deerini deitirmesi ihtimaline
karlk SAKLA_W ve SAKLAJ registerleri geici depolama registeri olarak kullanlmtr. Ana programa ge dnte bu
saklama registerlerinin ierikleri ayn kalmas salanmtr.
Kesme Gecikmesi
Bir kesme olutuunda, kesme alt program almadan nce gecikme meydana gelir. Bu gecikmeye "kesme gecikmesi"
denir. Aa-yukar 3 veya 4 komut saykl sresidir. Zamanlamann ok nemli olduu uygulamalarda bu gecikme gz
nne alnmaldr.
PROGRAM-25) Bu program RBO/INT ucundan girilen bir sinyal ile kesme oluturulmasna rnektir. Aadaki ekilde de
grld gibi portA'nn 1. bit'ine bal butonun basl olup olmadn gsteren basit bir programdr. A1 butonuna basld
anda RB1 ucuna bal LED1'in yan bu programn devaml olarak altn gsterir. RB0/INT ucundan bir sinyal girerek
kesme oluturmak iin RB0 ucuna bir buton balanmtr. INT butonuna basnca kesme oluur ve kesme alt program
alarak RB2 ucuna bal olan LED2'yi yakar. Bu da ana program normal olarak alrken harici bir kesme meydana
geldiinde programn buna tepki verdiini ve LED2'yi yaktn gsterir.
rnek olarak verdiimiz deneme kartndaki portB'nin ularnn tamamna LED balandndan program-25'i bu program
denemek iin kullanamayz. Yukardaki devreyi breadboard zerinde kurunuz. Besleme ve osilatr devreleri iin kullanlacak
elemanlar ema zerinde gsterilmemitir. Elinizdeki olanaklara gre kristal veya RC osilatr devresini nceki
bilgilerinizden yararlanarak kurunuz.
;===PROG25.ASM====05/07/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
ORG h'000'
GOTO BASLA
ORG h'004"
GOTO INT_ALT_PROG
BASLA
MOVLW h'FF' ;Wh'FF'
MOVWF TRISA ;PortA tm ular giri
MOVLW h00000001 ;Wh'Ol'
MOVWF TRISB ;PortB 0. bit giri
MOVLW hl0llllll ;Wb'10111111', den kenar
MOVWF OPTION_REG ;W'yi OPTION registere ykle
CLRF PORTB ;PortB'yi sil
BCF INTCON, 1 ;INTF bayran sil,
;kesme sinyaline hazrla
BSF INTCON, 7 ;Global kesmeyi geerli yap
BSF INTCON, 4 ;RB0/INT kesmesini geerli yap
TEST
BTFSS PORTA, 0 ;PortA'nn 1. bit'ini test et
GOTO SOMDUR_LED1
YAK_LED1
BSF PORTB, 1 ; PortB'nin 1. bit'ini "1" yap
GOTO TEST
S0NDUR_LED1
BSF PORTB, 1 ; PortB'nin 1. bit'ini "0" yap
GOTO TEST
INT_ALT_PROG
BCF INTCON,1 ; INTF bayran sil
MOVLW b00000100 ; Terslenecek bit'i W'ye ykle
XORWF PORTB,F ; RB2'yi tersle
RETFIE ; Kesme alt programndan dn.
END
Programdaki
MOVLW b10111111
MOVWF OPTION_REG
Komutlaryla RBO ucundan girilen sinyalin den kenannda kesme oluturmas salanmtr.
BCF INTCON,1
BSF IMTCON,7
BSF INTCON,4
INTCON REGlSTER
Kesme olaynn meydana geldiini gsteren ve PortB'nin 2. bit'ine bal LED2'nin durumunu deitirmek iin
aadaki komutlar kullanlmtr.
MOVLW b00000100
XORWF PORTB, F
lem Basamaklar
1. PIC16F84' programlaynz.
2. Bu program denemek iin breadboard zerinde kurduunuz devre zerinde deiiklik yapmak zorundasnz.
Dikkat ederseniz PortB knn tmne LED balamtk. imdi RB1 ucuna baladmz. LED'i karp, buton
balamamz gerekiyor. Dier balantlar aynen kalabilir.
3. PIC'i kurduunuz devre zerine yerletirip gerilim uygulaynz.
4. A1 butonuna basnz. Butona bastnz srece LEDI'in yank kaldn grnz.
5. Programn almas esnasnda bir kesme meydana getirmek iin INT butonuna ksa sreyle basnz. LED2 yanksa,
snecektir. Eer snk durumdaysa yanacaktr.
Sonu: Grlyor ki, PIC programlarnda kesme kullanldnda mikro denetleyicmin ilem yapma gcn
geniletebiliyoruz. Ana program devaml olarak ilevini srdryor(LED1' istediimiz zaman yakp, sndrebiliyoruz.)
Ancak dardsu-.gelen bir sinyal bu ilemi ksa bir sreyle kesip baka bir ii (LED2'nin durumur deitiriyor.) yapyor ve
ak yine ana programa geiyor.
PIC'e uygulanan kesmeler stenirse peryodik olarak yaplabilir. rnein:
kesme girii olarak bir clock sinyali kullanlabilir. Bir saycnn belirli bir deere ulatnda rettii sinyal de kesme
meydana getirilebilir. Peryodk kesme uygulama program rneklerini 13. blmde TMRO ve WDT sayclarn anlatrken
vereceiz.
TMR0 SAYICI/ZAMANLAYICISI(TIMER/COUNTER)
RAM bellein h'01' adresinde TMRO ad verilen zel bir register TMRO saycsdr. TMRO programlanabilen bir saycdr.
Yani saymaya istenilen bir saydan veya h'OO'dan balatlabilir, herhangi bir anda ierii sfrlanabilir. Bu saycy
detayl.olarak incelemeden nce zellikleri yle sralayabiliriz:
8-bit bir saycdr.
Yazlabilir/okunabilir.
Programlanabilen frekans blme deeri (Prescaler value)
Harici veya dahili clock ile say art
Den veya ykselen kenar tetiklemesi (harici olarak)
Sayc deeri artan yndedir (H'00',h'01',h'02........h'FF')
TMR0'n deeri h'FF'den h'00'a gelince ilgili flag'i "1" yaparak kesme oluturur.
TMR0 saycsnn nemli zelliklerinden birisi de ana program veya kesme alt programlar alrken sayma ilemini
durdurmamasdr. Sayma ilemi devam ederken h'FF' den h'00'a geite meydana gelen tama (overflow), INTCON registerin
2. bit'inde (T0IF bayra) grlr. Yani, bu esnada T0IF bayra "1" olur. Gerekiyorsa bu bayrak kontrol edilerek kesme
oluturulabilir.
imdi TRMO ve WDT sayclarnn kontrolnde kullanlan OPTION registerden bahsettikten sonra ayrntlara
geelim.
OPTION REGSTER
Option register, RAM bellein 1. bank'ndaki h'81' adresinde bulunan zel bir registerdir. B portunun klarnn
pull-up yaplma durumunu kontrol eden, kesme sinyalinin tetikleme kenarn seen, TMRO ve WDT iin frekans blme
says iin gerekli bit'leri bulunduran, TMRO veya VVDT'yi seme bayra bulunan ve tm bu ileri kontrol eden 8-bit'lik bir
registerdir. Aada bu registerin her bir bit'inin ne grevleri yapt aklanmtr.
TMR0 SAYICININ ZELLKLERl
TMR0 Saycsnn zelliklerini ve almasn anlamak aadaki blok ema zerinde daha kolay olacaktr.
Sayc iindeki saynn arttrlmas iin gerekli olan clock sinyali iki farkl kaynaktan salanabilir:
1. Dahili komut sinyali,
2. Harici dijital sinyal (RA4/T0CKI ucu).
PIC'i altran osilatr olarak kristal kullanldnda dahili komut sinyali de ok hassastr. Bu nedenle dahili komut sinyali seildiinde
sayma ve zamanlama ilemleri ok hassas olarak yaplabilir.
Frekans blme
TMR0 oran WDT oran
says (Prescalar)
000 1/2 1/1
001 1/4 1/2
010 1/8 1/4
011 1/16 1/8
100 1/32 1/16
101 1/64 1/32
110 1/128 1/64
111 1/256 1/128
rnein,
Prescaler deeri b'000' seilirse, TMR0 oran 1/2, WDT oran 1/1 seilir. Prescaler deeri b'010' seilirse, TMR0 oran 1/8,
WDT oran 1/4 seilir. Prescaler deeri b'111' seilirse, TMR0 oran 1/256, WDT oran 1/128 seilir.
TMRO saymaya baladndaki ilk say h'00' ise TMR0'n ka saniye aralklarla kesme sinyali vereceini bulalm:
Kesme gecikmesi = TMR0 sayma aral x 256
=8 S x 256 = 2048 S 2 ms
3-) Prescaler deeri b'111' seilirse TMR0'n sayma aral sresi ve kesme gecikmesi ka S olur?
Prescaler=b'111' olduundaTMR0 oran 1/256 olur.
fosc = 4 MHz olarak alnrsa Tkomut = 1 S olur.
;===PROG26.ASM==s=09/07/2000=======
LIST P=16F84
IMCLUDEP16F84.INC"
CLRF PORTB
BSF STATUS, 5 ;Bankl
CLRF TRISB ;PORTB tm ular k
BCF STATUS, 5 ;Bank0
BASLA
CLRWDT ;Prescaler atama ilemine hazrla
BSF STATUS, 5 ;Bankl
MOVLW b11010111 ;TMR0, yeni prescaler deerini
;ve sinyal kaynan se
MOVWF OPTION_REG ;OPTION registere yaz.
CLRF PORTB YAK
BSF PORTB, 0 ;LED'i yak.
CALL GECIKME ;GECIKME alt programn ar. SOMDR
BCF PORTB, 0 ;LED'i sndr.
CALL GECIKME ;GECIKME alt programn ar.
GOTO YAK ;Yakp-sndrmeye devam et.
GECIKME
CLRF TMR0 ;TMR0 h00a kur, saymaya bala
TEST_BIT
BTFSS TMR0, 5 ;TMR0n 5. bit'i "1" mi?
GOTO TEST_BIT ;Hayr, 5. bit'i tekrar test et.
RETURN ;Ana programa dn.
END
Programda OPTION registere atanan verilerin anlam aadaki gibidir.
TMR0 registerinin tamam okunabilir veya bu rnekte olduu gibi sadece bir bit'i test edilir. TMR0'n 5. bit'i "1"
olduunda ulalan say 32'dir (desimal). Yani sayc 0'dan 32'ye kadar saydrlmaktadr.
Deneme devresinde 4 MHz lik kristal osilatr kullanld dnlrse; Bir komut saykl 1 Sdir.
TMR0 ierisindeki saylar 256 komut sayklnda bir defa artacandan (TMRO oran 1/256 olduundan.)
PROGRAM-27) TMR0 saycsnn sinyal kayna olarak harici dijital sinyal (RA4/T0CKI ucu) kullanlmasna rnek
programdr. Ayrca TMR0'n okunabilme ve sinyal sayc olarak kullanlabilme zelliini de gsterir. Program, PortA'nn 3.
bit'ine bal olan butona (RA4) basldnda portB'deki LED'lerde binary olarak artan saylar gsterir. RA1 butonuna basnca
TMR0 registerini sfrlar ve saymaya 0'dan itibaren tekrar balatr.
Programda OPTION registere atanan verilerin anlam aadaki gibidir.
TMR0 sinyal kayna olarak RA4 girii seildiinden, bu butona her basta TMR0'n ierisindeki say 0'dan itibaren ykselir. RA4
butonuna baslmad srece (Yeni bir sinyal gelinceye kadar) TMR0 ierisindeki say sabit kalr. TMR0'n sfrlanmas yine harici bir
girile (RA1 butonu) yaplyor.
;===PROG27.ASM====12/07/2000=======
LIST P=16F84
INCLUDE "P16F84.IMC"
CLRF PORTB
BSF STATUS, 5 ;Bankl
CLRF TRISB ;PORTB tm ular k
MOVLW h'FF' ;Wh'FF'
MOVWF TRISA ;PortA tm ular giri
BCF STATUS, 5 ;Bank0
BASLA
CLRF PORTB ;PortByi sil
CLRF TMR0 ;TMR0 saycs ve prescaler' sil
CLRWDT ;WDT'yi sil
BSF STATUS, 5 ;BANKl
MOVLW b00101111 ;Prescaler deerini ata
MOVWF OPTION_REG ;OPTION registere yaz.
BCF STATUS, 5 ;BANK0
CLRF PORTB ;PortB'yi sil
DONGU
MOVF TMR0, W ;WTMRO
MOVWF PORTB ;PORTBW
BTFSS PORTA, 1 ;PortA 1. bit "0" m?
CLRF TMRO ;Evet, TMR0 sfrla
GOTO DONGU ;Hayr, tekrar test et
END
lem Basamaklar
1 PROG27.ASM'yi PIC16F84'e yazdrp, deneme kartna yerletiriniz.
2 Deneme kartna gerilim uygulayarak program altrnz.
3 A4 (PortB'nin 3. bit'ine bal) butona bastka PORTB'deki 8 LED'in binary artan saylar gstermesini salaynz.
Program ierisinde PORTB'ye bal olan LED'lerin binary artan saylar gstermesi iin PORTB'nin ierii her
defasnda "1" arttrlr.
TMR0 saycsnn tekrar h'00'dan itibaren saymas iin TMR0'a h'00' says atanmaldr. Bu say atanmamas halinde
yine h'00'dan balayacaktr. Ancak, saymaya balama says farkl olmas isteniyorsa, o say mutlaka TMR0'a atanmaldr.
Eer istenilen kesme gecikme sresini salamak iin TMRO ilk saysnn ne almas gerektiini bulmak iin bu defa
aadaki forml kullanabiliriz.
Kesme gecikme sresi x f OSC
TMR0 ilk sayay= 256
4 x Pr escaler
rnek: 1.28 mS kesme gecikmesi salamak iin TMRO ierisine hangi saynn atanmas gerekir? (Fosc=4 Mhz,
Prescaler=128)
TMR0'a h'FF' atandnda minimum kesme sresi oluur. Ancak LED'in yanp-snme sresi 0 S olmaz. nk
kesme alt program komutlarnn alma sresi minimum kesme sresini oluturur. Bu da kesme olutuunda GOTO
LED_YAK komutuyla alt programa geen aktan sonra alan komutlardr. Bu sre RETFIE komutuyla biter. imdi bu
sreyi hesaplayalm. fOSC= 4 MHz olduunu dnelim.
Yukarda yaptmz hesaplamaya gre kesme olutuunda alan komutlar 10+2=12 komut saykl sresi geecektir.
Bir komut saykl 1 |JLS olduuna gre toplam sreyi hesaplayalm;
Grlyor ki, formlle hesaplama sonucunda 0 |JLS lik kesme sresi hesaplamamza ramen, alt program
komutlarnn almas hesaba katlnca minimum kesme sresi 12 ^S olmaktadr (fosc= 4 MHz olduunu
dndmzde.)
WDT zamanlaycsnn sinyal kayna, PIC ierisine yerletirilmi bir osilatrdr. Bu osilatrn WDT'ye salad
nominal zaman am sresi 18 mS dir. Prescaler deeri artrlarak bu sre 2.3 saniyeye kadar karlabilir.
Zaman Am Sresi
WDT'nin CLRWDT komutuyla reset yapldktan sonra saymasn tamamlayp, batan tekrar saymaya balad anda
kadar geen sredir. WDT'nin saymasn tamamlad anda zaman am sinyali verir. Bu sinyal STATUS registerin 3. ve 4.
bit'indeki flaglarn durumunu deitirir.
WDT zamanlaycsyla kontrolden km bir program tekrar resetleyerek kontrol ele almay planladysanz ana program
banda bu bit'leri kontrol etmelisiniz. Reset gerekletikten hemen sonra da bu bit'leri kontrol etmek gerekir. Bylece
WDT'nin zaman am sresi dolduunda program ak baka bir yere dallandrabilirsiniz.
rnek program paras:
WDT_KONT
BTFSS STATS, 4 ; T0 bit' i 1 mi?
CALL AAA ; Evet, AAA alt programn ar.
MOVLW h'FF' ; Hayr, program akna devam et.
MOVWF TRISA ; PORTA'nn tm ular giri
PIC ierisinde bulunan WDT zamanlaycsnn geerli (enable) veya geersiz (disable) yaplmas yazlm aracl ile
yaplmaz. PIC programlamaya yeni baladnzda PIC'e yazma program anlatlrken konfigrasyon bit'lerinden
bahsetmitik. Bu konfigrasyon bit'leri program ierisinde yazld gibi, PIC programlayc programndaki "Fuses" penceresi
ierisinden de enable yaplacan sylemitik. Bu nedenle WDT zamanlaycy kullanabilmek iin PIC'i programlama
esnasnda "Fuses" penceresinden Watchdog Timer="ON" yaplmaldr.
5. blmde konfigrasyon bit'lerini program ierisinde belirlenebileceini sylemitik. Hatrlatmak amacyla bir rnek
verecek olursak, VVDT'nin aktif yapld konfigrasyon satr aadaki gibi olmaldr.
WDT zamanlaycsn programn almas esnasnda geersiz (disable) /apmak mmkn deildir. Sadece CLRWDT
komutu kullanlarak RESET yaplabilir. Bu durumda WDT, h'00'dan itibaren tekrar saymaya balar. Sayma sresi bitince
STATUS registerindeki T0 bayran "0" yapar.
PROGRAM-29) PortB'ye bal 8 LED zerinde binary artan saylar gsteren program. WDT'ye atanan prescaler deerine
gre, LED'ler saymaya devam ederken portB ierisindeki veri h'FF'e ulamadan WDT zaman am sinyali nedeniyle
LED'lerin yan 0'dan itibaren tekrar balatlr.
;===PROG29.ASM====10/08/2000=======
LIST P=16F84
INCLDE "P16F84.INC"
SAYACl EQU h'0C'
SAYAC2 EQU h'0D'
BASLA
BSF STATUS, 5 ; BANKl
MOVLW b00001110 ; WDT seilir.
MOVWF OPTIOM_REG ; OPTION_REQW
CLRF TRISB ; PortB'nin ular k
BCF STATUS, 5 ; BANKO
SONDUR
CLRF PORTB ; PortB'yi sil
YAK
CALL GECIKME ; GECIKME alt program
INCF PORTB, 1 ; PORTBPORTB + 1
GOTO YAK
GECIKME
MOVLW h4F ; Wh4F
MOVWF SAYACl ; SAYAClW
DONGUl
CLRF SAYAC2 ; SAYAC20
DONGU2
DECFSZ SAYAC2, 1
GOTO DONGU2
DECFSZ SAYACl, 1
GOTO DONGUl
RETURN
END
lem Basamaklar
1 PIC16F84'e PROG29.ASM programn yaznz.
2 Program yazdrrken kullandmz PIC programlaycdaki "Fuses" penceresinde WDT=ON yaptktan sonra
yazdrma ilemini balatnz.
3 PIC'i deneme kartna yerletirerek programnz altrnz. PortB'deki LED'lerde binary artan saylar grnz.
Sayma ilemi devam ederken WDT zaman am sinyali program reset ederek tekrar O'dan itibaren saymaya
balatacaktr.
4 LED'lerdeki say kaa ulatnda reset gerekleeceini u anda sylememiz mmkn deildir. nk
kullandnz RC osilatrn frekansna ve WDT oranna baldr. WDT orann deitirerek programn reset olma
sresini deitiriniz. PIC'i yeniden programlayarak deneme kartnzda deneyiniz.
DJTAL/ANALOG EVRC
PIC16F84 kullandnz bir uygulama devresinde analog voltaj k gerekebilir. Bu durumda portlardan kan dijital
sinyalleri analog voltaja evirme ilemi sz konusu olmaktadr. Bu ilemi yapmak iin bir ok yntem vardr Bunlardan ilki,
PIC kna ladder (merdiven) diren devresi ve bir OP-AMF balayarak yaplan D/A eviricidir. ikincisi ise, ok daha basit
bir yntem olan PIC kna D/A evirici entegre balamaktr.
Microchip firmas PIC kullanclarnn bu ihtiyacn karlamak amacyla piyasaya srd bir ok mikrodenetleyisi bulunmaktadr.
rnein PIC14C000 mikrodenetleyicisi giriine uygulanan dijital sinyali dorudan analog voltaj k olarak verebilmektedir. D/A
evirici entegre bu PIC'in ierisine yerletirilmi olduundan knda baka bir devre kullanmaya gerek kalmamaktadr. Bu tip
PIC'lerin incelenmesi ayr bir kitap konusu olduunda imdilik ayrntlara girmeyeceiz.
Bu kitapta bizim ele aldmz PIC16F84'n sadece dijital girii ve k bulunmaktadr. D/A evrimi yapabilmek iin
yapabileceimiz tek ey, PlC kndan aldmz dijital sinyali analog gerilime evirme ilemidir. imdi D/A evrimi ilemi
iin kullanmak zorunda olduumuz yntemleri aklayalm.
0-5 V arasnda analog gerilim elde etmek iin gerekli olan dijital klar aadaki gibidir.
PROGRAM-30) PortB'nin RBO-RB7 ularndan kan dijital veriyi analog veriye eviren program. Bu program yukarda
AD 558 entegresiyle kurulan devreye gre yaplmtr. PortB'nin ucundan kmas istenen veri b'10000000'dir. Bu veri AD
558 entegresiyle 1.27 Vluk gerilime evrilir.
;===PROG30.ASM====12/08/2000=======
LIST P=16P84
INCLUDE "P16F84.INC"
BASLA
BSF STATUS, 5 ;Bankl
CLRF TRISA ;PORTA tm ular k
CLRF TRISB ;PORTB tm ular k
BCF STATUS, 5 ;Bank0
CLRF PORTA ;CS ucunu "0" yap
MOVLW b10000000;Wb10000000
MOVWF PORTB ;AD 558 entegresine giden veri
BSF PORTA, 0 ;AD 558'in CS ucu ykselen kenar
BCF PORTA, 0 ;AD 558'in CS ucu den kenar
DONGU
GOTO DONGU
AD 558 entegresine girilen verilerin ka Vluk gerilime dntrleceine ait birka rnek veren tablo aadadr.
Haksadesimal VIKI
say
h'00' 0.00
h'0F' 0.15
h'B0' 1,27
h'FF' 2.55
lem Basamaklar
1. PROGSO.ASM'yi PIC16F84'e yazdrnz.
2. AD 558 entegresiyle yaplan A/D evirici PIC devresini breadboard zerine kurunuz.
3. PIC'i deneme devrenize yerletirerek gerilim uygulaynz. Vk ucuna bir voltmetre balayarak 1.27 Vluk gerilimi
lnz.
PROGRAM-31) AD 558 konvertr kullanarak kurulan devrede testere dii dalga reten program.
;===PROG31.ASM====14/08/2000=======
LIST P=16P84
INCLUDE "P16F84.INC"
VOLT EQU h0C
SAYAC EQU h0D
BASLA
BSF STATUS, 5 ; Bankl
CLRF TRISA ; PORTA tm ular k
CLRF TRISB ; PORTB tm ular k
BCF STATUS, 5 ; Bank0
CLRF PORTA ; CS ucunu "0" yap
CLRF VOLT ; VOLT deikenini sfrla
DONGU
MOVF VOLT, W ; WVOLT (h'00')
MOVWF PORTB ; PORTBW
BSF PORTA, 0 ; AD558'deki datay kilitle
BCF PORTA, 0 ;
INCF VOLT, F ; VOLTVOLT +1
GOTO DONGU
lem Basamaklar
1. PIC16F84' programlayarak AD558 ile yaptnz devre zerine yerletiriniz.
2. Vk ucuna bir osilaskop balaynz ve ayarlarn yapnz.
3. Vk aadaki testere dii dalgay grnz.
PROGRAM-32) AD558 entegresiyle kurulan devrede sins dalgas reten program. Bu programda portB'ye gnderilen
binary saylar evrim tablosu ierisine yerletirilmitir. 19 voltaj seviyesi daha da arttrlarak sins dalgasnda birbirine daha
yakn gerilimler elde edilebilir. Bu durumda k erisi titrek
olmayacaktr. Sins dalgasnn frekans, evrim tablosuna yerletirilen saylarn okluu ile drlecei gibi, k verileri
arasnda gecikme alt program kullanlarak da ayarlanabilir.
;===PROG32.ASM====16/08/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC EQU h0D
OFSET_SAY EQU h0C
BASLA
BSF STATUS, 5 ;Bankl
CLRF TRISA ;PORTA tm ular k
CLRP TRISB ;PORTB tm ular k
BCF STATUS, 5 ;Bank0
CLRF PORTA ;CS ucunu "0" yap
SAYKIL
CLRF OFSET_SAY ;Tablo ofset sayacn sfrla
ADIM
MOVF OFSET_SAY, W ;WOfset sayacn yaz
CALL TABLO
MOVWF PORTB ;Veriyi portB'ye k
BSF PORTA, 0 ;AD558'e kilitleme sinyali
BCF PORTB, 0
CALL GECIKME
MOVF OFSET_SAY, W ;Ofset sayacn W'ye yaz
SUBLW h'23' ; Saykl bitti mi?
BTFSC STATUS, 2 ; Zero flag' kontrol et.
GOTO SAYKIL
INCF OFSET_SAY ; OFSET_SAYOFSET + 1
GOTO ADIM
GECIKME
MOVLW h'0l' ; 3N+3 saykl(desimal), N=1
MOVWF SAYAC ; WSAYAC
TEKRAR
DECFSZ SAYAC, F ; SAYACSAYAC - 1
GOTO TEKRAR ; SAYAC 0 deil
RETURN
TABLO
ADDWF PCL, F ; OFSET_SAY' PLC'ye ykle
RETLW h'80' ; 1.28 Volt
RETLW h'95' ; 1.50
RETLW h'AD' ; 1.72
RETLW h'Cl' ; 1.92
RETLW h'D3' ; 2.10
RETLW h'E2' ; 2.26
RETLW h'EF' ; 2.39
RETLW h'F8' ; 2.48
RETLW h'FD' ; 2.54
RETLW h'FF' ; 2.55
RETLW h'FD' ; 2.54
RETLW h'F8' ;2.48
RETLW h'EF' ;2.39
RETLW h'E2' ;2.26
RETLW h'D3 ;2.10
RETLW h'Cl' ;1.92
RETLW h'AD' ;1.72
RETLW h95 ;1.50
RETLW h'80' ;1.28
RETLW h'6A' ;1.06
RETLW h'54' ;0.84
RETLW h'40' ;0.64
RETLW h'2E' ;0.46
RETLW h'lE' ;0.30
RETLW h'll' ;0.17
RETLW h'08" ;0.08
RETLW h'02' ;0.02
RETLW h'00' ;0.00
RETLW h'02' ;0.02
RETLW h'08' ;0.08
RETLW h'll' ;0.17
RETLW h'lE' ;0.30
RETLW h'2E' ;0.46
RETLW h'40' ;0.64
RETLW h'54" ;0.84
RETLW h'6A' ;1.06
END
lem Basamaklar
1. PIC16F84' programlayarak AD558 ile yaptnz devre zerine yerletiriniz.
2. Vk ucuna bir osilaskop balaynz ve ayarlarn yapnz.
3. Vk ucunda aadaki sins dalgasn grnz.
PWM (Pulse Width Modulation) Metodu Kullanmak
PWM (Pulse-Width-Modulation "Pals geniliini ayarlama") metodu PIC16F84'n k ularndan birisinden kare
dalga sinyali retme ilemidir. Kare dalgann pals geniliini ayarlama suretiyle elde edilen gerilimin DC voltmetre ile
llen deerini (Ortalama deeri) deitirilmi olur.
Bundan nceki blmlerde yaptmz ou programlarda portB'nin sadece bir bit'ine bal LED'i flash (Yakp-
sndrme) yapmtk. Eer LED'i karp yerine bir voltmetre balayacak olsaydk, 2.5 V civarnda bir gerilim okuyacaktk.
imdi PIC program aracl ile bu gerilimin nasl deitirilecei hakknda temel elektronik bilgisini verdiimizde yaplacak
programn hi de zor olmadn greceksiniz.
PWM Metodu
PWM metodunu anlayabilmek iin eit aralklarla LED yakp sndrme programlarnda elde ettiimiz k erisini inceleyelim.
Yukardaki k erisinde i sresi, LED'in yan sresi, bekleme sresi de snk kalma sresidir. Eer bir periyot
ierisindeki bu sreler birbirine eitse k gerilimin ortalama deeri 2.5 V olur.
Bir periyot ierisindeki i sresi ve bekleme sresi oranlar deitirilirse kta llecek gerilimin deeri de
deitirilmi olur.
Grld gibi i sresi uzatldnda k geriliminin ortalama deeri 2.5 V tan byk olmaktadr, Eer i sresi %
100 olursa k gerilimi 5 V, i sresi % 0 olursa k gerimi 0 V olur. Bu defa i sresinin bekleme sresinden az olduu
duruma rnek verelim.
k gerilimin ortalama deeri bir periyot ierisindeki i sresi ve bekleme sresi oranlaryla doru orantldr.
rnein;
sresi % 50 ise k gerilimi (5 V) 2.5 V
sresi % 25 ise k gerilimi (5 V) 1.25 V
sresi % 75 ise k gerilimi (5 V) 3.75 V olur.
SAYAC registeri ierisindeki ilk say h'FF' olursa, her defasnda SAYAC'tan "1" karlr. SAYAC'n "0" a gelmesi
iin 256 dng gerekir. Bu GECIKME alt programyla k peryodunun % 100'n elde ettiimizi dnrsek, i sresi ve
bekleme sresini tesbit etmek iin h'FF' /Desimal 256) saysnn yzdesini almak gerekir. rnein;
2.5 Vluk k iin % 50 i sresi % 50 bekleme sresi gerekir.
Bu durumda SAYAC registeri ierisine atayacamz saylar ne olmaldr ?
PROBLEM-33) PortA'nn 0. bit'ine bal bir voltmetrede 2.5 Vluk gerilim reten PIC program. k gerilimin analog
deeri (2.5 V) portB'deki dijital sinyalin (5 V) % 50 si olacandan,
IS deikenine h'80'
BEK deikenine h'80 saylar atanmtr.
;===PROG33.ASM====21/08/2000========
LIST P=16F84
INCLUDE "P16F84.INC"
IS EQU h'0D'
BEK EQU h0C
SAYAC EQU h0E
ORG h'00'
BASLA
BSF STATUS, 5 ; Bankl
CLRF TRISB ; PORTB tm ular k
BCF STATUS, 5 ; Bank0
CLRF PORTB ; CS ucunu "0" yap
MOVLW h'80' ; Wh80
MOVWF IS ; ISW, I sresini ata
MOVLW h'80' ; Wh'80"
MOVWF BEK ; BEK W, bekleme sresini ata
TEKRAR
BSF PORTB, 0 ; PORTB'nin 0. biti "1"= 5V
MOVF IS, W ; WIS, i sresini al
CALL GECIKME
BCF PORTB, 0 ; PORTB'nin 0. bit'i "0"= 0 V
MOVF BEK, W ; W BEK, bekleme sresini al
CALL GECIKME
GOTO TEKRAR
GECIKME
MOVWF SAYAC ; IS ya da BEK ierisindekini SAYAC'a yaz.
DONGU
DECFSZ SAYAC, F
GOTO DONGU
RETURN
END
lem Basamaklar
1. PIC16F84', PROG33.ASM ile programlaynz.
2. PIC'i deneme kartna yerletiriniz.
3. Devreye gerilim uygulayarak program altnnz. PortB'nin 0. bit'ine bal LED'in yar parlaklkta yandn
grnz. (k 2.5 V olduundan)
4. Breadboard zerinde kurduunuz devre zerinde deneme yapyorsanz, PortB'nin RBO ucuna bir voltmetre
balayarak 2.5 V luk gerilimi lnz.
PROGRAM-34) PortA'nn 1. bit'indeki A1 butonuna basnca portB'nin 0.bit'indeki LED'in parlakln arttran, A2 butonuna
basnca parlakln azaltan program. (PWM metodu ile D/A eviriciye ikinci bir rnek programdr.)
Bu programda 33. problemdekinden farkl bir yntem kullanlarak i ve bekleme sreleri tespit edilmitir. A1 butonuna
baslnca IS deikenin ierisindeki say arttrlr. IS sresince portB'nin 0. bit'i "1" olarak kalr. IS sresi bitince geriye kalan
PER sresince de portB'deki 0.bit "0" olarak kalr. A2 butonu IS ierisindeki sayy azaltr. IS sresi bydke LED
parlaklar, kldke donuklar. PER sresi sabit olarak "250" alnmtr. stenirse bu sre deitirilebilir. PER sresi
uzadka portB'den kan sinyalin frekans der, ksaldnda ise artar. IS sres PER sresinden byk olmamaldr. Aksi
halde LED devaml olarak yank kalr.
;===PROG34.ASM====25/08/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
IS EQU h'0D" ; sresi deikeni
PER EQUh'0C' ;Peryod sresi deikeni
ISYED EQU h0E ;IS'i yedekleme deikeni
SAYACl
EQUh'0F"
SAYAC2 EQh'10'
CLRF PORTB ;PortB'yi sil
BSF STATUS, 5 ;BANKl'e ge
CLRF TRISB ;PortB tm ular k
MOVLW hFF
MOVWF TRISA ;PortA'nn tm ular giri
BCF STATS, 5 ;BANK0a ge
BASLA
MOVLW d25 ;Wd10
MOVWF IS ;IS 8 W
MOVWF ISYED ;IS' i yedekle
DONGU
MOVF ISYED, W ;WISYED
MOVWF IS ;ISi yedekten al
MOVLW d250 ;Wd100
MOVWF PER ;PERW
BSF PORTB, 0 ;PORTB xxxxxxx1
BTFSS PORTA, 1 ;PORTA, 1. bit 1 mi?
GOTO M2 ;Hayr, M2'ye git
BTFSS PORTA, 2 ;Evet, PORTA. 2. bit 1 mi?
GOTO M3 ;Hayr, M3'e git.
PWM0
DECFSZ IS, F ;IS=IS-1, IS=0 m?
GOTO PWM1 ;Hayr, PWMl'e git
BCF PORTB, 0 ;Evet, PORTBxxxxxxx0
PWM1
DECFSZ PER, F ;PER=PER-1, PER=0 m?
GOTO PWM0 ;Hayr, PWM0'a git
GOTO DONGU ;Evet, DONGU'ye git.
M2
CALL GECIKME ;Buton ark snmesi iin bekle
MOVF ISYED, W
MOVWF IS ;IS'yi yedekten al
IMCF IS, F ;IS=IS+1
MOVF IS, W
MOVWF ISYED ;IS'yi yedekle
GOTO DONGU
M3
CALL GECIKME ;Buton ark snmesi iin bekle
MOVF ISYED, W
MOVWF IS ;IS'yi yedekten al
DECF IS,F ;IS=IS-1
MOVF IS, W
MOVWF ISYED ;IS'yi yedekle
GOTO DONGU
GECIKME ;Gecikme alt program
MOVLW h0F
MOVWF SAYACl
Dl
MOVLW hFF
MOVWF SAYAC2
D2
DECFSZ SAYAC2, F
GOTO D2
DECFSZ SAYACl, F
GOTO Dl
RETURN
END
lem Basamaklar
1. PIC'i programlayarak deneme kartnz zerine yerletiriniz.
2. Deneme kartna enerji verince portB'nin 0. bit'indeki LED donuk bir ekilde yanacaktr. nk IS=d'25',
PER=d'250' saylar atanmtr. Bu durumda LED, bir periyot sresinin 1/10 inde "1", 9/10 unda "0" olarak
kalacaktr.
3. A1 butonuna birka defa basarak IS ierisindeki sayy arttrnz. LED'in parlakl gittike artacaktr.
4. A1 butonuna basmaya devam ettike LED en parlak duruma geldikten sonra tekrar snecektir, Bu, IS ve PER
deikenlerinin ierisindeki saylarn eit duruma geldiini gsterir.
5. A2 butonuna basarak bu defa LED'in parlakln azaltnz.
6. PortB'nin 0. bit'ine bir dijital voltmetre balayarak bu utaki gerilimin 0-5V arasnda deitiini grnz.
PIC'e analog veri girmek, giri ularndan birisinden gerilim uygulamak demektir. PIC, ierisinde bulunan program
vastasyla bunu k ularnda binary veriye evirirse bu da dijital k demektir. Bu ilemi yapan piyasada microchip'in
rettii bir ok mikrodenetleyici bulunmaktadr. rnein, PIC16C7X serisi PIC'lerin analog giri iin zel ular ve ilerinde
A/D eviriciler bulunmaktadr. Son zamanlarda ok popler olan ve "Flash" bellee sahip olan PIC16F877
mikrodenetleyicisi de yine bu zelliklere sahiptir.
Analog sinyal genellikle bir sensr (Is sensr, k sensr, manyetik sensr vb.) vastasyla salanabilir. Biz bu
kitapta vereceimiz rneklerde kullanacamz PIC devrelerinde bu i iin voltaj blc potansiyometre kullanacaz.
Bir PIC ierisine analog veri girmek iin yaplacak en kolay yntem bir A/D konvertr kullanmaktr. Bylece analog
gerilim konvertr entegresinde dijital veriye dntrlr ve PIC girilerine uygulanr. Bu kolay metodu elektronik bilgisine
sahip olanlar ok kolaylkla uygulayabileceklerdir. Biz bu yntemi kitapta vermeyeceiz.
imdi ilk olarak PIC16F84'n giriine uygulanan bir gerilim seviyesini nasl algladn inceleyelim.
PROGRAM-35) PIC16F84'n giri seviyesinin llmesine rnek program. Bu program deneyebilmek iin aadaki
devreyi breadboard zerine kurmanz gerekmektedir.
;===PROG35.ASM====27/08/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
BASLA
BSF STATUS, 5
CLRF TRISB
MOVLW h'0l'
MOVWF TRISA
BCF STATUS, 5
CLRF PORTB
DONGU
BTFSS PORTA, 0 ;PortA, 0. bit 1 mi?
GOTO SONDUR ;Hayr, LED'i sndrmeye git.
BSF PORTB, 0 ;Evet, LED'i yak.
GOTO DONGU
SONDUR
BCF PORTB, 0 ;LED'i sndr.
GOTO DONGU
END
lem Basamaklar
1. PIC16F84' programlaynz.
2. Bu program denemek iin yukardaki devreyi breadboard zerine kurup gerilim uygulaynz.
3. lk olarak, potansiyometreyi ayarlayarak RAO ucuna uygulanan gerilimi 1V un altna getiriniz.
4. Potansiyometreyi ayarlayarak yava yava gerilimi ykseltiniz. Bir an LED yanmaya balayacaktr. Bu gerilime
V,iash gerimi diyelim. Vflash gerilimi PIC'ten PIC e deiebilir. Yaklak olarak llmesi gereken gerilim 15 V
civarnda olacaktr.
Buzzer'in altrlmas
rnek olarak verdiimiz deneme kartnn A portunun 3. bit'ine bir buzzer baldr. Bu buzzer'e gnderilen palslerin
aralklar deitirilmek suretiyle buzzer'den kan sesin ykseklii deitirilebilir. Aadaki program bu ileme rnek bir
programdr.
PROGRAM-37) A1 butonuna basl tutulunca, portA'nn 3. bit'ine bal ole buzzer'de kesik ve kaln bir ses karr. A2
butonu basl tutulunca ise kesik ve.t ses karr. Kesik seslerin buzzerden kt anda portB'deki LED'ler de yan sner.
;===PROG37.ASM====06/09/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
DLYH EQU h'08' ;Gecikme zaman sayac 1
DLYL EQU h'09' ;Gecikme zaman sayac 2
BZCNT EQU h'0C' ;Buzzer almas
BASLA
MOVLW h'00'
MOVWF PORTA ;PortA'y sil
MOVWF PORTB ;PortB'yi sil
BSF STATUS, 5 ;BANKl
MOVLW b'00010111';RA0-RA2 giri, RA3 k
MOVWF TRISA ;PORTA'y ynlendir
MOVLW b'00000000';RB0~RB7 k
MOVWF TRISB ;PORTB'yi ynlendir
BCF STATUS, 5 ;BANK0
BSF PORTA, 3 ;RA3=1
MLOOP
CLRWDT
BTFSC PORTA, 1 ; RA1=0 nu.?
GOTO MAINl
MOVLW hFF
MOVWF PORTB ;Tm LED'leri yak
CALL BZCALLL ;BZ Pi
MOVLW h'00'
MOVWF PORTB ;Tm LEDleri sndr.
MAINl
BTFSC PORTA, 2 ; RA2=0 m?
GOTO MAIN2
MOVLW h'FF'
MOVWF PORTB ;TM LED'leri yak
CALL BZCALLH ; BZ Pi
MOVLW h'00'
MOVWF PORTB ;Tm LED'leri sndr
MAIN2
CALL DLY50MS
CALL DLY50MS
CALL DLY50MS
CALL DLY50MS
CALL DLY50MS
CALL DLY50MS
GOTO MLOOP
;Zaman geciktirme alt program
DLY500U
MOVLW d'02
GOTO DLYP3
DLY50MS
MOVLW d255
DLYP3
MOVWF DLYH
DLYLP2
MOVLW d33
MOVWF DLYL ;CLKx3xTme
DLYLPl
DECFSZ DLYL, 1 ;DLY-1
GOTO DLYLPl
DECFSZ DLYH, 1
GOTO DLYLP2
RETLW 0 ;Return
;Buzzer call subroutine
BZCALL
BZCALLH
MOVLW d'44' ;44 defa
MOVWF BZCNT
BCl
BCF PORTA, 3 ;RA3=0
CALL DLY500U
BSF PORTA, 3 ;RA3=1
CALL DLY500U
DECF BZCMT, P
BNZ BCl
RETLW 0
BZCALLL
MOVLW 44
MOVWF BZCNT
BC2
BCF PORTA, 3 ;RA3=0
CALL DLY500U
CALL DLY500U
BSF PORTA, 3 ;RA3=1
CALL DLY500U
CALL DLY500U
DECF BZCMT, F
BNZ BC2
RETLW 0
END
PIC DENEME KARTI
Kitabn ierisindeki rnek programlar deneblleceiniz PIC deneme kartnn emas ve aada verilmitir. Bu kart
bizim tarafmzda retilmi ve elektronik malzemelerin kolaylkla elde edilebilir olmas en byk avantajdr. isterseniz,
internet sitelerinden parasz olarak elde edebileceinlz benzer kart emalar ve bask devre emalarn download edip kendi
olanaklarnzla retebilirsiniz.