You are on page 1of 117

T.C.

MLL ETM BAKANLII

MEGEP
(MESLEK ETM VE RETM SSTEMNN
GLENDRLMES PROJES)

ELEKTRK ELEKTRONK TEKNOLOJS

MKRODENETLEYC PROGRAMLAMA

ANKARA 2006

Milli Eitim Bakanl tarafndan gelitirilen modller;

Talim ve Terbiye Kurulu Bakanlnn 02.06.2006 tarih ve 269 sayl Karar ile
onaylanan, Mesleki ve Teknik Eitim Okul ve Kurumlarnda kademeli olarak
yaygnlatrlan 42 alan ve 192 dala ait ereve retim programlarnda
amalanan mesleki yeterlikleri kazandrmaya ynelik gelitirilmi retim
materyalleridir (Ders Notlardr).

Modller, bireylere mesleki yeterlik kazandrmak ve bireysel renmeye


rehberlik etmek amacyla renme materyali olarak hazrlanm, denenmek ve
gelitirilmek zere Mesleki ve Teknik Eitim Okul ve Kurumlarnda
uygulanmaya balanmtr.

Modller teknolojik gelimelere paralel olarak, amalanan yeterlii


kazandrmak koulu ile eitim retim srasnda gelitirilebilir ve yaplmas
nerilen deiiklikler Bakanlkta ilgili birime bildirilir.

rgn ve yaygn eitim kurumlar, iletmeler ve kendi kendine mesleki yeterlik


kazanmak isteyen bireyler modllere internet zerinden ulaabilirler.

Baslm modller, eitim kurumlarnda rencilere cretsiz olarak datlr.

Modller hibir ekilde ticari amala kullanlamaz ve cret karlnda


satlamaz.

NDEKLER
AIKLAMALAR ...................................................................................................................iii
GR ....................................................................................................................................... 1
RENME FAALYET-1 ..................................................................................................... 3
1. MKRODENETLEYC PROGRAMI YAZMA................................................................. 3
1.1. Ak Diyagram Oluturma ve Sembolleri ..................................................................... 3
1.2. Mikrodenetleyici Assembler Program ve Yazm Kurallar ........................................ 4
1.2.1. Noktal Virgl........................................................................................................ 5
1.2.2. Balk ..................................................................................................................... 5
1.3. Mikrodenetleyici Komutlar........................................................................................ 11
1.3.1. Byte Ynlendirmeli Komutlar ............................................................................. 12
1.3.2. Bit Ynlendirmeli Komutlar................................................................................ 22
1.3.3. Sabit leyen Komutlar ........................................................................................ 24
1.3.4. Kontrol Komutlar ............................................................................................... 27
1.4. Say ve Karakterlerin Yazl ..................................................................................... 30
1.4.1. Heksadesimal Saylar........................................................................................... 30
1.4.2. Binary Saylar ...................................................................................................... 30
1.4.3. Desimal Saylar.................................................................................................... 31
1.4.4. ASCII karakterler ................................................................................................ 31
1.5. Mikrodenetleyici in Gerekli Yazlmn Kullanm................................................... 31
1.5.1. Programn Kurulmas........................................................................................... 32
1.5.2. Menlerin Tantlmas ......................................................................................... 34
1.5.3. Mikrodenetleyici ve Dier Donanmlarn Seilmesi ........................................... 34
1.6. Programlama Teknii.................................................................................................. 35
1.6.1. Bank Deitirme .................................................................................................. 36
1.6.2. Portlarn Giri ve k Olarak Ynlendirilmesi ................................................. 38
1.6.3. Her Adm in Ak Diyagram izme ................................................................ 38
1.6.4. Konfigrasyon Bitlerinin Yazlmas.................................................................... 39
1.6.5. W Kaytsnn Kullanm.................................................................................... 40
1.6.6. Bitleri Test Ederek lem Yapma ........................................................................ 41
1.6.7. Saya Kullanarak Dng Dzenlemek ................................................................ 42
1.6.8. Karlatrma Yaparak Dng Dzenlemek ........................................................ 43
1.6.9. Status Kayts .................................................................................................... 44
1.6.10. Zaman Geciktirme Dngleri ............................................................................ 46
1.6.11. Altprogramlar .................................................................................................... 51
1.6.12. Bit Kaydrma ..................................................................................................... 52
1.6.13. Mantksal lemler ............................................................................................. 55
1.6.14. Aritmetik lemler.............................................................................................. 58
1.6.15. evrim Tablolar................................................................................................ 61
1.6.16. Kesmeler............................................................................................................ 65
1.6.17. Donanm Sayclar ............................................................................................ 72
UYGULAMA FAALYET .............................................................................................. 91
LME VE DEERLENDRME .................................................................................... 92
RENME FAALYET-2 ................................................................................................... 94
2. MKRODENETLEYC KONTROL PROGRAMININ MAKNE DLNE EVRLMES
................................................................................................................................................ 94
2.1. Programn Derlenmesi ................................................................................................ 95
i

2.1.1. Derleme leminin Yaplmas .............................................................................. 95


2.1.2. Derleme Sonucu Elde Edilen Dosyalar ............................................................... 97
UYGULAMA FAALYET ............................................................................................ 104
LME VE DEERLENDRME .................................................................................. 105
MODL DEERLENDRME ............................................................................................ 107
NERLEN KAYNAKLAR................................................................................................ 110
KAYNAKA ....................................................................................................................... 111

ii

AIKLAMALAR
AIKLAMALAR
KOD
ALAN
DAL/MESLEK
MODLN ADI
MODLN TANIMI
SRE
N KOUL
YETERLK

MODLN AMACI

523EO0020
Elektrik Elektronik Teknolojisi
Mikrodenetleyiciler
Mikrodenetleyici Programlama
Mikrodenetleyici programnn yazlmas ve derlenmesi
ile ilgili bilgi ve becerilerin kazandrld renme
materyalidir.
40/32
Mikroilemci ve mikrodenetleyiciler modln
tamamlam olmak.
Mikrodenetleyici programnn yazlmas ve derlenmesi
ile ilgili yntem ve teknikleri renmek.
Genel Ama
Bu modl ile eitim retim ortamlar ve
donannmlarnda belirtilen ortam salandnda , yaplacak
ileme gre gerekli teknikleri kullanarak mikrodenetleyici
programn hatasz yapabileceksiniz.
Amalar
Kurulacak devre iin mikrodenetleyici programlama
yazlmn eksiksiz olarak kullanabileceksiniz.
Yaplan
mikrodenetleyici
(heksadesimal kodlara)
evirebileceksiniz.

programn
makine
diline hatasz olarak

ETM RETM
ORTAMLARI VE
DONANIMLARI

Atlye ortam, mikrodenetleyici programlama kart,


mikrodenetleyici
programlama
kart
yazlm,
mikrodenetleyici uygulama kart, bilgisayar , AVOmetre,
aktif ve pasif devre elemanlar, lehimleme malzemeleri, dier
faydal el ve g aralar donanmlar .

LME VE
DEERLENDRME

Her faaliyet sonrasnda o faliyetle ilgili deerlendirme


sorular ile kendi kendinizi deerlendireceksiniz.
retmen modl sonunda size lme arac (uygulama,
soru-cevap)
uygulayarak
modl
uygulamalar
ile
kazandnz bilgi ve becerileri lerek deerlendirecektir.

iii

iv

GR
GR
Sevgili renci,
Mikrodenetleyiciler gnlk hayatta kullandmz pek ok cihaz ierisine girmi
durumdadr. yle ki, mikrodenetleyicileri otomobillerde, cep telefonlarnda, kameralarda,
faks-modem cihazlarnda, fotokopi, radyo, TV ve baz oyuncaklar gibi saylamayacak kadar
pek ok alanda kullanmn grmek mmkndr.
Mikrodenetleyici kullanmnn bu kadar yaygn olmasnn ok nemli nedenleri vardr.
Daha nce mikroilemci kullanm gereken yerlerde, ayrca hafza niteleri (RAM, ROM) ve
giri/k arabirim devrelerine (I/O) ihtiya duyuluyordu. Bu da sistemin maaliyetini
ykselmesi , devrenin karmak olmas ve fazla yer kaplamas, programlamann zorluu gibi
problemler oluturuyordu. Fakat mikrodenetleyicilerle bu sorunlar ortadan kaldrld. nk
fiyatlar son derece makul olan bu entegreler, ayrca hafza niteleri (RAM, ROM) ve
giri/k arabirim devrelerine (I/O) ihtiya duyulmadan istenilen tasarmn yaplabilmesine
imkn tanmaktadr. Bununla beraber programlanmas da olduka kolay ve programlama dili
olan assembly iin de bir bedel gerekmemektedir. Ayrca flash bellekleri sayesinde bir
denetleyicinin onlarca defa programlanabilip silinebilmesine imkn tanr. te bu gibi
zelliklerinden dolay mikrodenetleyiciler pek ok alanda mikroilemcilerin yerini almtr.
Gnmzde Texas ins. , NSC, Atmel ve Microchip gibi birok firma mikrodenetleyici
retmekte ve bunlar donanm tasarmclarnn kullanmna sunmaktadr. Biz, bundan nceki
modldeki olduu gibi, bu modlde de Microchip firmasnn rettii mikrodenetleyicileri
anlatacaz. Konular genelde bu firmann rettii PIC16F84 mikrodenetleyicisi zerinden
ilenecektir. Bu ekilde, modl sonunda artk siz de bir mikrodenetleyiciyi tanm ve amaca
gre programnn yazabilme seviyesine km olacaksnz.

Bir PIC mikrodenetleyicisi programlayc ve deneme kart

RENME FAALYET-1
AMA

RENME FAALYET-1

Uygun ortam salandnda kurulacak devre iin


eksiksiz olarak yapabileceksiniz.

mikrodenetleyici programn

ARATIRMA
Bu faaliyet ncesinde yapmanz gereken ncelikli aratrmalar unlardr:

Mikrodenetleyici eitlerini (Microchip firmasnn rettii PIC serisi )


aratrnz.

Mikrodenetleyici komutlarn aratrnz.

Mikrodenetleyicilerin donanmsal farkllklarn aratrnz.

Aratrma ilemleri iin internet ortam ve mesleki kitaplarn bulunduu ktphaneler


ile bu sektr zerinde alan teknik elemanlardan faydalanabilirsiniz.

1. MKRODENETLEYC PROGRAMI
YAZMA
Assembly dili bir mikrodenetleyiciden (bundan sonra sadece denetleyici veya PIC
olarak bahsedeceiz) beklenen veya denetleyicinin yapmas istenen ilemlerin belirli
kurallara uygun olarak yazlm komutlar dizisidir. Assembly komutlar ngilizcedeki
manalarnn ksaltmalarndan meydana gelmektedir. Bu komutlar genellikle bir komutun
yapt ii ifade eden ngilizce szcklerin ba harflerinden meydana gelmektedir. rnein
BTFSC Bit Test F Skip if Clear ( File kaytdaki (kaydedici) biti test et ). imdi bir
denetleyicinin assembly program yapmadan nce , karlacak ak diyagramnda kullanlan
sembolleri grelim.

1.1. Ak Diyagram Oluturma ve Sembolleri


Assembler ile bir program yazmadan evvel, denetleyicinin hangi admlarla program
ileyeceini planlamamz gerekmektedir. Bu planlama ilemi ak diyagramlar ile yaplr.
Ak diyagram ilenecek komutlarn srasdr. Uzun ve karmak programlarda, ak
diyagramlar, hangi seviyeden programn ayrlacan ve hangi komutlar yerine getireceini,
sonra tekrar nereye dneceini gstermesi sebebiyle faydaldr. Ak diyagramlarnn
kendine has sembolleri de vardr. ekil 1.1de ak diyagram sembolleri grlmektedir;

Balang ve sonlandrc

Hazrlk

Karar verme (sorgulama)

lem
Alt program.
ekil 1.1: Ak diyagram sembolleri

Bu modl ierisindeki ak diyagramlarn inceleyiniz.

1.2. Mikrodenetleyici Assembler Program ve Yazm Kurallar


PIC assembly programlarnn yazlabilmesi iin kullanlan metin editrlerinden
Windows altnda alan NOTPAD veya dos altnda alan EDIT en uygun olanlarndan bir
ka tanesidir. Bunun dnda printer kontrol komutlar iermeyen ve ASCII kodunda dosya
retebilen herhangi bir editr de kullanlabilir. MPLAB kullanldnda ayrca editr
kullanmaya gerek yoktur. nk MPLABn iinde hem bir text editr hem de MPASM
bulunmaktadr.
Bunun dnda PIC mikrodenetleyicisi iin program yazmann baka yollar da vardr.
Pic Basic Pro, C diliyle yazlm program PIC iin derleyici programlar veya PLC
mantyla grsel olarak PIC programlayclar (PICBIT) ile de PIC denetleyicileri iin
program yazlabilir. Fakat bu programlar da arka planda kendi ASM uzantl ktklerini
kullanrlar. Biz bu yzden btn bu programlara da temel tekil eden assembly dilini
kullanacaz.
MPASM assembler programnn yazlan komutlar doru olarak alglayp PICin
anlayabilecei heksadesimal kodlara dntrlmesi, u bilgilerin program ierisinde zel
formatta yazlmas gerekir;

Komutlarn hangi PIC iin yazld

Programlarn bellekteki hangi adresten balayaca


4

Komutlarn ve etiketlerin neler olduu

Programn biti yeri

imdi bir assembly programnda bunlarn nasl yazldna bakalm.

1.2.1. Noktal Virgl


Ba tarafna (;) konulan satr, assembler tarafndan heksadesimal
kodlara
dntrlemez. Bu satrlar programn gelitirilmesi esnasnda hatrlatc aklamalarn
yazlmasnda kullanlr. Aada rnekte CLRF ile balayan satrda portBnin iini sfrla
cmlesi, CLRF komutunun ne i yaptn aklar. Programn blmlerini birbirinden
ayrmak iin (------- veya = = = = ) izgileri kullanmak, program grsel olarak daha okunur
hle getirdii gibi bu izgiler arasna uyarlar ve aklamalar da yazlabilir.
;==========bu satr derleyici tarafndan dikkate alnmaz.======
CLRF PORTB
; portBnin iini sfrla.
;==========bu satr da derleyici tarafndan dikkate alnmaz.=====

1.2.2. Balk
Programn bandaki bilgilere balk blm denilir.
;= = = = PROGRAM1. ASM = = = = = = = = = = = = = = = = = = = = = = = =
LIST P=16F84
;--------------------------------------------------------------------------------------------INCLUDE
P16F84.INC
Balk blmnde program dosyasnn ad ve hazrland tarih, istenirse hazrlayann
ad ya da farkl bir ad yazlabilir. lk satr, bir aklama satrdr ve assembler tarafndan
derlenmez.
LIST P=16F84 satr, programn hangi PIC iin yazldn belirtir. LIST bir derleyici
bildirisidir. Yani derleyiciyi ynlendiren bir komuttur ve yegane kullan amac ve yeri
burasdr.
Balk blmnde INCLUDE komutu da kullanlabilir. Bir program yazlrken tm
kaytlar tek tek tanmlamak olduka zordur. Bu yzden include dosyas denilen bu
tanmlarn iinde bulunduu ve assembler tarafndan tannan bir dosya kullanrz. Assembler
tarafndan tannmas iin program giriinde tanmlanr.
rnein PORTB, STATUS ve TRISB kaytlarn kullanan bir program yazdnz
varsayalm. Eer programnzn balk ksmnda
INCLUDE

P16F84.INC

eklinde bir ifade kullanrsanz programnzda kaytlar kendiniz tantmak zorunda


kalmazsnz. Aksi hlde aadaki gibi bellek adreslerini kendiniz tantmalsnz.
5

PORTB EQU

h06
STATUS
TRISB

h03
h86

Aada PIC16F84 mikrodenetleyicisi iin, Microchip Technology, Inc. tarafndan


hazrlanm INC dosyasn gryorsunuz. Burada kaytlarn bellek adreslerinin ve kayt
bitlerinin tek tek tanmlandna dikkat ediniz.
LIST
; P16F84.INC Standard Header File, Version 2.00

Microchip Technology, Inc.

NOLIST
; This header file defines configurations, registers, and other useful bits of
; 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
;=================================================================
=========
6

;
;

Verify Processor

;=================================================================
=========
IFNDEF __16F84
MESSG "Processor-header file mismatch. Verify selected processor."
ENDIF
;=================================================================
=========
;

Register Definitions

;=================================================================
=========
W
EQU H'0000'
F
EQU H'0001'
;----- Register Files-----------------------------------------------------INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
EEDATA
EEADR
PCLATH
INTCON
OPTION_REG
TRISA
TRISB
EECON1
EECON2

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0000'
H'0001'
H'0002'
H'0003'
H'0004'
H'0005'
H'0006'
H'0008'
H'0009'
H'000A'
H'000B'

EQU
EQU
EQU
EQU
EQU

H'0081'
H'0085'
H'0086'
H'0088'
H'0089'

;----- STATUS Bits -------------------------------------------------------IRP


RP1
RP0
NOT_TO
NOT_PD
Z
DC

EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
7

C
EQU H'0000'
;----- INTCON Bits -------------------------------------------------------GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF

EQU H'0007'
EQU H'0006'
EQU H'0005'
EQU H'0004'
EQU H'0003'
EQU H'0002'
EQU H'0001'
EQU H'0000'

;----- OPTION Bits -------------------------------------------------------NOT_RBPU


INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

;----- EECON1 Bits -------------------------------------------------------EEIF


WRERR
WREN
WR
RD

EQU
EQU
EQU
EQU
EQU

H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

;=================================================================
=========
;
;
RAM Definition
;
;=================================================================
=========
__MAXRAM H'CF'
__BADRAM H'07', H'50'-H'7F', H'87'
;=================================================================
=========
;
;
Configuration Bits
;
8

;=================================================================
=========
_CP_ON
EQU H'000F'
_CP_OFF
EQU H'3FFF'
_PWRTE_ON
EQU H'3FF7'
_PWRTE_OFF
EQU H'3FFF'
_WDT_ON
EQU H'3FFF'
_WDT_OFF
EQU H'3FFB'
_LP_OSC
EQU H'3FFC'
_XT_OSC
EQU H'3FFD'
_HS_OSC
EQU H'3FFE'
_RC_OSC
EQU H'3FFF'
LIST

1.2.3. Sabitler
PIC assembly dilinde heksadesimal saylar birer sabittir. Sabitler MOVLW ve baz
mantksal ve aritmetik ilem komutlarnda kullanlrlar.
Etiket
Komut
START MOVLW

0 X 02
Sabit

1.2.4. Org Deyimi


ORG ngilizcedeki origin kelimesinden gelmektedir. ORG deyimi iki ama iin
kullanlr; program komutlarnn hangi adresten itibaren baladn ve PICin kesme alt
programnn balang adresini.
ORG

0 x 000

ORG

0 x 004

; ilk program komutunun bellek adresi


; h004 adresi, PIC16F84 denetleyicisinin kesme alt programnn
balang adresi

1.2.5. Girintiler ve Program Blmleri


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

ekil 1.2: Girintiler ve program blmlerinin grn

Assembler, yukarda ekil 1.2de belirtildii gibi komutlarn kolona blnerek


yazlm olduunu varsayar. Belirtilen kolona yazlmayan bir komut olduunda ise bunu da
kabul eder. Ancak, heksadesimal kodlara dntrme esnasnda bu tip hatalar bir uyar
olarak belirtir. Assembly komutlar yazlrken kolonlar arasnda verilen TABlarn uzunluu
nemli deildir. Boluk tuu ile verilen aralk da assembler tarafndan TAB olarak alglanr.
PIC e yaptrlacak herhangi bir ilem iin, zellikle uzun ve zor programlar yazmaya
baladktan sonra yaplacak aklamalar, blmlere ayrlm programlarn 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 bu
blmleri grelim.
1.2.5.1. Balk Blou
Programnn bandaki bilgilere balk blm denilir. Bu blm daha nce balk
konusunda grdmz iin geiyoruz.
10

1.2.5.2. Atama Blou


EQU deyimi PICin belleindeki bir heksadesimal adresi belirlenen bir
etikete atamak iin kullanlr. Aada atama deyimine bir rnek gsterilmitir.
Etiket
Atama deyimi
PORTB

EQU

0 X 06
Heksadesimal adres
Heksadesimal sayy ifade eder

1.2.5.3. Program Blou


Programcnn asembly komutlar kullanarak ii yaptracak program yazd, iinde
altprogramlarnda bulunabilecei ana blmdr. Modl iindeki programlar incelerek
program blounu bulmaya alnz.
1.2.5.4. Sonlandrma Blou
PIC 16F84n 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 assemblere bildirir. Her program
sonunda END deyimi muhakkak kullanlmaldr. Aksi hlde program devam ederken dosya
sonunun belirtilmediini gsteren bir hata mesaj verecektir.

1.3. Mikrodenetleyici Komutlar


PIC16F84 denetleyicisinin toplam 35 tane komutu vardr. Dier PIC serisinin baka
komutlarda olmasna ramen bu 35 komut temel tekil ettii iin biz de bu komutlar
greceiz. Bu komutlarn yazl biimini drt grupta toplayabiliriz .

Byte-ynlendirmeli komutlar.

Bit-ynlendirmeli komutlar.

Sabit ileyen komutlar.

Kontrol komutlar.
11

Komutlarn yazl biimlerini aklarken baz tanmlama harfleri kullanacaz. nce


bu harflerin anlamlarn verelim:
f = Dosya kayts (kaydedicisi) (File Register)
d = Gnderilen yer (destination) iki durum sz konusudur ;
d=0 ..Hedef W kaytsdr.
d=1 ..Hedef dosya (F) kaytsdr .
k = Sabit veya adres etiketi
b = Bit tanmlayc
b = Binary saylar belirleyen harf (rnein b00001111 gibi)
d = Desimal saylar belirleyen harf (rnein d 16 gibi)
h = Hexadesimal saylar belirleyen harf (rnein h 0A gibi)

1.3.1. Byte Ynlendirmeli Komutlar


Bu grup komutlarda hedef kayt W veya bir dosya kayts (f) olabilir. Kaytlar
aras veri transferleri ve ilemleri bu komutlarla gerekleir. imdi bu komutlar grelim:
ADDWF
W ve f kaytlarn topla.
Dizim:
[etiket] ADDWF f,d
Operandlar:
0f127
d[0,1]
lem:
(W)+(f) (hedef)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 00 0111 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:W kaytsnn ieriini f kaytsna ekler. Eer d=0 ise, sonu W kaytsnn
ierisinde depolanr. d=1 ise sonu f kaytsnn ierisinde geri saklanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:

ADDWF FSR, 0

Komuttan nce;
W = h17
FSR= hC2 olsun.
Komuttan sonra;
d=0 olduundan sonucun W de olduuna dikkat ediniz.
W = hD9
FSR= hC2 olur.
ANDWF
Wyi f ile mantksal ANDle.
Dizim:
[etiket] ANDWF f,d
Operandlar: 0f127
d[0,1]
lem:
(W).AND.(f) (hedef)
12

Etkilenen bayraklar: Z
Kodlama: 00 0101 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:W kaytsn f kayts ile mantksal ANDler. AND mantnda girilerden birinin
0 olmas sonucu 0 yapacaktr.Sonucun 1 olmas iin tm girilerin 1 olmas gerekir. Eer
d=0 ise, sonu W kayts iinde saklanr. Eer d=1 ise, sonu f kayts iinde geri
saklanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
ANDWF FSR, 1
Komuttan nce;
W = h17
FSR= hC2 olsun.
Komuttan sonra;
h17=b0001 0111
AND hC2=b1100 0010
b 0000 0010=h02 ve ;
d=1 olduundan sonucun f (burada FSR ) de olduuna dikkat ediniz.
W = h17
FSR= h02
CLRF
F kaytsn sil. ( Clear f )
Dizim:
[etiket] CLRF f
Operandlar:
0f127
lem:
00h (f) 1 Z
Etkilenen bayraklar:
Z
Kodlama: 00 0001 1fff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:f kaytsnn ierii silinir ve Z biti kurulur.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
CLRF SAY
Komuttan nce;
SAY = h5A
Komuttan sonra;
SAY = h00
Z
=1
CLRW
W Kaytsn Sil.
Dizim:
[etiket] CLRW
Operandlar:
Yok
lem:
00h (W) 1 Z
13

Etkilenen bayraklar:
Z
Kodlama: 00 0001 0000 0011
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:W kayts silinir. Z biti set edilir.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
CLRW
Komuttan nce;
W = h5A
Komuttan sonra;
W = h00
Z=1
COMF
F kaytsn tmle ( tersini al ).
Dizim:
[etiket] COMF f,d
Operandlar: 0f127
d[0,1]
lem:
(f) (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 1001 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:F kaytsnn ierii tmlenmitir. Eer d=0 ise, sonu W kaytsnn ierisinde
depolanr, d=1 ise, sonu f kaytsnn ierisinde geri saklanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:

COMF test,0

Komuttan nce;
test = h13 olsun.
Komuttan sonra;
d=0 olduundan sonucun Wde olduuna dikkat ediniz.
test = h13=b0001 0011
terslenirse; b1110 1100=hEC ve
test = h13
W= hEC
DECF
f kaytsnn deerini 1 azalt.
Dizim:
[etiket] DECF f,d
Operandlar:
0f127
d[0,1]
lem:
(f) 1 (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 0011 dfff ffff
14

olur.

MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm: f kaytsnn deerini 1 azaltr. Eer d=0 ise, sonu W kaytsnn ierisinde
depolanr, d=1 ise, sonu f kaytsnn ierisinde geri saklanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
DECF SAY, 1
Komuttan nce;
SAY = h01
Z = 0 olsun.
Komuttan sonra;
d=1 olduundan sonucun f (burada SAY) de olduuna dikkat ediniz.
SAY = h00
Z=1
DECFSZ
f kaytsnn deerini 1 azalt , sonu 0 ise bir sonraki komuta atla.
Dizim:
[etiket] DECFSZ f,d
Operandlar:
0f127
d[0,1]
lem:
(f)1 (hedef); sonu=0 ise atla
Etkilenen bayraklar:
Yok
Kodlama: 00 1011 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm: f kaytsnn ierii 1 azaltlr.
Ayn zamanda sorgulama
yapar. Kayt ierii 0 olursa program bir sonraki komuta atlar, deilse alttaki komut ilenir.
Eer d=0 ise, sonu W kaytsnn ierisinde depolanr, d=1 ise,sonu f kaytsnn
ierisinde geri saklanr.
Hafza alan (Bayt): 1
Saat pals: 1(2)
Sonu 0sa 2 saat pals , deilse 1 saat pals alr.Yani atlama olmad durumda uygulanmas
1 , atlama durumunda 2 saat pals alr.
rnek:

DON
DECFSZ CNT,1
GOTO LOOP
DEVAM

programn devam

Komuttan nce;
PC = Adres DON
Komuttan sonra;
CNT= CNT-1
Eer CNT= 0
PC= {Adres DEVAM}
Eer CNT0,
15

PC={Adres DON+1} yani GOTO komutunun olduu satr ilenir.


INCF
f kaytsnn deerini 1 artr.
Dizim:
[etiket] INCF f,d
Operandlar:
0f127 d[0,1]
lem:
(f) + 1 (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 1010 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm: f kaytsnn deerini 1 artrr. Eer d=0 ise, sonu W kaytsnn ierisinde
depolanr. d=1 ise,sonu f kaytsnn ierisinde geri saklanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
INCF CNT,1
Komuttan nce;
CNT= hFF
Z =0
Komuttan sonra;
d=1 olduundan sonucun f (burada CNT) de olduuna dikkat ediniz. Ayrca FF+1=00
olacana da dikkat ediniz.
CNT= h00
Z= 1
INCFSZ
f kaytsnn deerini 1 artr, sonu 0 ise bir sonraki komuta atla.
Dizim:
[etiket] INCFSZ f,d
Operandlar:
0f127 d[0,1]
lem:
(f)+1(hedef),sonu=0 ise atla
Etkilenen bayraklar:
Yok
Kodlama: 00 1111 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm: f kaytsnn ierii 1 arttrlr. Ayn zamanda sorgulama yapar. Kayt ierii 0
olursa program bir sonraki komuta atlar, deilse alttaki komut ilenir. Eer d=0 ise, sonu W
kaytsnn ierisinde depolanr, d=1 ise, sonu f kaytsnn ierisinde geri saklanr.
Hafza alan (Bayt): 1
Saat pals: 1(2)
Sonu 0sa 2 saat pals, deilse 1 saat pals alr. Yani atlama olmad durumda uygulanmas
1 , atlama durumunda 2 saat pals alr.
rnek:
DON
DECFSZ CNT,1
GOTO LOOP
DEVAM

programn devam

16

Komuttan nce;
PC = Adres DON
Komuttan sonra;
CNT = CNT+1
Eer CNT= 0 ise,
PC= {Adres DEVAM}
Eer CNT0 ise,
PC={Adres DON+1} Yani GOTO komutunun bulunduu satr ileme sokulur.
IORWF
f ile W kaytlarn mantksal OR ilemine tabi tut.
Dizim:
[etiket] IORWF f,d
Operandlar:
0f127 d[0,1]
lem:
(W).OR.(f) (W)
Etkilenen bayraklar:Z
Kodlama: 00 0100 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm: f ile W kaytlarn mantksal OR ilemine tabi tutar. OR mantnda girilerden
birinin 1 olmas sonucu 1 yapacaktr. Sonucun 0 olmas iin tm girilerin 0 olmas gerekir.
Eer d=0 ise, sonu W kaytsnn ierisinde depolanr, d=1 ise, sonu f kaytsnn
ierisinde geri saklanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
IORWF
RESULT, 0
Komuttan nce;
RESULT = h13
W = h91
Komuttan sonra;
d=0 olduundan sonucun Wde olduuna dikkat ediniz.
h13=b0001 0011
OR h93=b1001 0011
b 1001 0011=h93 ve ; RESULT = h13 W = h93
olur.
MOVF
F kayt ieriini hedefe ta.
Dizim:
[etiket] MOVF f,d
Operandlar:
0f127 d[0,1]
lem:
(f) (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 1000 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm: F kayt ieriini belirtilen hedefe tanr. Eer d=0 ise, f ierii W kaytsna
tanr. d=1 ise, f ierii f kaytsna tanr. d=1 durumu, status kaytsnda Z bayran
etkileyeceinden dolay, bir file kaytsnn ieriinin 0 olup olmadnn testinde
kullanlabilir.
Hafza alan (Bayt): 1
17

Saat pals:
1
rnek:
MOVF FSR, 0
Komuttan sonra;
d=0 olduundan sonucun Wde olduuna dikkat ediniz.
W=FSR olur.
MOVWF
Wnin ieriini f kaytna ta.
Dizim:
[etiket] MOVWF f
Operandlar:
0f127
lem:
(W) (f)
Etkilenen bayraklar:
Yok
Kodlama: 00 0000 1fff ffff
MSB tarafndaki 5 bit komut kodu , f ile belirtilen LSB tarafndaki 5 bit ise dosya adresini
(f kayt adresi) tanmlar.
Tanm:W kaytsnn ierii f kaytsna tanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
MOVWF OPTION
Komuttan nce;
OPTION = hFF
W = h4F
Komuttan sonra;
Bu komutta hedefin (d) belirtilmediine dikkat ediniz.
OPTION = h4F
W = h4F
NOP
lem yok
Dizim:
[etiket] NOP
Operandlar:
Yok
lem:
Yok
Etkilenen bayraklar:
Yok
Kodlama:
00 0000 0xx0 0000
Tanm:
1 saat pals zaman gecikmesi salar.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
NOP
1 saat pals zaman gecikmesi salar.
RLF
f kaytsn elde biti (Carry) araclyla sola dndr
Dizim:
[etiket] RLF f,d
Operandlar:
0f127 d [0,1]
lem:
Aadaki tanma baknz.
Etkilenen bayraklar:
C
Kodlama: 00 1101 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
18

Tanm: f kaytsnn ierii elde biti (C) iinden bir bit sola dndrlr. C biti f kaytsnn
MSB bitini tar. Eer d=0 ise, sonu W kaytsnn ierisine yerletirilir. Eer d=1 ise,
sonu f kaytsnn ierisinde geri depolanr.
F kayts

Hafza alan (Bayt): 1


Saat pals:
1
rnek:
RLF REG1,0
Komuttan nce;
REG1 = b1110 0110
C =0
Komuttan sonra;
REG1 = b1110 0110

W = b1100 1100

C = 1 olur.

RRF
f kaytsn elde biti (Carry) araclyla saa dndr
Dizim:
[etiket] RRF f,d
Operandlar:
0f127 d [0,1]
lem:
Aadaki tanma baknz.
Etkilenen bayraklar:
C
Kodlama: 00 1100 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:f kaytsnn ierii elde biti (C) iinden bir bit saa dndrlr. C biti f kaytsnn
LSB bitini tar. Eer d=0 ise, sonu W kaytsnn ierisine yerletirilir. Eer d=1 ise,
sonu f kaytsnn ierisinde geri depolanr.
C

F kayts

Hafza alan (Bayt): 1


Saat pals:
1
rnek:
RRF REG1,0
Komuttan nce;
REG1 = b1110 0110
C =0
Komuttan sonra;
REG1 = b1110 0110
W = b0111 0011
C =0

19

SUBWF
F kaytsndan W kaytsn kart.
Dizim:
[etiket] SUBWF f,d
Operandlar:
0f127 d[0,1]
lem:
(f) (W) (hedef)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 00 0010 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:W kayts f kaytsndan kartlr. d=1 ise, sonu f kayts ierisinde geri
saklanr.
Hafza alan (Bayt): 1
Saat pals:
1
rnek 1:
SUBWF REG1,1
Komuttan nce;
REG1 = 3
W=2
C=?
Z=?
Komuttan sonra;
REG1 = 1
W=2
C = 1, sonu pozitif
Z=0
rnek 2: Komuttan nce;
REG1 = 2
W=2
C =?
Z=?
Komuttan sonra;
REG1 = 0
W=2
C = 1,sonu sfr
Z=1
rnek 3: Komuttan nce;
REG1 = 1
W=2
C =?
Z=?
Komuttan sonra;
REG1 = FF
W=2
C = 0,sonu negatif
Z=1
20

SWAPF
fyi takas et
Dizim:
[etiket] SWAPF f,d
Operandlar:
0k255 d[0,1]
lem:
(f<3:0>)(hedef<7:4>), (f<7:4>)(hedef<3:0>)
Yani f kaytsnn LSB tarafndaki 4 biti (1.Dijiti) ile MSB tarafndaki 4 biti (2.dijiti) yer
deitirir. Eer d=0 ise, sonu W kaytsnn ierisine yerletirilir. Eer d=1 ise, sonu f
kaytsnn ierisinde geri depolanr.
Etkilenen bayraklar:
Yok
Kodlama: 00 1110 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:f kaytsnn yksek ve alak baytlar dntrlr. d=0 ise,sonu W kayts iine
yerletirilir. Eer d=1 ise, sonu f kayts iine yerletirilir.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
SWAP F ISIK, 0
Komuttan nce;
ISIK = hA5 olsun .
Komuttan sonra;
ISIK = hA5
W = h5Aolur.
XORWF
f ile Wnin ieriini mantksal EXORla.
Dizim:
[etiket] XORWF f,d
Operandlar:
0k127 d[0,1]
lem:
(W) .XOR. (f) (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 0110 dfff ffff
MSB tarafndaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafndaki 5 bit
ise dosya adresini (f kayt adresi) tanmlar.
Tanm:W kaytsnn ierii, f kayts ile mantksal EXORlanr. EXOR mantnda ayn
bitlerde k 0, farkl bitlerde k 1 olur. Eer d=0 ise, sonu W kayts iinde depolanr,
d=1 ise sonu f kayts iine geri yerletirilir.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
XORWF REG , 1
Komuttan nce;
REG = hAF
W = hB5
Komuttan sonra;
hAF= b1010 1111
EXOR hB5= b1011 0101
b 0001 1010=h1A ve ;
REG = h1A
W = hB5
21

1.3.2. Bit Ynlendirmeli Komutlar


Bit Ynlendirmeli komutlarda dikkat edilirse hedef (d) belirtilmemitir. Sonu her
zaman f kaytsnn iersindedir. imdi bu komutlar grelim;
BCF
F kaytsnn belirtilen bitini sfrla.
Dizim:
[etiket] BCF f,b
Operandlar:
0f127
lem:
0 (f<b>)
Etkilenen bayraklar:
Yok
Kodlama: 01 00bb bfff ffff
MSB tarafndaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafndaki 7 bit ise dosya adresini (f kayt adresi) tanmlar.
Tanm:f iindeki b. biti silinir.
Hafza alan (Bayt):
1
Saat pals:
1
rnek:
BCF TEST,7
Komuttan nce;
TEST = hC7 olsun.
Komuttan sonra;
hC7=b 1100 0111
0 olur ve;
TEST = h47 olur.
BSF
F kaytsnn belirtilen bitini kur (birle).
Dizim:
[etiket] BSF f,b
Operandlar:
0f127 0b7
lem:
1 (f<b>)
Etkilenen bayraklar:
Yok
Kodlama: 01 01bb bfff ffff
MSB tarafndaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafndaki 7 bit ise dosya adresini
(f kayt adresi) tanmlar.
Tanm:f kayts iindeki b. Bit 1e kurulur.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
BSF TEST, 7
Komuttan nce;
TEST = h0A olsun.
Komuttan sonra;
h0A=b 0000 1010
1 olur ve;

TEST = h1A olur


22

BTFSC
f kaytsnn belirlenen biti 0 ise bundan sonraki komutu atla.
Dizim:
[etiket] BTFSC f,b
Operandlar:
0f127 0b7
lem:
F(<b>)=0 ise atla
Etkilenen bayraklar:
Yok
Kodlama: 01 01bb bfff ffff
MSB tarafndaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafndaki 7 bit ise dosya adresini
(f kayt adresi) tanmlar.
Tanm: f kayts iindeki b. Bitin 0 olup olmad test edilir. Eer b. bit 0 ise, bu
komutun altndaki komut ilenmez bir sonraki komuta saplr. Aksi durumda ise sradaki
komut ilenir.
Hafza alan (Bayt): 1
Saat pals:
1(2)
Test edilen bit 1 ise 1 saat pals , 0 ise 2 saat pals alr.
rnek:BASLA BTFSC PORTB,1 ;B portunun 1.bitini test et.
GOTO BASLA
; 0 deilse bu satr ilenir, BASLA etiketine dallanr.
;Yani 0 olana kadar test etmeye devam edecek.
BSF PORTB,1
;0 ise bu satr ilenir ve B portunun 1. biti bu komut ile
;1 yaplr. Eer bu pine bir led bal ise yanar.
BTFSS
f kaytsnn belirlenen biti 1 ise bundan sonraki komutu atla.
Dizim:
[etiket] BTFSS f,b
Operandlar:
0f127 0b127
lem:
Eer (f<b>)=1 ise atla
Etkilenen bayraklar: Yok
Kodlama: 01 11bb bfff ffff
MSB tarafndaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafndaki 7 bit ise dosya adresini
(f kayt adresi) tanmlar.
Tanm: f kayts iindeki b. Bitin 1 olup olmad test edilir. Eer b. bit 1 ise, bu
komutun altndaki komut ilenmez bir sonraki komuta saplr. Aksi durumda ise sradaki
komut ilenir.
Hafza alan (Bayt):
1
Saat pals: 1(2)
Test edilen bit 0 ise 1 saat pals , 1 ise 2 saat pals alr.
rnek: BASLA BTFSS PORTA,1 ;A portunun 1.bitini test et.
GOTO BASLA
;1 deilse bu satr ilenir, BASLA etiketine dallanr.
;Yani 1 olana kadar test etmeye devam edecek.
BSF PORTB,1 ;1 ise bu satr ilenir ve B portunun 1. biti bu komut ile 1
;yaplr. Eer bu pine bir led bal ise yanar.

23

1.3.3. Sabit leyen Komutlar


Sabit ynlendirmeli komutlarda dikkat edilirse hedef (d) belirtilmemitir. Sonu her
zaman W kaytsnn iersindedir. Ayrca bu gruptaki komutlarn W dndaki kaytlar ile
kullanlamadna dikkat ediniz. imdi bu komutlar grelim;
ANDLW
W ile birlikte 8 bitlik k sabitini mantksal ANDle.
Dizim:
[etiket] ANDLW k
Operandlar:
0k255
lem:
(W).AND.(k) (W)
Etkilenen bayraklar: Z
Kodlama: 11 1001 kkkk kkkk
MSB tarafndaki 5 bit komut kodu , k ile belirtilen LSB tarafndaki 8 bit ise 1 baytlk
sabit deeri tanmlar. Burada hedef (d) in kodlanmadna dikkat ediniz.
Tanm:W kaytsnn ierii 8-bitlik sabit k ile mantksal ANDlenir. Sonu,W
kaytsna geri konur.
Hafza alan (Bayt): 1
Saat palsi:
1
rnek:
ANDLW

h5F

Komuttan nce;
W = hA3
Komuttan sonra;
hA3= b1010 0011
AND h5F= b0101 1111
b 0000 0011=h03 ve ;
W = h03 olur.
ADDLW
W ile birlikte 8 bitlik k sabitini topla.
Dizim:
[etiket] ADDLW k
Operandlar:
0k255
lem:
(W)+k (W)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 11 111x kkkk kkkk
MSB tarafndaki 5 bit komut kodu , k ile belirtilen LSB tarafndaki 8 bit ise 1 baytlk sabit
deeri tanmlar.Burada hedef (d) in kodlanmadna dikkat edin.
Hafza alan (Bayt):
1
Saat palsi:
1
rnek:
ADDLW h15
Komuttan nce;
W = h10
Komuttan sonra;
W = h25 olur.
24

IORLW
W ile birlikte kapsayan OR yazm
Dizim:
[etiket] IORLW k
Operandlar:
0k255
lem:
(W).OR.(k) (W)
Etkilenen bayraklar:
Z
Kodlama: 11 1000 kkkk kkkk
MSB tarafndaki 5 bit komut kodu , k ile belirtilen LSB tarafndaki 8 bit ise 1 baytlk sabit
deeri tanmlar. Burada hedef (d) in kodlanmadna dikkat ediniz.
Tanm:W kaytsnn ierii 8-bitlik sabit k ile ORlanr. Sonu, W kaytsna geri konur.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
IORLW h35
Komuttan nce;
W= h9A
Komuttan sonra;
h9A= b1001 1010
OR
h35= b0011 0101
b 1011 1111=hBF ve ;
W= hBF ve Z=1 olur.
MOVLW
W kaytsna bir say/sabit ykle.
Dizim:
[etiket] MOVLW k
Operandlar:
0k255
lem:
k (W)
Etkilenen bayraklar:
Yok
Kodlama: 11 00xx kkkk kkkk
MSB tarafndaki 5 bit komut kodu , k ile belirtilen LSB tarafndaki 8 bit ise 1 baytlk sabit
deeri tanmlar. Burada hedef (d) in kodlanmadna dikkat ediniz.
Tanm: 8-bitlik sabit k, W kaytsna yklenir.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
MOVLW h5A
Komuttan nce;
W= h9A olsun ;
Komuttan sonra;
W= h5A olur.
RETLW
Altprogramdan Wye bir say/sabit ykle ve geri dn.
Dizim:
[etiket] RETLW k
Operandlar:
0k255
lem:
(k) (W)
TOS (PC)
Etkilenen bayraklar:
Yok
Kodlama: 11 01xx kkkk kkkk
MSB tarafndaki 5 bit komut kodu , k ile belirtilen LSB tarafndaki 8 bit ise 1 baytlk sabit
deeri tanmlar. Burada hedef (d) in kodlanmadna dikkat ediniz.
25

Tanm:Altprogramdan Wye bir k say/sabiti ykleyerek dnmek iin kullanlr. Dn


TOS (ynn st- yani geri dn adresinin bulunduu hafza alan) deerinin PC (program
sayc) ye aktarlmasyla yaplr. Bu komut daha ok evrim tablolarnda kullanlr. lerde
detayl ilenecektir.
Hafza alan (Bayt):
1
Saat pals:
2
rnek:
RETLW h3F
Komuttan nce Wnin ierii ne olursa olsun komuttan sonra W=h3F yaplr ve
anaprograma geri dnlr.
SUBLW
Bir k say/sabitten Wyi kart.
Dizim:
[etiket] SUBLW k
Operandlar:
0k255
lem:
k (W) (W)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 11 110x kkkk kkkk
MSB tarafndaki 5 bit komut kodu , k ile belirtilen LSB tarafndaki 8 bit ise 1 baytlk sabit
deeri tanmlar. Burada hedef (d) in kodlanmadna dikkat ediniz.
Tanm:W kayts (2nin tmleyeni metodu ile) sekiz bitlik k yazmndan kartlr. Sonu,
W kayts ierisine yerletirilir.
Hafza alan (Bayt): 1
Saat pals:
1
rnek 1:
SUBLW h02
Komuttan nce;
W=1
C=?
Z=?
Komuttan sonra;
W=1
C = 1, sonu pozitif
Z=0
rnek 2:Komuttan nce;
W=2
C =?
Z=?
Komuttan sonra;
W=0
C = 1, sonu sfr
Z=1
rnek 3:Komuttan nce;
W=3
C =?
Z=?
Komuttan sonra;
W = FF
26

C = 0, sonu negatif
Z=1
XORLW
Bir k say/sabit ile Wyi mantksal EXORla.
Dizim:
[etiket] XORLW k
Operandlar:
0k255
lem:
(W) .XOR. k (W)
Etkilenen bayraklar:
Z
Kodlama: 11 1010 kkkk kkkk
MSB tarafndaki 5 bit komut kodu , k ile belirtilen LSB tarafndaki 8 bit ise 1 baytlk
sabit deeri tanmlar. Burada hedef (d) in kodlanmadna dikkat ediniz.
Tanm:W kaytsnn ierii, sekiz bitlik k yazm ile mantksal EXORlanr. EXOR
mantnda ayn bitlerde k 0, farkl bitlerde k 1 olur. Sonu W kayts iine
yerletirilir.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
XORLW hAF
Komuttan nce;
W = hB5 olsun.
Komuttan sonra;
hAF= b1010 1111
EXOR hB5= b1011 0101
b 0001 1010=h1A ve ;
W = h1A olur.

1.3.4. Kontrol Komutlar


Kontrol komutlar program akn belirleyen komutlardr. Altprogram arma, artsz
dallanma ve uyku moduna geme gibi olaylar bu komutlarla gerekleir. Bu komutlarda
hedef genelde bir adres deeridir. imdi bu komutlar grelim;
CALL
Altprogram ar .
Dizim:
[etiket] CALL k
Operandlar:
0k2047
lem:
(PC)+1 TOS,
PC: Program sayc (program counter)
TOS: Ynn st (Top Of Stack)
k (PC<10:0>),
(PCLATH<4:3>)(PC<12:11>)
Etkilenen bayraklar:
Yok
Kodlama: 10 0kkk kkkk kkkk
MSB tarafndaki 3 bit komut kodu , k ile belirtilen LSB tarafndaki 11 bit ise altprogram
balang adresini tanmlar. Burada hedef (d) in kodlanmadna dikkat ediniz.
27

Tanm: Altprogram arr. lk olarak, geri-dn adresi (PC+1) yna itilir. Onbir bitlik
altprogramn balang adresi , PC bitleri <10:0> ierisine yklenir. PCn st bitleri
PC<12:11> , PCLATHin <4:3> bitlerinden yklenir. CALL mutlaka RETURN komutu ile
birlikte kullanlmaldr. RETURN komutu ilerde anlatlacaktr.
Hafza alan (Bayt): 1
Saat pals:
2
rnek:
DON CALL SAYAC
DONun bir etiket olduuna ayn zamanda CALL komutunun u anki adresini tuttuuna
dikkat ediniz. SAYAC ise altprogramn balang adresini tutan etikettir. Bu durumda ;
Komuttan nce;
PC = {Adres DON}
Komuttan sonra;
PC = {Adres SAYAC}
TOS = {Adres DON} olur.
CLRWDT
Beki kpei zamanlaycsn (Watchdog Timer) sil.
Dizim:
[etiket] CLRWDT
Operandlar:
Yok
lem:
00h WDT
0 WDT n-lcs
1 T0
1 PD
Etkilenen bayraklar:T0 ,PD
Kodlama:

00

0000

0110

0100

Tanm: CLRWDT komutu, Watchdog Timer reset eder. Bu komut ayn zamanda
WDTnin n blcsnn de resetlenmesine sebep olur. T0 ve PD durum bitleri de set edilir.
Bu bitlerin ilevleri iin status kayts konusuna baknz.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
CLRWDT
Komuttan nce;
WDT sayac = ?
Komuttan sonra;
WDT sayac = h00
WDT n-blc deeri = 0
T0 =1
PD = 1
GOTO
Adrese git
Dizim:
[etiket] GOTO k
Operandlar:
0k2047
28

lem:
k (PC<10:0>)
(PCLATH <4:3>) (PC<12:11>)
Etkilenen bayraklar:
Yok
Kodlama: 10 1kkk kkkk kkkk
Tanm: GOTO, koulsuz bir sapma komutudur. K nn belirledii 11-bitlik adres PC
bitlerinin <10:0> ierisine yklenir. PCn st bitleri (PC<12:11>) , PCLATH<4:3>ten
yklenir ve oluan adrese saplr.
Hafza alan (Bayt): 1
Saat pals:
2
rnek:
GOTO SAYAC
Komuttan sonra;
PC = {Adres SAYAC} olur.
RETFIE
Kesme altprogramndan geri dn.
Dizim:
[etiket] RETFIE
Operandlar:
Yok
lem:
TOS (PC) ; 1 GIE TOS da geri dn adresi bulunur.
Etkilenen bayraklar:
Yok
Kodlama:
00 0000 0000 1001
Tanm: Kesme altprogramndan geri dnmek iin kullanlr. Ynda (TOS) bulunan geri
dn adresi PCye yklenir. INTCON kesme kaytsnn GIE (Genel kesme yetkisi) biti set
edilir. Bu, iki dnglk bir komuttur.
Hafza alan (Bayt): 1
Saat pals:
2
rnek:

RETFIE

Komuttan sonra;
PC = TOS
GIE = 1
RETURN
Altprogramdan geri dn.
Dizim:
[etiket] RETURN
Operandlar:
Yok
lem:
TOS (PC)
Etkilenen bayraklar:
Yok
Kodlama:
00 0000 0000 0000
Tanm: Altprogramdan geri dnmeyi salar. Ynda (TOS) bulunan geri dn adresi
PCye yklenir. Bu, iki dnglk bir komuttur.
Hafza alan (Bayt): 1
Saat pals:
2
rnek:
RETURN
Komuttan sonra;
PC= TOS; yani PCye geri dn adresi yklenir ve ana programa yklenir.
29

SLEEP
Uyku (Standby) moduna gir.
Dizim:
[etiket] SLEEP
Operandlar:
Yok
lem:
00h WDT
0 WDT n-blcs
1 TO
0 PD
Etkilenen bayraklar: TO , PD
Kodlama:
00 0000

0110

0011

Tanm: G yok durum biti PD (Power down) sfrlanr. Sre am TO (Time-out)


durum biti ise 1e kurulur. Watchdog zamanlaycs ve n-blcs silinir. Osilatrn
durmasyla ilemci SLEEP moduna girer. PIC bu durumda ok az g harcar. Arada bir
kontrol gereken gvenlik ilerinde, ya da belirli srelerde yaplacak iler bittiinde PIC
uyuma moduna sokulur.
Hafza alan (Bayt): 1
Saat pals:
1
rnek:
SLEEP

1.4. Say ve Karakterlerin Yazl


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.

1.4.1. Heksadesimal Saylar


Heksadesimal saylar 0x, 0 veya h harfleriyle balamaldr. rnein, STATUS
kaytsna 03 adresini atamak iin aada gsterilen yazl biimleri kullanlabilir.
STATUS

EQU
EQU
EQU

0x03
03h
h 03

MOVLW komutu ile W kayts ierisine yklenecek olan FF heksadesimal sabiti ise
aadaki gibi yazlabilir;
MOVLW 0 x FF
veya
MOVLW h FF
Biz hexadesimal format h xx eklinde kullanacaz.

1.4.2. Binary Saylar


Binary saylar b harfi ile balamaldr. rnein 00001010 binary saysn W kayts
ierisine yklemek iin aadaki gibi yazlmaldr.
MOVLW

b00001010
30

1.4.3. Desimal Saylar


Desimal saylarn bana d harfi konularak trnak ierisinde yazlrlar. rnein 15
desimal says W kayts ierisine yklemek iin aadaki gibi yazlmaldr.
MOVLW

d 15

1.4.4. ASCII karakterler


Genellikle RETLW komutu ile birlikte kullanlan ASCII karakterler trnak ierisine
alnarak aadaki gibi yazlrlar.
RETLW
RETLW

A
T

1.5. Mikrodenetleyici in Gerekli Yazlmn Kullanm


Mikrodenetleyici programlamak iin (Burada PIC16F84) yazlm ve donanm
ihtiyalarmz olacaktr. Yazlm olarak;

ASM uzantl dosyamz yazabilmek iin bir metin editr,

ASM dosyamz makine koduna (HEX dosyas) evirecek derleyici program

HEX dosyasn bir programlama kartna ykleyecek PIC programlayc yazlm


ihtiyac olacaktr.

Metin editr olarak Windowsun kendi NOTPAD programn veya MPLAP


ierisindeki kendi editrn de kullanabilirsiniz. Resim 1.1de MPLAPnin ASM editr
arabirimini gryorsunuz.

31

Resim 1.1: MPLAPnin ASM editr arabirimi

Donanm olarak ise IBM uyumlu bir bilgisayara ve kullandmz mikrodenetleyiciyi


programlayabilecek programlayc karta ihtiya vardr. Bu kartn yaplmas ve
programlaycnn nasl kullanacan mikroilemci ve mikrodenetleyiciler modlnde
grdnzden bu modlde bunlardan bahsetmeyeceiz. Biz burada sadece derleme
(compiler) olaynn nasl yapldna deineceiz.

1.5.1. Programn Kurulmas


Microchip firmasnn MPASM derleyicisi ile yazm olduumuz assembly
dosyalarmz , mikrodenetleyiciye yklemek zere .HEX uzantl dosyalara evirebiliriz. Bu
program Microchip firmasnn internet sitesinden cretsiz datt MPLAB programnn
iinde bulabilirsiniz. Bu program yaklak 30MBlk dosyadr. (MPLAB710.zip)
Gelen zip dosyasn an ve iindeki Setup.exe dosyasn altrarak ykleyin. Resim
1.2de kurulumu gryorsunuz.

32

Resim 1.2: MPLAB kurulumu

Ykleme ilemi bittikten sonra, balat mensnden porgramlarm iinde MPASM


programn atnzda karnza Resim 1.3deki pencere gelecek .

Resim 1.3: MPASM derleyici program arayz

33

1.5.2. Menlerin Tantlmas


imdi de MPASM derleyicisinin ayarlarn grelim;

Source File Name ile derlenecek ASM uzantl kaynak dosya seilir. Bunun
iin Browse tklanarak kaynak dosya seilir.

Radix radyo dmelerinden hexadecimal seilmelidir.

Warning level , ikaz seviyesini ayarlayabileceimiz bir ayar grubudur.


Programn hangi durumlarda ikaz vereceini belirler.Tercihen Warning and
errors seilmelidir.

Hex Output, derleme sonucunda oluacak hex dosyasnn k formatn


belirler. Tercihen INHX8M seilmelidir.

Generated Files, derleme sonucunda hangi dosyalarn oluturulacan


belirler. Tercihen Error File ve List Fileseilmelidir. Bir problem durumunda
bu dosyalar incelenerek hatalar giderilebilir.

Macro expansions, makro uzantlarnn kabul edilip/edilmemesini belirleyen


bu ayar tercihen default olmaldr.

Processor, ile kullanlacak mikrodenetleyici seilir.

Tab size , sekme uzunluu deeri 8 seilebilir.

Extra Option, zel parametreler girmek iin kullanlr. rnein buraya


/LTEST.LST yazarsanz derleme sonucunda HEX dosyas ile beraber
TEST.LST dosyasnn da olutuunu grrsnz.

1.5.3. Mikrodenetleyici ve Dier Donanmlarn Seilmesi


Mikrodenetleyiciler ile bir proje tasarlanrken seilecek mikrodenetleyicinin seimi
ok nemlidir. Mikrodenetleyicilerin komut saylar, kullandklar kaytlar, bellek deerleri
vs. birbirinden farkldr. Bu yzden ncelikle kullanlacak mikrodenetleyici seilmelidir.
Bunun iin mikrodenetleyicilerin kataloglar incelenmelidir. Microchip firmasnn sitesinde
retilen tm mikrodenetleyicilerin (PIC serisi) kataloglarna ulaabilirsiniz. Biz bu modlde
daha ok PIC16F84 mikrodenetleyicisinin programlanmasn greceiz. Yalnz
Analog/dijital dnm konusunda, PIC16F84 denetleyicisinin dhil ADC modl
olmadndan, bunun iin 16F877 denetleyicisini kullanacaz. ekil 1.3 ve ekil 1.4te en
ok kullanlan denetleyicilerin baz teknik verileri verilmitir.

34

ekil 1.3: 18 pinli baz denetleyicilerin teknik verileri

ekil 1.4: 40 pinli baz denetleyicilerin teknik verileri

Yaplacak ie, kullanlan denetleyicinin teknik zelliklerine gre kullanlacak dier


donanmlar (ADC /DAC dntrcler, LCD display, sensrler vs. ) seilmelidir.

1.6. Programlama Teknii


Program yazarken, 4 temel kural izlenmelidir.

Yazlm hakknda daima aklamalar yaplmaldr. Yoksa kanlmaz olarak geri


dnldnde, neyin, neden yapldn anlamak ok zor olur.

Programlar iin evrensel bir (Header) balk kullanlmaldr. Bu, i ykn


hafifletir, tutarl bir format yaratr ve hatrlanmas gereken deiken saysn
azaltr.
35

Tm alt rutinler tek blgede toplanmaldr. PICle alrken bu evrensel blge,


her bellek sayfasnn stnde (00-FFh) olmaldr.

Yazlmn ne yapmasn gerektiini hatrlamak iin, bir ak diyagram


izilmelidir.

1.6.1. Bank Deitirme


STATUS kaytsnn 5. ve 6. bitleri (RP0,RP1) bank deitirmek iin kullanlr. Bank
deitirme ilemi o banktaki kaytlar kullanabilmek iin yaplr. ekil 1.5te PIC16F84
iin Bank 0 ve Bank 1de bulunan kaytlar ve bellekteki adresleri grlmektedir.
PIC16F84n sadece 2 bank bulunduundan bank seimi sadece STATUS kaytsnn 5.
biti ( RP0) ile yaplr.Yani 6. bitin deeri daima 0 olmaldr. Zaten PIC enerjilendii anda
power-On-Reset (POR) gerekleir ve bu iki bit 0 olur. Bu bitler ayn zamanda MCLR
ucundan yaplan hric reset ve WDT reseti durumunda da 0 olur. Bank geileri iin
aadaki komut ikilisi kullanlr (PIC16F84 iin);
BSF
BCF

STATUS,5 ; Bank 1 seilir.


STATUS,5 ; Bank 0 seilir.

36

ekil 1.5: PIC 16F84 denetleyicisinin bank ve kayt yaps

37

1.6.2. Portlarn Giri ve k Olarak Ynlendirilmesi


Portlara bal bulunan bir giri/k elemann kullanabilmek iin portlarn giri/k
olarak ynlendirilmesi gerekir. PIC16F84de A portunu TRISA kayts, B portunu TRISB
kayts ynlendirir.
PortA/PortBnin hangi bitleri giri yaplacaksa TRISA/TRISB kaytlarnn o bite
karlk gelen bitleri 1 yaplr. Ayn ekilde k yaplacaksa TRISA/TRISB kaytlarnn
o bite karlk gelen bitleri 0 yaplr.
rnek 1: Port A nn ilk 4 bitini giri 5.bitini k olarak kuralm (PIC16F84de A portu 5
bitlik bir porttur.)
CLRF
BSF
MOVLW
MOVWF

PORTA
; PORTAy sfrla.
STATUS, 5 ; Bank 1e ge. nk TRISA bank1de.
h0F
; TRISAya yklemek iin deer hazrla.
TRISA
; TRISAya deeri ykle. TRISA<0:3> giri, TRISA<4> k iin
;ayarland.
BCF STATUS, 5 ; Bank 0e ge. nk PORTA bank1de ve I/O ilemleri; portlardan
gerekleir.

rnek 2: PortAnn tamam giri, Port Bnin tamamn k olarak kuralm (PIC16F84de
B portu 8 bitlik bir porttur.)
CLRF
BSF
CLRF

PORTB
; PORTBy sfrla.
STATUS, RP0 ; Bank1e ge.nk TRISA ve TRISB bank1de.
TRISB
; TRISBya deeri ykle.TRISB<0:7> 0olacandan tm bitler
; k olarak kuruldu.
MOVLW hFF
; A portunun tamam
MOVWF TRISA
; giri olarak ayarland.
BCF
STATUS, 5 ; Bank 0e ge. nk PORTA ve PORTB bank 1de ve I/O
ilemleri; portlardan gerekleir.

1.6.3. Her Adm in Ak Diyagram izme


Ak diyagram oluturma ve sembolleri konusunda ak diyagramlar hakknda bilgi
verilmiti. Burada Port ynlendirmesine bir rnek olarak, PICe enerji verildiinde
PORTBnin 1.bitine bal ledi yakacak programn ak diyagramn ve her sembolde
ilenecek assembly komutlar yazalm;

38

Bala
;=====yak.asm====

LIST=16F84

LIST P=16F84

PortByi sil.

CLRF
BSF

Bank1e ge.

PORTB
STATUS, RP0

PORTByi k olarak
ynlendir.

CLRF TRISB

Bank 0a ge.

BCF STATUS, 5

PORTB<1>=1 yap.
BSF PORTB,1
END

son

Ak diyagram izmenin amac karmak ve/veya ok uzun programlar yazarken


ilem sras oluturup dnme kolayl salamasdr.

1.6.4. Konfigrasyon Bitlerinin Yazlmas


Konfigrasyon bitleri, PICe gerilim uygulandnda PICin uymas gereken koullar
belirlemede kullanlr. Bu bitler aadaki koullar belirlemede kullanlr:

Osilatr tipini ,

WDTin aktif/pasif yapma,

PORi (Power-On-Reset) aktif/pasif yapma,

Kod korumay aktif/pasif yapma.

39

Bu konfigrasyon bitlerini program ierinde yazabileceimiz


programlaycnn kendi programndaki fuses penceresinden de yapabiliriz.

gibi

PIC

imdi konfigrasyon bitlerini belirleyen tanmlar grelim;

_CP_ ON / OFF
; kod koruma var/yok.
_WDT_ ON / OFF ; WDT aktif /pasif.
_ PWRT_ ON / OFF ; Power-On-Reset var/yok.
_RC_OSC
; RC osilatr kullanlyor.
_LP_OSC
; Alak g (low power) osilatr kullanlyor.
_XT_OSC
; Kristal osilatr kullanlyor.
_HS_OSC
; Yksek hzl (High speed) osilatr kullanlyor.

Konfigrasyon cmlesini yazarken unlara dikkat etmeliyiz:

CONFIG ifadesinin yanndaki alt izgi ift olmaldr ___.

Daha sonra yazlan ifadeler tek alt izgili olmaldr _.

Konfigrasyonlar arasnda bir boluk olmaldr.

Boluktan sonra & iareti kullanlmaldr.

& iaretinden sonra ara vermeden konfigrasyon yazlr.

Aadaki rnei inceleyiniz;

__CONFIG _CP_OFF & _WDT_ON &_ PWRT_ON & _RC_OSC


Bu ifadede ;
_CP_OFF
; kod koruma yok.
_WDT_ON
; WDT aktif
_ PWRT_ON
; Power-On-Reset var.
_RC_OSC
; RC osilatr kullanlyor.

1.6.5. W Kaytsnn Kullanm


PIC16F84'n RAM bellek alannda grlmeyen bir de W registeri vardr. W register
bir akmlatrdr. W registerine direkt olarak ulamabiliriz. Ancak dier registerlerin
ierisindeki verileri aktarrken erimek mmkndr. Bir PIC'te gerekleen tm aritmetik
ilemler ve atama ilemleri iin W register kullanlmak zorunluluu vardr. rnein iki
register iindeki veriler toplanmak istendiinde, ilk olarak registerlerden birinin ierii W
registere aktarlr (ekil 1.6). Daha sonra da dier registerin ierisindeki veri W registeri
ierisindekiyle toplanr. Bu registerin kullanm zellikleri yine programlama konusunda
detayl olarak ele alnacaktr.

Port A

W
kayts

Port B

ekil 1.6: W kayts kullanm

40

1.6.6. Bitleri Test Ederek lem Yapma


Bir kayt ierisindeki herhangi bir bit BTFSS veya BTFSC komutlar ile test
edilebilir. Mikrodenetleyici komutlar konusunda ilenen bu komutlarn ilevini ksaca
hatrlarsak ; BTFSS komutu belirtilen f kaytsndaki biti test eder, eer 1 ise bir sonraki
komuta geer.
BTFSC komutu ise belirtilen f kaytsndaki biti test eder , eer 0 ise bir sonraki
komuta geer.
imdi bir rnekle bu komutun kullanmn grelim;
rnek : A portunun 0.bitine bal olan bir butona basldnda B portuna bal 8 ledi
yakacak program yazalm.
zm: nce programn ak diyagramn karalm;
Bala
PIC16F84

Tant.

PortByi sil.

PORTA giri
PORTB k

PORTA<0>=1
mi?

Tekrar test et.


hayr

evet
PORTBdeki ledleri yak.

son
ekil 1.7: rnek progamn algoritmas

41

imdi de programmz yazalm;


;====led.asm======
LIST
P=16F84
INCLUDE P16F84.INC

tanmlamalarn yapld
blm

CLRF
PORTB
BSF
STATUS,5
A portu giri, B portu k olarak CLRF
TRISB
ayarland.
MOVLW hFF
MOVWF TRISA
BCF
STATUS,5
TEST_PORTA
BTFSS
PORTA,0
; PORTA<0>=1 mi?
GOTO
TEST_PORTA
; hayr.Tekrar test et.
MOVLW hFF
; evet. W=hff ykle.
MOVWF PORTB
; B portundaki tm ledleri yak.
SON
PIC16F84de duraklama komutu olmad
GOTO
SON
iin burada yazlm ile sonsuz dng
END
oluturup PICi aldatyoruz. RESET
olana kadar PIC sonsuz dngde kalr.

1.6.7. Saya Kullanarak Dng Dzenlemek


Baz ilemlerin nceden belirlenen sayda tekrarlanmas gerekebilir. Bu durumda
programc tarafndan belirlenen bir kayt saya olarak kullanabilir. Saya u ekilde
hazrlanr:

nce saya ierisine tekrar saysn belirleyen say yklenir.

Her ilem tekrarnda saya 1 azaltlr. (DECFSZ komutu kullanlr.)

Saya 0 olduunda program ya bitirilir ya da baka bir yere dallandrlr.

imdi de bu olaylarn ak diyagramn izelim.


Ak diyagramnn komut listesi;
TEKRAR
DECFSZ
SAYAC,F
GOTO
TEKRAR
BSF
PORTB,1

SAYAC=SAYAC-1

SAYAC=0
m?

Tekrar test et.


hayr

evet
PORTBnin 1.bitini 1 yap.
ekil 1.8: DECFSZ komutu ile yaplan sayacn algoritmas

42

Bilindii gibi DECFSZ komutu , kaytdan 1 kart eer sonu 0 ise bir sonraki
komuta dallan ilevini yapmaktadr. Detayl bilgi iin mikrodenetleyici komutlar
konusunda DECFSZ komutunu inceleyiniz.
Zaman geciktirme dngleri konusunda saya kullanarak yaplan dngleri
inceleyiniz.

1.6.8. Karlatrma Yaparak Dng Dzenlemek


SUBLW, SUBWF, INCF, DECF komutlar kullanlarak da sayalar dzenlenebilir.
Bu komutlar hakknda detayl bilgi iin mikrodenetleyici komutlar konusuna baknz.
Saya u ekilde hazrlanr:

nce saya ierisi sfrlanr.

Her ilem tekrarnda saya 1 arttrlr. (INCF komutu kullanlr.)

Saya istenilen sayya ulatnda STATUS kaytsnn Z biti BTFSS komutu


ile sorgulanarak program ya bitirilir yada baka bir yere dallandrlr.

imdi de bu olaylarn ak diyagramn izelim.


Ak diyagramnn asm kodlar
SAYAC=h00
CLRF
SAYAC
TEKRAR
INCF
MOVLW
SUBWF
BTFSS
GOTO
BSF

SAYAC=SAYAC+1

We tekrar saysn ykle.

W=SAYAC-W

hayr
STATUS<2>=0
m?

Tekrar test et.

evet
PORTBnin 1.bitini 1 yap.

ekil 1.9: SUBWF komutu ile yaplan sayacn algoritmas

43

SAYAC,F
dtekrar says
SAYAC,W
STATUS,Z
TEKRAR
PORTB,1

Yukardaki program parasnda SAYAC deeri Wye yklenen tekrar saysna


ulatnda SUBWF SAYAC,W komut satr icrasnda STATUS kaytsnn Z bayra 1
olacaktr, ve B portunun 1.biti 1 yaplarak buna bal led yanacaktr. Burada dikkat edilmesi
gereken konu, GOTO TEKRAR komut satr, Wye yklenen dtekrar saysndan 1 eksik
sayda icra edilecektir.Yani MOVLW d10 yapldysa, GOTO TEKRAR komut satr 9 defa
icra edilecektir.

1.6.9. Status Kayts


STATUS kayts ALU`nun aritmetik statsn, RESET statsn ve veri belleinin
kme seim bitlerini iermektedir.
Herhangi bir kaytla olduu gibi, STATUS kayd herhangi bir komut iin hedef
olabilir. Eer STATUS kayd, Z, DC, veya C bitini etkileyen komutun hedefiyse, o zaman bu
bit zerine yazma etkin deildir.Yani sadece okunabilir durumdadr. Bu bitler aygtn
lojik durumuna gre uygun olarak kurulmu veya silinmitir. Daha tesinde, TO ve PD
bitleri sadece okunabilir bitlerdir.
rnein, CLRF STATUS komutu yukar biti temizleyerek Z bitini kuracaktr. Bu
STATUS kaydndan 000u uluu olarak kacaktr. (u=deimeyen). STATUS kaydn
deitirmek iin yalnzca BCF, BSF, SWAPF ve MOVWF kullanlmaktadr. nk bu
komutlar hibir stats bitini etkilememektedir.
STATUS kayd, Z, DC ve C bitini etkileyen komutun hedefi olduu durumlarda, bu
bitin zerine yazma etkinsizdir.
kartmalarda, C ve DC bitleri dn alan bitler olarak almaktadr.
Aada STATUS kaytsnn her bir bitinin hangi durumlarda 1 ve 0 olaca
gsterilmitir;

ekil 1.10: Status kayd (O3h, 83h adresi)

R= Okunabilir Bit
W= Yazlabilir Bit
N= POR resetindeki deer.
-n=Bilinmez 1 ya da 0 olabilir.

44

rnein 2.bit olan Z biti R/W-n ifadesiyle, hem okunabilir hem de yazlabilir bir bit
olduunu, ayrca g reseti durumunda lojik seviyesi iin bir ey sylenemeyecei anlamn
tar. Ama 3.bit in g reseti durumundaki lojik deeri 1dir.
Bit 7:

IRP: Bank kmesi seim biti (dolayl adresleme iin kullanlr) .


0: Bank 0,1 (h00-hff)
1:Bank 2,3 (h100-h1ff)

IRP biti PIC16F87X serisinde


mikrodenetleyicilerde kullanlmaz.
Bit 6-5:

kullanlmaktadr.

16CXX,

16F8X

serisi

RP1:RPO: Bank seim bitleri (dorudan adresleme iin kullanlr)


00:Bank 0
01:Bank 1
10:Bank 2
11:Bank 3

PIC16F84te sadece bank 0 ve bank1 bulunduu iin bank seimini sadece RP0 bitini
kullanarak yaparz. Her bir bank 128 bayttr.
Bit 4:TO: Zaman aral biti (Time-out)
1= PICe enerji verildiinde, CLRWDT komutuyla veya SLEEPden g
verme durumuna geirildiinde 1 olur.
0= WDT sre am ilemi gereklemi ise 0 olur.
Bit 3:PD: G kesme biti (Power down).
1= PICe enerji verildiinde veya CLRWDT komutu ile olur.
0= SLEEP komutunun yrtlmesi ile olur.
Bit 2 :Z: Sfr Bit (zero).
1= Aritmetik veya mantksal ilemin sonucu sfrdr.
0= Aritmetik veya mantksal ilemin sonucu sfr deildir.
Bit 1:DC: Dijit elde (Digit Carry/Borrow) biti. (ADDWF ve ADDLW komutlar iin)
1= Alt 4 bitin (1.dijit) 4. bitinde tama meydana geldiinde olur.
0= Alt 4 bitin (1.dijit) 4. bitinde tama meydana gelmediinde olur.
Bit 0 :C: Elde (Digit Carry/Borrow) biti. (ADDWF ve ADDLW komutlar iin)
1= Meydana gelen sonucun en nemli bitinden (7.bit) tama olursa 1 olur.
0= Meydana gelen sonucun en nemli bitinden (7.bit) tama olmazsa 0 olur.
RRF, RLF komutlarn yrtlmesi srasnda , bu bit, kaynak kaydndaki dk veya yksek
deerlikli ( MSB veya LSB) biti ile yklenmektedir.

45

1.6.10. Zaman Geciktirme Dngleri


Bu konumuzda dng gecikmelerinde geen zamann hesaplanmasn ve dier
komutlar reneceiz. Bunun iin ncelikle dhil komut saykl kavramn bilmemiz
gerekir.
PIC16F84e uygulanan 4 Mhzlik osilatr sinyalinin 1 komutu icras iin 4 pals
gerekir. Dolaysyla PICin 1 komutu icra etmek iin kulland frekans, dardan uygulanan
sinyalin ne der ve 1 Mhz olur. te Fosc/4 deerindeki bu deere dhil komut saykl
denir. 1Mhzlik sinyalin dhil komut peryotu da 1S olacaktr. Baz komutlarn icras ise 2
komut saykllk zaman alr. Bu komutlar tablo 1.1de verilmitir
Komut
GOTO
RETURN
CALL
PCye veri yazan komutlar
DECFSZ

Komut saykl
2
2
2
2
1 (Kayt iindeki deer 0 deilse)
2 (Kayt iindeki deer 0 ise)
2
2
1 (Kayt iindeki deer 0 deilse)
2 (Kayt iindeki deer 0 ise)
1 (Kayt iindeki deer 0 deilse)
2 (Kayt iindeki deer 0 ise)
1 (Kayt iindeki deer 1 deilse)
2 (Kayt iindeki deer 1 ise)

RETLW
RETFIE
INCFSZ
BTFSC
BTFSS

Tablo 1.1: 2 komut saykl eken komutlar

imdi de tek dng ile gecikme altprogramnn ak diyagramn izip programn


yazalm ve maksimum ne kadarlk bir zaman gecikmesi yaptn hesaplayalm.
SAYAC=hFF=d255

SAYAC=SAYAC-1
SAYAC=0
m?

hayr

Bu yol GOTO
komutu ile
icra edilir ve
254 defa
tekrarlanr.
Sonuta 2x254
tane komut
saykl eker.

evet
RETURN
ekil 1.11: Tek dnglk zaman gecikmesi algoritmas

46

GECIKME MOVLW
SAY

hFF
MOVWF
DECFSZ
GOTO
RETURN

;1 saykl
SAYAC
;1 saykl
SAYAC,F ;1x254+2 saykl
SAY
;2x254 saykl
;2 saykl
TOPLAM: 766 komut saykl.

Yukardaki hesaplamada dikkat edilmesi gereken nokta DECFSZ komutunun


icrasdr. SAYAC deeri 0 olana kadar bu komut bir komut saykl ekecektir. SAYAC
deeri 0 olunca ise 2 komut saykl eker. SAYAC sfr olana kadar 254 defa komut icra
edileceinden toplamda bu komut (1x254+2=256) komut saykl ekecektir.
Ayn ekilde GOTO komutu icras 2 saykl alr (Tablo 1.1). Bu komut proram sonuna
kadar 254 defa icra edileceinden toplam 2x254=508 komut saykl eker.
GECIKME alt program sonunda ise toplan 766 komut saykl sresi kadar bir
gecikme olur . imdi de bu kadar saykln 4 Mhz kristal osilatr kullanan bir PICC16F84de
ne kadar srelik bir gecikme yaptn bulalm.
Osilatr frekans 4Mhz ise , dhil komut frekans F=Fosc/4 olduundan 1 Mhz
olacaktr. O hlde bir komut saykl sresi ;
t=1/f=1/1Mhz= 1S olacaktr.
GECIKME altprogramnn sresi ise 1S x766 = 766S = 0.766mS olacaktr. Bu sre
tek dng ile yaplabilecek maksimum zaman gecikmesidir.
Uygulamalarda tek dng ile yeteri kadar gecikme yaplamad iin, en az iki dng
yapmak gerekmektedir.
Aada iki dng ile yaplm gecikme altprogramnn ak diyagram grlmektedir.

47

GECIKME
SAYAC1=hFF=d255

SAYAC2= hFF

SAYAC2=SAYAC2-1

SAYAC2=0
m?

hayr

evet
SAYAC1=SAYAC1-1

hayr

SAYAC1=0
m?
evet
RETURN

ekil 1.12:ift dnglk zaman gecikmesi algoritmas

imdi de GECKME altprogramnn assembly programn yazp geen zaman


bulalm.

M
N

ekil 1.13: ift dnglk zaman gecikmesi assembly program

48

Burada SAYAC1 deerine M, SAYAC2 deerine N dersek toplam saykl saysn


yaklak TSS=3MN+5M+4 kadar buluruz. Buradaki 4 deeri rahatlkla ihmal edilebilir.
Hatta ok hassas bir zamandan bahsedilmiyorsa 5M deeri de ihmal edilebilir. Eer M=N
alnrsa TSS=3M2
olarak sadeletirebiliriz. Maksimum zaman gecikmesi yapmak iin
sayalara d225 yklenmitir. Yani M=N=255dir. Bu durumda toplam komut saykl says
yaklak olarak;
TSS=3x255x255+5x255+4=196.354 kar.
Eer

sadelemi

forml

kullanrsak;

TSS=3M2=3x2552=195.075 kar.
Bu da 4 Mhz frekans iin 196.35 mS = 0.196 saniye yaklak 0.2 saniye eder. Bu
deer 2 dng ile yapabileceimiz maksimum gecikme sresidir. imdide istenen bir
gecikme deeri iin sayalara yklenecek deerin nasl bulunacan grelim. rnein 2
dngl bir gecikme ile 40mSlik bir zaman gecikmesi yapmak iin kaytlara hangi
deerleri ykleyeceimizi bulalm.Kolaylk bakmndan saya deerlerinin ayn say ile
ykleyelim.(PIC 16F84in osc frekans 4Mhz kabul edilecek.) zm: 40mS=40000S
yapar. Bu da dhil komut saykl sresi 1S olan bir PIC iin TSS=40000yapar. TSS=3M2 ,
40000=3M2 ve M=(4000/3=116 desimal deeri bulunur.
Eer PICimizin osc frekans 10Mhz olsayd , ne deiirdi?
ok ey. Bu durumda; dhil komut saykl f=Fosc/4=2,5 Mhz ve t= 1 / f =0.4 S
olurdu. 40mS=40000S olduundan bu srenin gemesi iin gereken saykl says
TSS=40000/0.4=100000
saykl
gerekir.
TSS=3M2 ,
100000=3M2 ve M=(100000/3=183 desimal deeri bulunur.
Bu bilgiler nda Min bulunmas iin genel bir forml yazarsak;

bulunur. Burada; GS=Gecikme sresi(S), sresi


Fosc=PICin osilatr frekans (Mhz)
M=Saya deerini (desimal) ifade eder.
Yukardaki rnekleri bir bu formlle zerek sonularn ayn olduunu grnz.
imdi de 3 dngl bir gecikme altprogram yazalm. Fosc=4 Mhz iin toplam 50.070.529
mikrosaniye ve yaklak 50 saniye eder.

49

ekil 1.14: ift dnglk zaman gecikmesi assembly program

Demek ki 3'l dng ile yeteri kadar zaman elde edebiliriz.


Eer 4'l bir dng dzenlersek o zaman saatlerce srecek bir zaman gecikmesi elde
etmek mmkn olur. imdi de bir tablo izerek drtl bir dng hlinde ne olabileceini
grelim.

ekil 1.15. ift dnglk zaman gecikmesi assembly program

Sonu olarak 12.767 bir gecikme elde edilir. Bu da 212 dakika ve yaklak 3.5 saatlik
bir gecikme olur. Bu yaklak 255 X50 saniye demektir, burada ilk 255 yerine decimal 100
girerseniz 100X50 saniye yani 5000 saniye elde edersiniz bu da 83 dakika eder. 1 girilirse
50 sn. 10 girilirse 8.3 dakika elde edilir. lk 255 says yerine 1den 255'e kadar deien
rakamlar girildiinde 4l bir dng iin 50 sn.den 3.5 saate kadar uzanan bir zaman
50

gecikmesi elde edilir. Tek ve iki dnddeki gibi istenirse 3l ve 4l dnglerde formlize
edilebilir. 5li bir dng hlinde ise bu zaman bir ay (900 saat) civarndadr.

1.6.11. Altprogramlar
Program ierisinde defalarca tekrar edilmesi gereken komut dizilerini srekli yazmak
yerine, bu komut dizilerini altprogramlar eklinde yazarak hem bellek alanndan tasarruf
edilmi olur, hem de program sadelik kazanr. Altprogramlar ana programdan CALL komutu
ile arlr ve altprogramn almas bittikten sonra ana programa RETURN komutu ile
dn salanr.
Altprogramlar iki eittir:

CALL komutu ile arlan altprogramlar,

Kesme altprogramlar. Kesme altprogramlar , Kesme alt programlarnn


dzenlenmesi konusunda ilendiinden burada ilenmemitir.

Bir altprogramn almasn ematik olarak ekil 1.16' daki gibi gsterebiliriz;
Ana program

PC=>TOS (Yn) ve
SAYAC adresi=>PC gerekleir.

CALL SAYAC

SAYAC

Altprogram

TOS (Yn) =>PC yaplarak


Ana programa dnlr.

RETURN
ekil 1.16: Altprogram kurgusu

51

Yukardaki ekilde unlar dikkatinizi ekmi olmaldr:

CALL komutundan sonra altprogramn isimini yazarak altprogram arrz.


Burada altprogrammzn ismi SAYACtr.

Altprogram arldnda program sayc (PC) kaytsnn ierii (yani geri


dn adresi) yna (TOS) itilir ve SAYAC altprogram adresi PCye yazlr.
Bu olay mikrodenetleyici tarafndan otomatik olarak gerekleir. Bylece
altprograma dallanma gereklemi olur.

Altprogramn altrlmas bittikten sonra RETURN komutu ile ana programa


dn salanr. nk RETURN komutu, daha nce yna itilmi geri dn
adresini PCye tekrar ykler.

Ayrca altprogram iinde baka altprogramlar da arlabilir.

Sradaki Bit pozisyonlarn sola kaydrma konumuzda led.asm programnda bir


gecikme altprogram kullanlmtr. nceleyiniz.

1.6.12. Bit Kaydrma


1.6.12.1. Bit Pozisyonlarn Sola Kaydrma
Bit pozisyonlarn sola kaydrmak iin RLF komutunu kullanrz. Bu komut belirlenen
bir kayt ierisindeki bitleri her defasnda 1 bit sola kaydrr. Detayl bilgi iin
mikrodenetleyici komutlar konusunda RLF komutunu inceleyiniz.
imdi bu komutun kullanmna bir rnek verelim.
rnek: PORTBye bal 8 led srayla periyodik olarak yansn. yle ki; PORTB<0>dan
PORTB<7>ya doru tek bit srayla yansn ve 7. bitten sonra ilem baa dnsn.

52

;====led.asm======
LIST
INCLUDE
SAYAC1
SAYAC2

P=16F84
P16F84.INC
EQU
h0C
EQU
h0D
CLRF
PORTB
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5

tanmlamalarn yapld
blm
B portu k olarak
ayarland.

BASLA
BCF
MOVLW
MOVWF

STATUS,0
h01
PORTB

;Elde biti sfrland.


;ilk deeri ykle ve
;B portundan kar.

Ana
Program

TEKRAR
CALL
RLF
BTFSS
GOTO
GOTO

GECIKME
PORTB,F
STATUS,0
TEKRAR
BASLA

;2.deer iin bekle.


;sola kaydr
;C=1 mi?
;hayr.TEKRARa dallan.
;evet.BASLAya dallan.

GECIKME
MOVLW
MOVWF SAYAC1

hFF

DON1
MOVLW
MOVWF

hFF
SAYAC2

GECKME altprogram.

DON2
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END

SAYAC2,F
DON2
SAYAC1,F
DON1

1.6.12.2. Bit Pozisyonlarn Saa Kaydrma


Bit pozisyonlarn saa kaydrmak iin RRF komutunu kullanrz. Bu komut belirlenen
bir kayt ierisindeki bitleri her defasnda 1 bit saa kaydrr. Detayl bilgi iin
mikrodenetleyici komutlar konusunda RRF komutunu inceleyiniz.
imdi bu komutun kullanmna bir rnek verelim.
rnek: PORTBye bal 8 led kara imek dzeninde yansn. Yani PORTB<0>dan
PORTB<7>ya doru tek bit sola doru srayla yansn ve 7. bitten sonra ilem saa doru
dnsn ve bu ilemler periyodik olarak tekrarlansn.
53

;====karaimek.asm======
LIST
P=16F84
INCLUDE P16F84.INC
SAYAC1 EQU h0C
tanmlamalarn yapld
SAYAC2 EQU h0D
blm
CLRF
PORTB
BSF
STATUS,5
B portu k olarak
CLRF
TRISB
ayarland.
BCF
STATUS,5
BCF
STATUS,0
;Elde biti sfrland.
MOVLW h01
;ilk deeri ykle ve
MOVWF PORTB
;B portundan kar.
SOL
CALL
GECIKME ;Yeni deer iin bekle.
RLF
PORTB,F ;sola kaydr
BTFSS
PORTB,7 ;PORB<7>=1 mi?
GOTO
SOL
;hayr.SOLa dallan.
SAG
CALL
RRF
BTFSS
GOTO
GOTO

GECIKME
PORTB,F
PORTB,0
SAG
SOL

MOVLW
MOVWF

hFF
SAYAC1

;evet. Yeni deer iin bekle.


; saa kaydr.
; PORB<0>=1 mi?
;hayr.SAGa dallan.
;evet.SOLa dallan,

GECIKME
DON1
MOVLW hFF
MOVWF SAYAC2

GECKME altprogram.

DON2
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END

SAYAC2,F
DON2
SAYAC1,F
DON1

1.6.12.3. Bit Pozisyonlarn Tersleme


COMF komutu bir kayt ierisindeki bitleri tersine evirir (complement) . Detayl
bilgi iin mikrodenetleyici komutlar konusunda COMF komutunu inceleyiniz. Bu komut,
2li tmleme yntemiyle karma ilemi yaparken , baz mantksal devre zmlerine ,k
ovlar tasarlarken iimize yarayabilir.
imdi bu komutun kullanmna bir rnek verelim.
54

rnek: PORTBye bal 8 ledleri dnml olarak ilk nce ilk 4 bitindeki, sonrada son 4
bitindeki ledleri yakan program yazalm.
;====TERSLE.asm======
LIST
P=16F84
INCLUDE
P16F84.INC
SAYAC1
EQU h0C
tanmlamalarn yapld
SAYAC2
EQU h0D
blm
CLRF PORTB
BSF STATUS,5
B portu k olarak
CLRF TRISB
ayarland.
BCF
STATUS,5
MOVLW
h0F
;ilk deeri ykle ve
MOVWF
PORTB
;B portundan kar.
TERSLE
CALL GECIKME
;Yeni deer iin bekle.
COMF PORTB,F
;PORTByi tersle.
GOTO TERSLE
; saa kaydr.
GECIKME
MOVLW
hFF
MOVWF SAYAC1
DON1
MOVLW
hFF
MOVWF
SAYAC2
GECIKME altprogram.
DON2
DECFSZ SAYAC2,F
GOTO
DON2
DECFSZ SAYAC1,F
GOTO
DON1
RETURN
END

1.6.13. Mantksal lemler


Mantksal ilem komutlar bir kaytdaki istenilen bitleri deitirmek (maskelemek
veya kurmak), test etmek amacyla kullanlrlar. Bu komutlar ANDLW, ANDWF, IORLW,
IORWF, XORLW, XORWF ve COMF komutlardr. Detayl bilgi iin mikrodenetleyici
komutlar konusunda bu komutlar inceleyiniz. imdi bu komutlar grelim.
1.6.13.1. stenen Bitleri Sfrlamak
ANDLW komutu W kayt ierisinde bulunan istenilen
(maskelemek) iin kullanlr. Burada sonu daima W kaytsndadr.

bitleri

sfrlamak

rnein W kaytsndaki 3. ve 4. bitlerini dier bitleri deitirmeden sfrlamak


(meskelemek) istiyoruz Bunun iin kullanacamz komut satr;
55

ANDLW

hE7 ; olmaldr.

Burada sabiti hE7 olarak kurduk. nk;


W =b(xxxx xxxx)
AND hE7=b1110 0111
W=bxxx0 0xxx olur.
Sonuta W kaytsndaki 3. ve 4. bitlerini dier bitleri deitirmeden sfrlam
(meskelemek) olduk. Burada dikkat edilmesi gereken , maskelenecek bitler 0, dier bitler 1
ile ANDlenecek ekilde say seilmelidir (hE7).
ANDWF komutu da maskelemek iin kullanlabilir. Ancak bu komutta maskeleme
iin kullanlan deer sabit bir saydan deil, bir dosya kaytsndan (f) alnr ve sonu deer
hedef (d) bitine gre W yada F kaytsndadr.
evrim tablolarnn kullanm yerleri ve kullanm konusunda
programnda da bu komutun kullanmn grebilirsiniz.

verilen hex.asm

1.6.13.2. stenen Bitleri Bire evirmek


IORLW komutu W kayt ierisinde bulunan istenilen bitleri 1 yapmak (kurmak)
iin kullanlr. Burada sonu daima W kaytsndadr.
rnein W kaytsndaki 3. ve 4. bitlerini dier bitleri deitirmeden 1 yapmak
istiyoruz Bunun iin kullanacamz komut satr;
IORLW

h18 ; olmaldr.

Burada sabiti h18 olarak kurduk. nk;


W =b(xxxx xxxx)
OR
h18=b0001 1000
W=bxxx1 1xxx olur.
Sonuta W kaytsndaki 3. ve 4. bitlerini dier bitleri deitirmeden sfrlam
(meskelemek) olduk. Burada dikkat edilmesi gereken , kurulacak bitler 1, dier bitler 0 ile
ORlanacak ekilde say seilmelidir (h18).
IORWF komutu da maskelemek iin kullanlabilir. Ancak bu komutta maskeleme iin
kullanlan deer sabit bir saydan deil, bir dosya kaytsndan (f) alnr ve sonu deer
hedef (d) bitine gre W ya da F kaytsndadr.

56

1.6.13.3. stenen Bitleri Terslemek


XORLW komutu W kayt ierisinde bulunan istenilen
kullanlr. Burada sonu daima W kaytsndadr.

bitleri

terslemek iin

rnein W kaytsndaki deer h4Colsun. Wnin 3. ve 4. bitlerini dier bitleri


deitirmeden terslemek istiyoruz . Bunun iin kullanacamz komut satr;
XORLW

h18 ; olmaldr.

Burada sabiti h18 olarak kurduk. nk;


W = b0100 1100
XOR
h18=b0001 1000
W= b0101 0100 olur.
Sonuta W kaytsndaki 3. ve 4. bitlerini dier bitleri deitirmeden sfrlam
(meskelemek) olduk. Burada dikkat edilmesi gereken , terslenecek bitler 1, dier bitler 0 ile
XORlanacak ekilde say seilmelidir (h18).
XORWF komutu da maskelemek iin kullanlabilir. Ancak bu komutta maskeleme
iin kullanlan deer sabit bir saydan deil, bir dosya kaytsndan (f) alnr ve sonu deer
hedef (d) bitine gre W ya da F kaytsndadr.
1.6.13.4. Bir Baytlk ki Veriyi Karlatrmak
W kaytsnn, bir baytlk sabit bir veriyle ayn olup olmadn test etmek iin
XORLW komutu kullanlabilir.Benzer ekilde W kaytsnn, bir dosya kayts ierii ile
ayn olup olmadn test etmek iin de XORWF komutu kullanlabilir. Eer veriler eit ise
STATUS kaytsndaki sfr bayra (Z) 1 olur. te bu biti test ederek verilerin ayn olup
olmadn kontrol edebiliriz.
rnein B portundaki deerin h4C olup olmadn test etmek iin gereken
program parasn yazalm. Bunun iin kullanacamz komut satr;
MOVLW h4C
;W= h4C
TEST_PORTB
XORWF
PORTB,F ;PORTB=(PORTB XOR W)
BTFSS
STATUS,2 ; STATUS<2>=1 mi? (Z=1 mi?)
GOTO
TEST_PORTB; hayr.Tekrar test et.
DEVAM
;evet. Sonraki komutlar
MOV .
.
.
XORLW ve XORWF komutlaryla sadece verilerin eit olup olmad testini
yapabiliriz.
Bu ilem iin istenirse SUBLW ve SUBWF komutlar da kullanlabilir. Ayrca bu iki
komutla , byk / kk m? Testleride yaplabilir.
57

1.6.13.5. Bir Baytlk Veriyi Sfr ile Karlatrmak


W kaytsnn ieriindeki 1 baytlk verinin 0 olup olmadn anlamak iin , h00
sabit verisiyle ORlanr. Bu ilem iin IORLW komutu kullanlr.
Bir kaytnn (f) ieriindeki 1 baytlk verinin 0 olup olmadn anlamak iin , nce
W kaytsna h00 sabit verisi yklenir. Sonrada W ile F kaytlar ORlanr. Bu ilem iin
ise IORWF komutu kullanlr.
ORlama sonucunda sonu 0 ise STATUSun 2.biti (Z) 1 , deilse 0 olacaktr. Bu biti
kontrol ederek program ynlendirebiliriz.
rnein W kaytsnn 0 olup olmadn aadaki gibi test edebiliriz;
TEST_W
DEVAM

IORLW
BTFSS
GOTO
.

h00
;W=(W OR h00)
STATUS,Z ;Sonu sfr m? (Z=1 mi?)
TEST_W ;hayr.Tekrar kontrol et.
;evet.Programn devam..

1.6.14. Aritmetik lemler


PICler baz aritmetik ilemlerin yaplmasna da izin verirler. Biz bu modlde 8 ve 16
bitlik saylarn toplanmas ve karlmasn grceiz. Bunun iin ADDLW, ADDWF,
SUBLW, SUBWF komutlarn kullanacamzdan, mikrodenetleyici komutlar konusunda
ilgili komutlar incelemeniz yerinde olacaktr.
1.6.14.1. 8 Bit Toplama
8 bitlik ( 1 Bayt ) lik iki veri iki ekilde toplanabilir;

W kayts ile sabit bir say toplanr, sonu W kaytsndadr (ADDLW).

W kayts ile dosya kayts (f) toplanr, sonu hedef kaytsndadr


(ADDWF).

ki saynn toplamndan elde edilen sonu hFFden bykse tama olaca iin
STATUS kaytsndaki elde bayra (C) 1 olacaktr. imdi her iki toplamaya da rnekler
verelim.
rnek: nce W kaytsna h25 deerini ykleyip daha sonrada W ile
sabitini toplayan program parasn yaznz. Elde bayrann durumunu bulunuz.
MOVLW
ADDLW
C=0da kalr.

h25
hA3

hA3

;W= h25
;W= h25+ hA3= hC8 olur. Tama olmandan

58

rnek: nce W kaytsna h7A deerini, TOPLAM kaytsna da hDD ykleyip daha
sonrada W ile TOPLAM kaytlarn toplayan ve sonucu TOPLAM kaytsna kaydeden
program parasn yaznz. Elde bayrann durumunu bulunuz.
MOVLW
hDD
;W= hDD
MOVWF
TOPLAM ;TOPLAM= hDD
MOVLW
h7A
;W= h7A
ADDWF
TOPLAM,1 ;TOPLAM= hDD+ h7A= h57
Tama olduundan C=1 olur.Sonucun C bitinin dikkate alnmamas durumunda
yanl olacana dikkat ediniz.
1.6.14.2. 16 Bit Toplama
Kaytlar 1 baytlk olduklar iin, 16 bitlik (2 bayt) verilerin toplanmas iin 2 kayt
kullanmak gerekecektir. 2 baytlk veri 0-65535 onlu saylar ifade edebilecektir. Bu ilemi
yapmak iin;

Toplanacak iki saynn nce alt (LSB) baytlar yoplanr.

Eer alt baytlarn toplamndan elde oluursa st baytlardan birine 1 eklenir.

st baytlar toplanr.

Bunu bir rnekte grelim;


rnek: A= h33A5 ve B= h8EDE saylarn toplayan sonucu C adnda bir kaytya atan
program parasn yazalm.
zm: A= 33 A5
B= 8E
DE
AH AL
BH BL
eklinde saylar yklemek iin 4 kayt
gerekiyor. Ayrca sonucun bulunaca kayt da CH ve CL olarak 2 tane olmaldr.
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
TOPLA MOVF
ADDWF
MOVWF
BTFSC
INCF
MOVF
ADDWF
MOVWF

hA5
AL
h33
AH
hDE
BL
h8E
BH
AL,0
BL,0
CL
STATUS,0
BH,1
AH,0
BH,0
CH

;W= hA5
;AL= hA5
; W= h33
; AH= h33
; W= hDE
; BL= hDE
; W= h8E
; BH= h8E
;W=AL

saylar kaytlara ykleniyor.

;W=BL+W(AL)
;Sonucun dk bayt
;C=0 mi?
;Hayr(C=1) BH 1 arttr.
;Evet. W=AH
;W=BH+W(AH)
;Sonucun yksek bayt.
59

1.6.14.3. 8 Bit karma


8 bitlik ( 1 Bayt ) lik iki veri iki ekilde karlabilir;

Sabit bir saydan W kayts karlr, sonu W kaytsndadr (SUBLW).

Dosya kayts (f) ieriinden W kayts karlr , sonu hedef


kaytsndadr (SUBWF).

karma ilemi yaplrken karlacak saynn tersi alnp 1 eklenir (2li


tmleyeni alnr). Daha sonra her iki say da toplanr. PIC bu olay otomatik
olarak kendi yapar. Bu nedenle kk saydan byk say karlrsa C=0
(sonu negatif) , byk saydan kk say karlrsa veya saylar eit ise C=1
(sonu pozitif) olur. Yalnz kk saydan byk say karlrsa gerek sonucu
bulmak iin , sonucun 2li tmleyeni alnmaldr. Bu programcnn
sorumluluundadr. imdi her iki karmaya da rnekler verelim;

rnek: nce W kaytsna h25 deerini ykleyip daha sonrada hA3sabitinden Wyi
karan program parasn yaznz. Elde bayrann durumunu bulunuz.
MOVLW
SUBLW

h25
hA3

;W= h25
;W= hA3-h25 = h7E olur.

hA3= b1010 0011


1010 0011
SUB h25= b0010 0101>>>2li tmleyeni>> 1101 1011
1 0111 1110
W = h7E ve C=1 Sonu pozitif olur.
rnek: nce W kaytsna h40 deerini, FARK kaytsna da h25 ykleyip daha
sonrada FARK kaytsndan Wyi karan ve sonucu FARK kaytsna yazan program
parasn yaznz. Elde bayrann durumunu bulunuz.
MOVLW
MOVWF
MOVLW
SUBWF

h40
FARK
h35
FARK,1

;W= h40
;FARK= h40
;W= h35
;FARK= h40- h35= hF5 ;Yukardaki rnekteki
;gibi PIC 2li tmleyen ile
;hF0sonucunu
buldu.
;(C=0 sonu negatif).

60

1.6.14.4. 16 Bit karma


Kaytlar 1 baytlk olduklar iin, 16 bitlik (2 bayt) verilerin karlmas iin 2 kayt
kullanmak gerekecektir. 2 baytlk veri 0-65535 onlu saylar ifade edebilecektir. Bu ilemi
yapmak iin;

karlacak iki saynn nce alt (LSB) baytlar birbirinden karlr.

Eer alt baytlarn karlmasndan bor varsa (C=0) , st baytlardan birisinden 1


karlr.

st baytlar birbirinden karlr.

Bunu bir rnekte grelim;


rnek: A= h33A5 ve B= h8EDE saylarn karan (B-A) sonucu C adnda bir kaytya
atan program parasn yazalm.
zm: A= 33 A5

B= 8E

DE

AH AL
BH BL
eklinde saylar yklemek iin 4 kayt gerekiyor.
Ayrca Sonucun bulunaca kayt da CH ve CL olarak 2 tane olmaldr.
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CIKAR MOVF
SUBWF
MOVWF
BTFSS
DECF
MOVF
SUBWF
MOVWF

hA5
AL
h33
AH
hDE
BL
h8E
BH
AL,0
BL,0
CL
STATUS,0
BH,1
AH,0
BH,0
CH

;W= hA5
;AL= hA5
; W= h33
; AH= h33
saylar kaytlara ykleniyor.
; W= hDE
; BL= hDE
; W= h8E
; BH= h8E
;W=AL
;W=BL-W(AL)
;Sonucun dk bayt
;C=1 mi?
;Hayr (C=0) BH 1 Azalt.
;Evet. W=AH
;W=BH-W(AH)
;Sonucun yksek bayt.

1.6.15. evrim Tablolar


1.6.15.1. evrim Tablolar
evrim tablolar sral deer alma ilemleri gereken yerlerde kullanlr. Bu ekilde bir
kodu baka bir koda evirebiliriz. rnein B portuna baladmz 7 segment display
zarinde hexadesimal karakterleri grmek istiyoruz. evrim tablosunda hexadesimal koda
karlk gelen uygun kodu B portuna gndermemiz gerekir. Ya da bir adm motorunu belirli
bir ekilde dndrmek iin porta balanm step motoruna sral ikili deerleri gndermemiz
gerekir. Bu tip durumlarda evrim tablolarndan faydalanlr.
61

1.6.15.2. evrim Tablolarnn Kullanm Yerleri ve Kullanm


evrim tablolarnn kullanm iin PCn (program counter) yapsnn iyice
anlalmasnda fayda olacaktr. Program sayac (PC), 13 bit geniliindedir. Dk byte PCL
registeri , okunabilir ve yazlabilir bir kayt olup bellein h'02 adresinde yer alr. PCnin
yksek byte , PCLATH registerinden gelir ve direkt olarak okunamaz ya da yazlamaz.
PCLATH (PC latch high) registeri PC<12:8> iin bir tutma registeridir ve PICe gerilim
uygulandnda (power on reset) tm bitleri 0dr. PC yeni bir deerle yklendii zaman
PCLATHn ierii program sayacnn stteki bytena transfer edilir. Bu olay PCLye
yazlmda, CALL veya GOTO esnasnda olur. PCnin yksek bitleri PCLATHdan
yklenmitir. Bu olaylar ekil 1.17 ve ekil 1.18de gsterilmitir.

ekil 1.17: Hedefi PCL kayts olan komutlarn PCyi yklemesi

ekil 1.18: GOTO ve CALL komutlarnn PCyi yklemesi

GOTO ve CALL komutlaryla kullanlan 11 bitlik adreslemeler 2KBlk program


bellei bulunan PIClerde (16FCxxx ve16Fxx) herhangi bir adrese eriim iin yeterlidir
(211=2KB). 1KB bellei olanlarda (16F84) ise 10 bit yeterlidir (210=1KB).
evrim tablolarnn kullanm iin ayrca RETLW komutunun da iyice anlalmas
gerekir. Bu komut RETURN komutu gibi anaprograma dn salar. Tek fark dn
esnasnda W kaytsna bir sabit say ykler.
imdi de bir rnek ile evrim tablolarnn nasl kullanldn grelim;
rnek: B portunun ularna bal 7 sagment display in 0-F arasnda saydran program
yaznz.
62

zm: ncelikle Hexadesimal koddan 7 sagment display koduna dnm tablosunu


karmalyz;
Hexadesimal say
7 segmentte grlecek
7 segment
7 segment kodu
Say
ularndaki veri
00
0
00111111
3F
01
1
00000110
06
02
2
01011011
5B
03
3
01001111
4F
04
4
01100110
66
05
5
01101101
6D
06
6
01111101
7D
07
7
00000111
07
08
8
01111111
7F
09
9
01101111
6F
0A
A
01110111
77
0B
B
01111100
7C
0C
C
00111001
39
0D
D
01011110
5E
0E
E
01111001
79
0F
F
01110001
71
Nokta
.
10000000
80
imdi de program yazalm. Programn tablodan deer alma ve gecikme
altprogramna dallan blmnde u olaylar gerekleir;
AND komut satrndaki ifade ile Wnin st 4 biti maskelendi. Dolaysyla SAYAC
deeri hF=15 deerini geemez [0-15] aras sayar. Ve her sayda tablodan bir deer alp , B
portuna bal 7 segment displayde gstererek GECKME altprogramna dallanr.
;====hex.asm======
LIST
P=16F84
INCLUDE P16F84.INC
SAYAC1 EQU
h0C
SAYAC2 EQU
h0D
SAYAC
EQU
h0E
CLRF PORTB
BSF STATUS,5
CLRF TRISB
BCF
STATUS,5
MOVLW
h00
MOVWF SAYAC

tanmlamalarn yapld
blm
B portu k olarak
ayarland.
SAYAC sfrland.

63

TEKRAR
MOVF
ANDLW
CALL
MOVWF
INCF
CALL
GOTO

SAYAC,W
b00001111
HEX_7SEGMENT
PORTB
SAYAC,F
GECIKME
TEKRAR

HEX_7SEGMENT
ADDWF PCL,F
RETLW h3F
RETLW h06
RETLW h5B
RETLW h4F
RETLW h66
RETLW h6D
RETLW h7D
RETLW h07
RETLW h7F
RETLW h6F
RETLW h77
RETLW h7C
RETLW h39
RETLW h5E
RETLW h79
RETLW h71
GECIKME
MOVLW
MOVWF
DON1
MOVLW
MOVWF
DON2
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END

tablodan deer al ve
gecikme altprogramna
dallan.

;PCL= W(SAYAC)
;0
;1
;2
;3
;4
;5
;6
;7
hexadesimalden 7 segment
;8
displaye dnm tablosu.
;9
;A
;B
;C
;D
;E
;F
hFF
SAYAC1
hFF
SAYAC2
SAYAC2,F
DON2
SAYAC1,F
DON1

64

GECKME altprogram.

1.6.16. Kesmeler
Mikrodenetleyicilerle yeni almaya balayanlar kesme (interrupt) kelimesini
duymalarna ramen, kullanmlarnn zor olduu dncesiyle programlar iersinde
kullanmaktan ekinirler. Oysa renilmesi ve uygulamas pek de zor olmayan kesme
altprogramlar kullanarak , program ierisinde kullanlacak komut says azaltlabilir ve bir
ok mantksal karklklar nlenebilir.
1.6.16.1. Kesme Nedir?
Kesme ilemini gnlk hayattan bir rnek vererek aklayalm; mesela yemek
yiyorsunuz ve telefon ald.Ne yaparsnz? Yemek yemeyi bir sre iin brakr, telefona
bakar sonra dnp yemek yemeye devam edersiniz . te gnlk hayatta karlatnz bir
kesme. Asl iiniz yemek yeme olay iken, ihtiyatan (telefon almas) dolay asl iinizi
brakp, dier bir ii yaptnz (telefona bakma) ve geri dnp asl iinizde kaldnz yerden
devam ettiniz.
Mikrodenetleyicilerdeki kesme olay yukardaki rnee olduka benzerdir. Kesme,
mikrodenetleyicilerin herhangi bir kesme kaynandan gelen sinyal nedeniyle almakta
olan program brakmas ve nceden hazrlanan kesme altprogramn altrmas olaydr.
Altprogramn almas bittikten sonra ana program kald yerden itibaren tekrar
almasna devam eder. ekil 1.19u inceleyiniz.

Ana program
PC=>TOS(Yn) ve
Kesme vektr (h004)=>PC gerekleir.

Kesme_altprogram

Altprogram
TOS(Yn) =>PC yaplarak
Ana programa dnlr.
RETFIE
ekil 1.19: Kesme altprogram kurgusu

65

1.6.16.2. INTCON Kayts (Kaydedicisi)


INTCON register, btn kesme kaynaklar iin olan eitli yetkilendirici bitleri
ieren, okunabilir ve de yazlabilir trde bir registerdr.
Aada PIC16F8X mikrodenetleyicisi iin INTCON kaytsnn her bir bitinin hangi
durumlarda 1 ve 0 olaca gsterilmitir;
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0 R/Wx
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
bit7
bit0
R = Okunabilir bit.
W = Yazlabilir bit.
-n = G reseti (POR reset) durumundaki bit deeri.
bit 7:
GIE:Global Kesme biti yetkisi.
1=Tm kesmelere yetki verir.
0=Tm kesmeleri yetkisizletir.
bit 6:
EEIE:EEPROM bellee yazma ilemi tamamlama kesim yetki biti.
1= EEPROM yazma tamamlama kesmesine yetki verir.
0= EEPROM yazma tamamlama kesmesine yetkiyi kaldrr .
bit 5:

TOIE:TMR0 sayc tama (Overflow) kesmesi yetki biti.


1=TMR0 kesmesini yetkilendirir.
0=TMR0 kesmesine yetkiyi kaldrr.

bit 4:

INTE: RB0/INT hric kesmesi yetki biti.


1=RB0/INT kesmesine yetki verir.
0=RB0/INT kesmesine yetkiyi kaldrr.

bit 3:

RBIE: Port B (4,5,6ve 7. bitleri) deiiklik kesmesi yetki biti.


1= Port B deiiklik kesmesine yetki verir. Yani B portundaki
deiiklikler
kesme oluturur.
0= Port B deiiklik kesmesine yetkiyi kaldrr.

bit 2:

T0IF: TMR0 saycs tamas durum bayra.


1=TMR0 tamtr (yazlmn iinden silinmesi gerekiyor).
0=TMR0 tamamtr. Zaman am yok.
INTF: RB0/INT hric kesme durum bayra.
1=RB0/INT kesmesi meydana gelmitir.
0=RB0/INT kesmesi meydana gelmemitir.
RBIF: Port B deiiklik bayra.
1=RB7:RB4 pinlerinden en az bir tanesinin durumu deiti
(yazlm iinden silinmesi gerekiyor).
0=RB7:RB4 pinlerinden hi bir tanesinde durum deiiklii
yoktur.

bit 1:
bit 0:

66

1.6.16.3. Kesme Kaynaklar


Kesme kaynaklar mikrokontrolr ailesine bal olarak farkllk gsterir. Aada PIC
16F8X ailesi iin olabilecek kesme kaynaklar sralanmtr.

Hric (External) kesme: PIC16F84n RB0/INT ucundan gelen sinyal ile


oluur.

Hric

kesmelerin

kullanabilmesi

iin

2 ey

gereklidir; yazlm ve

donanm.Yazlm aracl ile B portunun RB0 ucu, dardan gelebilecek


kesmeyi alabilecek ekilde hazrlanmaldr. Bunun iin iki ilem yaplr;

RB0 ucu giri olarak ynlendirilmeli.


INTCON kayts ierisindeki ilgili bayrak (INTE bayra) kullanlarak
hric kesme ilemi iin yetkilendirilmeli.

Hric kesmenin kullanlmas iin bir de donanm gereksinimi vardr. Bu da RB0


ucundan kesme sinyalini verecek elektronik devredir.
Ayrca RB0 ucundan uygulanacak sinyalin kenar tetiklemesi nemlidir. OPTION
kaytsnn 6.biti kesmeyi yapacak sinyalin kenar tetiklemesini belirler. Eer bu bit 0 ise
kesme sinyalin den kenarnda , 1 ise ykselen kenarnda gerekleir.
Kesme altprogramn almas esnasnda gelebilecek yeni kesmeleri engellemek iin
INTCON kaytsndaki INTE biti 0 yaplarak hric kesme yetkisi kaldrlmaldr. Bununla
beraber bir hric kesme olursa INTCON kayts iindeki INTF 1 olur.Bu bayrak kesme
altprogram ierisinde tekrar 0 yaplmaldr. Aksi durumda tekrarlanan kesmelerle
karlalr.

TMR0 saycsnda oluan zaman am kesmesi; yani TMR0 saycsnn hff


den h00a gelmesi olaynda oluur. Bu konu ileride TMR0 saycs konusunda
ilenecektir.

B Portunun 4,5,6 veya 7. bitlerindeki lojik seviye deiiklii;

B portunun 4,5,6 ve 7.bitlerindeki lojik deiim INTCON kaytsnn RBIF


bayran 1 yapacaktr. Bu kesme INTCON kaytsnn RBIE biti ile aktif ya da
pasif yaplabilir.

B portundaki deiiklii alglamak iin bu portaki en son deer, RB4-RB7


ularndan okunan veri ile karlatrlr. Eski ve yeni okunan veri ORlanr.
Farkllk varsa RBIF bayra 1 olur.

B Portu kesmesi aadaki gibi silinebilir;

RBIE biti silinmek suretiyle,


B Portunu okuduktan sonra RBIF bitini silmek suretiyle.
67

EEPROM bellee yazma ileminin tamamlanmas; EEPROM veri yazma


zaman yaklak 10 ms kadardr. Yazma ilemi bittiinde EEIF bayra 1 olur
ve yazmann bittiini gsterir. EEIF bayra EECON1 kaytsnda bulunur.

Yukarda anlatlan kesme kaynaklar mant ekil 1.20de verilmitir.

ekil 1.20: PIC16F84n kesme kaynaklar ve bayraklar

1.6.16.4. Kesme Altprogramlarnn Dzenlenmesi


Bir kesme olaynn meydana gelmesi esnasnda INTCON kaytsnn GIE biti 0 olur.
Bu ilem kesme alt programnn almas esnasnda yeni bir kesmenin olmamas iin PIC
tarafndan otomatik olarak yaplr. Kesme altprogram almasn RETFIE komutu ile sona
erdirip ana programa dnld anda ise sonraki kesmelerin geerli olabilmesi iin tekrar
otomatik olarak 1 yaplr. Kesme ileminde meydana gelen olaylar ekil 1.21den
inceleyiniz.
Bir kesme meydana geldiinde kesme vektr (interrupt vector) denilen adres
gsterici PCye program belleinin h0004 adresini gsterir. Kesme altprogramn ilk
komutu ( genellikle GOTO ) buraya yazlmaldr.
Kesme kullanlmad zaman ana program, program belleinin h0000 adresinden
itibaren h0004 adresine doru problem karmadan alr. Eer kesme kullanlyorsa
programc tarafndan baka bir alma sras dzenlenmelidir. Bu dzen aadaki gibi
olabilir.
ORG
GOTO
ORG
GOTO

h000
BASLA
h004
KESME

;Reset vektr adresi.


;Ana program balangc.
;Kesme vektr adresi

68

BASLA
;Ana program komutlar
.
.
.

Ana program
buraya
yazlmaldr.

KESME
;kesme altprogram komutlar
Kesme alt program
.
buraya yazlmaldr.
.
RETFIE
;Ana programa dn.
1

INTCON

GIE
kesme

GIE
0

INTCON

PC= TOS
PC (program sayc) deeri yna itilir.
h004= PC
PC reset vektrne dallanr. Burada GOTO
komutu kesme alt programna dallanlr.

Kesme altprogram altrlr.


lgili kesme bayra kontrol edilir.

RETFIE komutu ile ana programa geilir.

INTCON

GIE

ekil 1.21: Kesme ileminde oluan olaylar

69

Bir kesme esnasnda sadece geri dnme PC deeri ynda saklanr. ounlukla ,
kullanclar bir kesme esnasnda anahtar register deerlerini saklamak isterler (rnein W
registeri ve STATUS registeri). Bu, yazlmda yerine getirilir.
rnek 1de STATUS ve W registerlerinin deerleri saklanm ve tekrar depolanmtr.
Kullanc tanml registerler W_TEMP ve STATUS_TEMP , W ve STATUS register deerleri iin geici depolama yerleridir.
rnek 1de aadakiler yaplmaktadr:

W registerini bir deikene (W =W_TEMP) ykle.

STATUS registerini bir deikene (STATUS=STATUS_TEMP) ykle

Kesme altprogramn altr .

STATUS registerini geri ykle (STATUS_TEMP= STATUS).

W registerini geri ykle (W_TEMP=W).

Kesme altprogramndan geri dn (RETFIE).

imdi bu ilemleri yapacak rneimizi yazalm.

rnek1: Kesme esnasnda W ve STATUS kayt deerlerini saklamak.


MOVWF W_TEMP
; W , TEMP registerine kopyalanr
SWAPF STATUS , W ; STATUS ieriini SWAPla ve Wye ykle.
MOVWF STATUS _TEMP
; STATUS ieriini STATUS_TEMP
;registerine ykle.
;
; Kesme altprogram
; buraya yazlmal.
SWAPF STATUS_TEMP , W

; STATUS_TEMP ieriini yeniden


;SWAPla ve Wye ykle.

MOVWF

STATUS

; Wyi STATUS Registerine ykle.

SWAPF

W_TEMP , F

; W_TEMP ieriini SWAPla sonucu


;W_TEMPe

SWAPF W_TEMP , W

tekrar ykle.

; W_TEMP ieriini SWAPla sonucu


;Wye tekrar

;ykle.

Yukardaki ilem iin neden MOVF komutunu kullanmadmz aklnza gelmi


olabilir. Kullanamayz, nk MOVF komutu, STATUS kaytsndaki Z bayran
deitireceinden, programda bu bayran kontrol ile yaplan ilemlerde hatalara neden
olacaktr.

70

rnek2: PIC16F84e enerji verildiinde A portundaki tm ledler snk iken B portunun


0.bitine bal (RB1) bir butuna basldnda A potuna bal ledler yansn. Daha hric kesme
ile (RB0/INT) ledler tekrar sndrlsn. Kesme, kesme sinyalinin den kenarnda
gereklesin.
zm: Problemdeki verilere gre aadaki algoritmay izebiliriz;
Bala

KESME

PIC16F84 tant.
PORTA k
PORTB giri

OPTION kaytsn kur.

PORTAdeki ledleri
sndr.

RETFIE

INTCON kaytsn kur.

PORTAy sfrla.

PORTB<1>=1
mi?

PORTAdeki 4 ledi yak.

son
ekil 1.22: rnek 2deki programn algoritmas

71

Tekrar test et.

imdi de asm programmz yazlm;


;====kesme.asm======
LIST
INCLUDE
ORG h000
GOTO BASLA
ORG h004
GOTO KESME
BASLA

P=16F84
P16F84.INC

BSF
STATUS,5
CLRF TRISA
MOVLW
hFF
MOVWF
TRISB
MOVLW
b10111111
MOVWF
OPTION_REG
BCF
STATUS,5
CLRF
PORTA
BCF
INTCON,1
BSF
INTCON,7
BSF
INTCON,4

tanmlamalarn yapld
blm

A portu k, B portu giri olarak


ayarland.
;den kenarda kesme pals ,
;gelecek ekilde OPTION_REGi kur.
;Bank0a ge.
;A portunu sfrla.
;INF bayran sil.
;Global kesmeyi etkinletir.
;Hric kesmeyi aktifletir.

TEST_PORTB
BTFSS
GOTO
MOVLW
MOVWF
GOTO
END

PORTB,0 ;PORTA<0>=1 mi?


TEST_PORTA
;hayr.Tekrar test et.
hFF
;evet. W=hff ykle.
PORTA
;A portundaki tm ledleri yak.
TEST_PORTB

KESME
BCF

INTCON,1
MOVLW h00
MOVWF PORTA

;INTF bayran sil.


;W=h00 ykle.
;A portundaki tm ledleri sndr.

RETFIE
END

1.6.17. Donanm Sayclar


Zaman geciktirme dngleri konusunda, port klarna gndereceimiz sinyaller
arasnda bir gecikme olmasn istediimiz zaman bunu yazlm (software) ile nasl
yapacamz grdk. Burada ise ayn ilemi donanm zamanlaycsn (hardware) kullanarak
nasl yapacamz greceiz. Bunun iin donanm zamanlaycsn (TMR0) kullanacaz. Bu
zamanlayc / sayclarn says kullanlan mikrokontrolre gre deimekle beraber, biz
genel olan TMR0n kullanmn greceiz.
72

1.6.17.1. Donanm Saycs ( zamanlaycs ) Nedir?


Peki donanm zamanlaycs ya da saycs nedir? Belli bir deerden (genelde h00)
balayp deeri yukar doru artan bir dosya kaytsdr. PICler iki tip zamanlaycya
sahiptir; ilki TMR0 ad verilen 8 bitlik bir saycdr. Bu RAM bellein h01 adresinde
bulunan zel bir kaytdr. Dieri de WDT (Watchdog timer) denilen bir zamanlaycdr.
WDT zamanlaycs ileriki konularda ilenecektir.
1.6.17.2. TMR0 Saycs ( zamanlaycs )
TMR0 saycs RAM bellein h01 adresinde bulunan zel bir kaytdr. TMR0
programlanabilen bir saycdr. Yani saymaya istenilen bir saydan balatlabilir ve herhangi
bir anda ierii silinebilir. Timer0 (TMR0) zamanlama/saycs aadaki zelliklere sahiptir:

8 bitlik zamanlama/sayc,

Okunabilirlik ve yazlabilirlik,

Programlanabilen frekans blme deeri zellii(prescaler),

Dhil ve hric saat pals seimi,

FFhdan 00ha derken tama zerinden kesme oluturma,

Hric saat iin den veya ykselen kenar seimine (edge select) sahiptir.

TMR0 saycsnn nemli zelliklerinden biri de ana program veya kesme


altprogramlar alrken sayma ilemini durdurmamasdr. Sayma ileminde FFhdan 00ha
geite oluan tama INTCON kaytsnn TOIF bayranda grlr ve bu bayrak 1 olur
(INTCON kayts konusuna bakabilirsiniz). stenirse bu bayrak test edilerek bir kesme
altprogram altrlabilir. imdi de TMR0 ve WDT zamanlayclarn kontrolnde kullanlan
OPTION kaytsn grelim.
1.6.17.3. Option Kayts
OPTION registeri, TMR0/WDT iin frekans blme iin gerekli bitleri bulunduran,
hric kesme sinyal tipini belirleyen, PORTB zerindeki zayf Pull-up direnlerini ayarlayan
eitli kontrol bitlerini ieren, TMR0 veya WDTyi seme bayra bulunduran, yazlabilen
ve de okunabilen tipte bir registerdir.
R/W-1
RBPU

R/W-1
INTEDG

R/W-1 R/W-1
T0CS
T0SE

R/W-1
PSA

R/W-1
PS2

bit7

R/W-1 R/W-1
PS1
PS0
bit0

ekil 1.23: Option kayts ierii

73

it 7:

bit 6:

RBPU:PORTB Pull-up direnleri yetki biti.


1=PORTB Pull-uplar pasif durumundadrlar (yetki vermeme).
0=PORTB Pull-uplar aktif durumundadrlar (yetki verme).
Pull-Up direnleri aktif yapldnda B portu pinleri 50K luk
direnlerle +Vccye balanr.
INTEDG:Hric kesme sinyali kenar seim biti.
1=RB0/INT pini sinyalin ykselen kenarnda kesme yapar.
0= RB0/INT pini sinyalin den kenarnda kesme yapar.

bit 5:

TOCS:TMR0 sinyal kayna seim biti.


1=RA4/T0CKI pini zerinden hric sinyal.
0=Dhil komut palsleri (CLKOUT).

bit 4:

T0SE: TMR0 sinyal kayna kenar seim biti.


1=RA4/T0CKI pini zerindeki sinyalin ykselen kenarnda.
0=RA4/T0CKI pini zerindeki sinyalin den kenarnda.

bit 3:

PSA: Frekans blc seim biti.


1= Frekans blc says ,WDTa tayin edilir.
0= Frekans blc says ,TMR0a tayin edilir.
PS2:PS0:n-lc oran seim bitleri

bit 2-0:

Bit 2-0 Deeri


TMR0 Oran
WDT Oran
000
1:2
1:1
001
1:4
1:2
010
1:8
011
1 : 16
1:8
100
1 : 32
1 : 16
101
1 : 64
1 : 32
110
1 : 128
1 : 64
111
1 : 256
1.6.17.4. TMR0 Saycsnn zellikleri

1:4

1 : 128

TMR0n almas ve zelliklerini anlamak iin ekil 1.24deki blok emay


incelemeniz faydal olacaktr.

ekil 1.24:TMR0 yaps

74

Sayc iindeki saynn artmas iin gerekli saat pals iki kaynaktan alnabilir:

Dhil komut sinyali (T0CS=0 durumu)


Hric saat palsi (T0CS=1 durumu). Bu durumda hric sinyal A portunun
3.bitinden (RA4) uygulanr. Hric sinyal PIC tarafndan saylmas gereken
bir sinyal de olabilir.
Sinyal kaynandan gelen sinyal direkt olarak TMR0 besleyebilecei gibi
frekans blc aracl ile de besleyebilir.

OPTION kaytsnn 0,1 ve 2.bitleri kullanarak 8 farkl frekans blme deeri


seilebilir. TMR0 saycsn tetikleyecek sinyal, frekans blc kullanlmadan
direkt olarak kullanlmak isteniyorsa , frekans blme deeri WDye atanr. Bu
ilem PSA biti ile gerekletirilebilir. Ayrca frekans blme oranlarnn TMR0
ve WDT iin farkl olduuna dikkat ediniz.

Frekans blme deerleri TMR0a atandnda ,TMR0a yazmak iin kullanlan


tm komutlar frekans blme deerini siler (CLRF , MOVWF, BSF.gibi).

Frekans blme deeri kullanlmadan, direkt olarak hric sinyal kullanlrsa,


dhil komut sinyali ile elemeyi (senkron) salamak iin 2 saykllk bir
gecikme salanr.

TMR0 saycsnda k sinyalleri iki ekilde oluur:

RAM bellein h01 adresindeki TMR0 kaytsnn okunmasyla,


Saycnn hffden h00a geiinde oluan tamadan dolay INTCON
kaytsnn T0IF bayrana 1 yazlmas durumunda.
Kaynak olarak hric sinyal seildiinde istenirse bu sinyaller saylabilir. Bu
durumda TMR0 sinyal sayc olarak kullanlm olur. Bu uygulama devir sayc,
rn saydrma gibi ilemler iin kullanlabilir.

Frekans blme deerleri, TMR0 veya WDT sayclarnn ka dhil komut


sayklnda bir defa bir st sayya geiini belirleyen orandr. rnein,

TMR0 oran 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 PICe hric bir
osilatrden saat pals (fosc)uygulamak gerekir. Bu frekeans PIC tarafndan 4e blnerek
OSC2 ucundan dar verilir. te bu sinyalin 1 saykl iin geen sre (peryodu), bir
komutun almas iin geen zamandr. Bu durumda ;

75

Fkomut= fosc / 4
Tkomut = 1 / Fkomut
TMR0 sayma aral zaman= Tkomut x ( TMR0 oran)-1
Kesme olay saynn hffden h00a geiinde olutuuna gre ve hff=256
olduundan ;
Kesme gecikmesi = TMR0 sayma aral zaman x 256 olur.
Btun bu formlleri tek formlde birletirirsek;
(256-TMR0 ilk deeri) x ( TMR0 oran)-1
Kesme gecikmesi =
S olur.
fosc / 4
Prescaler: Frekans blme says (2,4,8,,256)
TMR0 ilk deeri: TMR0a atanan ilk say. Eer deer atanmamsa 0dr .
Bu formlden, istenirse belli bir kesme sresi iin, TMR0a yklenecek say forml
de karlabilir. Bu durumda;
TMR0 ilk deeri = 256- [(Kesme gecikmesi x fosc ) / 4 x ( TMR0 oran)-1 ]
olur.
rnek 1: 4MHzlik kristal osilatr kullanan bir PICde, frekans blme deeri (prescaler)
b000 seilirse, kesmenin ne zaman olacan bulalm.
Frekans blme deeri (prescaler) b000 olduundan TMR0 oran olur.
Fkomut= fosc / 4 = 4Mhz / 4 = 1 Mhz
Tkomut = 1 / Fkomut = 1 / 1 Mhz = 1S
TMR0 sayma aral zaman= 1S x ( TMR0 oran)-1
TMR0 sayma aral zaman= 1S x ( 1 / 2 )-1 = 2 S ; yani her 2 Sde bir say
yukar doru artyor. Kesme olay saynn hffden h00a geiinde olutuuna gre ve
hff=256 olduundan ;
Kesme gecikmesi = TMR0 sayma aral zaman x 256
76

Kesme gecikmesi = 2 S x 256

= 512 Slik periyotlarla kesme olay

oluur.
Veya;

(256-TMR0 ilk deeri) x ( TMR0 oran)-1

Kesme gecikmesi =
fosc / 4
(256-0) x 2
Kesme gecikmesi =

= 512 S olur.
4 Mhz / 4

rnek 2: 4MHzlik kristal osilatr kullanan bir PICde, frekans blme deeri (prescaler)
b110 ise 1.28 mslik gecikme iin TMR0a hangi saynn atanmas gerekir?
1.28 ms =1280 S yapar ve (prescaler) b110 iin TMR0 oran =1 /128dir.
TMR0 ilk deeri = 256- [(Kesme gecikmesi x fosc ) / 4 x ( TMR0 oran)-1 ]
TMR0 ilk deeri = 256- [(1280 x 4Mhz ) / 4 x 128 ]
TMR0 ilk deeri = 246 desimal deeri bulunur.
Bunu hexadecimal formata dntrrsek hF6 olur.
TMR0 0dan deil de rneimizdeki gibi baka bir saydan balatlmak isteniyorsa ,
yaplmas gereken TMR0a MOVWF komutu ile o saynn yklenmesidir.

Prescalar deerini, TMR0 dan WDT a veya WDTdan TMR0 a atama


ilemi yaplrken, prescalarn sfrlanmas nedeniyle PICin almas esnasnda
istenmeyen

resetleri engellemek iin aadaki komut sras takip edilerek

prescalar tayininin Timer0dan WDTye deitirilmesi salanmaldr. Bu sra ,


WDT mmkn klnmad durumlara da takip edilmelidir. Prescalar WDTden
Timer0a deitirmek iin de verilen sra takip edilmelidir.

TMR0 dan WDT a Prescalar deeri atamak (TMR0WDT) iin aadaki


sra takip edilmelidir.

BCF
CLRF
BSF
CLRWDT
MOVLW
MOVWF
BCF

STATUS RP0
TMR0
STATUS, RP0
bxxxx1xxx
OPTION
STATUS, RP0

; Bank 0a ge.
; TMR0 ve prescaler silinir.
; Bank 1e ge.
; WDT silinir.
; Yeni prescaler WDT iin seilir.
; OPTION kaytsna yaz.
; Bank 0a ge.

77

WDTdan TMR0a prescalar deeri atamak (WDTTMR0) iin aadaki


sra takip edilmelidir.
CLRWDT
; WDT ve prescalar silinir.
BSF
STATUS, RP0
; Bank 1e ge.
MOVLW
bxxxx0xxx ;TMR0, yeni prescalar deeri ve saat kayna seilir.
MOVWF
OPTION
; OPTION kaytsna yaz.
BCF
STATUS, RP0 ; Bank 0a ge.

rnek: imdi de B portunun 1.bitinden kare dalga sinyal veren program yazalm. Sinyal
kayna olarak dhil sinyal kaynan kullanalm ve TMR0 orann 1 / 256 olacak ekilde
prescaler deerini ayarlayalm. k sinyali PICin RB1 bitine osilaskobun balanmasyla
izlenecektir.
ekil 1.26deki ak diyagramn inceleyiniz. Bu diyagramda;

TMR0 <6>=1 ifadesiyle TMR0n 6.biti 1 mi? Sorgusu yaplmtr.

GECIKME etiketi ile altprograma dallanlmtr. Burada Trke karakterlerinin


kullanlman hatrlayn.

Program iindeki

MOVLW

OPTION_REG komut satrlar ile

b11010111

ve

MOVWF

OPTION kayts aadaki gibi

ayarlanmtr;

PortB pull-up
direnleri
geersiz.
1 1 0 1 0 1
Option
kayts

Harici kesme
ykselen kenarda
Prescaler (111)
TMR0
oran(1/256)

1 1

Prescaler
TMR0'a
atanr.

TMR0 sinyal
kayna dhil
komut saykl.

TMR0'n say art harici


sinyalin den kenarnda.
( burada kullanlmyor)

ekil 1.25: Program iin OPTION kaytsnn kurulmas

78

TMRO kaytsnn tamam olunabilir veya bu rnekteki gibi sadece bir biti test
edilebilir. TMR0 <6>=1 olduunda ulalan say b0100 0000=64tr (onlu).
PICin 4 Mhzlik kristal osilatrle kullanlacan dnrsek GECKME
altprogramnn sresini aadaki gibi bulabiliriz;
Fkomut= fosc / 4 = 4Mhz / 4 = 1 Mhz
Tkomut = 1 / Fkomut = 1 / 1 Mhz = 1S
TMR0 sayma aral zaman= 1S x ( TMR0 oran)-1
TMR0 sayma aral zaman= 1S x ( 1/256 )-1 =256S
TMR0 64e kadar sayacandan;
GECKME = 256S x 64 =16384 S = 16.384 ms olur.
Bu durumda PortB<1> pininden kacak kare dalga sinyalin frekans;
F= 1/t = 1/16.384 ms = 61 Hz olur.

Bala
WDT sil.
PIC16F84 tant
PortB=k
GECIKME

PortByi sil.

1 seviyesini olutur
hayr

GECIKME

TMR0
<6>=1
evet

0 seviyesini olutur
Dn (RETURN)
GECIKME
ekil 1.26: Programn ak diyagram

79

imdi de algoritmay programa dkelim;


LIST P=16F84
INCLUDE P16F84.INC
BSF
STATUS,5
CLRF
TRISB
CLRWDT
MOVLW
b11010111
MOVWF
BCF
CLRF
PALS
BSF
CALL
BCF
CALL
GOTO
GECKME CLRF
TEST_BIT BTFSS
GOTO
RETURN
END

;Bank1e ge.
;B portunun tm k.
; WDT ve prescalar sil.
;TMR0, yeni prescalar deerini ve sinyal
;kaynan se ve
OPTION_REG ;OPTION kaytsna yaz.
STATUS,5 ;Bank0a ge.
PORTB
;B portunun tm ularn 0 yap.
PORTB,1 ;PortB 1.bit lojik 1 yap.
GECIKME ;GECIKME altprogramn ar.
PORTB,1 ; PortB 1.bit lojik 0 yap.
GECKME ;GECIKME altprogramn ar.
PALS
TMR0
TMR0,6
TEST_BIT

1.6.17.5. WDT Zamanlaycs


PIC donanm ierisinde bulunan ikinci bir zamanlaycdr. Trke karl beki
kpeidir. Mikrodenetleyici ierisinde bulunan programn bir anlamda bekiliini yapt
iin bu ad verilmitir. Peki bu ii nasl yapmaktadr? PICin nceden belirlenen srede
yapmas planlanan bir ii zamannda yapmadysa, yani dng kontrolden kp da
kilitlendiyse , WDT devreye girer ve PICi resetler.
ekil 1.27de WDT zamanlaycs blok diyagram grlmektedir. imdi de WDTn
birka zelliinden bahsedelim;

Watchdog Timer, baka hric bileenler talep etmeyen serbest alan on-chip
RC osilatrdr. Bu osilatrn WDTa salad nominal zaman am sresi 18
msdir. Prescaler deeri artrlarak bu deer 2-3 Sye kadar karlabilir.

WDT RC osilatr , OSC1/CLKIN pininin RC osilatrnden ayrlmtr. Yani,


WDT , OSC1/CLKIN ve OSC2/CLKOUT pinlerindeki saat pals (clock) dursa
bile alacaktr. rnein , SLEEP komutu yrrle konduu durumlarda buna
rastlanr. Normal iletim esnasnda bir WDT zaman am (time-out) PIC reseti
yaratacaktr. Eer PIC SLEEP modunda ise bir WDT cihazn uyanmasn
(wake-up) ve normal iletimine devam etmesine sebep olur.
80

OPTION kaytsnn sadece ilk 4 biti (prescaler ve TMR0/WDT seim bitleri)


WDTla ilgilidir. OPTION kaytsnn 3.biti 1 yaplarak WDT seilir ve
prescaler bitleri (OPTION<0:2>) ile de frekans blme deeri ayarlanr.

WDTn, CLRWDT komutuyla reset yapldktan sonra, saymasn tamamlayp


batan tekrar saymaya balad ana kadar geen sreye zaman am sresi
(time-out) denir. WDT saymasn tamamlad anda zaman am sinyali verir.
Bu sinyal STATUS kaytsnn 3. ve 4. bitlerindeki (TO ve PD bayraklar)
bayraklarn durumunu deitirir. Bu konumda STATUS kayts konusuna
dnp ilgili bitleri inceleyiniz.

Eer WDT ile, kontrolden km bir program tekrar resetleyerek, kontrol ele
almay planladysanz , ana program banda STATUS kaytsnn bu bitlerini
kontrol etmelisiniz. Daha sonra da reset gerekletikten hemen sonra da bu
bitleri kontrol etmelisiniz. Bylece WDTn zaman am sresi dolduunda
program akn baka bir yere dallandrabilirsiniz. rnek program paras
aadaki gibi olabilir.

WDT_KONTROL BTFSS STATUS,TO ;TO bayra 1 mi?


CALL KUR
;hayr (zaman am olumu) , KUR
;altprogramn ar.
MOVLW hCC
;Evet (zaman am olumam)
.
;programa devam et.
.
.
.

PIC ierisinde bulunan WDT zamanlaycsnn durumunu konfigrasyon


bitlerini yazarken belirleyebiliriz. Bu konfigrasyon bitlerini program ierinde
aadaki gibi yazabiliriz.
_CONFIG
Bu ifadede ;
_CP_OFF
_WDT_ON
_ PWRT_ON
_RC_OSC
_HS_OSC)

_CP_OFF & _WDT_ON &_ PWRT_ON & _RC_OSC


;kod koruma yok.
;WDT aktif
;Power-On-Reset var.
;RC osilatr kullnlyor. (Dier seenekler _LP_OSC, _XT_OSC,

81

stenirse konfigrasyon bitlerini PIC programlaycnn kendi programndaki fuses


penceresinden de yapabiliriz.WDT programn almas esnasnda geersiz yapmak
mmkn deildir.

ekil 1.27: WDT Blok diyagram

Not : T0CS , T0SE , PSA , PS2:PS0 bitleri OPTION registeri iindedir.

1.6.18. D/A ve A/D evirme


PIC16F84 mikrokontrol sadece dijital verileri giri olarak kabul eden ve yine sadece
dijital k verebilen bir entegredir. Bu yzden analog veri girii ve k gereken
durumlarda bu iler iin retilmi zel entegreler kullanmak gerekir. Bununla beraber
Microchip firmasnn kataloglar incelendiinde, PIC14C000 mikrodenetleyicisinin giriine
uygulanan dijital sinyali dorudan analog voltaj k olarak verebilmektedir. Ayrca
PIC16F877 mikrodenetleyicisi de giriine uygulanan analog sinyali dorudan dijital k
olarak verebilmektedir.
1.6.18.1. Dijital Analog evirici
PICten kan dijital kelimeyi analog sinyale dntrmek iin kullanlacak
yntemlerden biri AD558 entegresini kullanmaktr. nk bu entegre 8 bitlik dnm
salamaktadr ve PIC iin kontol girilerine sahiptir. Dier bir yntem de PWM (Pals
genilik modlasyonu) yntemini kullanmaktr. Bu yntemle ayrca bir entegre kullanmak
gerekmediinden (zaten denetleyicilerin kullanma amalarndan biri de budur. Biz de bu
yntemi kullanacaz.
82

ekil 1.28de bir kare dalga sinyalin, 3 farkl lojik 1 ve 0 sreleri iin ,
voltmetrede lm deerleri (Analog gerilim deerleri) grlmektedir. Dolays ile bu 3
gerilim deerleri ile ledleri srersek led parlaklklar birbirinden farkl olacaktr.

ekil 1.28:PWM sinyali ile analog gerilim retmek

Eer i ve bekleme srelerini bir periyot iinde deitirirsek k derilimini de 0-5V


arasnda deitirebiliriz. Aadaki gibi bir gecikme alt program ile i ve bekleme srelerini
belirleyebiliriz.
GECIKME
MOVWF

SAYAC

DECFSZ
GOTO
RETURN

SAYAC,1
TEKRAR

TEKRAR

8 bitlik bir DA evriminde, olabilecek en byk dijital deer hFF olacandan bu


deeri biz bir evrim peryodunu oluturan say olarak almalyz.Yani PWM k periyodu
SAYAC deerinin hFF=d256olmas durumunda oluur. Bu durumda i ve bekleme
srelerini,

256 says
Sayi

5V oluursa;
Vanalog oluur.

Sayi x 5V = 256 x Vanalog

Sayi=(256x Vanalog )/5 , Vanalog = (Sayi x 5)/ 256 , Saybek =256 - Sayi
formlleri bulunur.
rnein 0.5Vluk analog gerilim elde etmek iin GECIKME
kaytsna yklenecek i ve bekleme saylarn bulalm.
83

altprogramnda SAYAC

Sayi=(256x Vanalog )/5=(256 x 0.5)/5=25.6=26 =h1Ave


Saybek =256 - Sayi =256-26=230=hE6 olur. Bu kadar basit.

imdi de bir programla PWM yntemi ile analog sinyal retelim:


rnek: B portunun 1.Bitinden 2Vluk analog deer reten program yaznz.
zm: nce i ve bekleme saylarn bulalm;
Sayi=(256x Vanalog )/5=(256 x 2)/5=102.4= 103 = h67ve
Saybek =256 - Sayi =256-103=153=h99 olur.
Bala
GECIKME
PIC16F84
Tant.
PortB k

SAYAC deerini Wden ykle.

SAYAC=SAYAC-1

PORTB<1>=1
IS saysn W yeykle

SAYAC=0
m?

GECIKME
RETURN
PORTB<1>=0

BEKLE saysn W yeykle

GECIKME
ekil 1.29: rnek progamn algoritmas

Programda B portunun 1.biti nce 1 yaplyor. Daha sonra i zamann belirleyen


deer (h67) W kaytsna yklenip GECIKME altprogamna dallanlyor. GECIKME
altprogamnda h67 deeri 0 olana kadar B portunun 1.biti 1 olarak kalyor. SAYAC deeri
0 olduunda ise anaprograma dnlyor. Bylece i zaman bitmi oluyor. Anaprogamda B
portunun 1.biti bu el 0 yaplyor. Daha sonra bekleme zamann belirleyen deer (h99) W
kaytsna yklenip GECIKME altprogramna dallanlyor. GECIKME altprogramnda
h99 deeri 0 olana kadar B portunun 1.biti 0 olarak kalyor. SAYAC deeri 0 olduunda
ise anaprograma dnlerek tekrar B portunun 1.biti 1 yaplyor. Bylece bekleme zaman da
bitmi oluyor. Bu olay silsilesi sonunda B portunun 1.bitine bal voltmetrede 2V oluuyor.
84

imdi de programmz yazalm.


;######DAC.asm#########
LIST
P=16F84
INCLUDE P16F84.INC
IS
EQU
h0C
BEKLE
EQU
h0D
SAYAC
EQU
h0E
ORG
h00
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5
CLRF
PORTB
MOVLW h67
MOVWF IS
MOVLW h99
MOVWF BEKLE
TEKRAR
BSF
PORTB,1
MOVF
IS,W
CALL
GECIKME
BCF
PORTB,0
MOVF
BEKLE,W
CALL
GECIKME
GOTO
TEKRAR
GECIKME
MOVWF SAYAC
DONGU
DECFSZ SAYAC,1
GOTO
DONGU
RETURN

85

1.6.18.2. Analog Dijital evirici


PIC16F84 kontrolcsnde dhil ADC olmad iin bu ii PIC16FF877 kullanarak
gerekletireceiz.
16F877 analog giri iin A portunda 5 , E portunda ise 3 pini kullanr (ekil 1.30u
inceleyiniz). Yani 8 kanall ADC olarak kullanlabilir. Bu pinlere balanacak scaklk, ses,
k sensrleri veya potansiyometrelerden analog veri alnabilir. evrim sonucu 10 bitliktir.

ekil 1.30: 16F877 denetleyicisi pin diyagram

ADC uyuma modunda da alabilir ve kendi i devre saatini (RC osilatrn)


kullanr. ADC modl bu i iin 4 kayt kullanr; ADRESH, ADRESL, ADCON0 ve
ADCON1 .ADRESH ve ADRESL kaytlar, ADC dnm sonucunun st ve alt
baytlarn tutar. ADCON0 , ADC ileminin kontrolnde ADCON1 ise port pinlerinin
konfigrasyonunda kullanlan kaytlardr. ADCON0 ve ADCON1 kaytlarnn iyaps
ekil 1.31 ve ekil 1.32de verilmitir.

86

ADCS1 ADCS0

CHS2 CHS1 CHS0

Osc modu;
Analog kanal
00:Fosc/2
seim bitleri
01: Fosc/8
( 000:AN0111:AN7)
10: Fosc/32
11: FRC

GO/DONE 1=Dnm
balad
0=Bitti

ADON
1=AD alyor
0= AD kapal.

ekil 1.31: ADCON1 kayts

ADFM
AD sonu seim biti
0:Saa yanak
1:Sola yanak

PCFG3

PCFG2

PCFG1

PCFG0

AD PORT konfigrasyon bitleri


ekil 1.32: ADCON0 kayts

ekil 1.33: AD PORT konfigrasyon bitleri

ADC dnm yapmak iin u sra izlenir:


AD biriminin konfigrasyononu yap;
Analog giri portunu belirle (ADCON1).
Anlog giri kanaln se (ADCON0).
AD dnm osilatrn se(ADCON0).
AD birimini aktifletir.
87

PIC16877de ayrca AD kesmesi yaplabilir. stenirse AD kesme kullanlarak kesme


altprogram da yazlabilir. Bu durumda ADIF bitinin silinip ADIE, PEIE, GIE
yetkilerinin 1 yaplmas gerekir. Bunu yapmak iin aadakileri bilmemiz gerekir.
ADIE biti 16F877nin PIE1 kaytsnda bulunur. PIE1 16F877nin kesme yetki
durumlar hakknda iinde kontrol bitleri barndrr. Burada biz sadece ADIE
yetki biti ile ilgileniliyoruz.
ADIE=1 AD kesmesi aktif.
ADIE=0 AD kesmesi pasif.

PEIE ve GIE biti 16F877nin INTCON kaytsnda bulunur. INTCON


16F877nin kesme durumlar hakknda iinde kontrol bitleri barndrr. Burada
biz sadece PEIE ve GIE biti bayraklar ile ilgileniliyoruz.
PEIE=1 evresel kesmeler aktif.
PEIE=0 evresel kesmeler pasif.
GIE=1 tm kesmeler aktif.
GIE=0 tm kesmeler pasif.
Kullanlmayacaksa bu basamak geilir.
Gereken dolum sresini bekle (evrim zaman).
GO/DONE bitini 1 yaparak evrime bala.
evrimin bitmesini bekle. GO/DONE biti 0sa evrim bitmitir. Ya da AD
kesmesini bekle.
AD sonu yazma iftini oku (ADRESH:ADRESL). ADIF bayran 0 yap.
ADIF biti 16F877nin PIR1 kaytsnda bulunur. PIR1 16F877nin kesme
durumlar hakknda iinde kontrol bitleri barndrr. Burada biz sadece ADIF bayra
ile ilgileniliyoruz.
ADIF=1 ise AD evrimi tamamland.
ADIF=0ise AD evrimi tamamlanmad.
Sonraki evrim iin 1 yada 2. basamaa git.

imdi de bir rnekle AD dnmn grelim.


rnek: 16F877 denetleyicisinin AN0 kanalna bal bir potansiyometrenin oluturaca
analog sinyal, 8 bit dijital kelimeye dntrlerek C portundaki ledlerde gsterilsin.
Bunun zm iin kaytlarn hangi banklarda bulunduunu gsteren 16F877nin
kayt haritasna ihtiyacmz olacaktr (ekil 1.34). Zaman gecikmesi iin TMR0 donanm
zamanlaycsnn kullanldna dikkat ediniz.

88

ekil 1.34: 16F877nin kayt haritas

89

;**********************************************************
;* ADC.ASM
;**********************************************************
;* Microchip Technology Incorporated
;* 16 December 1998
;* Assembled with MPASM V2.20
;**********************************************************
;* Bu program A/D
;* A/D dnm iin kanal 0 seilmi, analog sinyal bir
;* potansiyometre zerinden salanmakta ve sonu
;* PORTCdeki ledlerde gsterilmektedir.
;**********************************************************
list p=16f877
include "p16f877.inc"
org
0x000
nop
clrf
PORTC
;Clear PORTC
movlw
B'01000001'
;Fosc/8, A/D etkin olacak ekilde
movwf
ADCON0
; ADCON0 ayarla.
bsf
status,5
; Bank1e ge.
movlw
b'10000111'
; TMR0 etkin, prescaler 1:256 olacak
movwf
OPTION_REG
;ekilde OPTION_REGi ayarla.
clrf
TRISC
;PORTC k.
movlw
B'00001110'
;sola yanak k format, 1 analog kanal
movwf
ADCON1
; (AN0)girii ve VDD ve VSS referans
;olacak ekilde ADCON1i ayarla.
bcf
status,5
;Bank0a ge.
BASLA
btfss
INTCON,T0IF
; Timer0 tamas gerekleti mi?
goto
BASLA
;hayr.Tamay bekle.
bcf
INTCON,T0IF
;evet.T0IF bayran sil.
bsf
ADCON0,GO
; A/D evrimini balat.
BEKLE
btfss
PIR1,ADIF
;evrim bitti mi?
goto
BEKLE
;hayr.Bitirmesini bekle.
movf
ADRESH,W
;Evet sonucu PORTCdeki
movwf
PORTC
;ledlere gnder.
goto
BASLA
;tekrarla.
End

90

UYGULAMA FAALYET
UYGULAMA FAALYET
LEM BASAMAKLARI

NERLER

B Portuna bal 8 led , A portunun 0.bitine Ak diyagram sembollerini amacna


bal bir butona basldnda birbirine
uygun kullannz.
eklenerek aadaki gibi 1 sn. arayla sola
Programn balk ksmnda gerekli
doru kayarak yansn.
tanmlamalar
yapnz
(
LIST,
INCLUDE).
Programda
kullandnz
mikrodenetleyici komutlarnn, say ve
karakterlerin yazlna dikkat ediniz.
Programn tamamn ya byk ya da
kk harfle yazmak yazm hatalarn
azaltacaktr.
Program banda giri/k portlarn
kurduktan sonra B portunu ve C (elde)
bayran silerek programa balaynz.
Programn;
Program ak diyagramn iziniz.
Programlama dilini seiniz.
Programlama dilinin yazm kurallarnna
dikkat ederek assemler komutlara gre
programnz yaznz.
Program MPASM ile derleyiniz.
Derleme
sonucunda
oluan
HEX
dosyasn , programlama kart
ile
mikrodenetleyiciye yaznz.

91

Programn derlenmesi sonucunda oluan


HEX
dosyas
ASM
dosyanzn
bulunduu
dizindedir
(MPASM
program dizininde deildir).

LMEVE
VEDEERLENDRME
DEERLENDRME
LME
OBJEKTF TESTLER (LME SORULARI)
1.

LIST ve INCLUDE ifadeleri bir assabmler programn hangi blmnde bulunur?


A) Balk

2.

D) Sonlandrma

B) TRISA

C) STATUS

D) INTCON

Kesme bit ve bayraklarn iinde barndran kayt aadakilerden hangisidir?


A) OPTION_REG

4.

C) Program

A Portu ynlendirme kayts aadakilerden hangisidir?


A) PORTA

3.

B) Atama

B) INTCON

C) TMR0

D) STATUS

Bank deitirme ilemini hangi kayt salar?


A) PORTB

B) OPTION_REG

C) STATUS

D) ADCON0

Aadaki program parasna gre 5-15. sorulardaki boluklar tamamlaynz.


;====rnek.asm======
LIST
P=16F84
INCLUDE P16F84.INC
ORG h000
GOTO BASLA
BASLA
BSF
STATUS,5
CLRF TRISB
MOVLW
hFF
MOVWF
TRISA
BCF
STATUS,5
TEKRAR
CLRF
PORTB
BCF
STATUS,C
KONTROL
BTFSS
PORTA,0
GOTO KONTROL
MOVLW
h35
MOVWF
TEST
INCF
TEST,1
RRF
TEST,1
COMF TEST,1
RLF
TEST,0
MOVWF PORTB
GOTO TEKRAR
END
92

5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

Programn balang adresi h.......dr.


Programda ..........................mikrodenetleyicisi kullanlmtr.
Programda .. ....portu giri,........ portu k olarak kurulmutur.
A Portunun ........bitine bal bir buton ile programn ak konrol edilmektedir.
A Portuna bal buton baslmad srece PORB kaytsnn deeri h......dir.
Butona basldktan sonra BCF STATUS, C komut satrnda C (elde) bayrann
deeri olur.
Butona basldktan sonra, program sonunda W kaytsnn deeri h......dir.
Butona basldktan sonra, program sonunda TEST kaytsnn deeri h......dir.
Butona basldktan sonra, program sonunda PORTB kaytsnn deeri h......dir.
Butona basldktan sonra program sonunda C (elde) bayrann deeri ......dir.
GOTO komutuna PCye(program saycya) ...............etiketinin adresi yklenir.

DEERLENDRME
Cevaplarnz cevap anahtar ile karlatrnz. Doru cevap saynz belirleyerek
kendinizi deerlendiriniz. Yanl cevap verdiiniz ya da cevap verirken tereddt yaadnz
sorularla ilgili konular faaliyete dnerek tekrar inceleyiniz.
Tm sorulara doru cevap verdiyseniz dier faaliyete geiniz.

93

RENME FAALYET-2
RENME FAALYET-2
AMA
Uygun ortam salandnda microdenetleyici programn derlemesini yapabilecek,
derleme sonunda oluan dosyalar tanyabilecek ve oluan dosyalardan faydalanarak
programnz hakknda yorum yapabileceksiniz.

ARATIRMA
Bu faaliyet ncesinde yapmanz gereken ncelikli aratrmalar unlar olmaldr:

MPASM programnn menlerini tanyp ayarlarnn nasl yaplmas gerektiini


renmelisiniz.

Yazdmz

program

derleme

olayna

neden

ihtiya

duyduumuzu

aratrmalsnz.
MPASM programnn menlerini tanyp ayarlarnn nasl yaplmas gerektiini
renme faaliyetleri-1den renebilirsiniz. Ayrca
internet ortamndan ve mesleki
kitaplarn bulunduu ktphaneler ile bu ii yapan sektrde alanlardan daha ayrntl bilgi
bulabilirsiniz. Aratrma iin arkadalarnzla i blm yapabilirsiniz.

2. MKRODENETLEYC KONTROL
PROGRAMININ MAKNE DLNE
EVRLMES
Bildiimiz gibi MPASM derleyici program assmbly programmzn makine kodunu
retiyordu . MPASM derleyici programnn nasl kurulacan, ayarlarnn nasl yaplacan
Mikrodenetleyici iin gerekli yazlmn kullanm konusunda anlatmtk. Burada ise
derleme ileminin yaplmas ve derleme sonucunda oluturulan dosyalar greceiz.

94

2.1. Programn Derlenmesi


2.1.1. Derleme leminin Yaplmas
Bir assembly dosyasn derlemek iin aadaki sra izlenir.

MPASM program altrlarak resim 2.1deki gibi ayarlanr. Burada


mikrodenetleyici olarak 16F84A seilmitir.

Resim 2.1: MPASM derleyici program arabirimi

95

Daha nceden yazlp kaydedilmi .asm uzantl kaynak dosyas Browse ile
alr (Resim 2.2).

Resim 2.2: ASM dosyann seilmesi.

Assemble komut tuuna baslarak derleme ilemi bitirilir. Sonu, derleme


baarl olduysa resim 2.3teki, baarl olmadysa resim 2.4teki pencere ile
programcya bildirilir.

Resim 2.3: Baarl ASM derleme

Resim 2.4: Baarsz ASM derleme

96

2.1.2. Derleme Sonucu Elde Edilen Dosyalar


Derleme sonunda LST dosyas, ERR dosyas, HEX dosyas,WAT dosyas, PJT
dosyas, LST dosyas dosyalar MPASM programnn bulunduu dizinde oluur. imdi de
bu dosyalarn ne anlama geldiini grelim.
2.1.2.1. ERR Dosyas
ERR dosyas metin editrn kullanarak aabileceiniz bir dosyadr. ASM dosyas
konusunda rnek olarak verilen tersle.asm dosyas derlendikten sonra hi hata olumad
iin tersle.err dosyas alrsa bo bir sayfa grlecektir. Fakat hata kmas durumunda
MPASM bunu programcya ekil 2.4teki pencere ile bildirecektir. Bu pencerede hata , uyar
ve mesaj saylarna ait bilgiler bulunur. Errors:4 ifadesi 4 satrda hata bulunduunu ifade
etmektedir. Bu hatalar bir ERR dosyas olarak ASM dosyasnn bulunduu dizinde
oluturulur.
imdide 1LEDYAK.ERR dosyamzn hatalarn bulup dzeltelim. ERR uzantl
dosyay bir metin editr ile ap iinde hatalarn olduu satrlar aryoruz. Hatalar
bulduktan sonrada tekrar ASM dosyamz ap ilgili hatalar birer birer gidereceiz. Eer
programnzda kod satrlar oksa biraz zor olabilir, ama gene de zm var; dosyada metin
arama zelliini kullanarak Error kelimesini arayarak bulabilirsiniz. imdi dosyay aalm
ve hatalar bulalm.

ekil 2.5: rnek hata dosyas

1.satrda bir hata var, hata olan kod EQUa =>hlbuki bu deiken tanmlama
iin kullandmz equ olmalyd. Gidip onu EQU yaparak dzeltiyoruz.

2.satrda bir hata var. Illegal opcode (PORTB)=> Yalnz bu PORTBnin


yazlnda bir hata yok; burada baka bir hata olmal gidip 12 inci satra
bakalm. Gryoruz ki 12. satr CLRF PORTB olmas gerekirken, CLRFg
PORTB olarak girilmi, burada ERR dosyasnda CLRFg ifadesini warning
olarak bir st satrda gryoruz.CLRF yazdmzda bu assembler kodu olur,
97

ama CLRFg yazdnzda bu ifade satrn banda olduu iin bunu ETIKET
olarak tanmaya alr. Bu yzden bu satrda PORTBde hata gsterdi.

28 ve 40. satrlarda iki hata var; fakat esas hata burda deil. Error dosyasnda
aklamaya bakarsak "Symbol not previously defined (SAYAC1)" yazyor.
Burada MPASM diyor ki: "Sayac1 deikenini daha nce tanmlamadnz.O
zaman reteceiz demektir, gidip asm dosyamzda tanmlamalar yaptmz
blme bakyoruz ve gryoruz ki aslnda bu hatay az nce dzeltmiiz. nk
az nce 6.satrda bulunan hata , SAYAC1 deikenini tanmlarken bulduumuz
hatayd ve dzeltmitik.

Not: Bu hataya dmeyiniz. Bir hata baka bir hatann sebebi olabilir.Yani
derleme sonucunda eer 20 hata uyars aldysanz derleme yaplrken 20 defa
sorunla karlalm anlamna gelir, yoksa 20 tane hata var anlamna gelmez
(ama olabilir de tabii). Hatta yukardaki rnee benzer ekilde bir hata olup ok
hata uyars alabilirsiniz. rnein bir deikenin tanmlanmasnda hata varsa ve
bu deikeni biz 20 yerde kullandysak, hatamz bir yerde olmasna ramen 20
tane hata uyars alrz.stteki hatay dzelttiinizde unutup 2 dk. sonra
aalarda bulduunuz hatadan dolay tekrar ayn hatay ararsanz bulamazsnz,
en gzeli birka dzeltme yaptnzda bir karmaa oluursa MPASMla tekrar
derleme yapnz ve ERROR dosyasn tekrar anz. Bu durumda en son hatalar
grm olacanzdansorun yaamazsnz, uzun uzun hata aramazsnz.

98

2.1.2.2. ASM Dosyas


ASM dosyas aslnda derleme sonunda oluan bir dosya deildir. Bizim program
kaynak dosyamzdr. Fakat derleme sonunda oluan kaynak dosyalarla ayn dizinde
bulunduu iin listeye dahil edildi.
Bit pozisyonlarn tersleme
gryorsunuz.

konusundaki

tersle.asm programn aada

;====tersle.asm======
LIST
P=16F84
INCLUDE "P16F84.INC"
SAYAC1 EQU
h'0C'
SAYAC2 EQU
h'0D'
CLRF
PORTB
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5
MOVLW h'0F'
;ilk deeri ykle ve
MOVWF PORTB
;B portundan kar.
TERSLE
CALL
GECIKME ;Yeni deer iin bekle.
COMF
PORTB,F ;PORTB'yi tersle.
GOTO
TERSLE ; saa kaydr.
GECIKME
;GECIKME alt program balangc.
MOVLW h'FF'
MOVWF SAYAC1
DON1
MOVLW h'FF'
MOVWF SAYAC2
DON2
DECFSZ SAYAC2,F
GOTO
DON2
DECFSZ SAYAC1,F
GOTO
DON1
RETURN
;GECIKME alt program sonu
END

99

2.1.2.3. HEX Dosyas


HEX dosyas metin editrn kullanarak aabileceiniz bir dosyadr. ASM dosyas
konusunda rnek olarak verilen tersle.asm dosyas derlendikten sonra oluan tersle.hex
dosyas aada grlmektedir. Denetleyiciye bu dosyadaki verileri ykleriz.
:1000000086018316860183120F3086000920860937
:100010000628FF308C00FF308D008D0B0D288C0BD7
:040020000B280800A1
:00000001FF
2.1.2.4. WAT Dosyas
WAT dosyas MPASM programnn derlemesi sonucu oluan bir dosya deildir. Bu
yzden bunun zerinde durmayacaz.
2.1.2.5. PJT Dosyas
PJT dosyas metin editrn kullanarak aamayacanz bir dosyadr. Bu dosya proje
dosyasdr ve hangi program kullanarak proje oluturulmu ise o program tarafndan alr.
rnein MPLAB kullanarak oluturacanz projeler gibi Programc iin bilgilendirici bir
dosya deildir sadece var olan almay amak iin kullanlr.
2.1.2.6. LST Dosyas
LST dosyas metin editrn kullanarak aabileceiniz bir dosyadr. Bu dosya birka
sayfadan oluabilir. ASM dosyas konusunda rnek olarak verilen tersle.asm dosyas
derlendikten sonra oluan tersle.lst dosyas aada grlmektedir. Dikkatli incelendii
zaman aadaki bilgileri ierdii grlmektedir.

Bir lst dosyas birka sayfadan oluur. Bu rnekte PAGE1, PAGE2 ve PAGE3
eklinde 3 sayfa var.

Komutlarn hex kodlar (PAGE1 ierisinde)

Komutlarn bellekteki adresleri ( PAGE1 ierisinde LOC OBJECT CODE ),

Kaynak program ve satr numaralar (PAGE1 ierisinde LINE SOURCE


TEXT),

Programda kullanlan etiketler ve tanmlar (PAGE2 ierisinde SYMBOL


TABLE)

OPTION_REG tanmlamalar (PAGE3 ierisinde)

Bellek kullanm haritas (PAGE3 ierisinde, x =kullanlan, - kullanlmayan


alanlar belirtir)

Bellekte durumu (PAGE3 ierisinde kullanlan 18 , kullanlmayan 1006 bayt,


toplam 1KB)

100

Oluan hata ve uyar says (PAGE3 sonunda hata says 0, uyar says 7,
uyarlar ise PAGE1 ierisinde bulunuyor. )

MPASM 02.30.11 Intermediate


LOC OBJECT CODE

tersle.ASM 8-6-2005 19:02:47

PAGE 1

LINE SOURCE TEXT

VALUE
00001 ;====TERSLE.asm======
00002
LIST P=16F84
Warning[205]: Found directive in column 1. (INCLUDE)
00003 INCLUDE "P16F84.INC"
00001
LIST
00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc.
00136
LIST
0000000C
00004 SAYAC1 EQU
h'0C'
0000000D
00005 SAYAC2 EQU
h'0D'
0000 0186
00006
CLRF PORTB
0001 1683
00007
BSF STATUS,5
0002 0186
00008
CLRF TRISB
0003 1283
00009
BCF STATUS,5
0004 300F
00010
MOVLW h'0F'
;ilk deeri ykle ve
Warning[203]: Found opcode in column 1. (MOVWF)
0005 0086
00011 MOVWF PORTB ;B portundan kar.
0006
00012 TERSLE
0006 2009
00013
CALL GECIKME
;Yeni deer iin bekle.
Warning[203]: Found opcode in column 1. (COMF)
0007 0986
00014 COMF PORTB,F
;PORTB'yi tersle.
0008 2806
00015
GOTO TERSLE
; saa kaydr.
00016
0009
00017 GECIKME
Warning[203]: Found opcode in column 1. (MOVLW)
0009 30FF
00018 MOVLW h'FF'
Warning[203]: Found opcode in column 1. (MOVWF)
000A 008C
00019 MOVWF SAYAC1
000B
00020 DON1
Warning[203]: Found opcode in column 1. (MOVLW)
000B 30FF
00021 MOVLW h'FF'
Warning[203]: Found opcode in column 1. (MOVWF)
000C 008D
00022 MOVWF SAYAC2
000D
00023 DON2
000D 0B8D
00024
DECFSZ SAYAC2,F
000E 280D
00025
GOTO
DON2
000F 0B8C
00026
DECFSZ SAYAC1,F
0010 280B
00027
GOTO
DON1
0011 0008
00028
RETURN
00029
END
101

MPASM 02.30.11 Intermediate


ABD.ASM 8-6-2005 19:02:47
SYMBOL TABLE
LABEL
VALUE
C
DC
DON1
DON2
EEADR
EECON1
EECON2
EEDATA
EEIE
EEIF
F
FSR
GECIKME
GIE
INDF
INTCON
INTE
INTEDG
INTF
IRP
NOT_PD
NOT_RBPU
NOT_TO
OPTION_REG
PCL
PCLATH
PORTA
PORTB
PS0
PS1
PS2
PSA
RBIE
RBIF
RD
RP0
RP1
SAYAC1
SAYAC2
STATUS
T0CS
T0IE
T0IF

00000000
00000001
0000000B
0000000D
00000009
00000088
00000089
00000008
00000006
00000004
00000001
00000004
00000009
00000007
00000000
0000000B
00000004
00000006
00000001
00000007
00000003
00000007
00000004
00000081
00000002
0000000A
00000005
00000006
00000000
00000001
00000002
00000003
00000003
00000000
00000000
00000005
00000006
0000000C
0000000D
00000003
00000005
00000005
00000002
102

PAGE 2

T0SE
00000004
TERSLE
00000006
TMR0
00000001
TRISA
00000085
TRISB
00000086
W
00000000
WR
00000001
WREN
00000002
WRERR
00000003
Z
00000002
MPASM 02.30.11 Intermediate

ABD.ASM 8-6-2005 19:02:47

SYMBOL TABLE
LABEL

VALUE

_CP_OFF
_CP_ON
_HS_OSC
_LP_OSC
_PWRTE_OFF
_PWRTE_ON
_RC_OSC
_WDT_OFF
_WDT_ON
_XT_OSC
__16F84

00003FFF
0000000F
00003FFE
00003FFC
00003FFF
00003FF7
00003FFF
00003FFB
00003FFF
00003FFD
00000001

PAGE 3

MEMORY USAGE MAP ('X' = Used, '-' = Unused)


0000 : XXXXXXXXXXXXXXXX XX-------------- ---------------- ---------------All other memory blocks unused.
Program Memory Words Used:

18

Program Memory Words Free: 1006


Errors :
Warnings :

0
7 reported,

0 suppressedMessages :

103

0 reported,

1 suppressed

UYGULAMA FAALYET
UYGULAMA FAALYET
Yaptnz ve yapacanz bir mikrodenetleyici programn makine diline evirerek
ASM, HEX, LST, COD, ERROR dosyalarn inceleyiniz.

LEM BASAMAKLARI
Mikrodenetleyici

derleme

NERLER

programn Derleme

(MPASM) bilgisayarnza kurunuz.

blmnde yazm olduunuz program

yapnz.
Derleme sonucunda hata olutuysa,
btn hatalar birden bulmak yerine, tek

derleme programnda anz.

derleyerek

yazlm

mutlaka

denetleyici tipi, k format ayarlarn

Uygulama faaliyetleri-1 Uygulamalar

dilinde

nce

MPASM programnda kullanacanz

MPASM program ayarlarn yapnz.

Komut

yapmadan

programnz

makine diline heksadesimal

kodlara eviriniz (HEX dosyas).

tek bulmaya alnz ve bir hatay


bulduktan

sonra,

hatay

giderip

program tekrar derleyiniz. nk bir


hata baka hatalarn nedeni olabilir.

Eer derleme sonucunda hatalar olutuysa,


hata dosyasn ap hatalar gideriniz.
LST dosyasn ap denetleyicinin bellek
durumunu ( bo ve dolu bellek alanlar)
reniniz.

104

LME VE DEERLENDRME
LME VE DEERLENDRME
Aadaki sorular cevaplayarak faaliyette kazandnz bilgi ve becerileri lnz.

OBJEKTF TESTLER (LME SORULARI)


1.

Bir assembly program MPASM ile derlendikten sonra aadaki dosyalardan hangisi
olumaz?
A) ERR dosyas

2.

B) ERR

C) PJT

D) ASM

B) ASM dosyasnn
bulunduu dizin

C) MPASM
program dizininde

D) C (sabit disk)

Aadaki hata mesaj ekranna gre ka assembly satrnda hata var?

A) 4
5.

D) PPT dosyas

MPASM ile derleme sonucu oluan dosyalar hangi dizinde bulunur?


A) Belgelerim

4.

C) HEX dosyas

MPASM ile derleme sonucu oluan hata dosyas aadakilerden hangisidir?


A) LST

3.

B) LST dosyas

B) 177

C) 1

D) 7

Aadaki dosyalardan hangisini bir metin editr ile ap programmz hakknda


bilgi alamayz?
A) ERR dosyas
B) LST dosyas
C) ASM dosyas
10 nu.lu sorular doru/yanl olarak cevaplandrnz.
105

D) PJT dosyas

6.
7.
8.
9.
10.

ASM dosyas MPASM programnn derleme sonucunda oluturduu bir dosya


deildir.
Denetleyiciye ykleyeceimiz veriler ASM dosyas iindedir.
LST dosyasndan denetleyici belleini ne kadar kulladmz renebiliriz.
Error [113] C:\prog\test.asm 20 :illegal opcode (PORTA) hata satr bize test.asm
programnn 20. satrnda bir komut yazlm hatas olduunu syler.
Hatasz program mutlaka beklediimiz gibi alr.

DEERLENDRME
Cevaplarnz cevap anahtar ile karlatrnz. Doru cevap saynz belirleyerek
kendinizi deerlendiriniz. Yanl cevap verdiiniz ya da cevap verirken tereddt yaadnz
sorularla ilgili konular faaliyete dnerek tekrar inceleyiniz.
Tm sorulara doru cevap verdiyseniz dier faaliyete geiniz.

106

MODL DEERLENDRME
MODL DEERLENDRME
PERFORMANS TEST (YETERLK LME)
Mikrodenetleyici programlama modl, faaliyetleri ve aratrma almalar sonunda
kazandnz bilgi ve becerilerin llmesi ve deerlendirilmesi iin kendinizi deerlendirme
leine gre deerlendiriniz. Bu deerlendirme sonucuna gre bir sonraki modle
geebilirsiniz.

DEERLENDRME KRTERLER
Ak diyagram sembollerini bir problemin zmnde kullanabilir
misiniz?
Mikrodenetleyici assembler program ve yazm kurallarna uygun
program yazabilir misiniz?
Mikrodenetleyici komutlarnn ilevlerini biliyor musunuz?
Programda say ve karakterleri kullanmak;
Heksadesimal saylar kullanabilir misiniz?
Binary saylar kullanabilir misiniz?
Desimal saylar kullanabilir misiniz?
ASCII karakterler kullanabilir misiniz?

Mikrodenetleyici iin gerekli yazlmn kullanmak;


MPASM derleyici programn kurabilir misiniz?
MPASM programnn kullanacanz denetleyiciye gre
ayarlarn yapabilir misiniz?
Mikrodenetleyici programn yazmak;
Portlarn giri ve k olarak ynlendirebilir misiniz?
Konfigrasyon bitlerinin yazabilir misiniz?
W kaytsnn kullanabilir misiniz?
Bitleri test ederek ilem yapabilir misiniz?
Status kaytsn kullanabilir misiniz?
Zaman geciktirme dngleri dzenleyebilir misiniz?
Bit pozisyonlarn sola/saa kaydrma ,tersleme ilemlerini
yapabildiniz mi?
stenen bitleri sfrlamak, bire evirmek ve terslemek
ilemlerini yapabilir misiniz?
Bir bytlk iki veriyi birbiriyle veya 0 ile karlatrabilir
misiniz?
8 ve 16 bitlik toplama yapabilir misiniz?
8 ve 16 bitlik karma yapabilir misiniz?
evrim tablolarn kullanabilir misiniz?
INTCON kaytsn kullanabilir misiniz?
Kesme kaynaklarn biliyor musunuz?
Kesme alt programlarn dzenlenleyebildiniz mi?
TMR0 ve WDT sayclarn kullanabilir misiniz?
107

Evet

Hayr

Option kaytsn kullanabilir misiniz?


Mikrodenetleyici ile dijital /analog evirmesini yapabilir
misiniz?
Mikrodenetleyici ile analog /dijital / evirmesini yapabilir
misiniz?
Mikrodenetleyici kontrol programn makine diline evirmek;
Assembly programn derleyebilir misiniz?
Derleme sonucunda oluan dosyalardan faydalanarak kan
hatalar giderebilir misiniz?

DEERLENDRME
Yaptnz deerlendirme sonucunda eksikleriniz varsa renme faaliyetlerini
tekrarlaynz.
Modl tamamladnz, tebrik ederiz. retmeniniz size eitli lme aralar
uygulayacaktr. retmeninizle iletiime geiniz.

108

CEVAP ANAHTARLARI
CEVAP ANAHTARLARI
RENME FAALYET -1 CEVAP ANAHTARI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

A
B
B
C
000
P16F84
A,B
0
0.
00
C8
E4
C8
1
TEKRAR

RENME FAALYET-2CEVAP ANAHTARI


1
2
3
4
5
6
7
8
9
10

D
B
B
A
D
Y
Y
D
D
Y

Cevaplarnz cevap anahtarlar ile karlatrarak kendinizi deerlendiriniz.

109

NERLEN KAYNAKLAR
NERLEN KAYNAKLAR

ALTINBAAK Orhan, Mikrodenetleyiciler ve PIC Programlama, stanbul,


2000.

http://www.antrak.org.tr

http://www.Microchip.com

110

KAYNAKA
KAYNAKA

ALTINBAAK Orhan, Mikrodenetleyiciler ve PIC Programlama, stanbul,


2000.

BODUR Yaar, Adm Adm PICmicro Programlama, stanbul.

Microchip Technology Inc.,PIC16F84 Data Sheet 18-Pin Enhanced


Flash/Eprom 8-bit Microcontrollers, 2001.

GNE Abdullah, Mikrodenetleyici Ders Notlar, Bursa, 2004.

http://www.antrak.org.tr

http://www.ramay.net

http://www.Microchip.com

111

You might also like