You are on page 1of 129

INDEX Sayfa

GR...........................................................................................................................................
MKROLEMC NEDR? ......................................................................................................
MKRODENETLEYC NEDR?............................................................................................
Neden Mikroilemci Deil de Mikrodenetleyici Kullanlyor? ...............................................

MKRODENETLEYCLER HAKKINDA GENEL BLGLER.........................................

Neden PIC? ...............................................................................................................................


Neden PIC16F84? .....................................................................................................................
PIC PROGRAMLAMAK N NELERE HTYACINIZ VAR? ........................................

IBM Uyumlu Bilgisayar..................................................Hata! Yer iareti tanmlanmam.


Metin Editr ..................................................................Hata! Yer iareti tanmlanmam.
Assembler Program........................................................Hata! Yer iareti tanmlanmam.
PIC Programlayc Yazlm ............................................Hata! Yer iareti tanmlanmam.
Programlanm PIC'i Deneme Kart................................Hata! Yer iareti tanmlanmam.
PIC DONANIM ZELLKLER.............. HATA! YER ARET TANIMLANMAMI.
PIC ETLER ...................................................................Hata! Yer iareti tanmlanmam.
PIC'LERIN DI GRN.............................................Hata! Yer iareti tanmlanmam.
PIC BELLEK ETLER..................................................Hata! Yer iareti tanmlanmam.
PIC16F84.......................................................... HATA! YER ARET TANIMLANMAMI.
PIC 16F84N PIN GRN........................................Hata! Yer iareti tanmlanmam.
BESLEME GERLM.........................................................Hata! Yer iareti tanmlanmam.
CLOCK ULARI ve CLOCK OSLATR ETLER ....................... Hata! Yer iareti
tanmlanmam.
RESET ULARI VE RESET DEVRES............................Hata! Yer iareti tanmlanmam.
I/O PORTLARI .....................................................................Hata! Yer iareti tanmlanmam.
PIC16F84'N BELLE......................................................Hata! Yer iareti tanmlanmam.
Program Bellei...............................................................Hata! Yer iareti tanmlanmam.
RAM Bellek ....................................................................Hata! Yer iareti tanmlanmam.
W register ........................................................................Hata! Yer iareti tanmlanmam.
PIC ASSEMBLY ............................................. HATA! YER ARET TANIMLANMAMI.
ASSEMBLER NEDR? ........................................................Hata! Yer iareti tanmlanmam.
PIC ASSEMBLY DL NEDR? .........................................Hata! Yer iareti tanmlanmam.
PIC ASSEMBLY DL YAZIM KURALLARI .................Hata! Yer iareti tanmlanmam.
Noktal Virgl (;).............................................................Hata! Yer iareti tanmlanmam.
Girintiler ve Program Blmleri .....................................Hata! Yer iareti tanmlanmam.
Balk...............................................................................Hata! Yer iareti tanmlanmam.
Etiketler ...........................................................................Hata! Yer iareti tanmlanmam.
Atama deyimi (EQU) ......................................................Hata! Yer iareti tanmlanmam.
Sabitler ............................................................................Hata! Yer iareti tanmlanmam.
ORG Deyimi ...................................................................Hata! Yer iareti tanmlanmam.
Sonlandrma Blou..........................................................Hata! Yer iareti tanmlanmam.
Byk ve Kk Harflerin Kullanm.............................Hata! Yer iareti tanmlanmam.
PIC ASSEMBLY KOMUTLARININ YAZILI BM.Hata! Yer iareti tanmlanmam.
Byte-Ynlendirmeli Komutlar ........................................Hata! Yer iareti tanmlanmam.
Bit-Ynlendirmeli Komutlar ...........................................Hata! Yer iareti tanmlanmam.
Sabit leyen Komutlar....................................................Hata! Yer iareti tanmlanmam.
Kontrol Komutlar ...........................................................Hata! Yer iareti tanmlanmam.
SAYI VE KARAKTERLERN YAZILI BM............Hata! Yer iareti tanmlanmam.
Heksadesimal saylar.......................................................Hata! Yer iareti tanmlanmam.
Binary Saylar..................................................................Hata! Yer iareti tanmlanmam.
Desimal saylar................................................................Hata! Yer iareti tanmlanmam.
ASCII Karakterler ...........................................................Hata! Yer iareti tanmlanmam.
PIC ASSEMBLY KOMUTLARI ........................................Hata! Yer iareti tanmlanmam.
PIC PROGRAMLAMA.................................. HATA! YER ARET TANIMLANMAMI.
LK PROGRAMINIZ...........................................................Hata! Yer iareti tanmlanmam.
Bank Deitirme..............................................................Hata! Yer iareti tanmlanmam.
Port'larn Giri veya k Olarak YnlendiriImesi ........Hata! Yer iareti tanmlanmam.
AKI DYAGRAMl SEMBOLLER ..................................Hata! Yer iareti tanmlanmam.
AKI DYAGRAMININ ZILMESI................................Hata! Yer iareti tanmlanmam.
ASSEMBLY PROGRAM KOMUTLARININ YAZILMASI..................... Hata! Yer iareti
tanmlanmam.
Atama (EQU) Komutu Kullanarak Program Yazmak ....Hata! Yer iareti tanmlanmam.
PROGRAMLARIN DERLENMES (MPASM) ................Hata! Yer iareti tanmlanmam.
PROGRAMIN PIC'E YAZDIRILMASl.............................Hata! Yer iareti tanmlanmam.
P16PRO'nun Balatlmas ...............................................Hata! Yer iareti tanmlanmam.
PIC Seme (F3) ...............................................................Hata! Yer iareti tanmlanmam.
Program Dosyasn Ama (F1)........................................Hata! Yer iareti tanmlanmam.
PIC Konfigrasyonunu Ayarlama (F2) ...........................Hata! Yer iareti tanmlanmam.
Program PIC'e Yazdrma (F4)........................................Hata! Yer iareti tanmlanmam.
PROGRAMLANMI PIC'N DENENMES .....................Hata! Yer iareti tanmlanmam.
BreadBoard zerine Kurulan Devre ile Denemek..........Hata! Yer iareti tanmlanmam.
PIC Deneme Kart ile Denemek......................................Hata! Yer iareti tanmlanmam.
MPASM'NlN RETT DER DOSYALAR ...............Hata! Yer iareti tanmlanmam.
.LST Dosyas...................................................................Hata! Yer iareti tanmlanmam.
.ERR Dosyas ..................................................................Hata! Yer iareti tanmlanmam.
INCLUDE DOSYALARI .....................................................Hata! Yer iareti tanmlanmam.
INCLUDE Dosyas Kullanarak Program Yazmak ............Hata! Yer iareti tanmlanmam.
KONFGRASYON BTLERNN YAZILMASI............Hata! Yer iareti tanmlanmam.
VER TRANSFER VE KARAR LEMLER................................ HATA! YER ARET
TANIMLANMAMI.
W REGSTERN KULLANIMI (MOVLW, MOVWF KOMUTLARI)... Hata! Yer iareti
tanmlanmam.
Veri Transferi ..................................................................Hata! Yer iareti tanmlanmam.
Sonsuz Dng .................................................................Hata! Yer iareti tanmlanmam.
BT TEST EDEREK KARAR VERMEK (BTFSC, BTFSS) ..................... Hata! Yer iareti
tanmlanmam.
DNG DZENLEMEK .............................. HATA! YER ARET TANIMLANMAMI.
SAYA KULLANARAK DNG KULLANMAK (DECFSZ) ................ Hata! Yer iareti
tanmlanmam.
Basit Bir Zaman Gecikme Dngs Yapmak .................Hata! Yer iareti tanmlanmam.
KARILATIRMA YAPARAK DNG DZENLEMEK (SUBLW, SUBWF, INCF,
DECF KOMUTLARI) ..........................................................Hata! Yer iareti tanmlanmam.
SUBWF Komutu .............................................................Hata! Yer iareti tanmlanmam.
SUBLW Komutu.............................................................Hata! Yer iareti tanmlanmam.
STATUS REGISTER............................................................Hata! Yer iareti tanmlanmam.
STATUS REGSTER BlT'LER.....................................Hata! Yer iareti tanmlanmam.
ZAMAN GECKTRME VE ALT PROGRAMLAR....................... HATA! YER ARET
TANIMLANMAMI.
ZAMAN GECKTRME DNGLER ............................Hata! Yer iareti tanmlanmam.
Dahili Komut Saykl ......................................................Hata! Yer iareti tanmlanmam.
Tek Dng ile Minimum Zaman Geciktirme..................Hata! Yer iareti tanmlanmam.
Tek Dng ile Maksimum Zaman Geciktirme ...............Hata! Yer iareti tanmlanmam.
Komut Saykl Saysnn Bulunmas ................................Hata! Yer iareti tanmlanmam.
N saysnn bulunmas .....................................................Hata! Yer iareti tanmlanmam.
ift Dngl Zaman Geciktirme.....................................Hata! Yer iareti tanmlanmam.
N Saysnn Hesaplanmas...............................................Hata! Yer iareti tanmlanmam.
ALT PROGRAMLAR ..........................................................Hata! Yer iareti tanmlanmam.
BT KAYDIRMA VE MANTIKSAL LEM KOMUTLARI .... HATA! YER ARET
TANIMLANMAMI.
SOLA KAYDIRMA (RLF) ..................................................Hata! Yer iareti tanmlanmam.
SAA KAYDIRMA..............................................................Hata! Yer iareti tanmlanmam.
COMF VE SWAPF KOMUTLARI.....................................Hata! Yer iareti tanmlanmam.
MANTIKSAL LEM KOMUTLARI................................Hata! Yer iareti tanmlanmam.
ANDLW Komutu (stenilen bir ya da birka bit'i "0" yapmak) ................. Hata! Yer iareti
tanmlanmam.
ANDWF Komutu ............................................................Hata! Yer iareti tanmlanmam.
IORLVV Komutu (stenilen bit'in deerini "1" yapmak) ........................... Hata! Yer iareti
tanmlanmam.
IORWF Komutu..............................................................Hata! Yer iareti tanmlanmam.
XORLW Komutu (stenilen bir bit'i terslemek)..............Hata! Yer iareti tanmlanmam.
XORWFKomutu .............................................................Hata! Yer iareti tanmlanmam.
Bir Byte'lk ki Veriyi Karlatrmak (XORLW, XORWF) ...................... Hata! Yer iareti
tanmlanmam.
Bir Byte'lk Veriyi "0" ile Karlatrmak (IORLW, IORWF).................... Hata! Yer iareti
tanmlanmam.
ARTMETK LEMLER ............................. HATA! YER ARET TANIMLANMAMI.
ARTMETK LEM KOMUTLARI.................................Hata! Yer iareti tanmlanmam.
8 - BIT TOPLAMA.........................................................Hata! Yer iareti tanmlanmam.
16- BT TOPLAMA........................................................Hata! Yer iareti tanmlanmam.
8 - BIT IKARMA .........................................................Hata! Yer iareti tanmlanmam.
16- BITIKARMA .........................................................Hata! Yer iareti tanmlanmam.
EVRM TABLOLARI ................................. HATA! YER ARET TANIMLANMAMI.
EVRM TABLOSU (LOOKUP TABLE) NEDR?.........Hata! Yer iareti tanmlanmam.
PROGRAM COUNTER (SAYICI) .....................................Hata! Yer iareti tanmlanmam.
RETLW Komutu .............................................................Hata! Yer iareti tanmlanmam.
STEP MOTOR KONTROL ..............................................Hata! Yer iareti tanmlanmam.
KESMELER (INTERRUPTS)....................... HATA! YER ARET TANIMLANMAMI.
KESME (INTERRUPT) NEDR? .......................................Hata! Yer iareti tanmlanmam.
INTCON REGSTER..........................................................Hata! Yer iareti tanmlanmam.
KESME KAYNAKLARI......................................................Hata! Yer iareti tanmlanmam.
Harici Kesmeler...............................................................Hata! Yer iareti tanmlanmam.
TMRO Sayc Kesmesi....................................................Hata! Yer iareti tanmlanmam.
PORTB Lojik Seviye (RB4-RB7) Deiiklik Kesmesi ..Hata! Yer iareti tanmlanmam.
KESME ALT PROGRAMLARININ DZENLENMES Hata! Yer iareti tanmlanmam.
Tm Kesme lemlerini Aktif Yapma Bayra (GIE) .....Hata! Yer iareti tanmlanmam.
Kesme Esnasnda W ve Status Registeri Saklamak ........Hata! Yer iareti tanmlanmam.
Kesme Alt Programlar Nereye Yazlmal? ....................Hata! Yer iareti tanmlanmam.
Kesme Gecikmesi............................................................Hata! Yer iareti tanmlanmam.
Tek Pals reticinin Kullanm.........................................Hata! Yer iareti tanmlanmam.
DONANIM SAYICILARI................................................................................................... 100
DONANIM SAYICISI/ZAMANLAYICISI NEDR?....................................................... 100
TMR0 SAYICI/ZAMANLAYICISI(TIMER/COUNTER).............................................. 100
OPTION REGSTER .......................................................................................................... 100
TMR0 SAYICININ ZELLKLERl ................................................................................. 101
Frekans Blme Saysnn (Prescaler) Kullanlmas............................................................ 102
TMR0 ve WDT Oran ........................................................................................................ 102
Frekans Blme Saysnn Atanmas ................................................................................... 104
TMR0'dan WDT'ye Prescaler Deeri Atamak:.................................................................. 104
WDT'den TMR0'a Prescaler Deeri Atamak:.................................................................... 104
TMRO Saycsnn Kullanlmas........................................................................................ 104
TMR0 Sayc Kesmesine Ait rnekler .............................................................................. 108
TMR0 Saycsn stenilen Bir Saydan Balatmak............................................................ 110
WDT ZAMANLAYICISI (WATCHDOG TIMER) ......................................................... 111
Zaman Am Sresi ........................................................................................................... 112
SLEEP Komutunun Kullanlmas ...................................................................................... 113
D/A VE A/D EVRME LEMLER.......... HATA! YER ARET TANIMLANMAMI.
DJTAL/ANALOG EVRC ..........................................Hata! Yer iareti tanmlanmam.
Ladder(Merdiven) Diren Devresi Kullanmak ...............Hata! Yer iareti tanmlanmam.
8 Bit D/A konvertr Entegresi Kullanmak .........................Hata! Yer iareti tanmlanmam.
PWM (Pulse Width Modulation) Metodu Kullanmak ......Hata! Yer iareti tanmlanmam.
PWM Metodu..................................................................Hata! Yer iareti tanmlanmam.
ve Bekleme Sresinin Tespit Etmek ...........................Hata! Yer iareti tanmlanmam.
ANALOG / DJlTAL EVRC.........................................Hata! Yer iareti tanmlanmam.
PIC16F84'n Giri Seviyesinin lm .........................Hata! Yer iareti tanmlanmam.
A/D evrim Metodu Kullanarak Diren lmek ............Hata! Yer iareti tanmlanmam.
1 GR


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:

1. Input (Giri) nitesi.

2. Output (k) nitesi.

3. Memory (Bellek) nitesi.

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.

Neden Mikroilemci Deil de Mikrodenetleyici Kullanlyor?


Mikro ilemci ile kontrol edilecek bir sistemi kurmak iin en azndan u niteler bulunmaldr; CPU, RAM, I/O ve
bu nitelerin arasndaki veri al veriini kurmak iin DATA BUS (data yolu) gerekmektedir. Elbette bu niteleri
yerletirmek iin baskl devreyi de unutmamak gerekmektedir. Mikrodenetleyici ile kontrol edilecek sistemde ise yukarda
saydmz nitelerin yerine geecek tek bir chip (Mikrodenetleyici) ve bir de devre kart kullanmak yetecektir. Tek chip
kullanarak elektronik zmler retmenin maliyetinin daha dk olaca kesindir. Ayrca da kullanm ve programlama
kolayl da ikinci bir avantajdr. te yukarda saydmz nedenlerden dolay son zamanlarda bilgisayar kontrol gerektiren
elektronik uygulamalarda mikrodenetleyici kullanmaya eilimin artmasnn haklln ortaya koyuyor.

MKRODENETLEYCLER HAKKINDA GENEL BLGLER


Neredeyse her mikroilemci (CPU) reticisinin rettii birka mikrodenetleyicisi bulunmaktadr. Bu
denetleyicilerin mimarileri arasnda ok kk farklar olmasna ramen aa yukar ayn ilemleri yapabilmektedirler. Her
firma rettii chip'e bir isim ve zelliklerini birbirinden ayrmak iin de para numaras vermektedir. rnein Microchip
rettiklerine PIC adn, para numaras olarak da 12C508, 16C84, 16F84, 16C711 gibi kodlamalar verir. Intel ise rettii
mikrodenetleyicilere MCS-51 ailesi adn vermektedir. Genel olarak bu adla anlan mikrodenetleyici ailesinde farkl
zellikleri bulunan rnleri birbirinden ayrt etmek iin para numaras olarak da 8031AH, 8051AH, 8751AHP, 8052AH,
80C51FA gibi kodlamalar kullanlmaktadr.

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.

PIC PROGRAMLAMAK N NELERE HTYACINIZ VAR?


PIC 16/17 mikrodenetleyicilerin programlamasn ve uygulamalarda nasl kullanlacan renmek iin neleri bilmek
ve nelere sahip olunmas gerekenler aada sralanmtr:
IBM uyumlu bir bilgisayara sahip olmak ve temel kullanmlar bilmek.
Bir metin editrn kullanmasn bilmek.
Bir assembler programna sahip olmak.
PIC programlayc donanmna sahip olmak.
PIC programlayc yazlm.
PIC
Programlanm PIC'i denemek iin breadboard, g kayna ve elektronik elemanlar.
Programlanm bir PIC'i deneme kart.

IBM Uyumlu Bilgisayar


Assembly program kodlarn kolayca yazabilmek, doru ve hzl bir ekilde PIC'in program belleine gnderebilmek
iin bilgisayara ihtiya vardr. Bir metin editr kullanarak yazlan program kodlar, derlendikten sonra PIC'e gnderilmesi
gerekir. Program kodlarnn PIC'e yazdrma ilemi paralel veya seri porta balanan bir elektronik devre aracl ile yaplr.
Bu ileri yapabilmek iin bilgisayarn temel kullanm fonksiyonlarn bilmeniz gerekir. Aada bilmeniz gereken baz temel
ilemleri ve sahip olmanz gereken minimum konfigrasyonu veriyoruz:
DOS ya da VVINDOVVS iletim sistemi bildiinizi, bu iletim sistemi. komutlaryla klasr oluturma, dosya
kopyalama ve silme, listeleme gibi ilemleri yapabildiinizi.
Basit bir editr (EDIT, Notpad gibi) kullanabildiinizi, bu editrde bir text dosyas oluturup disket ya da hard
diske kaydedebildiinizi, diskteki bir dosyay ykleyip zerinde dzeltmeler yapabileceinizi,
Minimum 80486 CPU, 4 MB RAM, 100 MB harddisk ve CD-ROM srcs (Microchip'in CD'lerini
kullanabilmek iin) bulunan bir PC'ye sahip olduunuzu kabul ediyoruz.

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


MPASM tarafndan derlenerek makine diline dntrlm assembly program kodlarnn PIC'e yazdrlmasnda
kullanlan bir programa gereksinim vardr. Programlayc yazlmlar, PIC'i programlamak iin kullanlan elektronik karta
bamldr. Yani her programlayc yazlm ile elinizde bulunan karta kod gnderemeyebilirsiniz. Genellikle programlama
kart reticileri, rettikleri karta uygun yazlm da birlikte sunarlar. Biz bu kitapta ProtoPIC programlama kartna gnderdii
kodlarla PIC'ieri sorunsuz olarak programlayan P16PRO adl yazlm kullandk ve nasl kullanlacan anlattk. P16PRO'yu
Windows ortamndan da altrabileceiniz iin bu size byk kolaylk salayacaktr.

Programlanm PIC'i Deneme Kart


Programladnz PIC' breadboard zerinde kendi kurduunuz devre de deneyebileceiniz gibi ekilde grlen zel
bir deneme kart zerinde de deneyebilirsiniz. Balang ve orta dzey PIC programlayclara hitap etmek zere gelitirilen
bu kart zerinde deneme yapmak, breadbord zerinde devre kurmaktan ok daha kolaydr. PIC'in port klarndaki
sinyalleri izlemek amacyla 8 tane LED, bir tane de 7 segmentli LED yerletirilmitir. Kart zerindeki, butonlar,
potansiyometre ve LED'ler araclyla farkl ekilde programlanan PIC'lerin kolayca denenmesini salanr. Bu kartn yaps
ve kullanlmas hakknda Ekler blmnde geni bilgi bulacaksnz.

2 PIC DONANIM ZELLKLER


PIC ETLER
PICLERN GRN
PIC BELLEK ETLER

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.

PIC BELLEK ETLER


Farkl zellikte program bellei bulunan PIC'ler microchip firmas tarafndan piyasaya srlmektedir. Bunlar:
Silinebilir ve programlanabilir bellek (Erasable PROgrammable Memory-EPROM).
Elektriksel olarak silinebilir ve programlanabilir bellek (Electrically Erasable PROgrammable Memory-EEPROM).
FLASH bellek olarak da adlandrlr.
Sadece okunabilir bellek (Read-Only Memory-ROM).

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

PIC 16F84N PIN GRN

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.

CLOCK ULARI ve CLOCK OSLATR ETLER


PIC belleinde bulunan program komutlarnn altrlmas iin bir kare dalga sinyale ihtiya vardr. Bu sinyale clock
sinyali denilir ve Trke'de "klok" olarak okunur. PlC16F84'n clock sinyal girii iin kullanlan iki ucu vardr. Bunlar
OSC1(16 pin) ve OSC2 (15.pm) ulardr. Bu ulara farkl tipte osilatrlerden elde edilen clock sinyalleri uygulanabilir.
Clock osilatr tipleri unlardr:
RC - Diren/kondansatr (Resistor/Capacitor).
XT - Kristal veya seramik resonatr (Xtal).
HS - Yksek hzl kristal veya seramik resonatr (High Speed ).
LP - Dk frekansl kristal (Low Power).

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.

Osilatr tipi Frekans snr


RC 0 4 MHz
LP 5 200 KHz
XT 100 KHz 4 MHz
HS (-04) 4 MHz
HS (-10) 4 10 MHz
HS (-20) 4 20 MHz
PIC'e balanan clock osilatrnn tipi programlama esnasnda PIC ierisinde bulunan konfigrasyon bitlerine
yazlmaldr. Osilatr tipini belirten kodlar (RC, XT, HS ve LP) kullanarak konfigrasyon bitlerinin nasl yazlaca
programlama rnekleri verilirken detayl olarak incelenecektir.

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

RC osilatrn PICe balants ve rnek R, C deerleri


OSC1 ucundan uygulanan harici clock frekansnn 1/4' OSC2 ucunda grlr. Bu clock frekans istenirse devrede
kullanlan dier bir eleman srmek iin kullanlabilir.

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.

OSLATR TP FREKANS KONDANSATR


LP 32 KHz 33 68 pF
200 KHz 15 47 pF
100 KHz 47 100 pF
XT 500 KHz 20 68 pF
1 MHz 15 68 pF
2 MHz 15 47 pF
4 MHz 15 33 pF
HS 8 MHz 15 47 pF
20 MHz 15 47 pF

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.

RESET ULARI VE RESET DEVRES


PIC16F84'n besleme ularna gerilim uyguland anda bellekteki programn balang adresinden itibaren
almasn salayan bir reset devresi vardr. Bu reset devresi PIC ierisindedir ve "Power-on-reset" denir.

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.

PIC ASSEMBLY DL NEDR?


Assembly dili, bir PIC'e yaptrlmas istenen ilerin belirli kurallara gre yazlm komutlar dizisidir. Assembly dili
komutlar ngilizce dilindeki baz ksaltmalardan meydana gelir. Bu ksaltmalar genellikle bir komutun almasn ifade eden
cmlenin ba harflerinden oluur. Bylece elde edilen komut, bellekte tutulmas kolay (mnemonic) bir hale getirilmitir.
rnein:

BTFSC (Bit Test F Skip if Clear) - File registerdeki bit'i test et, eer sfrsa bir sonraki komutu atla, anlamnda
kullanlan ingilizce cmlenin ksaltmasdr.

PIC ASSEMBLY DL YAZIM KURALLARI


PIC assembly programlarnn yazlmas iin kullanlan text editrlerinden l.blmde bahsetmitik. Bu editrler
Windows altnda alan NOTPAD veya DOS altnda alan EDIT en uygunlardr. Bunlarn dnda printer kontrol
komutlar iermeyen ve ASCII kodunda dosya retebilen herhangi bir editr de kullanlabilir. MPLAB kullanldnda ayrca
bir editr kullanmaya gerek yoktur. nk MPLAB'n iinde hem bir text editr hem de MPASM bulunmaktadr.

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.

;-----PICTEST1.ASM------------- --------------10/3/2000 -------------


LIST P=16F84
;----------------------------------------------------------------------------------
; Adres tanmlama Blou
STATUS EQU 0x03
PORTB EQU 0x06
TRISB EQU 0x86
;----------------------------------------------------------------------------------
ORG 0x00 ;program 0x00dan balat.
;----------------------------------------------------------------------------------
; portlarn durumunu belirleme blou
START
CLRF PORTB ; port Bnin iini sfrla
BSF STATUS,5 ; BANK1e ge
CLRF TRISB ; port Bnin ularn output yap
BCF STATUS,5 ; tekrar BANK0a ge
;----------------------------------------------------------------------------------
; program blou
MOVLW 0x0F ; W registerine 0x0Fi ykle
MOVWF PORTB ; Wyi port Bye ykle
;----------------------------------------------------------------------------------
; sonlandrma blou
DONGU
GOTO DONGU
END
;----------------------------------------------------------------------------------

Noktal Virgl (;)


Ba tarafna (;) konulan satr, assembler tarafndan hexadesimal kodlara dntrlmez. Bu satrlar programn
gelitirilmesi esnasnda hatrlatc aklamalarn yazlmasnda kullanlr. rnein CLRF ile balayan satrda "portB'nin iini
sfrla" cmlesi, CLRF komutunun ne i yaptn aklar. Programn blmlerini birbirinden ayrmak iin (-- veya
=====) izgileri kullanmak, program grsel olarak daha okunur hale getirdii gibi bu izgiler arasna uyarlar ve aklamalar
da yazlabilir.

Girintiler ve Program Blmleri


Text editrlerinde birbirinden farkl uzunlukta girintiler veren TAB zellii vardr. Bu zellikten yararlanarak
assembly komutlar kolona blnerek yazlr. Bir assembly program temel olarak drt blme ayrlr. Bunlar: Balk,
atama, program ve sonu blmleridir.

Assembler, yukarda belirtildii gibi


komutlarn kolona blnerek yazlm
olduunu varsayar. Belirtilen kolona yazlmayan bir komut olduunda ise bunu da kabul eder. Ancak, hexadesimal kodlara
dntrme (Compile) esnasnda hatalar bir uyar (Warning) olarak belirtir. Assembly komutlar yazlrken kolonlar arasnda
verilen TAB'larn uzunluu nemli deildir. SPACE tuu ile verilen aralk da assembler tarafndan TAB olarak alglanr.

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.

Program komutlarnn hangi adresten itibaren baladn gsterir.

PIC16F84'n Interrupt alt programlarnn balang adresini belirlemede 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.

Byk ve Kk Harflerin Kullanm


PIC assembler komutlarnn byk veya kk harfle yazlmas nemli deildir. stenirse byk/kk harf
karm komutlarda kullanlabilir. rnein Movlw, movlw, MOVLW komutlar arasnda hibir fark yoktur. Ancak etiketler
byk/kk harf duyarldr. Start ile START birbirinin ayns deildir. Herhangi bir karkla neden olmamas iin hep
byk veya hep kk harf kullanmak en iyi seimdir.
PIC ASSEMBLY KOMUTLARININ YAZILI BM
PIC16F84'n toplam 35 tane komutu vardr. Bu komutlarn yazl biimini grupta toplayabiliriz.
1. Byte-ynlendirmeli komutlar.
2. Bit-ynlendirmeli komutlar.
3. Sabit ileyen komutlar.
4. Kontrol komutlar.

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

rnek: BCF 0x03, 5 ; 0x03 adresindeki registerin 5. bitini sfrla


BSF STATUS, BESBIT ;STATUS registerinin BESBIT etiketiyle tanml olan bitini "1" yapar. (Tanmlama
blounda BESBIT EQU 5 yazlmas gerekir.)

Sabit leyen Komutlar

rnek: MOVLW 0x2F ;W registerine 2F heksadesimal saysn ykler.


ADDLW b00101111 ;W registeri ierisindeki sayya 00101111 binary saysn ekler.

Kontrol Komutlar

rnek: GOTO DONGU ;Program ak DONGU olarak belirlenen etikete dallanr.


CALL TIMER ; Program ak TIMER etiketi ile belirlenen adresteki alt programa dallanr.

NOT: Program ierisinde yazlan etiketlere assembler'in otomatik olarak adres verdiini unutmayn.

SAYI VE KARAKTERLERN YAZILI BM


PIC assembly komutlarnda saylar heksadesimal, binary veya desimal formda kullanlabilir. Deiik kaynaklarda
kullanlan say ve karakter gsterili biimleriyle karlatnzda bunlar okuyabilmeniz iin aada rnekler verilmitir.

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

PIC ASSEMBLY KOMUTLARI

Yer Deitirme veya Ykleme Komutlar


Komut ve rnek ngilizce tanm Trke aklamas
MOVLW k Move Literal to W K sabit deerini W registerine ykler.
MOVLW h 0F' W<-OP

MOVF f,d Move f f registerinin ieriini W veya fe ykler.


MOVF TEST,0 d=0 WTEST d=1 TESTTEST

MOVMF f Move W to f W registerin ieriini f registerine ykler.


MOVWF PORTA PORTAW

Register eriini Deitirme Komutlar


CLRF F Clear f f registerinin ieriini siler (sfrlar).
CLRF TRISA TRISA00000000

CLRW Clear W W registerin ieriini siler (sfrlar).

CLRW W00000000

COMF F,d Complement f F registerinin iindeki say terslenir. Yani tm 1'ler 0,


0'lar 1 olur. Sonu W veya f registerine yklenir.
COMF SAY, 0 SAY= 0011011 ise,
d=0 W11001010
d=1 olsayd SAY11001010
DECF f,d Decrement f F registerinin ierisindeki sayy "1" eksiltir. Registerin
ierii h'00' ise, "1" eksiltildiinde h'FF' olur. Sonu W
veya f registerine yazlr.
DECF GIT,1 GIT=h' 2C" ise 2C-1=2B
d=1 GIT2B
d=0 olsayd W2B
INCF f,d Increment f F registerinin ierisindeki sayy "1" artrr. Registerin
ierii h' FF' ise, "1" arttrldnda h' 00' olur. Sonu W
veya f registerine yazlr.
INCF GIT, 0 GIT=h' 2C' ise 2C+1=2D
d=0 W2D
d=1 olsayd GIT2D
BCF f,b Bit Clear f f registerinin ierisindeki saynn b.ninci bitini sfrlar.
BCF PORTB,5 PORTB = b'11111111' ise,
PORTBb' 11011111
BSF f,b Bit Set f F registerinin ierisinde saynn b.ninci bitini 1 yapar.
BSF PORTA,3 PORTA = b 00000000' ise,
PORTAb' 00001000
RLF f,d Rotate Left f f registeri ierisindeki sayy bir pozisyon sola kaydrr.
Registerden taarak Carry bayrana yazlan bit, LSB'ye
yazlr. Sonu W veya f registerine yklenir.
RLF KAY,0

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"

Mikrodenetleyici Kontrol Komutlar


CLRWDT Clear VVatchdog Watchdog timer' sfrlar. Aynca vvatchdog timer'n
Timer prescalar deerini de sfrlar. Status bitlerinden TO ve
PD'yi "1"yapar.
SLEEP Go into standby mode Mikrodenetleyiciyi uyuma moduna geirerek g
harcamasn azaltr. Microdenetleyici uyuma modundan
reset, watchdog timer ve TOCKI girii vastasyla kar.

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.

ANDWF TEST,1 W=b' 11111111' ise,


TEST=b11011110 ise,
b' 11011110' AND ilemi sonucu
d=0 ise Wb' 11011110'
d=1 olduundan TESTb' 11011110
IORLW k Inclusive OR Literal W registerin ierii ile k sabitine OR ilemini uygular.
with W Sonu W registerine yazlr.
IORLW B-00101000- W =b' 10000100' ise
b' 00101000' sabitin deeri
b' 10101100' OR sonucu ,
W b' 10101100
IORWF f,d W registeri ierii ile file registerin ieriine OR ilemini
uygular. Sonu W veya f registerine yazlr.
IORWF TEST,1 W = b' 10000100" ise,
TEST = b' 00101000 ise,
b' 10101100 OR sonucu
d=0 ise Wb' 10101100"
d=1 olursa TESTb 0101100 '
XORLW k Exclusive OR Literal W registerin ierii ile k sabitine XOR ilemini uygular.
withW Sonu W registerine yazlr.
XORLW b' 00101000 W = b 00000000 ise
b' 00101000 sabitin deeri
b' 11010111" XOR sonucu
Wb' 11010111'
XORWF<" P.S- .. . - Exclusive OR W with f W register ile file register ieriine XOR ilemini
uygular. Sonu W veya f registerine yazlr.
XORWF TEST,1 W = b' 00000000' ise,
TEST = b' 00101000' ise,
b' 11010111" XOR sonucu
d=0 ise Wb' 11010111"
d=1 olursa TESTb' 1101011'l'

Aritmetik lem Komutlar


ADDWF f,d Add W with f W registerinin ieriini f registeri ile toplar. Sonu W veya
f registerine yazlr.
ADDWF TOPLA,0 W=h' 2A' ise, TOPLA=h ' 31' ise, h' 2A'+h' 31'=b' 5B'
d=1 ise TOPLAh' 5B'
d=0 olduundan Wh' 5B'
ADDLW k Add Literal andW W registerinin ieriini k sabit deeri ile toplar. Sonu W
registerine yazlr.
ADDLW H' 2F' W=h' B0 ise, h' B0'+h' 2F'=h' DF'
Wh' DF'
SUBLN k Subtract W from Literal K sabit deerinden W registeri ieriini karr. Sonu W
registerine yazlr.
SUBLW H' 90' W=h' 83 ise h' 90'-h' 83' = h' 07
Wh' 07

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'

lem Yapmayan Komut


NOP No Operation Bir komut saykl sresince hibir ilem yapmayan bir
komuttur. Bir dahili komut sresinde alr. Bu nedenle
zaman geciktirme ilemlerinde kullanlr.
5
PIC PROGRAMLAMA
LK PROGRAMINIZ
AKI DYAGRAMI SEMBOLLER
AKI DYAGRAMININ ZLMES
ASSEMBLY PROGRAM KOMUTLARININ YAZILMASI
PROGRAMLARIN DERLENMES (MPASM)
PROGRAMIN PICE YAZDIRILMASI
PROGRAMLANMI PICN DENENMES
MPASMNN RETT DER DOSYALAR
INCLUDE DOSYALARI
KONFGRASYON BTLERNN YAZILMASI
LK PROGRAMINIZ
Bu nitede, basit bir program ele alp, bunun ak diyagramnn nasl izildiini, program komutlarnn nasl yazlarak
derlendiini daha sonra da bu programn PIC'e nasl yazldn gstereceiz.

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.

BSF h'03', 5 Bank1 seilir.

BCF h'03', 5 Bank0 seilir.


Port'larn Giri veya k Olarak YnlendiriImesi
PortA ve PortB'nin ularna bal bulunan bir I/O elemann kullanabilmek iin portlan giri veya k olarak
ynlendirmek gerekir.
PortA'y TRISA registeri, PortB'vi TRISB reqisteri ynlendirir.
PortA/PortB'nin hangi bit'i giri yaplmak isteniyorsa, TRISA/TRISB ierisinde o bit'e karlk gelen bit "1" yaplr.
k olarak ynlendirilmek istenen bit'ler iin de TRISA/TRISB ierisine "0" yazlr.
TRISA 1 PortA Giri
TRISB 0 PortB k
Bu sylediklerimizi bir rnek vererek ematik olarak gsterelim. rnein, PortA'nn 1. ve 2. bitleri giri, dier
bitlerim k olarak ynlendirelim.

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.

Ak diyagramlar izilirken semboller


ierisine yazlan aklamalar ou
zaman yukarda olduu gibi ok fazla
ayrntl olmas gerekmez. Yaplacak
ilemler yerine hangi komut
kullanlacaksa sembol ierisine o komut
direkt olarak da yazlabilir. Ak
diyagram izmenin amac, karmak
mantksal ilemler gerektiren
programlar yazarken dnme kolayl
salamaktr. Bu nedenle ak
diyagramlar izerken kesin kurallara
uymaya zen gstermeniz gerekmez. Semboller ierisine yazacanz hatrlatc birka kelime ya da iaret ou zaman yeterli
olabilir.

ASSEMBLY PROGRAM KOMUTLARININ YAZILMASI


Ak diyagram izildikten sonra, ilemleri gerekletirecek olan assembly komutlar yazlr. Assembly komutlar
ASCII kodunda dosya reten bir editrde hazrlanmas gerekir. Bu editrler, DOS altnda alan EDIT, VVINDOVVS
altnda alan NOTPAD olabilir. Kullanmaya alk olduunuz herhangi bir editr de bu i iin uygundur. Biz bu kitapta
PFE adl bir editr kullanacaz. Aada assembly komutlarnn editrde yazl' biimi grlmektedir.
;===DENEME.ASM====27/04/2000=======
LIST P=16F84 ;PIC16F84 MPASMye tant
CLRF h'06' ;PORTBye bal LEDleri sndr
BSF h'03', 5 ;BANKle ge
CLRF h'86' ;PORTBnin tm ularn k yap
BCF h'03', 5 ;BANK0'a ge
BSF h'06', 0 ;PORTB'nin 0.bitindeki LEDi yak
END ;Program komutlarnn sonu
ilk programmzn komutlarn yazarken daha sonraki almalarnzda hatrlatc olmas iin yukarda grld gibi
yanlarna aklamalar yazabilirsiniz.

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.

Atama (EQU) Komutu Kullanarak Program Yazmak


Atama komutlar yazlrken register isimlerinin etiket stununda yazlmas gerektiini 3. blmdeki "Assembly Dili
Yazm Kurallar" bal altnda bahsetmitik. imdi program EQU komutunu kullanarak register adlarn etiket stununa,
adreslerini de adres stununa yazarak program yeniden dzenleyelim.

Program editrnzde yazdktan sonra DENEME.ASM adyla kaydediniz.

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

PROGRAMLARIN DERLENMES (MPASM)


DENEME.ASM adyla kaydedilen kaynak program derlemek iin MPAS^ derleyici programn altrmak gerekir.
Bu program altnnca karnza aadaki ekran gelecektir.

MPASM derleyici program kullanmak


olduka kolaydr. Yukardaki ekran zerinde grlen ou seenek: kaynak programn derlenmesinde nemli bir rol
oynamaz. Ancak bizim kitapta aklayacamz baz nemli dosyalarn (.ERR ve .LST) retilmesi iin aada aKlana1'1
dzenlemeyi yapmanzda yarar vardr.
Radix blmnde "Hexadecimali seiniz.
Warning blmnde "Warnings and Errors seiniz.
Hex output blmnde "lNHX8Myi seiniz.
Generated Files blmnde Error File, List Filei seiniz.
Case sensitive kutusunu onaylaynz.
Macro Expansions blmnde "Defaultu seiniz.
Processor penceresinden 16F84 seiniz.
Tab size penceresine "8" yaznz.

Derlenecek olan program semek iin:


"Browse" butonuna tklaynz. Alan pencereden DENEME.ASM dosyasn iaretleyip "Tamam" butonuna
basnz. imdi "Source File Name" penceresinde derleyeceiniz programn" adn greceksiniz.
Program derlemek iin "Assembler" butonuna tklaynz,

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.

PROGRAMIN PIC'E YAZDIRILMASl


Heksadesimal kodlara dntrlm olan assembly program PIC'e yazdrmak iin iki eye daha ihtiyacmz var. Bunlar:

1. Bilgisayarn paralel veya seri portuna balanan PIC programlama seti,


2. .HEX uzantl dosyadaki program kodlarn PIC programlama setine gnderen PIC programlayc yazlm.

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.

PIC Seme (F3)


Programlanacak PIC'in seimini yapmak iin:
F3 tuuna basn ve "Device" penceresinde programlayacanz P16F84'e karlk gelen "1" rakamn yazp,
"Enter" tuuna basn. Yeniden ekrana dndnzde ekrann sa st kesinde setiiniz PIC'i greceksiniz.
Ayn ilemi Alt+S tularna basarak alan pull-down menden "Device" komutunu seerek de yapabilirsiniz.

Program Dosyasn Ama (F1)


P16PRO klasr ierisine kaydettiiniz ",HEX" uzantl dosyay amak iin;
F1 tuuna basn. "Open Program File" penceresinden PIC'e yazdrmak istediiniz DENEME.HEX dosyasn
yukar aa tularn kullanarak sein ve "Enter" tuuna basn.
Ana ekrana dndnzde ekrandaki "PROGRAM DATA" yerinde setiiniz programn dosyasnn adn
(DENEME.HEX) greceksiniz. Yine bu pencere ierisinde Heksadesimal kodlara dntrlm assembly komutlarn
greceksiniz.

Programn yklenmesi esnasnda ekrann ortasndaki kk bir pencere oluacaktr.

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.

NOT: Konfigrasyon bilgilerinin nasl yazldn ileride detayl olarak inceleyeceiz.

PIC Konfigrasyonunu Ayarlama (F2)


Eer .HEX dosyanzda PIC konfigrasyonu yer almyorsa veya yer alan konfigrasyonu deitirmek istiyorsanz, bunu F2 tuunu
kullanarak yapabilirsiniz.

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.

imdi, bu ilemleri yaparak pencerede aadaki konfigrasyonun grlmesini salaynz.


Program PIC'e Yazdrma (F4)
Artk PIC'i programlama aamasna geldiniz. ProtoPIC programlama setinizin bilgisayara bal olduundan emin
olduktan sonra;

F4 tuuna basn.

"Info" penceresinde gsterildii gibi PlC'i sokete yerletirin.

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.

Programlama ilemi bittiinde "Enter" tuuna basarak programlama modundan knz.

PROGRAMLANMI PIC'N DENENMES


Programladnz PIC'leri deneyip, alp almadn grmek iin iki farkl yntemi uygulayabilirsiniz. Bunlardan
ilki, devreyi Breadboard zerinde kurmaktr. Bu yntemle uygulama devresi zerinde planladnz her tr elektronik
deyreyi kurabilme olanan bulabilirsiniz. Ancak olduka zaman alc bir yntemdir. kinci yntem ise PIC deneme kart
kullanmaktr. PIC deneme kartlar genellikle farkl uygulama programlarnn denenmesi iin gelitirilmitir. Port k
ularna LED'ler, giri ulanna da butonlar balanmtr. PCB zerine kurulduklarndan kart zerinde sonradan deiiklik
yapmak mmkn deildir. Bu nedenle programlar kartn dizaynna gre gelitirilmelidir. PIC programlamaya yeni
balayanlarn farkl programlama tekniklerini uygulayp renmeleri asndan baklrsa ideal bir aratr.

BreadBoard zerine Kurulan Devre ile Denemek


Programladnz PIC'in almasn izlemek amacyla aadaki devreyi bir breadbord zerinde kurunuz.
Bu devrede PIC iin gerekli olan clock sinyalini bir RC osilatr salamaktadr. MCLR reset girii terslenmi
olduundan aktif "0"da ilev grr. Reset girii, 1K diren zerinden 5V'a balanmtr. 100 nF'lk direncin grevi, PIC'e
enerji verildiinde meydana gelebilecek gerilim dalgalanmalannn PIC'e zarar vermesini nlemek iindir.

Devreye enerji verdiinizde PIC'in RBO bacana bal olan LED dorudan yanacaktr. DENEME.ASM assembly
programn yazarken yapmak istediimiz ey de zaten buydu.

PIC Deneme Kart ile Denemek


Piyasada eitim amal olarak hazrlanm eitli kartlar bulunmaktadr. Bunlardan bir tanesini satn alabileceiniz
gibi, aada resmi grlen ve detaylarn ekler blmnde verdiimiz kart kendi olanaklarnzla retebilirsiniz.

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.

Deneme kartnza programladnz PIC16F84' yerletirerek 5V DC g kaynana balaynz. D0 LED' PIC'e


enerji verir vermez yanacaktr.
MPASM'NlN RETT DER DOSYALAR
Editr ile hazrladnz kaynak program (DENEME.ASM) derlendikten sonra .HEX uzantl bir dosya elde edildiini
grdk. MPASM bu dosyann dnda (LST, ERR, COD, HXl-l, HXL, XRF) uzantl dosyalar da oluturarak yine ayn
klasr ierisine kaydeder. Bu dosyalarn ismi kaynak program ile ayndr. ou zaman kullanmak zorunda kalacamz LST
ve ERR dosyalar, assembly komutlarn yazarken yaplabilecek yazm hatalann bulmakta ok yararldr.

.LST Dosyas
.LST dosyasn kullandnz editrden aabilirsiniz. Bu dosya iki sayfadan olumutur. llksayfada (PAGE 1);

Komutun program bellei veya RAM'daki adresi (LOC),

Komutlarn hexadesimal karlklar (OBJECT),

Kaynak program ve satr numaralan (LINE SOURCE TEXT) verilir.

kinci sayfada ise (PAGE 2);


Programda kullanlan etiketler (SYMBOL TABLE) ve adresleri (VALUE),

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.

MPASH 02.30 Released DENEME.ASM 5-10-2000 22:57:44 PAGE 1


LOC OBJECT CODE LINE SOURCE TEXT VALUE
00001 ;===DENEME.ASM====27/04/2000=======
00002 LIST P=16F84 ;PIC16F84'n MPASM'ye tant
00000006 00003 PORTB EQU h'06"
00000003 00004 STATUS EQU h'03'
00000086 00005 TRISB EQU h'86'
0000 0186 00006 CLRF PORTB ;PORTB'ye bal LED'ieri sndr
0001 1683 00007 BSF STATUS, 5 ;BANKl'e ge
0002 0186 00008 CLRF TRISB ;PORTB'nin ularn k yap
0003 1283 00009 BCF STATUS, 5 ;BANKO'a ge
0004 1406 00010 BSF PORTB. 0 ;PORTB O.bitindeki LED'i yak
00011 END ;Program komutlarnn sonu

MPASM 02.30 Released DENEME.ASM 5-10-2000 22:57:44 PAGE 2


SYMBOL TABLE
LABEL VALUE
PORTB 00000006
STATUS 00000003
TRISB 00000086
_16F84 00000001
MEMORY USAGE MAP (X = Used, '-' = Unused)
0000 : XXXXX----------- ---------------- ---------------- ---------_---__.
All other memory blocks unused.
Program Memory Words Used: 5 Program Memory Nords Free: 1019
Errors : 0
Harnings : 0 reported, 0 suppressed
Messages ; 0 reported, 1 suppressed

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

DENEME.ASM dosyasnn 6. satrndaki "CLRF" komutunu "CLR" olarak deitirin.

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.

INCLUDE Dosyas Kullanarak Program Yazmak


Bir .INC dosyasn kaynak program ierisinde kullanabilmek iin, INCLUDE bildirisinden sonra dosyann ismini
yazmak yeterlidir. PIC16F84 mikrodenetleyicisi iin kullanacamz dosyann ad "P16F84.INC" dir. imdi bu dosyay
editrmzle aarak ierisinde neler yazldna bakalm.

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:

;2.00 07/24/96 Renamed to reflect the name change to PIC16F84.


;1.01 05/17/96 Corrected BADRAM map
;1.00 10/31/95 Initial Release
;-------------------------------------------------------------------------------
;Verify Processor
;-------------------------------------------------------------------------------
IFMDEF __16F84
MESSG "Processor-header file mismatch. Verify selected processor." ENDIF
--------------------------------------------------------------------------------
; Register Definitions
--------------------------------------------------------------------------------
W EQU H'OOOO'
F EQU H'OOOl'
;----- Register Files------------------------------------------------------
INDF EQU H'0000'
TMRO EQU H'000l'
PCL EOU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
EEDATA EQU H'0008'
EEADR EQU H'0009'
PCLATH EQU H'000A'
INTCON EQU H'000B'

OPTION_REG EQU H0081


TRISA EQU H'0085'
TRISB EQU H'0086'
EECONl EQU H'0088'
EECON2 EOU H'0089'
;----- STATUS Bits ---------------------------
IRP EQU H'0007'
RPl EQU H'0006'
RPO EQU H'0005'
NOT_TO EQU H'0004'
NOT_PD EQU H'0003'
Z EQU H'0002'
DC EQU H'000l'
C EQU H'0000'
;----- INTCON Bits --------------------------
GIE EQU H'0007'
EEIE EQU H'0006'
TOIE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
TOIF EQU H'0002'
INTF EQU H'000l'
RBIF EQU H'0000'
;----- OPTION Bits --------------------------
NOT_RBPU EQU H'0007'
INTEDG EQU H'0006'
TOCS EQU H'0005'
TOSE EQU H'0004'
PSA EOU H'0003'
PS2 EQU H'0002'
PSl EQU H'000l'
PSO EQU H'0000'
;----- EECONl BitS ----------------------.
EEIF EQU H'0004'
WRERR EQU H'0003'
WREN EQU H'0002'
WR EQU H'000l'
RD EQU H'0000'
;--------------------------------------------------------------------------------
; RAM Definition
__MAXRAM H'CF'
__BADRAMH'07', H 50 -H 7F', H'87'
;--------------------------------------------------------------------------------
Configuration Bits
_CP_ON EQU H'000F'
_CP_OPF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_PWRTE_OFP EQU H3FFF
_WDT_OM EQU H'3FFF'
_WDT_OFF EQU H3PFB
_LP_OSC EQU H3FFC
_XT_OSC EQU H3FFD'
_HS_OSC EOU H3FFE
_RC_OSC EQU H'3FFF'

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

KONFGRASYON BTLERNN YAZILMASI


Konfigrasyon bit'leri, PIC'e gerilim uyguland anda PIC'in uymas gereken koullar belirlemede kullanlr. Bu
koullar PIC uygulama devresine baldr. rnein uygulama devresinde RC osilatr kullanlyorsa, bu koul kaynak
program ierisinde bulunmaldr ve PIC'e yazdrlmaldr.
Konfigrasyon bit'leri aadaki koullar belirlemede kullanlr:
Osilatr tipini (RC, XT, HS, LP gibi) belirlemek,
Watchdog tmer'i ON veya OFF yapmak,
Povver-on-reset (PIC'e enerji verildiinde reset) durumunu ON veya OFF yapmak,
Kod korumay ON veya OFF durumuna getirmek (PIC'e yazlan programn okunmasn engellemek iin yaplr.)

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.

imdi de konfigrasyon belirlemede kullanlan tanmlarn neler olduunu grelim.


Koul Yazlacak tanm kodlar
Kod koruma var _CP_ON
Kod koruma yok _CP_OFF
Power-on-reset var _PWRTE_ON
Power-on-reset yok _PWRTE_OFF
Watchdog timer devrede _WDT_ON
Watchdog timer devrede yok _WDT_OFF
Low Power Osilatr _LP_OSC
Kristal osilatr _XT_OSC
High Speed osilatr _HS_OSC
RC Osilatr _RC_OSC

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)

W REGSTERN KULLANIMI (MOVLW, MOVWF KOMUTLARI)


Veri Transferi
W register, RAM ierisindeki file registerlerden bamsz bulunmaktadr. Registerler arasnda veri transferi yapmak
iin kullanlr. rnein, PortA ierisindeki veriyi PortB ierisine transfer etmek iin aadaki komutlar yazmak gerekir.

MOVF PORTA, W ;PortA'nn ieriini W registere ta


MOVWF PORTB ;W registerin ieriini PortB'ye gnder
PortB'ye bal olan 8 LED'in ilk drt tanesini yakacak olan veriyi gndermek iin de aadaki komutlar yazlmaldr.

MOVLW H0F ;W registerine H OH ykle


MOVWF PORTB ;W registeri ieriini PortB'ye gnder
Eer bir register ierisine H'00' verisi gnderilmek istenirse, o registerin ierisini CLRF komutu ile silmek daha pratik bir yntemdir.

CLRF PORTB ;PortB'nin ieriini sfrla


PROGRAM-1) PIC'e enerji verildiinde PortA'nn ularna bal butonlardan hangisi basl tutulursa, PortB'de o butona
karlk gelen LED'i sndren program.
;==PROGl.ASM====14/05/2000=======
LIST P=16F84
PORTA EQU h'05"
PORTB EQU h'06'
STATUS EQ h'03'
TRISA EO h'85"
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
MOVLW h'FF' ;W registere bFF ykle
MOVWF TRISA ;PortA'nn ularn. giri yap
BCF STATUS, 5 ;BANK=a ge
BASLA MOVF PORTA,W ;PortA'y oku, sonucu W'ye yaz
MOVWF PORTB ;Butonlarn durumunu PortB'de gster
DONGU
GOTO DONGU END ;Sonsuz dng ve program sonu

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.

3. Breadboard zerinde aadaki devreyi kurunuz.

4. Devreye enerji vermeden


nce A1, A2, A3
butonlarna birlikte veya
tek olarak basnz.
5. Devreye enerji veriniz.
6. Bastnz butonlarla snen
LED'leri karlatrnz.
NOT: Hibir butona basmadnzda
RB0-RB4 ularna bal olan tm
LED'lerin yank olduunu
greceksiniz. Sebebi, A portunun
tm ularnn pull-up oluundandr.
Hangi butona bastysanz, o porta
giren veri 0'dr. A portundaki veri
direkt olarak B portuna transfer edildiinden, baslan butonun karlndaki LED snecektir.
Program tekrar altrmak iin PIC'in enerjisini kesip yeniden vermeniz gerekmez. RESET tuuna basmanz
yeterlidir.
7. B portundaki LED'leri durumunu deitirmek iin nce butona/butonlara basn, daha sonra da RESET tuuna
basnz.
8. Eer breadboard zerine yukardaki devreyi kurma olananz yoksa, programladnz PIC'i denemek iin hazr
deneme kartnz kullannz.

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.

BT TEST EDEREK KARAR VERMEK (BTFSC, BTFSS)


Bir register ierisindeki herhangi bir bit BTFSC veya BTFSS komutlar ile test edilebilir. Bu test sonucuna gre
program ak istenilen komuta dallandrlabilir.
BTFSC komutu ngilizce'deki "Bit Test File register Skip if Clear", komutunun ksaltmasdr. Trke'deki karl
"Registerdeki bit'i test et, eer "0"sa bir sonraki komuta atla" biimindedir. BTFSS komutu ise "Bit Test file register Skip if
Set" cmlesinin ksaltmasdr. Trke karl ise "Registerdeki bit'i test et, eer "1"se bir sonraki komuta atla"dr.
Komutun ileyiini rnek bir program parasnn ak diyagramn izerek inceleyelim.

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

SAYA KULLANARAK DNG KULLANMAK (DECFSZ)


Baz ilemlerin nceden belirlenen sayda tekrarlanmas gerekebilir. Bu durumda bir register saya olarak kullanlr.
ilk nce saya ierisine ilemlerin tekrar saysn belirleyen say yklenir. Daha sonra her bir ilem tekrarnda saya
ierisindeki deer bir azaltlr. Azaltma ilemi DECFSZ komutu ile yaplr. Saya ierisindeki say 0 (sfr) olunca dng
biter ve program ya bitirilir ya da baka bir komuta dallandrlarak devam eder.
DECFSZ komutu ngilizce'deki "Decrement file register Skip if Zero" dur. Trke'ye evirirsek u anlam kar;
Registerden "1" kart, eer sonu "0"sa bir sonraki komuta atla.
DECFSZ komutunun yazl ve rnek ak diyagram aadaki gibidir.
PROGRAM- 6) A portunun 1. bitine bal butona 10 defa basnca B portunun 0. bit'indeki LED'i yakan program.
;==PROG6.ASM====25/05/2000=====
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC EQU h'0C' ;SAYAC registerinin
adresi
CLRF PORTB
BSF STATUS, 5
CLRF TRISB
MOVLW h'FF'
MOVWF TRISA
BCF STATUS, 5
BASLA MOVLW D'10' ;W registerine 10
saysn ata
MOVWF SAYAC ;W
registerini SAYAC'a ykle
TEST
BTFSC PORTA,1;PortA'nn 1. biti lmi?
GOTO TEST ;Hayr, tekrar test et
NOP ;Bir saykl bekle
NOP ; "
NOP ; "
NOP ; "
NOP ; "
NOP ; "
NOP ; "
NOP ;
NOP ;
NOP ;
NOP ;
NOP ;
NOP ;
NOP ;
NOP ;

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.

Butonlar mekanik kontaklardan


yapldndan butonun braklmas
esnasnda ark oluacaktr. ekilde de
grld gibi ilk baslta gerilim
dalgalanmalar olmaktadr. Bu
dalgalanmalar esnasnda gerilim
defa OV seviyesine inmektedir.
Butona bas biimi ve kontaklarn
durumuna gre bu say azalabilir veya artabilir. Butona bir defa basld halde 2~3 defa baslm gibi OV seviyesine
inecektir. PIC komutlarnn icra edilme sresi ok ksa olduundan her 0V seviyesine ini, butona baslm gibi ilem grerek
SAYAC registeri ierisinden her defasnda "1" karacaktr. Bu da bizim beklediimiz ilemden farkl bir sonu douracaktr.
Butonda meydana gelen ark nlemek amacyla NOP komutlar kullanlmtr. NOP komutu 1 saykl sresince hibir
ey yapmadan CPU'nun gecikme yapmasn salar. Kullanlan be NOP komutu ark nlemek iin yeterli gelmedii deneyde
aka grlmektedir. Eer NOP komutu saysn 100'e karrsak, 100 saykllk bir gecikme salayabiliriz. Bu da ilk OV
seviyesinden sonra oluan 0V'larn alglanmamasn salayabilir.
4. Programdaki NOP komutlarnn
saysn 100'e, (Gerekiyorsa daha fazla)
kararak programn doru olarak
almasn salaynz.
Programlar ierisinde gerekli olan
bu tip zaman gecikmelerini salamak
amacyla yzlerce NOP komutu yazmak,
bellei gereksiz olarak doldurmak
demektir. Ayn zamanda iyi bir
programlama teknii deildir. 8. blmdeki
zaman geciktirme dngleri bu gibi
ilemleri gerekletirmek iin ska
kullanlmaktadr.

Basit Bir Zaman Gecikme


Dngs Yapmak
imdi de DECFSZ komutu
kullanarak yaplan dng ierisinde hibir
ilem yapmayan komutlar kullanarak belirli
bir zaman gecikme dngs yaplabilir.
rnein 768 tane NOP komutunu alt alta
yazarak gecikme salamak yerine, 3 tane
NOP komutunu ard ardna 256 defa
altrmak program ierisinde daha az yer
kaplar. imdi bunu bir rnek programla
gsterelim.
PROGRAM-7) A portunun 1. bit'indeki
butona bastka B portundaki LED'leri
binary 9'dan 0'a kadar azaltarak yakan
program.
Buton zerinde meydana gelebilecek ark
DECFSZ komutu ile yaplan basit bir zaman
gecikme dngs ile salanmtr.
;===PROG7.ASM====29/05/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYACl EQU H'0C' ;SAYACl registerinin adresi
SAYAC2 EQU H0D ;SAYAC2 registerinin adresi
CLRF PORTB ;PortB'yi sfrla
BSF STATUS,5 ;BANKle ge
CLRF TRISB ;PortB'nin tm ular k
HOVLW H'FF' ;Wh'FF
HOVWF TRISA ;PortA'nn tm ular giri
BCF STATUS, 5 ;BANK0a ge
BASLA
MOVLW H'0A' ;Wh'0A'
MOVWF SAYACl ;SAYAClW
TEST
BTFSC PORTA,1 ;PortA'nn 1. bit'i 0 m?
GOTO TEST ;Hayr, tekrar test. et
GECIKME ;Gecikme salama blm
MOVLW H'FF' ;Wh'FF'
MOVWF SAYAC2 ;SAYAC2W
GECIKIME ;Gecikme salama blm
DECFSZ SAYAC2, F ;SAYAC2SAYAC2-1, SAYAC2=0 m?
NOP ; Arkn snmesini bekle
NOP ;
NOP ;
GOTO GECIKME ;Hayr, SAYAC2'yi tekrar azalt AZALT
DECFSZ SAYACl, F ;SAYACK-SAYACl-1 ,SAYAC1=0 m?
GOTO YAK ;Hayr, YAK etiketine atla
GOTO BASLA ;Evet, baa dn YA;
MOVF SAYACl, W ; WSAYACl
MOVWF PORTB ;SAYAC1i PortB'ye gnder
GOTO TEST ;PortA'yi tekrar test et.
END ;Prograa kodlarnn sonu
lem basamaklar
1. PIC' programladktan sonra breadboard zerine kurduunuz devreye y;
2. da deneme kartnza yerletiriniz.
3. PIC'e gerilim vererek altrnz.
4. A1 butonuna ok ksa olarak basp elinizi ekiniz. ilk yanan lamba 9' gsterecektir. Lambalar aadaki gibi yanacaktr. 9

Butona tekrar basarak lambalarn azalan binary saylar gstermesini salaynz.

NOT: Meydana gelen arklarn yok edilmesi iin oluturduumuz basit


gecikme devresi yeterli olmayabilir. Bu nedenle saylarn azaldn
grmek iin butona olduka ksa basmanz gerekir. Aksi halde saylar
azalrken arada atlamalar olabilir. Gecikme dngleri konusunda
zaman uzatmak iin gerekli programlama tekniini 8. blmde
"Zaman geciktirme ve altprogramlar" nitesinde reneceksiniz.

KARILATIRMA YAPARAK DNG DZENLEMEK (SUBLW, SUBWF,


INCF, DECF KOMUTLARI)
Baz ilerin nceden belirlenen sayda tekrarlanmas gerekebilir. Bu durumda bir register saya olarak kullanlr. Her
bir ilem tekrarnda saya ierisindeki say bir arttrlr. Arttrma ilemi INCF komutuyla yaplr. .Saya ierisindeki say
ilemlerin tekrar edilme saysna ulanca, dng sona erer ve program ak baka bir komuta geer. Bu karlatrma
yntemiyle yaplan dngnn ak diyagramn aadaki gibi izebiliriz.
Dngnn tekrar says W
registeri ierisine yklenen say
ile belirlenir. SAYAC deikeni
ierisindeki say dngnn her
tekrarnda bir artrlr ve SUBWF
komutuyla SAYAC'tan Wnin
ierii karlr. karma ilemi
neticesinde STATUS registerin
0. ve 2. bit'indeki deer etkilenir.
Bu bit'ler BTFSC komutuyla test
edilir. Testler sonucunda
istenilen deere ulalnca
dngye son verdirilir.
STATUS registerin 0. bit'ine
CARRY FLAG (Tama bayra),
2. bit'ine ZERO FLAG ((Sfr
bayra) olarak adlandrlr.
STATUS register

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.

rnek program paralar:


1. F = W durumu
MOVLW h50
MOVWF MEM
SUBWF MEM, W
W>MEM BTFSC STATUS,2 W=MEM
GOTO XXXX W=MEM
W<MEM BSF PORTB, 0
2. F<W durumu
MOVLW h40
MOVWF MEM
MOVLW H'50"
SUBWF MEM, W
W=MEM BTFSC STATUS,0 W<MEM
W>MEM GOTO XXXX
BSF PORTB, 0 W<MEM
3. F>W durumu
MOVLW h60
MOVWF MEM
MOVLW H50
SUBWF MEM, W
W=MEM BTFSC STATUS,0 W>MEM
GOTO XXXX W>MEM
W<MEM BSF PORTB, 0

SUBLW Komutu
SUBLW komutu karma yapan bir komuttur. Aadaki yazm kuralna gre sabit (L) ierisinden W registeri ieriini karr. Sonucu
W registere yazar.

karma sonucunda W ve sabitin byklkleri C ve Z flaglarn deerini deitirir.

rnek program paralar:


1. Sabit= W durumu
MOVLW h50
SUBWF h50
Sabit<W BTFSC STATUS,2 Sabit=W
Sabit>W GOTO XXXX
BSF PORTB, 0 Sabit=W
2. Sabit < W durumu
MOVLW h60
SUBLW h'50'
Sabit=W BTFSC STATUS,0 Sabit<W
Sabit>W GOTO XXXX
BSF PORTB, 0 Sabit<W
3. Sabit> W durumu
MOVLW h'40"
SUBLW h'50'
Sabit=W BTFSC STATUS,0 Sabit>W
GOTO XXXX Sabit>W
Sabit<W BSF PORTB, 0
PROGRAM- 8) SUBLVV komutu ile yaplan bir karlatrma sonucunda STATUS registerin ieriini grntleyen
program.
;===PROG8.ASM====01/06/2 000=======
LIST P=16F84
IMCLUDE "P16F84.INC"
CLRF PORTB ;PortB'yi temizle
BSP STATUS, 5 ;BANK2'ye ge
CLRF TRISB ;PortB'nin tm ularn k yap
BCF STATUS, 5 ;BANKle ge
BASLA
MOVLW h'041 ; W h04
SUBLW h'05" ; W = h'05' - h'04"
MOVF STATUS, W ; STATUS' W registere yaz
MOVWF PORTB ; STATUS' LED'lerde gster
DONGU
GOTO DONGU
END

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.

STATUS REGSTER BlT'LER


bit 7 6 5 4 3 2 1 0

RP1 RP0 TO PD Z DC C
IRP

Bit 7: IRP: Register Bank Select bit (Bank seme bit'i)


0= Bank 0, 1 (h00'- h'FF')
1=Bank 2,3 (h'100'-h'1FF')
IRP biti PIC16F84 de kullanlmaz. IRP, 0 (sfr) olarak kalmaldr.
Bit 6-5:RP1:RPO: Register Bank Select bit (Bank seme bitleri)
00= Bank 0 (h'00'-h'FF')
01=Bank 1 (h'80'-h'FF')
10=Bank2(h'100'-h'17F')
11=Bank3(h'180'-h'1FF')
PIC16F84'de sadece RP0 biti kullanlr. RP1, 0 (sfr) olarak kalmaldr.
Bit 4: TO: Time-out bit (Zaman dolma bit'i)
1= PIC'e enerji verildiinde, CLRWDT ve SLEEP komutu alnca.
0= WDT zamanlaycsnda, zaman dolduunda.
Bit 3: PD: Power-down bit (Enerji kesiime bit'i)
1= PIC'e enerji verildiinde ve CLRVVDT komutu alnca.
0= SLEEP komutu alnca.
Bit 2: Z: Zero bit (Sfr bifi)
1 = Bir aritmetik veya mantksal komutun sonucu 0 (sfr) olduunda.
0= Bir aritmetik veya mantksal komutun sonucu 0 (sfr) olmadnda.
Bit 1: DC: Digit carry/borrow bit (Tama/dn biti) ADDLW ve AODVVF komutlar kullanldnda oluan tama ve dn alma
olduunda)
1= All drt bitin 4. bit'inde tama meydana geldiinde.
0= Alt drt bitin 4. bit'inde tama meydana gelmediinde.
Bt 0: C: Carry/borrow bit (Tama/dn biti) ADDLW ve ADDVVF komutlar kullanldnda. Oluan tama ve dn alma olduunda)
1= En soldaki 7. bit'te tama olduunda.
0= En soldaki 7. bit'le tama olmadnda,
Not: RLF ve RRF komutlar altnda en sol bit veya en sa bitin deeri carry bit'ine yklenir.
PROGRAM-9) SUBWF komutu kullanlarak oluturulan dngye rnek program.
Bu programda SAYAC adl bir registerin ierisine dngnn tekrar says konulmutur. Dngnn her tekrarnda
INCF komutuyla SAYAC ierisindeki deer bir arttrlr. SUBWF komutuyla W register ierisindeki sabit say karlatrlr.
Karlatrma sonunda etkilenen zero flag kontrol edilerek dng sona erdirilir.

;===PROG9.ASM====05/06/2000=======
LIST P=16F84

INCLUDE "P16F84.INC"

SAYAC EQU h'OC' ;SAYAC registerini tanmla


CLRF PORTB ;PortB'yi temizle
BSF STATUS, 5 ;BANK2'ye ge
CLRF TRISB ;PortB'nin tm ularn k yap
BCF STATUS, 5 ;BANKl'e ge
BASLA
CLRF PORTB ;portB'yi sil
CLRF SAYAC ;SAYAC sil
TEKRAR
MOVF SAYAC, W ;SAYAC' W registere ykle MOVWF
PORTB ;W registeri PortB'ye gnder IMCF SAYAC, F
;SAYACSAYAC+1
MOVLW h'07' ;W registere h'07" ykle
SUBWF SAYAC, W ;WSAYAC-W
BTFSS STATUS, 2 ;STATUS bit2=l mi?
GOTO TEKRAR ;Hayr, TEKRAR'a git
DONGU
GOTO DONGU
END

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.

8 ZAMAN GECKTRME ve ALT PROGRAMLAR


ZAMAN GECKTRME DNGLER
ALT PROGRAMLAR

ZAMAN GECKTRME DNGLER


Baz ilemlerin yaplmas esnasnda belirli bir zaman hibir ey yaplmadan beklenmesi gerekebilir. Byle bir
beklemenin gereklilii 7. blmde grlmt. Bir butonun basldnda/brakldnda kontaklarn birbirine temas
esnasnda ark meydana geliyordu. Bu ark nlemek iin zaman geciktirme dngs gerekiyordu.
Zaman geciktirme ilemlerini yazlm dngleri kullanarak yapabildiimiz gibi donanmn (PIC16F84) bize sunduu
zel geciktirme olanaklarn kullanarak dc yapabiliriz. Donanm geciktirmelerinin (TMRO ve WDT) nasl kullanldn daha
sonraki blmlerde ele alnacaktr.
Bir zaman geciktirme dngsnde, gecikme zamann tespit etmek iir komutlarn icra sresi gz nne alnr. RC
osilatr kullanlan PIC devrelerinde bir komutun icra sresini hassas olarak saptamak mmkn deildir. Ancak kristal veya
seramik rezonatr kullanlan devrelerde ok hassas gecikme dngleri elde etmek mmkndr.

Dahili Komut Saykl


PIC16F84 mikrodenetleyicisinin giriine uygulanan osilatr frekans 4'e blnr. Bir komutun icra sresi bu frekansn bir saykl
sresindedir.

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.

Komut Komut saykl


GOTO 2
CALL 2
RETURN 2
Program counter'a (PC) veri yazan komutlar 2
DECFSZ 1 (Register iensindeki say 1'se)
2 (Register ierisindeki say 0'sa)
RETLVV 2
RETFIE 2
NCFSZ 1 (Register ierisindeki say 1'se)
2 (Register ierisindeki say 0'sa)
BTFSC 1 (Test edilen bit 1'se)
2 (Test edilen bit 0'sa)
BTFSS 1 (Test edilen bit 0'sa)
2 (Test edilen bit 1'se)

Tek Dng ile Minimum Zaman Geciktirme


Bir gecikme dngs hazrlanrken saya olarak kullanlacak bir file register tanmlanr. Bu register ierisine dngnn tekrar says
yklendikten sonra DECFSZ komutu ile tekrar saysndan her defasnda "1" kartlr. karma sonucu "0" olunca dng sona erdirilir. imdi
bu ekilde dzenlenen bir dngde ka saykl olutuunu ak diyagramn izerek grelim.'SAYAC registeri ierisine yklenen say
N=h'01'=d'1'dir.

Tek Dng ile Maksimum


Zaman Geciktirme
SAYAC registeri ierisine yklediimiz sayy
h'FF' yaparsak yukarda ak diyagramn
izdiimiz gecikme dngsnden maksimum
gecikmeyi salarz. SAYAC registeri ierisine
yklediimiz say N=h'FF'= d'255' dir.

Komut Saykl Saysnn


Bulunmas
Dngdeki saykl says programn banda
SAYAC adl registere atanan (N) saysna bal
olduu grlmektedir. yleyse bir dngnn ka saykllk gecikme oluturacan bulan bir forml oluturacak olursak;
Komut Saykl Says = 1+1+1x(N-1)+2+2x(N-1)
=1+1+N-1+2+2N-2
KSS = 3N+1
N says byk bir say olduunda 1 saykllk bir sre gecikme dngsnde ok nemli bir rol oynamayaca
dnlrse, yukardaki formldeki 1 saysn iptal edebiliriz. Bu durumda forml aadaki gibi yazabiliriz.
KSS=3N
rnek: 10 MHzlik bir osilatrden uygulanan clock frekans uygulanan PlC16F84'de 100 Slik gecikme salayan bir
dngde ka saykllk gecikme olduunu bulalm.
10 MHZlik frekansn bir saykl T=1/f =1/106 Sn=0.1 S eder. Dahili komut saykl ise 4x0.1S=0.4 S dir.
Komut Saykl
MOVLW H'52" 1
MOVNF SAYAC 1
NOP 1
NOP 1
NOP 1
DONGU
DECFSZ SAYAC, F 1x81+2
GOTO DONGU 2x81
Toplam 250 saykl
Bu dngde SAYAC ierisine atanan N says h'52' nin desimal say karl 82'dir. Buna gre dngnn ka komut
saykl oluturduunu formlle bulacak olursak;
KSS=3xN+1= 3x82+1=247 saykl
Saykl saysn 250'ye getirmek iin eklenen NOP komut saykln eklersek,
KSS=247+3=250 eder.
Bu dngnn ne kadar srelik bir gecikme salayacan bulalm:
Gecikme Sresi(GS)=250*0.4 S= 100S

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:

1 4 GS GSf KSS=Gecikme sresi(GS)/Tk dr.


Tk = = S KSS = =
f f 4 4
4 f

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.

ift Dngl Zaman Geciktirme


Maksimum gecikme yapan tek dngde oluturulan 766 saykllk sre az gelebilir. Bu durumda i ie iki veya daha
fazla dng kullanlabilir. imdi bu kitaptaki ou zaman geciktirme ilemlerinde kullanacamz ift dngnn ak
diyagramn ve program yapalm.
N Saysnn Hesaplanmas
SAYAC1 registeri ierisine konulan sayya M, SAYAC2 registerine yklenen sayya da N diyerek program yazalm.
Komut Saykl
GECIKME MOVLW hFE 1
MOVWF SAYAC1 1
DONGU1
MOVLW hFF 1xM
MOVWF SAYAC2 1xM
DONGU2
DECFSZ SAYAC2,F 1xNxM
GOTO DONGU2 2xNxM
DECFSZ SAYAC1,F 1Xm
GOTO DONGU1 2Xm
RETURN 2
Toplam 196608 saykl
Toplam komut saykl says M ve N saylarnn 3 kat kadardr. yleyse bunu forml biiminde yazarsak;
Yaklak olarak KSS=3xMxN olur.
Bu geciktirme programnda M ve N saylar h'FF' olduuna gre elde edilen komut saykl says maksimum elde
edilebilecek olan saydr. Bu say da,
KSS=3x256x256=196608 saykl eder. 1 MHzlik dahili clock sayklnda bu sre 196608S = 197 S (yaklak)
rnek: ift dngl bir zaman geciktirme programndan 12 S lik bir gecikmesi isteniyorsa M ve N saylar ne
olmaldr?
Not: PIC'e harici olarak uygulanan clock frekans= 4 MHz dir. Bu frekans 4'e blndnde 1 MHzlik dahili komut frekans
elde edilir. zm:
KSS=3xMxN dir.
M ve N saylarna ayn saylan vererek bu program yapacamz dnelim.
M=N olduundan yukardaki forml,
KSS=3xM2 olarak yazabiliriz.
12 mS= 12000S eder. Dahili clock frekans 1 MHz olduundan 12000 komut saykl gerekir.
12000=3xM2 M2= 2000/3 M=63.2 desimal = h'3F'
M ve N birbirine eit olduundan M=h'3F' N=h'3F' olarak bulunur.
Bylece ift dngl zaman geciktirme devresinde 12 mS lik zaman gecikmesi iin, SAYAC1 ve SAYAC2 registerleri
ierisine h3F' says yklenmelidir.
ALT PROGRAMLAR
Program ierisinde defalarca tekrar edilmesi gereken program paralar olabilir. Bu durumda ayn program
komutlarn her defasnda yazmak hem zor olacak, hem de bellekte ok fazla yer kaplayacaktr. Bu sorunu gidermek
amacyla:
alt programlar bir defa yazlr, kullanlmas gerektiinde alt programn ad CALL komutundan sonra yazlarak arlr. Bu
andan itibaren programn ak alt programa geer. Alt program komutlar bittiinde en sonuna yazlan RETURN komutu
vastasyla ana programa dnlr ve kald yerden devam eder.
Bir alt programn almasn ematik olarak aadaki gibi gsterebiliriz.

CALL ALT_PROG komutuyla alt


program arlarak altrlmaya
baland anda, programn tekrar
geri dnecei adres bilinmesi
gerekir. ite STACK REGSTER
bu adresin yazld zel bir
registerdir. Programcnn bu
registere adresin nasl yazld ile
ilgilenmesi gerekmez. nk
assembler program bu ilemi
otomatik olarak yapar. Eer
arlan alt program ierisinden
baka bir alt program daha
arldysa bu adresler stack
register ierisinde ard ardna
yazlr. Bu nedenle registere stack
(yn) ad verilmitir. Alt
programlardan RETURN
komutuyla geri dnlrken en son
yazlan adres ilk nce ilem grr.
imdi yukarda verdiimiz rnekteki ilem srasn alayalm:
1. Ana programn ilk komutundan itibaren program almaya balar.
2. CALL_ALTPROG (Programn ak ALT_PROG adl alt programa geer)
3. Ana programdan kld andaki adres STACK REGSTER'e yazlr.
4. Alt program komutlan alr.
5. RETURN, Alt program komutlarnn bittiini gsterir. Program akn ana programda kald yerdeki adrese
gnderir.
6. STACK registerde yazl bulunan aynlma adresi alnr.
7. Ana program kald yerden itibaren almaya balar ve END komutu ile sona erer.
PROGRAM-10) Zaman gecikme dngs kullanarak PortB'ye bal ola tm LED'leri
belirli zaman aralklaryla yakp-sndren program.
;===PROG10.ASM====07/06/2000==="==
LIST P=16F84
INCLUDE "P16F84.IHC"
SAYACl EQU h0C
SAYAC2 EQU hOD
CLRF PORTB
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5 TEKRAR
MOVLW h00
MOVWF PORTB j
CALL GECIKME
MOVLW h'FF'
MOVWF PORTB
CALL GECIKME
GOTO TEKRAR
GECIKME ;Alt program balangc
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 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

SOLA KAYDIRMA (RLF)


RLF komutu, belirlenen bir file register ierisindeki bit'lerin pozisyonunu her defasnda br sola kaydrmak iin
kullanlr. Register ierisindeki bit'ler sola kaydnda MSB bit'i, STATUS registerde bulunan carry flag ierisine yazlr.
Carry flag ierii ise registerin LSB bit'ine yazlr.
NOT: MSB (Most Significiant Bit- Deerlii en yksek bit, yani en soldaki bit.)
LSB (Least Significiant Bit- Deerlii en dk bit, yani en sadaki bit.)
RLF komutunun yazl aadaki gibidir.
RLF File Register d Destination (Gidecei yer) W veya F
Destination W ise kaydrma sonucunda elde edilen bit paterni W registere, F ise file registere yazlr. rnein MEM
adndaki bir file register ierii h'86" ise RLF komutu altrldnda MEM registerinin ieriinin ne olduunu ematik
olarak gsterelim. H'86'=b'10000110'
MOVLW h'86'
MOVWF MEM
RLF MEM, F MSB

Bazen nceden belirlenen bir bit


paternini devaml olarak kaydrmak
gerekebilir. Bu ilem PIC'in portlarna
bal olan bir cihaz altrmak iin ya
da portlara bal lambalarda k
gsterisi yapmak iin kullanlabilir.
imdi bu ileme bir rnek yapalm.

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.

RRF komutunun yazl aadaki gibidir.


RRF File Register d Destination (Gidecei yer) W veya F
Destination W ise kaydrma sonucunda elde edilen bit paterni W registere, F ise file registere yazlr. rnein MEM
adndaki bir file register ierii H'49' ise RLF komutu altrldnda MEM registerinin ieriinin ne olduunu ematik
olarak gsterelim. H'49'= b'01001001' dir.
MOVLW h'49'
MOVWF MEM
RKF MEM, F
PROGRAM-13) PortB'ye bal olan 8 LED zerinde
bjr LEDin yann saa-sola kaydran ve bu ilemi
devaml olarak yaptran program. (Bu programn adn ok
eskiden nl bir TV dizisindeki otomobilden alarak
"Karaimek" diyoruz. Bu otomobilin de nndeki
LED'lerin yan saa-sola kayarak yanyordu,.);:Bu
nedenle programa ksaca karaimek program
diyebilirsiniz.

;===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.

COMF VE SWAPF KOMUTLARI


COMF komutu, seilen bir tile register ierisindeki bit'leri tersine (complemet) evirir. Yani 1'ler 0, 0'lar 1 olur. Yazl
aadaki gibidir.
COMF File register d Destination (Gidecei yer) W veya F
Destination olarak W ise terslenen veri W registere, F ise file register yazlr. rnein MEM 'adn verdiimiz bir
register ierisinde H'oF' verisi yerletirilmise, COMF komutu altrldnda oluan durumu ematik olarak aadaki gibi
gsterebiliriz.
MOVLW h'0F'

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

MANTIKSAL LEM KOMUTLARI


Mantksal ilem komutlar W veya bir file register ierisinde istenilen bir veya birka bit'in deerini bir komut
sayklnda deitirmek ya da test etmek amacyla kullanlrlar. Bu komutlar ANDLW, ANDWF, IORLW, IORWF, XORLW,
XORWFdir.

ANDLW Komutu (stenilen bir ya da birka bit'i "0" yapmak)


W register ieriini istenen bir sabit veri ile AND'ler,. elde edilen sonucu W registere yazar. Bu komut W register
ierisinde istenilen bir veya birka bit'in deerini "0" yapmak iin kullanlr. Komutun yazl aadaki gibidir.
ANDLW Sabit
NOT: Bir veriye AND ilemi uygulamaya "Maskeleme" denilir. Yani bit "0" ile AND'lenirse o bit'in deeri "0" olur.
Dierleri aynen kalr.
"1" ile AND'leme bit'lerin deerini deitirmez.
"0" ile AND'lemede bit'in deeri "0" olur (Maskeleme).
rnein, W register ierisindeki veri b'11010111' ise 2. ve 7. bit'in deerini "0" yapmak iin b'01111011' sabiti ile
AND'lemek gerekir. imdi bunun nasl yapldn ematik olarak gsterelim.
MOVLW b'11010111
ANDLW b'01111011
MOVWF PORTB
DONGU
GOTO DONGU
Yukardaki ilemi BCF komutu ile yapmak isteseydik, birden fazla BCF komutu kullanmak gerekirdi. Halbuki, ANDLW
komutuyla ayn anda (Bir komut sayklnda) 2 bit'in deeri deitirebildik.

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

IORLVV Komutu (stenilen bit'in deerini "1" yapmak)


W registerin ierini istenen bir sabit veri ile OR'lar, elde edilen sonucu V registere yazar. Komutun yazl aadaki
gibidir.
IORLW Sabit
NOT: Bu komut W register ierisindeki 8 bit'lik bir verinin istenen bir veya birka bit'inin deerini "1" yapmak iin
kullanlr.
"0" ile OR'lamada bit'lerin deeri deimez.
"1" ile OR'lamada bit'in deeri "1" olur.
rnein, W register ierisindeki veri b'00000011 ise, bu verinin 6. ve 7. bit'indeki verileri de "1" yapmak iin b'11000000'
sabiti ile OR'lamak gerekir. B ilemi ematik olarak gsterelim.
MOVLW b00000011'
IORLW b'11000000'
MOVWF PORTB

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

XORLW Komutu (stenilen bir bit'i terslemek)


W register ieriini istenen bir sabit veri ile XOR'lar, elde edilen sonucu W register ierisine yazar. Komutun yazl
aadaki gibidir.
XORLW Sabit
NOT: Bu komut W registeri ierisinde istenilen bir veya birka bit'in deerini tersler, yani "1" ise "0", "0" ise "1" yapar.
"0" ile XOR'lamada bit'lerin deeri deimez. "1" ile XOR')amada bit'in deerinin tersi elde edilir.
rnein W registeri ierisindeki veri b'11110000" ise, bu verinin 0. ve 7. bit'lerini terslemek iin b'10000001' sabiti
ile XOR'lamak gerekir. Bu ilemi ematik olarak gsterelim.
MOVLW b'11110000
XORLW b'10000001
MOVWF PORTB

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

Bir Byte'lk ki Veriyi Karlatrmak (XORLW, XORWF)


W register iindeki bir byte'ik veriyi istenilen bir byte'lk sabit veri ile ayn olup olamadn test etmek amacyla
XORLW komutu kullanlr. Bir file register ierisindeki veriyi W register iindeki veriyle karlatrmak iin de XORWF
komutu kullanlr. Veriler ayn ise XOR'lama sonucunda Z flag "1" olur. Veriler ayn deilse Z flag "0" olur.
rnein, PORTA registerinin ierisindeki verinin b'00000110' verisi ile ayn olup olmadn kontrol etmek iin aadaki
komutlar yazmak gerekir.
MOVLW b'00000110'
TEST_PORTA
XORWF PORTA, F
BTFSS STATUS, 2
GOTO TEST_PORTA DEVAM
MOVF PORTA
MOVWF PORTB

PORTA'nn ierisindeki veri


W registerinin ierisine
yeretirdiimiz veri aynysa
bu defa Z flag "1" olur.

Bir Byte'lk Veriyi "0" ile Karlatrmak (IORLW, IORWF)


W register iindeki bir byte'lk verinin "0" olup olmadn test etmek iin "0" sabit verisiyle OR'lanr. Bu ilem iin
IORLW komutu kullanlr.
Bir file register ierisindeki verinin "0" olup olmadn kontrol etmek iin, W register ierisine "0" verisi atandktan
sonra bu ikisi OR'lanr. Bu ilem iin IORWF komutu kullanlr. OR'lama sonucunda karlatrlan byte'lar aynysa, yani
ierikleri "0" sa, Z flag"1"olur.
rnein, W register ieriinin "0" olup olmadn kontrol etmek iin aadaki komutlar yazmak gerekir.
MOVLW b00000000
TEST_W
IORLW b00000000
BTFSS STATUS, 2
GOTO TBST_W DEVAM
PROGRAM-15) PortA'nn 1. ve 2. bit'lerine bal olan A1 ve A2 butonlarnn her ikisi birden basl olduunda PortB'nin 0.
bit'ine bal LED'i yakan program.
NOT: PortA'nn girileri pull-up yapldndan butonlara baslmadnda giriler "1" dir. PIC16F84'n portA girilerinden
sadece 5 tanesi kullanldndan PortA'daki 8 bitlik verinin deerlii en yksek son bitinin deeri daima "0" dr. Bu
nedenle A1 ve A2 butonlarnn her ikisi birden basl olduunda portA'daki veri 00011001 'olur.
;==PROG15 -ASM====17/06/2000=======
LIST P=16F84
INCLUDE "P16P84.INC"
CLRF PORTB ;PortB'yi sil
BSF STATUS, 5 ;BANKl ' e ge
MOVLW h' FF' ;WhFF
MOVWF TRISA ;PortA'nn tm ular giri
CLRF TRISB ;PortB'nin tm ular k
BCF STATUS, 5 ;BANK0a ge
TEST_ PORTA
MOVLW b000ll00l ;b'0001100l
XORWF PORTA, W ;WPORTA XOR W
BTFSS STATUS, 2 ;Z flag 1 mi?
GOTO TEST_PORTA ;Hayr, PortA'y tekrar test et
YAK
MOVLW h'0l' ;Evet, Wh'0l'
MOVWF PORTB ;PortB'nin 0.LEDini yak
DONGU
GOTO DONGU
10
ARTMETK LEMLER
ARTMETK LEM KOMUTLARI
8 BT TOPLAMA
16 BT TOPLAMA
8 BT IKARMA
16 BT IKARMA

ARTMETK LEM KOMUTLARI


Baz P1C16 uygulamalarnda aritmetik ilemler gerekebilir. 8 bit'lik aritmetik ilemler yapmak olduka kolaydr.
Aritmetik ilemlerin mantn basitc anlatabilmek iin negatif saylarn toplama veya karmasn bu kitapta ele
almayacaz. Aritmetik ilemler iin gerekli komutlar aada verilmitir.

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

H'5A'+h'53'=h'AD' 01011010 h'5A'


+ 01010011 h'53

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.

1. imdi double precision karma ileminin nasl yapldn grelim:


2. Alt byte'lar birbirinden karlr.
3. Alt byte'larn karmas sonucunda dn alma varsa(Carry Flag=0'sa), st byte'lardan birisnden "1" karlr.
4. Eer dn alma yoksa (Carry Flag=1'se) st byte'larn birbirinden karmas yaplr.

PROGRAM-20) h'0004' saysndan h'0001' saysn


karan program. Program altnda karma
sonucunun alt byte' PortB'deki LED'lerde grlr. st
byte' grmek iin A1 butonuna baslr.
2 byte'lk h'0004' saysna A, h'0001' saysna da B
dersek, bu saylar 1 byte'lk veri depolayabilen 2 tane file
register kullanmamz gerekir. imdi programda
kullanacamz file registerlerin adn belirleyelim.

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

h'00' h'3F' 00111111 0


h'01' h06' 00000110 1
h'02' h'5B' 01011011 2
h'03' h'4F' 01001111 3
h'04' h'66' 01100110 4
h'05' h'6D' 01101101 5
h'06' h'7D' 01111101 6
h'07' h'07' 00000111 7
h'08' h'7F1 01111111 8
h'09' h'BF' 01101111 9
h'OA' h'77' 01110111 A
h'OB' h'7C' 01111100 b
h'OC' h'39' 00111001 C
h'OD' h'5E' 01011110 d
h'OE' h'79' 01111001 E
h'OF' h'71' 01110001 F
Nokta h'80' 10000000 .

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.

PROGRAM COUNTER (SAYICI)


PIC16F84'n 13 bit'lik bir program saycs vardr. GOTO ve CALL komutlaryla kullanlan 11 bit'lik adresler 2
Kbyte'lk program bellei bulunan PIC'leri adreslemek iin yeterlidir. PIC16F84'n 1 Kbyte'lk program bellei olduundan
daha nce bahsetmitik.
PIC programlarnda, program sayc PC kodu ile kullanlr. Program saycnn alt 8 bit'ine PCL, st 5 bit'ine de PCH
ad verilir.
Program saycnn st 5 bit'ini dorudan okumak ve yazmak mmkn deildir. Ancak PlC16F84'n RAM
belleinde h'0A' adresinde bulunan ve adna PCLATH verilen zel registerden veri yklenebilir. PCLATH registeri de 5
bit'tir.

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.

RETLW h'3F' ;W'ye h'3F' ykle ve ana programa dn.


PCLATH' kullanma ihtiyacnz olmamasna ramen bu register hakknda bilmeniz gereken nemli bir noktadan
sz edelim. PCLATH'n ierii PIC'e gerilim uygulandnda (Power-On-Reset) b'00000' dr. Program ierisinde PCH'a veri
yazma komutu kullanmadnz srece bu registerle herhangi bir iiniz yoktur. Buna ramen PIC16F84'n almasnda bir
aksakla neden olmamas iin 4. ve 3. bit'lerin ieriini sfrlanmaldr. Bunun yerine program ierisinde PC deil de PCL
kullanmak da ayn zm getirir. Bu durumda program saycnn (PC) sadece alt 8 bit'i (PCL) kullanlm olur.
PCLATH

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

Programn almasn BASLA etiketinden itibaren takip edelim;


1. MOVLW h05 komutuyla W registere h'05' says yklenir.
2. CALL CEV_TAB komutuyla program ak alt programa geer.
3. ADDWF PCL, F komutuyla program saycnn alt 8 bit'i (PCL) ierisine W registerinde bulunan h'05' says
yklenir. Program ak 5. satrdaki RETLVV komutuna dallanr.
4. RETLW h6D komutu W register ierisine h'6D' saysn ykler. Buradaki h'6D' says, PORTB'ye bal olan 7
segment display'de "5" saysnn grntlenmesi iin gerekli olan koddur.
5. Ana programa dnen program ak MOVWF PORTB komutuyla devam eder. Bylece PORTB'ye gnderilen h'6D'
says 7 segment display'de S saysnn grntlenmesini salar.

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.

STEP MOTOR KONTROL


PIC16F84 ile bir step motorun kontrol yaplabilir. Yani motor bir yne dndrlebilir, devir yn deitirilebilir.
Kontrol edilecek motorun kutup says, adm as uygulama programlarnda deiiklikler gerektirir. Bu nedenle nce step
motorlarn alma prensibini hatrlatalm.
Step motorlarn dnen ksm(rotor) sabit mknatstan yaplmtr. Duran ksmnda(stator) ise belirli aralklarla
yerletirilmi elektromknatslar bulunmaktadr. Elektromknatsn ierisinden geen akmn ynne gre N-S kutuplarnn
yn de deitirilebilmektedir. Bir step motorun dndrlmesi iin belli bir srayla bu elektromknatslarn enerjilenmesini
salayan gerilimler motor ularndan uygulanr. Bylece rotordaki sabit mknats, statorun enerjilenen kutuplar tarafndan
ynlendirilir(N-S kutuplar birbirini eker, N-N veya S-S kutuplar birbirini iter.)
Step motor kontrol uygulamalarnda eski bir disket srcden skeceiniz bir step motoru kullanmak en uygun bir
yoldur. Bu tr motorlarda genellikle drt kablo k vardr ve bipolar step motor ad verilir. PIC'n k ularn bu ulara
direkt olarak balanmas mmkn deildir. nk PIC16F84'n verebilecei akm 2 mA civarndadr. Step motor ok daha
fazla akm ektiinden, PIC k muhakkak bir transistrl src devresi kullanlarak motora balanmaldr. Bu kitapta
hedef alnan konu PIC assembly olduundan detayl elektronik bilgisine girilmeyecektir.
Aada uygulama programn vereceimiz step motorun basitletirilmi elektromknats(stator) balant ekli
verilmitir. Gerek bir step motorda bu stator sarglarndan ok miktarda bulunmaktadr. Sarg says, step motorun adm
saysyla direkt olarak bantldr.

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.

Akmn gei yn mknatslanmann da ynn belirleyeceinden yukardaki ekillerde verilen admlardaki


kutuplamay salayacak gerilimler X, "X Y, Y ularndan verilir. PIC ularndan verilecek olan bu gerilimler iin aadaki
tabloyu karabiliriz. __
Adm X X Y Y
1 1 0 0 0
2 1 0 0 1
3 0 0 0 1
4 0 1 0 1
5 0 1 0 0
6 0 1 1 0
7 0 0 1 0
8 1 0 1 0
9(1) 1. adm ile ayn

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

KESME (INTERRUPT) NEDR?


Mikro ilemcilerle yeni almaya balayan ou kimseler, interrupt kelimesini duymalarna ramen, kullanmlarnn zor olduu
dncesiyle programlar ierisinde kullanmaktan ekinirler. Oysa, renilmesi ve uygulamas pek de zor olmayan interrupt alt
programlar kullanlarak, program ierisinde kullanlacak komut says azaltlr ve bir sr mantksal karklklar nlenir.
Peki, nedir interrupt? Konu balndan da anlald gibi Trke karl "Kesme" dir. Kesme ilemini gnlk
hayattan bir rnek vererek aklayalm: Diyelim ki televizyonda sevdiiniz bir artistin filmini izliyorsunuz ve bu anda telefon
ald. Ne yaparsnz? llk olarak konsantrasyonunuz bozulur ve ne yapacanza karar verirsiniz. Eer nemli bir telefon
bekliyorsanz, televizyonun sesini keser, video player'in record butonuna basarak filmi kaydedersiniz. Telefon konumas
bittikten sonra da kaydettiiniz filmi izlemeye balarsnz. Eer nemli bir telefon beklemiyorsanz kararnz bu defa telefona
cevap vermeyerek arayann telesekretere mesaj brakmas ynnde olur ve filmi izlemeye devam edersiniz.
Ite, gnlk hayatta uradnz bir kesme. Ama ne yaptnz? Bir yolunu bulup filmi izlemekten vazgemediniz. PIC
kesmeleri de yukarda anlattmz olaya ok benzer. yleyse PIC'te oluan kesmeyi yle izah edebiliriz:
PIC'in port girilerinden veya donanm ierisindeki bir saycdan gelen sinyal nedeniyle belleinde almakta olan
programn kesilmesi olaydr. Programn kesildii andan itibaren nceden hazrlanan bir alt program alr. Alt program
ilevini bitirdikten sonra ana program kald yerden itibaren tekrar almasna devam eder. Netice olarak bir kesme, ana
programn almasn sadece duraklatr, ama hibir zaman ilevini devam ettirmesini engellemez.

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

Bt 7: GIE: Tm kesme ilemlerini iptal etme bayra


0= Tm kesmeler geersiz (Disable)
1 = Aktif yaplm olan tm kesmeler geerli (Enable)
Bit 6: EEIE: EEPROM bellee yazma ilemi tamamlama kesmesi
0= Geersiz (Disable)
1=Geerli (Enable)
Bit 5: TOIE: TMRO sayc kesmesini aktif yapma bayra
0= Geersiz(Disable)
1=Geerli(Enable)
Bit 4: INTE: Harici kesmeyi aktif yapma bayra
0= Geersiz(Disable). Harici kesmeler kabul edilmez.
1= Geerli (Enable). Harici kesmeler kabul edilir.
Bit 3: RBIE: PORTB(4, 5, 6, 7. bit'leri) deiiklik kesmesini aktlf yapma bayra
0= Geersiz(Disable). PORTB'deki deiiklikler kesme oluturur.
1= Geerli(Enable). PORTB'deki deiiklikler kesme oluturmaz.
Bit 2: TOIF: TMRO saycs zaman am bayra
0= Zaman am yok.
1= Zaman am var. (h'FF' den h'00' a gei.)
Bit 1: INTF: Harici kesme bayra
0= Harici kesme olumadnda.
1= Harici kesme olutuunda.
Bit 0: RBIF: PortB deiiklik bayra
0= RB4-RB7 ularnda deiiklik yok.
1= RB4-RB7 ularndan en azndan birisinde deiiklik var.

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

Kesme alt programn altr.

INTF kesme bayran "0" yap.

Yeni kelimeleri aktif(geerli) yapmak iin (INTE bayran "1" yap.)

TMRO Sayc Kesmesi


TMRO sayc kesmesi, bu zel sayc ierisindeki saynn h'FF'den h'00'a gelince oluur. Bu saycdan ve kesme
ileminin olumas 13. blmde aklanacaktr.

PORTB Lojik Seviye (RB4-RB7) Deiiklik Kesmesi


PORTB'nin 4, 5, 6, 7. bit'lerinde meydana gelen bir deiiklikte INTCON egisteri'nin 0. bit'i (RBIF) "1" olur. Bu kesme
INTCON registeri'nin 3. bit'i (RBIE)
araclyla aktif veya pasif yaplabilir. PORTB'nin 0, 1, 2, 3. bit'lerindeki deiiklikler kesme oluturmaz.
PORTB'deki deiiklii alglamak iin, bu porttaki en son deer, RB4-RB7 ularndan okunan veri ile karlatrlr.
Eski ve yeni okunan veriler OR'lanr. Farkllk varsa RBIF bayra (INTCON registerin 0. bit'i) "1" olur.
PORTB kesmesi aadaki ekillerde silinebilir;
RBIE bit'i (INTCON registerin 3. bit'i) silinmek suretiyle,
PORTB'yi okuduktan sonra RBIF bit'ini silmek suretiyle.

KESME ALT PROGRAMLARININ DZENLENMES


Tm Kesme lemlerini Aktif Yapma Bayra (GIE)
Bir kesme olaynn meydana gelmesi esnasnda INTCON registerinin 7. biti "0" olur. Bu ilem kesme alt programnn
almas esnasnda yeni bir kesmenin program akn bozmamas iin PIC tarafndan otomatik olarak yaplr. Kesme alt
program almasn RETFIE komutu ile sona erdirip, ana programa dnld anda ise sonraki kesmelerin geerli (enable)
olabilmesi iin tekrar otomatik olarak "1" yaplr. imdi olabilmesi iin tekrar otomatik olarak "1" yaplr. imdi kesme
olaynda oluan olaylara genel bir bak yaparsak aadaki emay izebiliriz.

Kesme Esnasnda W ve Status Registeri Saklamak


Bir kesme olay meydana geldiinde program says (PC) ierii STACK registere otomatik olarak kaydedilir.
Mikrodenetleyici bu sayede kesme ileminden dnte hangi adrese dneceini bilir. Dier registerlerin ieriinin
deimemesi isteniyorsa, bu registerlerin korunma ilemi programcnn sorumluluuna braklmtr. Eer W ve STATUS
registerin ierii korunmak isteniyorsa, gerekli komutlar kesme alt programnn ierisinde yer almaldr. Register ieriini
saklama ilemi alt programn banda, geri ykleme ilemi ise sonunda bulunmaldr.

imdi bir kesme olutuunda yaplmas gereken ilemleri sralayalm:

W registeri bir deikene ykle.

STATUS registeri bir deikene ykle.

Kesme ilemini gerekletir.

STATUS registeri geri ykle.

W registeri geri ykle.

Kesme alt programndan dn (RETFIE).


Bu ilemleri yapacak komutlar yazalm:

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 Alt Programlar Nereye Yazlmal?


Bir kesme meydana geldiinde "Interrupt vektor" ad verilen adres gsterici program belleinin h'004' adresini
gsterir. te kesme alt programnn ilk komut buraya yazlmaldr.
Kesme kullanlmad zaman ana program, program belleinin h'0000 adresinden itibaren h'0004' adresine doru herhangi bir
karkla sebep olmada alr. Eer kesme kullanlyorsa programc tarafndan baka bir alma sras dzenlenmelidir.

Interrupt kullanlan programlarn dzenlenmesi aadaki gibi olmaldr:


ORG h000
GOTO BASLA ;Ana program balangc
ORG h004
GOTO INT_ALT_PROG ;Kesme alt program balangca.
;
BASLA
Ana program komutlara.

INT_ALT_PROG
Kesme alt program komutlar


RETFIE

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.

INTCON registerindeki bayraklarn kurulmas iin de aadaki komutlar kullanlmtr.

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.

Tek Pals reticinin Kullanm


Program-25'de RBO girii bir diren vastasyla pull-up yaplmtr. INT butonuna basp braklnca"~l_r " biiminde
bir sinyal oluur. Bu sinyalin ilk den kenarnda kesme oluur. Ancak butona baslp braklma esnasnda ark da oluabilir.
Oluan bu arklar, arka arkaya birden fazla kesmenin meydana gelmesine sebep olabilir. Geri bu kesmeleri nlemek etmek
iin mikroilemci otomatik olarak GEI bayran "0" yapar, ama kesme alt programnn ok ksa srede bitmesi nedeniyle
arktan oluan sinyaller yeni bir kesme olarak alglanabilir. Bu durumda LED2'nin yanma durumunu deitirmesinde
karklklar oluabilir.
Eer program altrdnzda bir aksaklk olursa, bu aksakln INT butonundan meydana gelebileceini biliniz.
INT ucuna uygulanan kesme sinyalindeki ark nlemek ve pals sresini ksaltmak iin aadaki "One-shut-palse ( tek pals
retici)" devresini kullanmanz gerekir. INT butonunun ift konumlu ve yayl olmamasna dikkat ediniz. Devrede kullanlan
entegre 74HC04 entegresidir.
13
DONANIM SAYICILARI
DONANIM SAYICISI / ZAMANLAYICISI NEDR?
TMR0 SAYICI /ZAMANLAYICISI (TMR0 Counter/Timer)
OPTION REGISTER
TMR0 SAYICISININ ZELLKLER
WDT ZAMANLAYICISI (Watchdog Timer)

DONANIM SAYICISI/ZAMANLAYICISI NEDR?


nceki blmlerde port klarna gnderdiimiz sinyaller arasnda bir gecikme olmasn istediimiz zaman
"gecikme" adnda bir alt program oluturduk. ite programcnn yapt bu tip zaman geciktirme alt programlarna "software
timer-yazlm zamanlaycs" denir.
PIC mikrodenetleyicilerinin nemli zelliklerinde biri de, PIC donanmnn ierisinde yazlm zamanlaycs ile ayn
grevini yapan "hardware timer donanm zamanlaycs" bulunmasdr. Bir zamanlayc ayn zamanda saycdr da. Peki
donanm saycs ne demektir? Belirli bir deerden (Genellikle h'00'dan) balayp, ierisindeki saylar birer birer artan bir file
registerdir. Say art PIC ierisindeki dahili komut saykl vastasyla otomatik olarak yaplr. Sayma aralklar nedeniyle bir
gecikme olmaktadr. Bu gecikme kullanlarak program ierisinde zaman geciktirme dngleri dzenlenebilir.
Trke'ye tam olarak yerlemeyen zamanlayc ve sayc kavramlar yerine "timer" ve "counter" kelimelerini
kullandmzda yle okuyunuz;
Timer (Taymr) zamanlayc
Counter (Kauntr) sayc
PIC'ler iki tip timer'a sahiptir. lki, TMR0 olarak adlandrlan 8-bit bir saycdr. RAM bellein h'01' adresinde TMRO
ile ifade edilen zel bir registerdir. kincisi de, "VVatchdog timer-WDT" ad verilen zamanlaycdr. Farkl PIC
versiyonlarnda ilevleri deien ve TMRO, TMR1 gibi adlar verilen timer'lar bulunmaktadr.

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.

Harici dijital sinyal portA'nn 3. bit'inden (RA4/T0CKI) uygulanr.


Baz ilemler iin dahili komut sinyalinin frekans ok yksek olabilir. Bu durumda daha dk frekansl harici bir sinyal
kayna kullanlabilir. Harici dijital sinyal, PIC tarafndan saylmas gereken bir sinyal de olabilir.
TMR0'n sinyal kaynan semek iin OPTION registerin 5. bit'i (TOCS) kullanlr.
Sinyal kaynandan gelen sinyal, direkt olarak TMR0' besleyebilecei gibi frekans blc aracl ile de beslenebilir.
Frekans blme says TMRO veya WDT'ye OPTION registerin 3. bit'i (PSA) ile ynlendirilir. Her iki saycdaki blme
oranlar birbirinden farkl olduuna dikkat ediniz.
OPTION registerin 0, 1, 2. bit'leri kullanlarak 8 farkl frekans blme deeri seilebilir. TMR0 saycsn tetikleyecek
olan sinyal direkt olarak sinyal kaynandan salanmak isteniyorsa, yani frekans blc bypas yaplmak isteniyorsa,
frekans blme deeri WDT'ye atanr. Bu ilemin PSA bit'i ile yapldn sylemitik.
Frekans blme deeri TMR0'a atandnda, TMR0'a yazmak iin kullanlan tm komutlar frekans blme deerini siler.
Bu komutlar unlar olabilir.
CLRF, MOVWF, BSF gibi....
Frekans blme deeri kullanlmadan, direkt olarak harici sinyal kullanlrsa, dahili komut sinyali ile
elemeyi(senkronizasyonu) salamak iin 2 saykllk bir gecikme salanr.(Blok emaya baknz.)
Harici dijital sinyal uygulandnda TMRO saycsnn ierisindeki saynn, sinyalin hangi kenarnda (Ykselen/den)
artacan belirlemek iin OPTION registerin 4. bit'i (T0SE) aracl ile belirlenir.
TMR0 saycsndan k sinyalleri aadaki durumlarda oluur:
1. RAM bellein h'01" adresindeki TMRO registeri okununca.
2. Saycnn h'FF'den h'00'a geiinde meydana gelen tama sinyalinin INTCON registerinin 2. bit'ine (TOIF bayra)
"1" yazlmas annda.
TMR0'daki saylar artran, saycya uygulanan sinyallerdir.
Saylar, harici dijital sinyal aracl ile arttrldnda istenirse bu sinyaller saylabilir. Bu durumda TMR0 sinyal
sayc olarak kullanlm olur.

Frekans Blme Saysnn (Prescaler) Kullanlmas


OPTION registerin 0, 1,2. bit'leri (PSO-PS2) ierisine yerletirilen saylar, TMRO veya WDT'ye uygulanan sinyali
bler. Bylece sayma hzlar deitirilebilir. 3 bit'lik bu say TMRO veya WDT'de birbirinden farkl 8 farkl oran seme
olana yaratr. PSA bit'i, prescaler saysnn hangi saycya uygulanacan belirler. Aada hangi prescaler deerinde giri
frekansnn kaa blneceini gsteren tablo verilmitir.

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.

TMR0 ve WDT Oran


TMR0 veya WDT sayclarnn ka dahili komut sayklnda br defa bir st sayya geiini belirleyen orandr.
rnein,
TMR0 oran 1/2 ise, 2 komut sayklnda bir defa st sayya gei olur. TMR0 oran 1/8 ise, 8 komut sayklnda bir defa st
sayya gei olur. TMR0 oran 1/256 ise, 256 komut sayklnda bir defa st sayya gei olur.
Bilindii gibi program belleine yerletirilen komutlarn almas iin PIC'e harici bir osilatrden clock sinyali (fosc)
uygulanmas gerekir. Bu frekans PIC tarafndan 4'e blnerek OSC2 ucundan darya verilir. te 4'e blnen bu frekansn
bir saykl bir komutun almas iin geen sredir. rnein, 4 MHz lik bir kristal osilatr kullanlan PIC'te, dahili komut
saykl (Periyodu) sresi yle bulunur
fkomut = fosc/4 = 4 MHz/4 = 1 MHz
Tkomut = 1/fkomut = 1/1 MHz = 1S (Dahili komut saykl suresi)
imdi de clock frekans bilinen bir PIC'te TMR0 saycsnn ka |JLS aralklarla saydn veya ka u,S aralklarla
kesme sinyali verdiinin nasl hesaplanaca ile ilgili rnekler verelim.
rnekler:
1. Prescaler deeri b'000' seilirse TMR0'n sayma aral sresi ne olur?
Prescaler= b'000' olduunda TMR0 oran 1/2 olur.
fOSC = 4 MHz olarak alnrsa Tkomut = 1 S olur.
Grlyor ki, TMRO saycs dahili komut sayklnn 2 sayklnda 1 defa artyor. Bylece TMR0'n sayma aral
sresi kolayca hesaplanmaktadr.
TMRO sayma aral sresi = Tkomut x TMR0 oran
= 1 S x 2 = 2 S
TMR0 saymaya baladndaki ilk say h'00' ise bu say h'FF'e gelince kesme sinyali oluturacaktr. Bu say aral
ondalk olarak 256 eder. yleyse TMR0'n ka saniye aralklarla kesme sinyali vereceini bulalm:
Kesme gecikmesi = TMRO sayma aral x 256
= 2 S X 256 =512 S
2. Prescaler deeri b'010' seilirse TMR0'n sayma aral sresi ve kesme gecikmesi ka S olur?
Prescaler=b'010'olduunda TMRO oran 1/8 olur.
fosc = 4 MHz olarak alnrsa Tkomut = 1 S olur.

TMR0 saycs dahili komut sayklnn 8 sayklnda 1 defa artmaktadr.

TMR0 sayma aral sresi = Tkomut x TMR0 oran =1 S x 8 = 8 S

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.

TMRO saycs dahili komut sayklnn 256 sayklnda 1 defa artmaktadr.


TMR0 sayma aral sresi = Tkomut x TMR0 oran =1 S x 256 = 256 S
TMR0 saymaya baladndaki ilk say h'00' se TMR0'n ka siniye aralklarla kesme sinyali vereceini bulalm:

Kesme gecikmesi = TMR0 sayma aral x 256


= 256 S x 256 = 65536 S 65.5 mS
Frekans Blme Saysnn Atanmas
TMR0 saysn direkt olarak sinyal kaynandan beslemek iin yapacak ilem, frekans blme saysn WDT'ye
atamaktr. Prescaler deeri WDT'ye atandnda, TMR0'a yazmak iin kullanlan CLRF, MOVWF, BSF vs. konutlar
prescaler deerini sfrlayarak yeni bir prescaler deeri girmeye hazrlar.
Prescaler deerini TMR0'dan WDT'ye veya WDT'den TMR0'a atama ilemi yaplrken prescaler'n sfrlanmas
nedeniyle PIC'in almas esnasnda istenmeyen reset'ler oluabilir. Bu resetlemeleri nlemek iin aadaki program
paralar muhakkak kullanlmaldr.

TMR0'dan WDT'ye Prescaler Deeri Atamak:


BCF STATUS, 5 ; BANK0a ge.
CLRF TMR0 ;TMR0 saycs ve prescaler silinir.
BSF STATUS ;BANKle ge.
CLRWDT ;WDT'yi sil.
MOVLW bxxxxlxxx' ;Yeni prescaler deerini se.
MOVWF OPTION_REG ;OPTION registere yaz.
BCF STATUS, 5 ;BANK0a ge.

WDT'den TMR0'a Prescaler Deeri Atamak:


CLRWDT ; WDT'yi ve prescaler sil.
BSF STATUS, 5 ; BANKl'e ge.
MOVLW bxxxx0xxx ; TMR0, yeni prescaler deerini ve sinyal kaynan se.
MOVWF OPTION_REG ; OPTION registere yaz.
BDF STATUS, RP0 ; BANK0a ge.

TMRO Saycsnn Kullanlmas


TMR0 saycnn kurulmas:
Yukarda verilen komutlar aracl ile prescaler deerinin atanmasyla.
OPTION registerdeki bit'lere uygun veri gndererek.
TMR0 saycsnn balatlmas:
TMR0 aaycsna bir say yazmak, saycy balatr.
Saymaya balama saysnn deitirilmesi:
TMR0 saycs h'00'dan deil, istenirse baka bir saydan balatmak mmkndr. Bunun iin TMR0 registerine istenilen
saynn atanmas yeterlidir.

TMR0'n altn nasl anlarz?


TMR0 registerini herhangi bir anda okuyarak.
TMR0 registerinin herhangi bit'ini test ederek.
H'FF' den h'00'a geite oluan kesme sinyalini test ederek. Kesme annda INTCON registerinin 2. bit'i (T0IF bayra) "1"
olur.
TMR0'n almas esnasnda PIC16F84 yklendii dier ileri yapmaya devam eder.
Neler yaplmad srece TMRO almasna devam eder?
Silinmedii srece (CLRF TMR0)
ierisine say yazlmad srece (rnein MOVLW h'05', MOVWF TMR0)
Mikrodenetleyici RESET yaplmad srece.
Her kesme oluunda TMR0'n balang says yeniden yklenmeli mi?
Evet, nk h'FF'e ulaan sayc otomatik olarak h'00'dan balar.
Eer balang says devaml olarak belirli bir (N) says olmas isteniyorsa, her kesme olutuunda bu say TMR0'a
atanmaldr.
TMR0' durdurmak mmkn mdr?
Hayr, PIC alt srece saymaya devam eder. Fonksiyonlarndan yararlanlmak istenmiyorsa, program ierisinde
kullanlmaz. Ancak kesme bayran (T0IF) "1" yapmaya devam eder.
PROGRAM-26) PortB'nin 0. bit'ine bal LED'i flash yaptran program. LED'in yanp snme aralklarndaki gecikmeyi
TMR0 saycs yapmaktadr. Bu program dijital k sinyali retmek iin kullanlmtr. TMR0'n sinyal kayna olarak
dahili komut saykl kullanlm ve TMR0 oran 1/256 seilmitir.
Kristal osilatr kullanlan uygulamalarda kesme gecikmesi ok ksa olduundan LED'in flash yapmas
grlmeyebilir. Bu durumda RB0 ucuna osilaskop balayarak k izlenebilir. Eer RC osilatr kullanlyorsa seilen R ve C
deerlerine gre frekans ok drlrse LED'in yanp snd grlr.

;===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.

5. bit "1" olduu anda TMRO 32'ye kadar saym olur.

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

TMR0, 32'ye kadar sayacandan 0'dan 32'ye kadar sayma sresi:

256 S x 32 = 8192 S 8.2 mS eder.


Biz deneme devrelerinde RC osilatr kullandmzdan bu sre ok daha uzun olabilir.
lem Basamaklar
1 PROG26.ASM programn derledikten sonra PIC16F84'e yazdrnz.
2 Breadboard zerinde kurduunuz devre zerindeki RC osilatrn frekansn olduka drmek iin R=10 K, C=0.1
F seiniz. Yaklak olarak 85 Hzlik bir frekans elde edeceksiniz.
3 PIC'i devrenize yerletirerek program altrnz. PortB'nin 0. bit'indeki LED'in flash yaptn grnz.
4 Deneme devrenizde kristal osilatr kullanyorsanz LED'in flash yaptn gremeyeceksiniz. Bu durumda bir
osilaskop balayarak elde edilen kare dalgay grn ve bir sayklnn ka S de olutuunu lnz.

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.

TMR0 Sayc Kesmesine Ait rnekler


PROGRAM-28) TMR0 sayc kesmesine rnek programdr. PortB'deki LED'lerin binary olarak artan saylar gstermesini
salar. Bu programdaki LED'lerin sayma aralklarndaki duruu iin TMRO zamanlaycs kullanlmtr.
;===PROG28.ASM====17/07/2000=======
LIST P=16F84
INCLUDE "Pl6F8 4.INC"
ORG h'00'
GOTO BASLA
ORG h'04'
GOTO LED_YAK ;Kesme alt programna git.
BASLA
BSF STATUS, 5 ;Bankl
CLRF TRISB ;PORTB tm ular k
MOVLW b'00000lll' ;Wb00000lll 1/256
MOVWF OPTION_REG ;OPTION_REGW
BCF STATUS, 5 ;BANK0
MOVLW h00 ;Wh'00'
MOVWF TMR0 TMR0W
MOVLW b10100000 ;GIE"1", TOIE1", TOIF0"
MOVWF INTCON ;INTCONW
CLRF PORTB ;PortB'yi sil
DONGU
GOTO DONGU
LED_YAK
BCF INTCON, T0IF ; T0IF"0"
INCF PORTB, F ; PORTBPORTB+1
MOVLW h00 ; Wh00
MOVWF TMR0 ; TMR0W
RETFIE ; Alt programdan dn
END
Programdaki OPTION ve INTCON registerlerin kurulmasn ve programn aklamasn ekillerle aklayalm.

LED_YAK kesme alt programnda yaplan ilemler


TMR0'n ierisindeki say h'FF'e ulanca kesme oluur ve OPTION registerinin 3. bit'i (T0IF) "1" olur.

T0IF bayran sonraki kesmelere hazrlama iin tekrar "0" yaplmaldr.

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.

TMR0 Saycsn stenilen Bir Saydan Balatmak


TMR0'n ierisine h'00' atandnda maksimum kesme sresi, h'FF' atandnda ise minimum kesme sresi elde
edilir. imdi 4 MHz clock osilatr ile alan bir PIC'te prescaler 1/256 seildiinde elde edilen maksimum kesme sresini
bulalm.
fosc= 4 Mhz ise Tkomut = 1 S
TMR0=0 olduundan h'00' dan h'FF'e kadar 256 defa sayar.
Prescaler= 1/256 olduundan, TMR0 saycs 256 sayklda 1 defa saylarn arttrr. yleyse maksimum kesme sresi;
Kesme gecikmesi =Tkomut x Prescaler x (h'FF'-TMR0 ilk says) formlyle bulunur.
Kesme gecikmesi= 1 S x 256 x (256 - 0)= 65536 S 65.5 mS eder.
Gecikme zamann hesaplamak iin fosc frekansn kullanarak bir forml oluturursak aadaki formul
kullanabiliriz.
(256 TMR 0 ilk sayay) x prescaler
Kesme gecikmesi =
f OSC / 4
Kesme gecikmesi : TMR0'n oluturaca kesme sinyali aral (S )
TMRO ilk says : TMR0'a atanan say (Ondalk say)
Prescaler : Frekans blme says (2, 4, 8,16, 32, 64, 128, 256). Prescaler kullanlmad zaman bu sayy 2
alnz(Senkronizasyon nedeniyle.)
fOSC : PIC'e uygulanan osilatrn frekans (MHz)

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)

1.28mS-> 1280 S eder.


1280 S x 4 MHz 5120
TMR0 ilk sayay= 256 = 256 = 246
4 x 128 512

Heksadesimal karl hF6 dr.

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.

Dahili komut saykl = 1 S


Ana programda TMR0'n almaya balatlrken kullanlan komutlar:
MOVLVV h'FF' 1 saykl
MOVWF TMR0 1 saykl
Toplam = 2 saykl
Kesme olutuktan sonra alt programda alan komutlar:

Kesme gecikmesi 2 saykl


GOTO LED_YAK 2 saykl
BCF TCON, T0F 1 saykl
INCF PORTB, F 1 saykl
MOVLW h'00' 1 saykl
MOVWF TMR0 1 saykl
RETFIE 2 saykl
Toplam = 10saykl

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;

10 saykl x 1 |J.S = 12 ^S eder.

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 ZAMANLAYICISI (WATCHDOG TIMER)


PIC donanm ierisinde bulunan ikinci bir zamanlaycdr. WDT ngilizce'deki WatchDog Timer" kelimesinin
ksaltmasndan gelir. Watchdog'un Trke'deki karl "Beki kpei"dir. Elbette mecazi anlamda kullanlan bir kelime
olmasna ramen, mikrodenetleyici ierisindeki programn bir yerde bekiliini yapmaktadr Nasl m? PIC'in nceden
belirlenen srede yapmas planlanan bir ii zamannda yapmadysa, yani dng kontrolden kp da kilitlendiyse, WDT
devreye girer ve PIC'i reset eder. Genellikle program kontrol elden kat durumda PIC'in kontroln tekrar ele alarak
yazlm veya donanm problemlerinin bekiliini yapar WDT ayrca SLEEP(Uyuma) moduna girmi PIC'i uyandrarak
yeniden almaya devam etmesini salamak amacyla kullanlr.
WDT zamanlaycsnn almasna bir rnek olarak da unu verebiliriz. Diyelim ki seri retim yapan bir fabrikadaki
bir bant zerinden geen rnlerin montajn yapan robot, mikrodenetleyici vastasyla yaplmaktadr Herhangi bir sorun
olmadnda rnlerin montaj PIC tarafndan yaplmaktadr Bant zerinde 3ir aksaklk olutuunda rn geii duracandan
bir gecikme olacaktr Bu 3eckme WDT zamanlaycsnn zaman am sresini geerse WDT bu anda devreye girerek ya bir
alarm sistemi altrlarak teknisyenleri uyaracak ya da 31-program reset yaparak programn batan altrlmasn
salayacaktr
imdi WDT zamanlaycnn kullanlmasnn almasn blok ema izerek aklayalm. Blok emada TMRO
zamanlaycsnn da birlikte izilmesinin nedeni ou kurma ilemlerinin (OPTION ve INTCON registerleri) birlikte
yaplmasndandr. Bylece bu registerlerin kurulmas daha kolay anlalacaktr
OPTION registerin WDT ile ilgili 4 bit'i vardr. WDT zamanlaycsn semek iin OPTION registerin 3. bit'i "1"
yaplmaldr. WDT orannn ise 0, 1, 2. bit aracl ile seilen frekans blme says(prescaler) ile belirlendiini sylemitik.
Seilen prescaler deerine gre TMR0'n ve VVDT'nin farkl oranlar aldna dikkat ediniz.

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.

_CONFIG _CP_OFF & _WDT_OFF & PWRT_ON & _RC_OSC

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.

SLEEP Komutunun Kullanlmas


SLEEP komutu genellikle PIC'in ierisindeki programn devaml olarak ?almas gerekmeyen uygulamalarda
kullanlr. Bu komut alnca program olduu yerde durur. Tm zel registerler (OPTION, STATUS, INTCON vs.) ve RAM
erisindeki bilgiler sakl tutulur. PIC uyuma (Sleep) moduna girmi olur. Bu esnada PIC16F84'n ektii akm 40 A e kadar
der.
SLEEP komutu kullanlarak, program ierisinde kullanlan ve herhangi bir ?evresel olay test eden software dnglerini
kullanlma gereksinimini ortadan kaldrr. Bylece daha sade program yazma olanan yaratr. rnein bir hrsz alarm
sistemini kontrol eden programda, programn devaml olarak almas gerekmez. Belirli aralklarla evredeki olaylar
denetlemesi gereken bu sistemdeki PIC'i uyuma modundan WDT uyandrr. Program alarak giri portlarndan alarmn
almasn gerektirmeyen bir giri yoksa, tekrar SLEEP komutunu altrarak PIC'i uyuma moduna sokar.
SLEEP modundan k sadece WDT'nin zaman am sinyali ile deil, harici kesme sinyalleri vastasyla da
yaplabilir.

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.

14 D/A ve A/D EVRME LEMLER




DJTAL/ANALOG EVRC
ANALOG/DJTAL EVRC

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.

Ladder(Merdiven) Diren Devresi Kullanmak


rnek D/A evirici olarak vereceimiz devrede PIC'ten 4 bit'lik dijital ve ktn dnrsek, aadaki ladder diren
devresi ile bu sinyali Analog gerilim eviren devreyi aadaki gibi izebiliriz.
PortB'den kan sinyalin b'00001000' (RB3=1) olduunu dnrsek, bu devrede Vk ucundan alnacak gerilimin
deerini bulalm:

0-5 V arasnda analog gerilim elde etmek iin gerekli olan dijital klar aadaki gibidir.

RB3 RB2 RB1 RBO VIKI


0 0 0 0 0.00
0 0 0 1 0.33
0 0 1 0 0.67
0 0 1 1 1.00
0 1 0 0 1.33
0 1 0 1 1.67
0 1 1 0 2.00
0 1 1 1 2.33
1 0 0 0 2.67
1 0 0 1 3.00
1 0 1 0 3.33
1 0 1 1 3.67
1 1 0 0 4.00
1 1 0 1 4.33
1 1 1 0 4.67
1 1 1 1 5.00

8 Bit D/A konvertr Entegresi Kullanmak


PIC'ten kan dijital veriyi analog gerilime dntrebilmek iin uygulanabilecek ikinci yntem bir D/A entegresi
kullanmaktr. Biz P/N AD558 entegresini rnek olarak vereceiz. Bu entegre ierisinde yukardaki rnekte verdiimiz ladder
direnler ve toplayc amplifikatr (OP-AMP) hazr olarak bulunmaktadr. Entegre 5 V DC ile almakta ve giriine
uygulanan dijital sinyali 0-2.55 V arasnda gerilim vermektedir.
AD 558 entegresindeki CE ve CS ularnn fonksiyonlar ayndr. Birisini (CE) topraa balayn. CS giri verisinin
ykselen kenarnda girilen datay kilitlemek iin kullanlan utur. Bu nedenle portA'nn 0. bit'inden uygulanacak sinyalin
ykselen kenarnda kilitleme yaplmas gerekir.

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.

ve Bekleme Sresinin Tespit Etmek


RC osilatrle beslenen PIC16F84'n RB0 ucundan 0 -5 V arasnda deien analog gerilim elde etmek istediimizi
dnelim. nce k periyodunun i sresini ve bekleme sresini belirleyen GECIKME alt programnn nasl olmas
gerektiine karar verelim.
GECIKME
MOVWF SAYAC
DONGU
DECFSZ SAYAC, F
GOTO DONGU
RETURN

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 ?

256 x (% 50) = 128h'80' ( sresi iin)

256 x (% 50) = 128h'80' ( bekleme sresi iin)


rnein;
1.25 Vluk k iin %25 i sresi % 75 bekleme sresi
256 x (%25) = 64 h'40' ( dresi iin)
256 x (%75) = 192 h'C0' (Bekleme sresi iin)
rnein;
0.5 Vluk k iin % 10 i sresi % 90 bekleme sresi
256 x (% 10) = 25.6 26h'1A' (i sresi iin)
256 x (% 90) = 230.4230h'E6' (bekleme sresi)

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.

ANALOG / DJlTAL EVRC


PIC16F84'n sadece dijital verileri ilediini biliyoruz. Bu nedenle analog bir verinin dijital veriye evrilmesi iin
yaplacak programlar ok nemlidir.

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.

PIC16F84'n Giri Seviyesinin lm


PIC16 mikrodenetleyicilerinin I/O ucuna uygulanan threshold gerilimi vardr Bu gerilimin altndaki gerilimler
"0"(low), stndeki gerilimler ise "1"(High) olarak alglanr, Bu gerilim bir potansiyometre ve dijital voltmetre kullanlarak
llebilir Giriin nasl ("1" veya "0") alglandn grmek iin de LED kullanlr. Yaplacak ilemi bir rnekle verelim.

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.

A/D evrim Metodu Kullanarak Diren lmek


Yukardaki deneyden edindiimiz bilgileri kullanarak PIC16F84'n ucuna bal bir direncin deerini lebiliriz.
llen deer portB'ye bal LED'lerde binary olarak okunabilir.
Bu yntem, deeri bilinmeyen bir direncin, bir kondansatr Vflash deerine kadar ne kadar srede arj ettiini lme
esasna dayanr. lme neticesinin doru olup olmadn anlayabilmek iin, deeri bilinen bir diren veya potansiyometre
kullanmakta yarar vardr. TMR0 saycs arj sresini lmek iin kullanlr.
lme ilemi yle yaplr:
Kondansatr dearj edilir. Bu ilem portA'y k olarak ynlendirdikten sonra RA0 ucuna "0" gnderilerek yaplr.
Kondansatrn dearj belirli bir sre alr. Bu sreden sonra RA0 UCL giri olarak ynlendirilir ve bu anda TMR0 altrlr.
Program RA0 portunu izler, bu utaki gerilim Vflash gerilimine ulatnda TMR0 sayc registeri okunur.
arj sresi direncin deeriyle ters orantldr. Diren bydke arj sresi de byyeceinden TMR0 registeri ierisinde
daha byk bir say okunur.
Yukardaki yntemle direncin gerek deerini lmek iin ilk olarak deeri bilinen bir direncin ne kadar srede
TMR0 sayacn belirli bir sayya ulatrd bulunmaldr. Daha sonra bu diren deerinin TMR0'da gstermesi gereken deer
prescaler deeriyle ayarlanarak belirli bir say gstermesi salanr. llecek daha sonraki direnler referans alnan ilk
direnle kyaslanarak gerek deeri bulunur.
PROGRAM-36) RAO ucuna bal bir potansiyometrenin direnci deitirildike portB'deki yanan LED'leri binary olarak
saydran program.
;===PROG36.ASM====03/09/2000=======
LIST P=16F84
INCLUDE "P16F84.INC"
ORG h'00'
GOTO BASLA
ORG h'04"
GOTO KESME
BASLA
BSF STATUS, 5
CLRF TRISB
CLRF TRISA
BCF STATUS, 5
CLRF PORTB
MOVLW b10100000 ;TMR0 registerini kur.
MOVWF INTCON ;INTCOM registerine yaz.
CLRWDT ;WDT'yi sil.
BSF STATUS, 5 ;BANKl
MOVLW b11010001;TMR0 se, dahili komut saykl
MOVWF OPTION_REG
BCF STATUS, 5 ;BANK0
BCF PORTA, 0 ;Kondansatr dearj yap.
CLRF TMR0 ;TMR0 balat, dearj balat
DESARJ
BTFSS TMR0, 7 ;Deaj sresince bekle
GOTO DESARJ
BSF STATUS, 5 ;BANKl
BSF TRISA, 0 ;PORTA, 0. bit giri
BCF STATUS, 5 ;BANKO
CLRF TMR0 ;TMR0 (arj sresini) balat
V_FLASH
BTFSS PORTA, 0 ;RA0 giriine bak. 0. bit "1" mi?
GOTO V_FLASH ;Hayr, tekrar bala
MOVF TMR0, W ;Evet, giri "1" oldu. TMR0 oku
MOVWF PORTB ;Kondansatr dolma sresini gster
BCF INTCON, 5 ;TMR0 kesmelerini geersiz yap
DONGU
GOTO DONGU ;lem bitti
KESME
BCF INTCON, 5 ;Sonraki TMR0 kesmelerini iptal et
MOVLW hAA
MOVWF PORTB ;TMR0 sre dolma durumunu gster
DONGU
GOTO DONGU
END
lem Basamaklan
1. PIC16F84' programlaynz.
2. rnek olarak verilen devreyi breadboard zerine kurup, PIC'i yerletiriniz
3. PIC'e enerji verdikten ok ksa bir sre sonra portB'deki LED'lerde binar sayy grnz.
4. Potansiyometreyi tekrar ayarlayp, RESET tuuna basarak tekrar program altrn. Yeni direncin LED'lerde bir
ncekinden farkl deer gsterdiini izleyiniz.

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.

You might also like