Mikroişlemciler bilgisayar programlarının yapmak istediği tüm işlemleri yerine getirdiği için, çoğu zaman merkezi işlem ünitesi (CPU-Central Processing Unit) olarak anlandırılır.PC adı verdiğimiz kişisel bilgisayarlarda kullanıldığı gibi, bilgisayarla kontrol edilen sanayi tezgahlarında ve ev aygıtlarında kulanılabilmektedir.Bir mikroişlemcinin işlevini yerine getirebilmesi için aşağıda ki yardımcı elemanlara ihtiyaç duyar;

1- Input (giriş) ünitesi
2- Output (çıkış) ünitesi
3- Memory (bellek) ünitesi

Bu üniteler CPU chip’inin dışında, bilgisayarın ana kartı üzerinde bir yerde farklı chip’ler den veya elektronik elemanlardan oluşur.Aralarında ki iletişimi ise veri yolu (Data Bus), adres yolu (Adress Bus) deni-len iletim hatları yapar.

Bir Mikroişlemci Sisteminin Temel Bileşenlerinin Blok Diyagramı

MİKRODENETLEYİCİ

Bir bilgisayar içerisinde bulunması gereken temel bileşenlerden RAM, I/O ünitesinin tek bir chip içerisinde üretilmiş biçimine mikrodenetleyici (Microcontroller) denir.Bilgisayar teknolojisi gerktiren uygulamalarda kullanılmak üzere tasarlanmış olan mikrodenetleyiciler, mikroişlemcilere göre çok daha basit ve ucuzdur.Günümüz de mikrodenetleyiciler, otomobillerde,kameralarda,cep telefonlarında,fotokopi,tv ve bazı oyuncaklarda kullanılmaktadır.

Bir Mikrodenetleyici Sisteminin Temel Bileşenlerinin Blok Diyagramı

MİKRODENETLEYİCİLER HAKKINDA GENEL BİLGİLER

Mikroişlemci üreticilerinin ürettiği birkaç mikrodenetleyici bulunmaktadır. Her firma ürettiği chip’e bir isim ve özelliklerini belirlemek için de parça numarası olarak da 12C508,16C84,16F84,16C711 gibi kodlamalar vermektedir.

Bir uygulamaya başlamadan önce hangi firmanın ürünü kullanılacağına, daha sonrada hangi numaralı denetleyicinin kullanılacağına karar vermek gerekir.

Bir mikrodenetleyici kullanmadan önce şu özellikler dikkate alınır ;

1- Programlanabilir dijital paralel giriş/çıkış

2- Programlanabilir analog giriş/çıkış

3- Seri giriş/çıkış (senkron, asenkron ve cihaz yönetimi)

4- Motor veya servo kontrol için pals sinyali çıkışı

5- Harici giriş vasıtasıyla kesme

6- Harici bellek arabirimi

7- Harici bus arabirimi (PC ISA gibi)

8- Dahili bellek tipi seçenekleri (ROM, EPROM, PROM, EEPROM)

9- Dahili RAM seçeneği

10- Kayan nokta hesaplaması

PIC’İN KULLANILMA SEBEPLERİ

Bilgisayar denetimi gerektiren bir uygulamayı geliştirirken seçilecek mikrodenetleyicinin ilk olarak tüm isteklerimizi yerine getirip getirmeyeceğine ve maliyetinin düşük olmasına dikkat edilmelidir. Ayrıca yapacağımız uygulamanın devresini kurmadan önce seçtiğimiz mikrodenetleyicinin desteklediği bir yazılımın üzerinde simülasyonunun yapılıp yapılmayacağı dikkate alınmalıdır.

PIC, adını ingilizcede ki Peripheral Interface Controller cümlesinde ki kelimelerin baş harflerinden almış olan bir mikrodenetleyicidir.Türkçesi, “çevresel üniteleri denetleyici arabirim” dir.PIC lamba, motor, röle, ısı ve ışık sensörü gibi I/O elemanların denetimini çok hızlı şekilde dizayn edilmiş bir chip’tir.RISC mimarisi adı verilen bir yöntem kullanılarak üretildiklerinden, bir PIC’i programlamak için kullanılacak komutlar oldukça basit ve azdır.Örneğin; PIC16F84 mikrodenetleyicisi toplam 35 komut kullanılarak programlanabilmektedir.

Burada PIC16F84’ ün programlanması hakkında bilgi verilecektir.Çünkü, PIC16F84 (veya 16F84A) mikrodenetleyicisinin program belleği flash teknolojisiyle üretilmiştir.Flash memory teknolojisiyle üretilen bir belleğe yüklenen bir program, chip’e uygulanan enerji kesilse bile

silinmez.Yine bu tip belleğe istenirse program yeniden yazılabilir.Aynı zamanda PIC16F84’ ün programlama donanımı çok ucuz ve kullanışlıdır.

PIC PROGRAMLAMAK İÇİN GEREKLİ DONANIMLAR

1- IBM uyumlu bilgisayar
2- Bir metin editörünün kullanılmasını bilmek
3- PIC assembler programı
4- PIC programlayıcı donanımı
5- PIC programlayıcı yazılımı
6- Programlanmış PIC’in çalışmasını görmek için PIC deneme kartı

IBM UYUMLU BİLGİSAYAR

Assembly program kodlarını kolayca yazmak, doğru ve hızlı bir şekilde PIC’ in program belleğine göndermek için,bilgisayara ihtiyaç vardır.Bir metin editörü kullanarak yazılan program kodları, derlendikten sonra PIC’e gönderilmesi gerekir.Program kodlarının PIC’e yazdırma işlemi paralel veya seri porta bağlanan PIC programlama kartı ile yapılır.Bu işleri yapabilmek için gereken minumum konfigürasyonlar;

1- DOS veya WINDOWS işletim sistemi

2- Basit bir editör (Edit, Notpad gibi)

3- Minumum 80486 CPU, 4 MB RAM, 100 MB harddisk ve CD-ROM sürücüsü

METİN EDİTÖRÜ

Assembly dili komutlarını yazıp bir metin dosyası oluşturmak için EDIT veya NotPad gibi bir editör kullanılır.İstenirse .ASM uzantılı metin dosyalarını yazabileceğimiz PFE editörü de kullanılabilir.Bu editörün hem DOS hem de WINDOWS altında çalışan versiyonları bulunmaktadır.

ASSEMBLY PROGRAMI

PIC, Assembly dili adı verilen ve toplam 35 komuttan oluşan bir programlama dilidir.Bu dilin komutlarını PIC’ in anlayabileceği makine diline çeviren bir program daha gereklidir. Text dosyası biçiminde kaydedilmiş olan assembly dili komutlarını makine diline çeviren program MPASM programıdır.

PIC PROGRAMLIYICI DONANIMI

Makine diline çevrilmiş program kodlarını PC’ den alıp PIC 16/17 mikrode-netleyicisine yazmak için bir elektronik devreye ihtiyaç vardır.Bu elektronik devre, bir çok üretici firma tarafından piyasada satılmaktadır.

PIC PROGRAMLAYICI YAZILIMI

MPASM tarafından derlenerek makine diline dönüştürülmüş assembly programı kodlarının PIC’e yazdırılmasında kullanılan bir programa ihtiyaç vardır.Programlayıcı yazılımları , PIC’ i programlamak için kullanılan elektronik karta bağımlıdır.

PROGRAMLANMIŞ PIC’ LERİ DENEMEK İÇİN GEREKLİ MALZEMELER

Bir PIC!i programladıktan sonra yapılacak bir uygulama devresi üzerinde denemek gerekir. Denemenin amacı, gerçek uygulama devresine PIC’i bağlamadan önce fazla zaman,emek, para harcamadan bir ön çalışma yapmaktır.Eğer devrenin çalışmasında bir aksaklık görülürse, geriye dönüp yeniden programlama yapılır.

PIC DONANIM ÖZELLİKLERİ

PIC ÇEŞİTLERİ

PIC ailelerine isim verilirken kelime boyu ( Word Lenght ) göze alınmıştır. Mikrodenetleyiciler kendi içlerinde ki dahili veri saklama alanları olan registerleri arasında ki veri alışverişini 16 – bit ile yaparken, Pentium işlemcileri 32 – bit’lik verilerle iletişim kurarlar. Bir CPU veya MCU’nun dahili veri yolu uzunluğuna kelime boyu denir.

Mikrochip, PIC’leri 12/14/16 bitlik kelime boylarında üretmektedir. Mikrochip’in, ürettiği mikrodenetleyiciler 4 farklı gruba ayrılır:

1- PIC16C5XX ailesi 12- bit kelime boyu
2- PIC16CXXX ailesi 14- bit kelime boyu
3- PIC17CXXX ailesi 16- bit kelime boyu
4- PIC12CXXX ailesi 12- bit/14 bit kelime boyu

Bir CPU veya MCU’nun chip dışındaki harici ünitelerle veri alışverişini kaç bit ile yapıyorsa buna veri yolu bit sayısı denir.PIC’ler farklı kelime boylarında üretilsede harici veri yolu tüm PİC’lerde 8-bittir.

PİC programlayıcıları program kodlarını yazarken bir komutun kaç bitlik bir kelime boyundan oluştuğuyla ilgilenmezler. Seçilen bir PIC’i programlarken uyulması gereken kuralları ve o PIC ile ilgili özelliklerin bilinmesi yeterlidir. Bu özellikler PIC’in bellek miktarı, I/O portu sayısı, A/D dönüştürücüye sahip olup olmadığı, kesme ( interrupt ) fonksiyonlarının olup olmadığı, bellek tipinin ne olduğu ( Flash, EPROM, EEPROM vb. ), gibi bilgilerdir.

Çeşitli PİC’lerin özellikleri aşağıdaki tabloda verilmiştir ;

FAMİLY ARCHİTECTURAL FEATURES NAME TECHNOLOGY PRODUCTS
PIC17CXXX 8 Bit
High- Perfor-
mance
MCU
Family -16-bit wide
instruction set
-Internal / external
vectored interrupts
-DC-25 MHz clock speed
-120 ns instruction
cycle
(@ 33 MHz)
-Hardware multiply PIC17C4X OTP program memory,
dıgıtal only PIC17C42A,PIC17C43,PIC17C44
PIC17CR4X ROM program memory,
dıgıtal only PIC17CR42,PIC17CR43
PIC17C75XX OTP program memory wıth mixed-signal functions PIC17C756
PIC16CXXX 8-bit
MidRange MCU
Family -14-bit wide
instruction set
- Internal/external interrupts
-DC-20 MHz clock speed
-200 ns instruction
cycle
(@ 20 MHz)
PIC14CXX OTP program memory wıth A/D and D/A functions PIC14C000
PIC16C55X OTP program memory,
dıgıtal only PIC16C554,PIC16C556,PIC16C558
PIC16C6X OTP program memory,
dıgıtal only PIC16C62,PIC16C62A, PIC16C63,PIC16C64, PIC16C64A,PIC16C65,PIC16C65A PIC16C66,PIC16C67
PIC16CR6X ROM program memory,
dıgıtal only PIC16CR62,PIC16CR63, PIC16CR64,PIC16CR65
PIC16C62X OTP program memory
With comparators PIC16C620,PIC16C621,PIC16C622
PIC16C7X OTP program memory
wıthanalog functions
(i.e. A/D) PIC16C710,PIC16C71,PIC16C711,
PIC16C715, PIC16C72,PIC16C73,
PIC16C73A, PIC16C74,PIC16C74A,
PIC16C76,PIC16C77
PIC16F8X Flash program and
EEPROM data memory PIC16C84
PIC16F83,PIC16F84
PIC16CR8X ROM program and
EEPROM data memory PIC16CR83,PIC16CR84
PIC16C9XX OTP program memory,
LCD driver PIC16C923,PIC16C924
PIC16C5X 8-bit
Baseline MCU FAMİLY -12-bit wide
instruction set
-DC-20 MHz clock speed
-200 ns instruction
cycle
(@ 20 MHz) PIC16C5X
PIC16C5XA OTP program memory,
dıgıtal only PIC16C52,PIC16C54,PIC16C54A,
PIC16C55,PIC16C56,PIC16C57,
PIC16C58A
PIC16CR5X
PIC16CR5XA ROM program memory,
dıgıtal only PIC16CR54A,PIC16CR57B,
PIC16CR58A
PIC12CXXX 8-bit-8 Pin
MCU Family -12 or 14-bit
wide
instruction set
-DC-20 MHz clock speed
-1000 ns instruction
cycle
(@ 4 MHz PIC12C5XX OTP program memory,
dıgıtal only PIC12C508,PIC12C509
PIC12C67X OTP program memory
wıth
analog functions PIC12C671,PIC12C672

FAMİLY: PIC’ler program belleğini kelime genişliğine göre sınıflara ayrılmıştır.Bu sınıflardan her birine family (aile) denir. ARCHİTECTURAL FEATUARES: Kelime genişliği saat frekansı, kesme özellikleri gibi bilgilerin verildiği sütun.
NAME: Bir aile içinde farklı özellikte üretilenlerin isimleri
TECNOLOGY: Program ve data belleğini belirten sütun
PRODUCTS: PIC’in anma adı

PIC BELLEK ÇEŞİTLERİ

PIC’lerin farklı özellikte bellekleri vardır.Bunlar ;

1- Silenebilir ve programlanabilir bellek (Erasable PROgrammable Memory-EPROM)

2- Elektriksel olarak silinebilir olarak silinebilir ve programlanabilir belllek (Electrically

Erasable PROgrammable Memory-EEPROM).FLASH bellek de denir.

3- Sadece okunabilir bellek. (Read Only Memory-ROM)

Her bir bellek tipinin kullanılacağı uygulamaya göre avantajları vardır.

PIC16F84

RA2 RA3 RA4 MCRL Vss RB0 RB1 RB2 RB3
TOCK1 INT

1 2 3 4 5 6 7 8 9

18 17 16 15 14 13 12 11 10

RA1 RA0 OSC OSC Vdd RB7 RB6 RB5 RB4
CLKIN CLKOUT

PIC16F84’ÜN GÖRÜNÜŞÜ

CMOS teknolojisiyle üretilmiş olan PIC16F84 çok az enerji harcar. Flash belleğe sahip olması nedeniyle clock girişine uygulanan sinyal kesildiğinde registerleri içersin de ki veri aynen kalır. Clock sinyali tekrar verildiğinde PIC içersinde ki program, kaldığı yerden devam eder. RA0 – RA3 pinleri ve RB0 – RB7 pinleri I/O portlarıdır. Bu portlardan girilen dijital sinyaller vasıtasıyla PIC içersinde çalışan programa veri girilmiş olur. Program verileri değerlendirerek portları kullanmak suretiyle dış ortama sinyaller gönderir. Dış ortama gönderilen sinyallerin akımı yeterli olmadığı durumda, yükselteç devreleri ( Röle,Transistör, vb.. ) ile yükseltilerek kumanda edilecek cihaza uygulanır. Bu akımlar bir led sürebilecek yeterliliktedir;

I/O pini I/O pini
SİNK AKIMI 25 mA SOURCE AKIMI 20 mA

13

PIC16F84
13

PIC16F84
Gerilim kaynağından çıkış portuna doğru akan akıma sink akımı,I/O pininden GND’ye doğru akan akımada source akımı denir.

Sink Akımı Source Akımı
+5 V
RB7 RB7

PIC16F84’ün çektiği akım,besleme gerilimine,clock girişine uygulanan sinyalin frekansına ve I/O pinlerinde ki yüke bağlı olarak değişir.Tipik olarak 4 MHz’lik clock frekansında çektiği akım 2 mA kadardır. Bu akım uygulama modunda (Sleep Mode) yaklaşık olarak 40 mikroampere kadar düşer.

BESLEME GERİLİMİ

14 Vdd

PIC16F84
5 Vss
+5 volt

0,1 μF

PIC’ in besleme gerilimi 5 ve 14 nolu pinlerden uygulanır.5 nolu Vdd ucu +5 V’ta , 14 nolu Vss ucu toprağa bağlanır.PIC’e ilk defa enerji verildiğinde meydana gelebilecek gerilim dalgalanmaları nedeniyle is-tenmeyen arızaları önlemek amacıyla Vdd ile Vss arasına 0,1 μF’lık bir dekuplaj kondansatörü bağlamak gerekir.

CLOCK UCLARI ve CLOCK OSİLATÖRÜ ÇEŞTLERİ

PIC belleğinde bulunan program komutlarının çalıştırılması için bir kare dalga sinyale ihtiyaç vardır. Bu sinyale clock (saat) sinyali denilir.PIC16F84 ‘ün clock sinyali için kullanılan iki ucu vardır.Bunlar 16 nolu uç OSC1 ve 15 nolu uç OSC2 ‘dir.Bu uclara farklı tipte osilatörlerden elde edilen clock sinyalleri uygulanabilir.Clock osilatör tipleri 4’ eayrılır ;
1- RC (Direnç / kondansatör)
2- XT (Kristal veya seramik resonatör)

3- HS (Yüksek hızlı kristal veya seramik resonatör)
4- LP (Düşük frekanslı kristal)

Seçilecek olan osilatör tipi PIC’in kontrol ettiği devrenin hız gereksinimine bağlı olarak seçilir. Kul-lanılan osilatör tiplerinin kullanılacağı frekans sınırları ;

Osilatör Tipi Frekans Sınırı
RC 0-4 MHz
LP 5-200 KHz
XT 100 KHz-4 MHz
HS(-04) 4 MHz
HS(-10) 4-10 MHz
HS(-20) 4-20 MHz
PIC’e bağlanan clock osilatörün tipi proglama esnasında PIC içersinde bulunan konfigürasyon bitle-rine yazılmalıdır.

+5V
RC CLOCK OSİLATÖRÜ :
R
PIC’ in kontrol ettiği elektronik devrede ki zamanlamanın
C hassas olması gerekmeyen yerlerde kullanılır.Belirlenen değerden
fosc/ 4 yaklaşık %20 sapma gösterir.

KRİSTAL KONTROLLÜ CLOCK OSİLATÖRLERİ :

+5 V Zamanlamanın çok hassas olduğu devrelerde
kullanılır.Bu tip clock osilatörleri metal bir kutu görü-
nümündedir.Bu tip osilatör devrelerine kondansatör
bağlantısı gerekmez.

1 7

KRİSTAL VE KONDANSATÖR

Zamanlamanın önemli olduğu yerlerde kullanılır.
Kristal osilatörlerin kullanıldığı devrede kristale bağlanacak
C1 kondansatörün seçimine özen göstermek gerekir.
Seçilen kondansatör değerlerinin yanlış seçilirse
elde edilen kare dalgaların bozuk olmasına ve PIC’in çalış-
Kristal mamasına neden olur.C1 ve C2 kondansatörlerinin değer-
leri birbirine eşit olmalıdır.

C2

SERAMİK RESONATÖRLER

İçersinde kondansatörleri hazır bulunan kristal osilatörlerdir.Fiyatları ucuz ve hassastırlar.3 ucu vardır.Bu uçlardan orta uç toprağa, diğer iki uç OSC1 ve OSC2 uçlarına bağlanır.

RESET UÇLARI ve RESET DEVRESİ

+5 V

10 K
PIC16F84’ün besleme uçlarına gerilim uygulandığı anda
bellekteki programın başlangıç adresinden itibaren çalışmasını
sağlayan bir reset devresi vardır.Bu reset devresi PIC içersin-
100Ω dedir ve Power-on-Reset denir
MCLR ucu ise kullanıcının programı kesip, kasti olarak
başlangıca döndürebilmesi için kullanılır.PIC’in 4 nolu MCLR
ucuna uygulanan gerilim 0 V olunca, programın çalışması baş-
langıç adresine döner.Programın ilk adresten itibaren tekrar
Reset Butonu çalışabilmesi için reset ucuna uygulanan gerilimin +5 V olması
gerekir.Bir buton aracılığıyla reset işlemini yapan devre şekil-
de görülmektedir.

I / O PORTLARI
PIC16F84 ‘ün 13 adet giriş/çıkış portu vardır.Bunlardan beş tanesine A portu (RA0-RA4), sekiz tanesine de,B portu (RB0-RB7) denir.13 portun her biri giriş yada çıkış olarak kullanılabilir.PIC içersinde TRIS denilen özel bir data yönlendirme registeri vardır.Bu register aracılığıyla portların giriş/çıkış yönlendirmesi yapılır.

I/O portlarından geçebilecek 25 mA’lik bir sink akımı veya 20mA’lik source akımı ledleri doğrudan sürebilir.Bu akımlar aynı zamanda LCD,lojik entegre hatta 220 V’luk şehir şebekesine bağlı bir lambayı kontrol eden triyakı bile tetiklemeye yeterlidir.

220 V
Triyak

Led Lamba

PIC16F84′ün portlarıyla kontrol edilen 220 V’luk lamba ve led PIC16F84′ün B port uçlarının dahili olarak
pull-up yapılması

B portunun 8 nolu ucu, PIC içersinde dahili olarak 50 KΩ’ luk dirençlerle pull-up yapılmış gibi etki gösterir.Bu durum şekilde temsili olarak görülmektedir.PIC’in içersinde gerçekte bir pull-up direnci değil, farklı bir mantıksal devre vardır.

Bu 8 nolu ucun pull-up direncinin tamamı option register içersindeki yazılım aracılığıyla iptal (Disab-le) edilebilir veya geçerli (Enable) kılınabilir.Port uclarından herhangi birisi çıkış olarak yönlendirildiğinde o uçtaki pull-up direnci otomatik olarak iptal edilir.PIC’e enerji verildiğinde (Power-on-reset) ise tüm pull-up’lar iptal edilir.

A portunun 4. biti,TOCK1 adı verilen harici timer/counter giriş ucu ile ortaklaşa kullanılır.Bu nedenle 16F84′ün pin görünüşü üzerinde 3 nolu pin ucu RA4/TOCK1 yazılmıştır.RA4 ucu çıkış olarak yönlendirildi-ğinde açık kollektör özellğinden dolayı harici olarak muhakkak bir pull-up direncine bağlanmalıdır.

PIC16F84′ÜN BELLEĞİ

PIC16F84 mikrodenetleyicisinin belleği, program ve RAM belleği olmak üzere iki ayrı bellek bloğun-dan oluşur.

PROGRAM BELLEĞİ:

1
2
3

1023
0X000
0X001
Bellek Adreslerinin
Heksadesimal
sayılarla gösterimi Bellek Adreslerinin ondalık sayılarla gösterimi

14 bit uzunluğundaki komutların
depolandığı alan

PIC16F84’ün 1 Kbyte’lık program belleği vardır. Her bir bellek hücresi içerisine 14 bit uzunluğundaki komutları saklanır. Program belleği flash ( elektiriksel olarak yazılıp silinebilir ) olmasına rağmen, programın çalışması esnasında sadece okunabilir.

PIC16F84’ün program belleği içerisinde sadece assembly komutları saklanır.Bu komutlar dışında RETLW komutu ile birlikte kullanılan sınırlı miktarda data da yüklenebilir.

NOT:

Yukarıda PIC16F84’ün program bellek haritasındaki adresler gösterilirken sol tarafta heksadesimal notasyon kullanılmıştır. PIC programlama esnasında da bellek adresleri bu şekilde yazılır. 0 x XX heksadesimal notasyonunda X’ler 0 – F arasındaki herhangi bir sayıyı, “0x” ise bu sayıların heksadesimal olduğunu belirtir. Örneğin 0 x 0F, heksadesimal 0F sayısı demektir. 0 x 3FF ise 3FF heksadesimal sayısını gösterir. PIC16F84’ün program belleğine 14 bit uzunluğunda toplam 1024 tane komut yazılabilir. Bellek haritasında son bellek adresinin 0x3FF=1023 gösterilmesinin nedeni, adresin 0’dan başlamasındandır.Adres 1’den başlasaydı son adres 0×400=1024 olacaktı.

RAM BELLEK

PIC16F84’ün 0×00-0x4F adres aralığında ayrılmış olan RAM belleği vardır.Bu bellek içerisindeki file göstergeleri içerisine yerleştirilen veriler PIC CPU’sunun çalışmasını kontrol ederler.File göstergelerinin bellek uzunluğu 8 bit’tir.Sadece PCLATH registeri 5 bit uzunluğundadır. File register adı verilen özel veri alanlarının dışında kalan diğer bellek alanları ,normal RAM bellek olarak kullanılır.Yani bu alanlarda prog-ramda içerisindeki değişkenler için kullanılır.

FİLE REGİSTER HARİTASI

0X00 0X80
0X01 0X81

0X02 0X82
0X83
0X03 0X84
0X04
0X05 0X85
0X06 0X86

EEPROM Bellek Alanı:

0x0A 0x08A
0x0B
0x08B
0x0C 0x08C
Genel amaçlı registerlerin kullanacağı alan

0X4F 0XCF

BANK 0 BANK 1

PIC16F84’ün RAM belleği iki sayfadan (bankdan) meydana gelir.BANKO’ da ki registerlerin ad-resleri 0×00 ile 0x4F arasında ,BAK 1’de ki registerlerin adresleri de 0×80 ile 0xCF arasındadır.Toplam 80 tane file register vardır.0x0C adresinden sonra RAM (Data Belleği) olarak kullanılan bölgedeki veriler
0x8C adresinden itibaren gölgelendirilmiştir (shadowed).Gölgeleme, otomatik kopyalama işlemi olarak algı-landığın da anlaşılması daha kolay olacaktır.Bir bankda ki registeri kullanabilmek için o Bank’a geçmek gerekir.

W RGİSTER

PIC16F84’ün RAM bellek alanında görülmeyen birde W registeri vardır.W register bir akümülatör veya geçici depolama alanı olarak düşünülebilir.W registerine direkt olarak ulaşmak mümkün değildir.Ancak diğer registerlerin içersinde ki verileri aktarırken, erişmek mümkündür.Bir PIC’de gerçekleşen tüm aritmetik işlemler ve atama işlemleri için W register kullanılmak zorunluluğu vardır.

PIC ASSEMBLY

ASSEMBLER NEDİR ?

Asembler,bir text editöründe asembly dili kurallarına göre yazılmış olan komutları PIC’in anlayabileceği hexadesimal kodlara çeviren (derleyen) bir programdır.Microchip firmasının hazırladığı MPASM bu işi yapan asembler programıdır.Asembler’e çoğu zaman compiler de (derleyici) denilir.

PIC ASSEMBLY DİLİ NEDİR?

Assembly dili,bir PIC’e yaptırılması istenen işlerin belirli kurallara göre yazılmış komutlar dizisidir.Assembly dili komutları İngilizce dilindeki bazı kısaltmalardan meydana gelir.Bu kısaltmalar genellikle bir komutun çalışmasını ifade eden cümlenin baş harflerinden oluşur.Böylece elde edilen komut, bellekte tutlması kolay (mnemonıc) bir hale getirilmiştir.
Örneğin;

BTFSC(Bit Test F Skip if Clear) –File registerdeki Bit’i test et, eğer sıfırsa bir sonraki komutu atla,anlamında kullanılan İngilizce cümlenin kısaltmasıdır.

PIC ASSEMBLY DİLİ YAZIM KURALLARI

Windows altında çalışan NOTPAD veya DOS altında çalışan EDIT en uygundur.Bunların dışında printer kontrol komutları içermeyen ve ASCII kodunda dosya üretebilen herhangi bir editör de kullanıla-bilir.MPLAB kullanıldığında ayrıca bir editör kullanmaya gerek yoktur.Çünkü MPLAB’ın içinde hem bir text editörü hem de MPASM bulunmaktadır.

MPASM assember programının yazılan komutları doğru olarak algılayıp, PIC’in anlayabileceği hek-sadesimal kodlara dönüştürebilmesi için şu bilgiler program içinde özel formatta yazılması gerekir;

1-Komutların hangi PIC16XX için yazıldığı,
2-Programın bellekteki hangi adresten başlayacağı,
3-Komutların ve etiketlerin nelerin olduğu,
4-Programın bitiş yeri.

Basit bir örnekle bu bilgilerin program içinde nasıl yazıldığını gösterelim.Program ilk olarak PIC16F84’e B portunun 8 ucunu da çıkış olarak tanıtacak Daha sonra bu porttaki ilk dört bitini lojik 1,sonraki dört bitini de lojik 0 yapacak. Son olarak program sonsuz bir döngüye girecektir.Bu işlemleri yapacak olan programın akış diyagramı ve komutları aşağıdaki gibi olacaktır.

;*************PIC.ASM***********************************************
LIST P=16F84
;**********Adres Tanımlama Bloğu***************************************
STATUS EQU 0×03
PORTB EQU 0×06
TRISB EQU 0×86
ORG 0×00 ; Programı 0X00′dan başlat
;***********Portların Durumunu Belirleme Bloğu*****************************
START
CLRF PORTB ; PortB’nin içini sıfırla
BSF STATUS,5 ; BANK1′e geç
CLRF TRISB ; portB’nin uçlarını output yap
BCF STATUS,5 ; tekrar BANKO’a geç
;***********Program Bloğu************************************************
MOVLW 0x0F ; W registerine 0x0F’i yükle
MOVWF PORTB ; W’i portB’ye yükle
;***********Sonlandırma Bloğu*********************************************
DONGU
GOTO DONGU
END

Noktalı Virgül( ; )
Baş tarafına ( ; ) konulan satır, assembler tarafından heksadesimal kodlara dönüştürülmez.Bu satır-lar programın geliştirilmesi esnasında hatırlatıcı açıklamaların yazılmasında kullanılır.

Girintiler ve Program Bölümleri

Text editörlerinde birbirinden farklı uzunlukta girintiler veren TAB özelliği vardır.Bu özellikten ya-rarlanarak assembly komutları üç kolono bölünerek yazılır.Bir assembly programı temel olarak dört bölüme ayrılır.Bunlar : Başlık,atama,program, ve sonuç bölümleridir.

Assembler Bildirileri
Başlık
Bloğu LIST PIC16F84

Etiket Atama Bloğu Hex Adres
Atama
Bloğu STATUS EQU 0×03

Etiket Komut Hex Adres

Program ORG 0×00
Bloğu START CLRF PORTB
MOVLW 0x0F

Sonlandırma
Bloğu DÖNGÜ GOTO DÖNGÜ
END

BAŞLIK

Programın en başında ki bilgilere başlık bölümü denir.

LIST P = 16F84

Başlık bölümünde program dosyasının adı ve hazırlandığı tarih yazılabilir.” LIST P = 16F84 satırı, programın hangi PIC için yazıldığını belirtir.LIST bir compiler bildirisidir.Yani compileri yönlendiren ko-muttur ve tek kullanış amacı yeri burasıdır.
Başlık bölümünde, ” INCLUDE” komutuda kullanılabilir.INCLUDE komutu adresleri sabit olan STATUS,PORTA,PORTB,TRISA,TRISB gibi özel registerlerin atamalar bloğunda adresleri her defasında belirtme zorunluluğunu ortadan kaldırmak için kullanılan bir compiler bildirisidir.

ETİKETLER

PIC belleğindeki bir adresin atandığını,hatırlamayı kolaylaştıran kısaltmalardan meydana gelen sembolik isimlere etiket denir.Örneğin PORTB etiketi,PIC16F84′ün file register belleğinde ki B portunun bulunduğu adresi temsil eden etikettir.Etiketler program içinde 1. kolona yazılır.

PORTB EQU 0×06 ifadesi program içersinde yazıldıktan sonra B portunun hangi adreste oldu-ğunu akılda tutmaya gerek yoktur.EQU (eşitleme) ifadesidir.Bu ifade BASIC programlama dilinde ki (=), PASCAL programlama dilinde ki (: =) ifade ile aynı anlamdadır.Programın herhangi bir yerinde PORTB etiketi kullanıldığında, B portunun adresi olan 0×06 yazılmış gibi işlem görür.

Birinci kolona yazılan ve adres atanmayan etiketler de kullanılabilir.Örneğin, START ve DONGU bu tip etiketlerdir.Bu etiketler program akışını istenilen bir yere dallanmasını sağlamak amacıyla kullanılır. Program akışı yukardan aşağıya doğru devam ederken GOTO DONGU komutu ile, akış DONGU yazılan etikete dallandırılır.Bu etiketin adresi bir özel register adresi gibi fiziksel bir adres değildir.Bu şekilde tanım-lanan bir etikete assembler otomatik olarak bir adres atar.Bu adresi bizim bilmemize gerek yoktur.

Etiket Tanımlarken Uyulması Gereken Kurallar Şunlardır :

1- Etiketler birinci kolona yazılmalıdır.
2- Etiketler bir harfle veya alt çizgiyle başlamalıdır.
3- Etiketler içersinde Türkçe karakterler kullanılmaz.
4- Etiketler bir assembly komutundan oluşamaz.
5- Etiketler içersinde alt çizgi, rakam,soru işareti bulunabilir.
6- Etiketler en fazla 31 karakter uzunluğunda olabilir.
7- Etiketler büyük/küçük harf duyarlılığı vardır.

ATAMA DEYİMİ
EQU deyimi PIC16F84’ün belleğinde ki bir hexadesimal adresi belirlenen bir etikete atamak için kullanılır.Örnek :
Etiket Atama Deyimi
PORTB EQU 0×06

Hexadesimal Sayıyı İfade Eder Hexadesimal Adres

SABİTLER :

PIC assembly dilinde hexadecimal sayılar birer sabittir.Sabitler MOVLW ve bazı mantıksal ve aritmetiksel işlem komutlarında kullanılır.

Komut
Etiket
START MOVLW 0×02
Sabit
ORG DEYİMİ :

ORG deyimi iki amaç için kullanılır.

Program komutlarının hangi adresten başladığını gösterir.

ORG 0×00
0×000 ilk program komutunun bellek adresi

PIC16F84’ ün ınterrupt alt programlarının başlangıç adresini belirlemede kullanılır.

ORG 0×004
0×004 adresi,ınterrupt alt programlarının
başlangıç adresi

SONLANDIRMA BLOĞU :

PIC16F84 ‘ün duraklama (halt ) komutu yoktur.Programı belli bir yerde duraklatmak için bazen sonsuz döngü kullanılır.

DONGU
GOTO DONGU
END

Yukarıda ki sonsuz döngüde DONGU etiketine assembler otomatik olarak bir adres verir.GOTO DONGU komutu ise program akışını devamlı olarak aynı adrese gönderir.Bu durumda program belirlenen adreste duraklatılmış olur.

END deyimi ise program komutlarının sona erdiğini assemblere bildirir.Her program sonunda END deyimi mutlaka kullanılmalıdır.Aksi halde program derlenirken dosya sonunun belirtilmediğini belirten bir hata mesajı verecektir.

BÜYÜK VE KÜÇÜK HARFLERİN KULLANIMI :

PIC assembler komutlarının büyük veya küçük harfle yazlması önemli değildir.İstenirse büyük /kü-çük harf karışımı komutlarda kullanılabilir.Örneğin, mOVlw, MOVlw, movlw, MOVLW komutları arasında fark yoktur. Ancak etiketler büyük/küçük harfe duyarlıdır.Start ile START birbirinin aynısı değildir. Herhangi bir karışıklığa neden olmaması için hep büyük veya hep küçük harf kullanılması en iyi seçimdir.

PIC ASSEMBLY KOMUTLARININ YAZILIŞ BİÇİMİ

PIC16F84 ‘ün toplam 35 komutu vardır.Bu komutların yazılış biçimi üç grupta toplanır ;

1- Byte-yönlendirmeli komutlar
2- Bit – yönlendirmeli komutlar
3- Sabit işleyen komutlar
4- Kontrol komutlar

Komutlarda kullanılan harflerin anlamları :

f : File register
d : Destination (gönderilen yer )
d = 0____W register
d = 1____file register
k : Sabit veya adres etiketi
b : Bit tanımlayıcı
b : Binary sayıları belirleyen harf ( Örneğin b’00001111’gibi)
d : Desimal sayıları belirleyen harf ( Örneğin d’16’ gibi )

Byte – Yönlendirmeli Komutlar :

File Register
Hexadesimal adres veya file registerin adı
f , d

Komut Destination ( Gönderilecek Yer )
Komutun çalışmasından sonra sonucun nereye yazılacağını belirler.
d = 0____W register
d = 1____file register
Örnek :

MOVF 0×03 , 0 ; 0×03 adresinde ki file registerin içeriğini W registerin içersine kopyalanır.
MOVF STATUS , 0 ; STATUS registerin içeriği W registere kopyalanır.
MOVF STATUS , 1 ; STATUS registerinin içeriği yine kendi içine yazılır.

NOT :
Byte- yönlendirmeli komutlarda destination (gönderilecek yer ) belirleyen d’ nin yazıldığı yere 0 veya 1 yazmak , hatırlatıcı olmayabilir.MPASM bunu dikkate alarak 0 yerine w,1 yerine f yazmaya izin verir. MPSAM MS-DOS versiyonunda ise w ve f harflerini otomatik olarak kullanılmasına izin verilmez. Bu du-rumda her programın tanımlama bölümünde aşağıda ki eşitsizlikler yazılmalıdır.

W EQU 0
F EQU 1

Bu eşitliklerden sonra komutlarda destination belirlemek için w ve f harfleri kullanılabilir.Örneğin :
INCF SAY , w ; SAY registerinin içeriği 1 arttırıldıktan sonra sonuç W registerine yazılır.(W=SAY+1 )
INCF SAY , f w ; SAY registerinin içeriği 1 arttırıldıktan sonra sonuç SAY registerine yazılır.(SAY=SAY+1)

Bit-Yönlendirmeli Komutlar

File register
Hexadesimal adres veya file registerin adı
Komut
f , b

Bit Tanımlayıcı
0-7 arasında hexadesimal sayı veya etiket

Örnek :

BCF 0×03 , 5 ; 0×03 adresinde ki registerin 5. bitini sıfırla

BSF STATUS , BESBIT ; STATUS registerinin BESBIT etiketiyle tanımlı olan bitini ”1” yapar. (Ta- nımlama bloğunda BESBIT EQU 5 yazılması gerekir. )

Sabit İşleyen Komutlar

Sabit
Örnekler: Hexadesimal 0x0C veya h’0C’
k Binary b’00001100′
Desimal d’10′
Komut

Örnek :

MOVLW 0x2F ;W registerine 2F hexadesimal sayısını yükler.
ADDLW b’00101111′ ;W registeri içersinde ki sayıya 00101111 binary sayısını ekler.

Kontrol Komutları

Adres Etiketi

k
Komut

Örnek

GOTO DONGU ; Program akışı DONGU olarak belirlenen etikete dallanır.
CALL TIMER ; Program akışı TIMER etiketiyle adreste ki alt programa dallanır.

NOT : Program içersinde yazılan etiketlere assembler otomatik olarak adres verir.

SAYI VE KARAKTERLERİN YAZILIŞ BİÇİMİ

PIC assembly komutlarında sayılar hexadesimal,binary veya desimal formda kullanılır.

Hexadesimal Sayılar

Hexadesimal sayılar ”0x” , ”0” veya ”h” harfleriyle başlamalıdır.Örneğin, STATUS registerine 03 adresini atamak için aşağıda gösterilen yazılış biçimleri kullanılabilir.

STATUS EQU 0×03
EQU 3
EQU 03
EQU 03h
EQU h’03′

MOVLW komutuyla W registeri içersine yüklenecek olan FF hexadesimal sabitler ise aşağıda ki gibi yazılır.

MOVLW 0xFF
h’FF’

Mikrodenetleyiciler ve PIC Programlama

Eğer FF heksadesimal sayısını aşağıdaki gibi kullanmaya kalkışırsanız çalışmaz.

MOVLW FF
FFh

Çünkü kural olarak heksadesimal sayılar muhakkak ‘0’veya ‘h’harfi ile başlamalıdır.

BİNARY SAYILAR

Binary sayılar b harfi ile başlamalıdır.Örneğin 00001010 binary sayısını W registeri içerisine
yüklemek için aşağıdaki gibi yazımalıdır.

MOVLW b ‘00001010’
ANDLW b ‘00001111

DESİMAL SAYILAR

Desimal sayıların başında d harfi konularak tırnak içerisinde yazılırlar.Örneğin 15 desimal
sayısı W registeri içerisine yüklemek için aşağıdaki gibi yazılmalıdır.

MOVLW d ‘15’
ANDLW d ‘255’

ASCII Karakterler

Genellikle RETLW komutu ile birlikte kullanılan ASCII karakterler tırnak içerisinde
alınarak aşağıdaki gibi yazılır.

RETLW ‘A’
RETLW ‘T’

PIC ASSEMBLY KOMUTLARI

Yer Değiştirme veya Yükleme Komutları

Komut ve Örnek İngilizce tanımı Türkçe Açıklaması
MOVLW k Move Literal to W K sabit değerini W registerine yükler.
MOVLW h’of’ W 0F

MOVF f,d Move f f registerinin içeriğini W veya f’ e yükler.
MOVF TEST, 0 d=0 W TEST

d=1 TEST TEST

MOVWF f Move W to f W registerin iceriğini f registerine yükler.
MOVWF PORTA PORTA W

REGİSTER İÇERİĞİNİ DEĞİŞTİRME KOMUTLARI

CLRF f Clear f f registerinin içeriğini siler (sıfırlar)
CRLF
TRISA TRISA 00000000
CLRW Clear W W registerin içeriğini siler.(sıfırlar)
CLRW
W 00000000

COMF
f,d
Complement f F registerinin içindeki sayı terslenir.Yani tüm 1’ler
0,0 lar 1 olur.Sonuç W veya fregisterine yüklenir.

COMF
SAY ,0 SAY= 00110110ise,
d=0 w 11001001
d=1 SAY 11001001

DECF f , d Decrement f F registerinin içerisinde ki sayıyı ”1” eksiltir. Registerin içeriği h’00′ ise,”1” eksiltildiğinde h’FF’ olur.Sonuç W veya f registerine yazılır.
DECF GIT,1 GIT=h’2C’ ise 2C-1=2B
d=1 GI 2B
d=0 olsaydı W 2B

INCF f , d Increment f F registerinin içerisinde ki sayıyı ”1” arttırır.Registerin içeriği h’FF’ ise, ”1” arttırıldığında h’00′ olur.Sonuç W veya f registerine yazılır.
INCF GIT , 0 GIT=h’2C’ ise 2C+1=2D
d=0 W 2D
d01 olsaydı GIT 2D

BCF f , b Bit Clear f F registerinin içersindeki sayının b.inici bitini sıfırlar.
BCF
PORTB,5 PORTB=b’11111111′ ise
PORTB b’00100000

BSF f , b Bit Set f f registeri içersinde ki sayının b.ininci bitini 1 yapar.
BSF PORTA,3 PORTA=b’00000000′ise
PORTA b’00001000′

RLF f,d Rotate Left F f registeri içerisindeki sayıyı bir pozisyon sola kaydırır. Registerden taşarak Carry bayrağına yazılan bit,LSB’ye yazılır.Sonuç W veya f registerine yazılır.
RLF
KAY,0 KAY=b’10110110′ ise
Carry Bayrağı LSB

d=0 olduğundan W 01101101
d=1 olsaydı KAY 01101101
RRF f,d Rotate Right f f registeri içerisindeki sayıyı bir pozisyon sağa kaydırır. Registerden taşarak Carry bayrağına yazılan bit,MSB’ye yazılır.Sonuç W veya f registerine yazılır.
RRF
KAY,1 KAY=b’10110111′ ise
Carry Bayrağı MSB

d=1 olduğundan W 11011011
d=0 olsaydı KAY 11011011
SWAPF f,d Swap nibbles in f f registerinin içersinde ki ilk dört bit ile son dört biti yer değiştirir.Sonuç W veya f registere yüklenir.
SWAPF DEG,1 DEG=b’00101111′ ise
d=1 olduğundan DEG 11110010
d=0 olsaydı W 11110010

Program Akışını Kontrol Etme Komutları

GOTO k Go to adress Program akışını k adresine dallanır.
GOTO DONGU Program,DONGU etiketinin yazıldığı yere dallanır ve buradan itibaren devam eder.
CALL k Call subroutine Program akışını k etiketinin bulunduğu yerde ki alt programa dallanır.
CALL TIMER Program TIMER etiketinin yazıldığı alt program satırlarının başlangıcına dallanır ve buradan itibaren devam eder:
RETURN Return from subroutine Alt program komutlarının en sonuna yazılan bu komut,program akışını ana programa geri döndürür.
RETLW Return with Literal in W Program akışını alt programdan ana programa döndürür ve W registerine k sabitini yükler.
RETLW H’2F’ Alt programdan ana programa döndürür ve W registerine 2F yüklenir.
RETFIE Return From Interrupt Program akışını ınterrupt alt programından ana programa döndürür.

BTFSC f,b Bıt Test F,Skıp if Clear F registerinin b.inci bitini test eder.Eğer bu bit ”0”ise program akışı bir sonraki komuta geçer.
BTFSC PORTA,2 PORTA=b’00000100′ise, 1
PORTA=b’00000000′ise, 2

BTFSC PORTA,2

GOTO START

MOVLW h’FF’

BTFSS f,b Bıt Test F,Skıp if Set F registerinin b.inci bit’ini test eder.Eğer bu bit ”1”se program akışı bir sonraki komuta geçer.
BTFSS
PORT,0 PORTA=b’00000001′ ise 1
PORTA=b’00000000′ ise 2

BTFSS PORTA,0

GOTO START

MOVLW h’FF’

DECFSZ f,d Decrement f,Skıp if Zero F registerinin içeriğini ”1” azaltır.Register içeriği 0′sa bir sonraki komuta atlar.Sonuç W veya f registerine yazılır.

DECFSZ
SAYAC,1 SAYAC=h’2F’ ise 2F-1=2E
d=0 olsaydı W h’2E’
d=1 olduğundan SAYAC h’2E’
INCFSZ f,d Increment f,Skip if Zero F registerinin içeriğini ”1” arttırır.Register içeriği ”0”sa bir sonraki komuta atlar.Sonuç W veya f registerine yazılır.
INCFSZ SAYAC,1 SAYAC=h’2F’ ise 2F+1=2E
d=0 W h’30′
d=1 SAYAC h’30′

Mikrodenetleyici Kontrol Komutları

CLRWDT Clear Watchdog Tımer Watchdog timer’ı sıfırlar.Ayrıca watch-dog timer’ın prescalar değerinide sıfırlar.Status bit’lerinden TO ve PD’yi ”1” yapar.
SLEEP Go into standby mode Mikrodenetleyici uyuma moduna geçire-rek,güç harcamasını azaltır.Mikrodenetle-yici uyuma modundan reset,watchdog ti-mer ve TOCKI giriş vasıtasıyla çıkar.

Mantıksal Komutlar

ANDLW k AND Literal with W W registerin içeriği ile k sabitine AND iş-lemini uygular.Sonuç W registerine yazılır.
ANDLW b!00110001 W=b’10011101′ ise
b’00110001′ sabitinin değeri
b’11011110′ AND işlemi sonucu
W b’00010001′

ANDWF f,d AND W with f W registeriyle file register içeriğine AND işlemini uygular.Sonuç W veya f registerine yazılır.
ANDWF TEST,1 W=b’11111111′ ise
TEST=b’11011110′ ise
b’11011110′AND işlemi sonucu
d=0 ise W b’11011110′
d=1 olduğundan TEST b’11011110′

IORLW k Inclusive OR Literal with W W registerin içeriği ile k sabitine OR iş-lemini uygular.Sonuç W registerine yazılır.

IORLW B’00101000′ W=b’10000100′ ise
b’00101000′ sabitinin değeri
b’10101100′ OR işlemi sonucu
W b’10101100′

IORWF f,d W registeriyle file register içeriğine OR işlemini uygular.Sonuç W veya f registerine yazılır.
IORWF TEST,1 W=b’10000100′ ise
TEST=b’00101000′ ise
b’10101100′ OR işlemi sonucu
d=0 ise W b’10101100′
d=1 olduğundan TEST b’10101100′

XORLW k Excluvise OR Literal with W W registerin içeriği ile k sabitine XOR iş-lemini uygular.Sonuç W registerine yazılır.

XORLW B’00101100′ W=b’11111111′ ise
b’00101100′ sabitinin değeri
b’11010011′ XOR işlemi sonucu
W b’11010011′

XORWF F,d Excluvise OR W with f W registeriyle file register içeriğine XOR işlemini uygular.Sonuç W veya f registerine yazılır.

XORWF TEST,1 W=b’00100000′ ise
TEST=b’00101000′ ise
b’00001000′ XOR işlemi sonucu
d=0 ise W b’00001000′
d=1 olduğundan TEST b’00001000′

Aritmetik İşlem Komutları

ADDWF f,d Add W with f W registerinin içeriğini f registerinin içeriğiyle toplar.Sonuç W veya F registere yazılır.
ADDWF TOPLA,0 W=h’2A’ ise
TOPLA=h’31′ ise
h’2A’+h’31′=h’5B’
d=1 ise TOPLA h’5B’
d=0 olduğundan W h’5B’

ADDLW k Add Literal and W W registerinin içeriğini k sabit değeriyle toplar.Sonuç W registerine yazılır.
ADDLW H’2F’ W=h’B0′ ise,
h’B0′+h’2F’=h’DF’
W h’DF’

SUBLW k Subtract W from Literal K sabit değerinden W registerini çıkarır.Sonuç W registerine yazılır.
SUBLW H’90′ W=h’83′ ise
h’90′ – h’83′=h’07′
W h’07′

SUBWF f,d Subtract W from File register f registerin içeriğinden W registerinin içeriğini çıkarır.Sonuç W veya f registere yazılır.
SUBWF CIK,1 W=h’83′ ise
CIK=h’90′ ise
h’90′ – h’83′=h’07′
d=0 ise W h’07′
d=1 olduğundan CIK h’07′

İşlem Yapmayan Komut

NOP No Operation Bir komut saykılı süresince hiçbir işlem yapmayan bir komuttur.Bir dahili komut süresince çalışır.Bu nedenle zaman geciktirme işlemlerinde kullanılır.

PIC PROGLAMA

Şimdi basit bir programlama örneği yapalım ve PIC’e yazalım ;

Program, PIC’e enerjı verince portB’nin 0. bit’ine bağlı olan bir ledi direkt yakacaktır. Programa başlamadan önce kullanılan özel file adreslerini vererek,status registeriyle bank değiştirme işlemi yapılmalıdır.

0X00 0X80
0X01 0X81

0X02 0X82
0X83
0X03 0X84
0X04
0X05 0X85
0X06 0X86

EEPROM Bellek Alanı:

0x0A 0x08A
0x0B
0x08B
0x0C 0x08C
Genel amaçlı registerlerin kullanacağı alan

0X4F 0XCF

BANK 0 BANK 1

PIC16F84’ün iki RAM’İ (Banko,Bank1) vardır.RAM içersinde ki bir özel registerinin kullanılması için, o registerin bulunduğu banka geçmek gerekir.

BANK DEĞİŞTİRME

Bir bank’tan diğer bir bank’a geçmek için STATUS register denilen özel registerin 5. ve 6. bit’inin durumunu değiştirmek gerekir.

STATUS REGİSTER
7 6 5 4 3 2 1 0
RP1 RP0
Bank seçme bitleri
00 Bank0
01 Bank1
10 Bank2 PIC16F84’de kullanılmaz.
11 Bank3

PIC16F84’ün sadece 2 bank’ı bulunduğundan, sadece 5. bit’in değerini değiştirmek yeterlidir.6. bi- tin değeri daima ‘’0’’ olmalıdır.Zaten PIC’e enerji verildiğinde ( Power-on Reset ) 5. ve 6. bit’in değeri ‘’0’’ dır.Bu bit’ler aynı zamanda diğer reset girişleri ( MCLR ucundan yapılan harici reset ve Watchdog tımer re-set ) yapıldığında da ‘’0 ‘’ olur.Yani PIC’i çalıştırmak için enerji verildiğinde direkt olarak bank0 seçilmiş olur.Bu durumda bank değiştirme işlemine gerek duyulmaksızın bank0’daki registerler kullanılabilir.
STATUS registerinin 5. bit’ini ‘’1’’ yapmak için BSF komutu, ‘’0’’ yapmak için de BCF komutu kullanılır.Bank değiştirmek için gerekli komutlar :

BSF h’03’, 5 Bank1 seçilir.
BCF h’03’ ,5 Bank0 seçilir.

Port’ların Giriş veya Çıkış Olarak Yönlendirilmesi :

PortA ve PortB’nin uçlarına bağlı bulunan bir I / Q elemanını kullanabilmek için portları giriş veya çıkış olarak yönlendirmek gerekir.

PortA’yı TRISA registeri,
PortB’yi TRISB registeri yönlendirir.

PortA / PortB’nin hangi bit’i giriş yapılmak isteniyorsa, TRISA / TRISB içersinde o bit’e karşılık gelen bit ‘’1’’ yapılır.Çıkış olarak yönlendirilmek istenen bit’ler için de TRISA / TRISB içersine ‘’0’’ yazılır.

TRISA 1 PortA Giriş
TRISB 0 PortB Çıkış

Şematik olarak gösterilirse : Örneğin, PortA’nın 1. ve 2. bit’leri giriş, diğer bitleri çıkış olarak yönlendirilmek istenirse :

TRISA
0 0 0 0 0 1 1 0
PORTA

4 3 2 1 0
Çıkış Çıkış Giriş Giriş Çıkış

PortA’nın sadece 5 ucu bulunduğundan, TRISA registerinin ilk 5 biti içerisine yazılan veriler PORTA’yı yönlendirir.Diğer bitlerin 0 veya 1 olmasının hiçbir önemi yoktur.

PortB’nin 2, 3, 6. bitlerini giriş diğerlerini çıkış olarak yönlendirmek için de aşağıda ki konfigürasyon yapılır.

TRISB
0 1 0 0 1 1 0 0

PORTB

Çıkış Giriş Çıkış Çıkış Giriş Giriş Çıkış Çıkış

Akış Diyagramı Sembolleri :

Tüm programlama dillerinde olduğu gibi assembly dili programlarını yazmadan önce akış diyag-ramı çizmek çok iyi olur.Kısa programlarda, genellikle karar işlemleri olmadığı için çoğu zaman akış diyagramı çizmeye gerek olmaz.Ancak uzun ve karmaşık mantık işlemlerinin olduğu programları yazarken, direkt olarak komutları yazmaya başlamak kısa bir süre sonra içinden çıkılmaz bir hal alır.Bu nedenle prog-ramları yazmadan önce akış diyagramı çizerek, komutların hangi sıraya göre yazılacağını görmek için görsel bir düşünme ortamı hazırlanmış olur.

Programlama dillerinde ortak olarak ortak olarak kullanılan akış sembolleri :

Akış Diyagramı Başlangıcı ve Sonu

Hazırlık

İşlem

Karar

Alt program

Akış Diyagramı bağlayıcı

AKIŞ DİYAGRAMININ ÇİZİLMESİ

PİC’e enerji verdiğimizde PORTB’nin 0. bit’ine bağlı LED’i otomatik olarak yakan programın akış diyagramı.

;= = =DENEME .ASM = = = = = 27/04/2000 = = =

LIST P=16F84

CLRF h’06’

BSF h’03’,5

CLRF h’86’

BCF h’03’ ,5

BSF h’06’, 0

END

Akış diyagramları çizilirken semboller içersine yazılan açıklamalar çoğu zaman yukarda olduğu gibi çok fazla ayrıntılı olması gerekmez.Yapılacak işlemler yerine hangi komut kullanılacaksa o komut direkt olarak yazılabilir.Akış diyagramı çizme amacı, karmaşık mantıksal işlemler gerektiren programları yazarken düşünme kolaylığı sağlamaktır.

ASSEMBLY PROGRAM KOMUTLARININ YAZILMASI :

Akış diyagramı çizildikten sonra, işlemleri gerçekleştirecek olan assembly komutları yazılır. Assem-bly komutları ASCII kodunda dosya üreten bir aditörde hazırlanması gerekir.Bu editörler, DOS altında çalışan EDIT, WINDOWS altında çalışan NOTPAD olabilir.

Assembly Komutlarının Editörde Yazılış Biçimi :

;********* DENEME.ASM ********

LIST P = 16F84 ; PIC16F84’ü MPASM’ye tanıt
CLRF h’06’ ; PORTB’ye bağlı ledleri söndür
BSF h’03’ , 5 ; BANK1’e geç
CLRF h’86’ ; PORTB’nin tüm uçlarını çıkış yap
BCF h’03’ , 5 ; BANK0’a geç
BSF h’06’ , 0 ; PORTB’nin 0.bit’inde ki ledi yak
END ; Program komutlarının sonu

Atama ( EQU ) Komutu Kullanarak Program Yazmak :

Atama komutları yazılırken register isimlerinin etiket sütununa yazmak gerekir.EQU komutu kulla-nılarak register adları etiket sütununa , adreslerinide adres sütununa yazabiliriz.Yukarda ki programı EQU komutu kullanarak yazarsak ;

;********* DENEME.ASM **********
LIST P = 16F84 ; PIC16F84’ü MPASM’ye tanıt
PORTB EQU h’06’
STATUS EQU h’03’
TRISB EQU h’86’
CLRF PORTB ; PORTB’ye bağlı ledleri söndür
BSF STATUS, 5 ; BANK1’e geç
CLRF TRISB ; PORTB’nin tüm uçlarını çıkış yap
BCF STATUS, 5 ; BANK0’a geç
BSF PORTB, 0 ; PORTB’nin 0.bit’inde ki ledi yak
END ; Program komutlarının sonu
Bu şekilde yazıldığında komutları hangi registeri kullandığı kolayca anlaşılmaktadır.Örneğin ;

BSF STATUS, 5 ; BANK1’e geçmek için STATUS registerinin
; beşinci bitini ‘’1’’ yap
STATUS
7 6 5 4 3 2 1 0
0 0 1 0 0 0 0 0

BSF PORTB, 0 ; PORTB’nin 0.bit’inde ki ledi yak

7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 1

PROGRAMIN PIC ‘E YAZILMASI

Hexadesimal kodlara dönüştürülmüş olan assembly programı PIC’e yazdırmak için gerekenler

1- Bilgisayarın paralel veya seri portuna bağlanan PIC programlama seti,
2- .HEX uzantılı dosyada ki program kodlarını PIC programlama setine gönderen PIC program-layıcı yazılımı

INCLUDE DOSYALARI :

Assembly programlarını yazarken kullanılacak olan registerlerin adreslerini tanımlama bölümünde kullanmak, programı anlaşılır hale getirmektedir.Aslında PIC16F84 mikrodenetleyicisinin RAM belleğinde ki özel registerlerin adresleri sabittir.Bu yüzden sabit olan adresleri devamlı olarak yeniden tanımlamak ge-reksizdir.Bunun için INCLUDE dosyalarını kullanılmıştır.Header file denilen bu dosyaları kullanmak sure-tiyle programları yazarken her defasında register adreslerini tanımlama zorunluluğu kaldırılmıştır.

Include Dosyası Kullanarak Yukarda ki Programı Yazarsak ;

******** DENEME.ASM *******

LIST P = 16F84 ; PIC16F84’ü MPASM’ye tanıt
INCLUDE ‘’P16F84.INC’’

CLRF PORTB ; PORTB’ye bağlı ledleri söndür
BSF STATUS, 5 ; BANK1’e geç
CLRF TRISB ; PORTB’nin tüm uçlarını çıkış yap
BCF STATUS, 5 ; BANK0’a geç
BSF PORTB, 0 ; PORTB’nin 0.bit’inde ki ledi yak
END ; Program komutlarının sonu

VERİ TRANSFERİ ve KARAR İŞLEMLERİ

W REGİSTERİN KULLANIMI

Veri Transferi

W register, RAM bellek içersinde ki file registerlerinden bağımsız bulunmaktadır.Registerler arasın-da veri transferi yapmak için kullanılır.Örneğin, PortA içersinde ki veriyi PortB içerisine transfer etmek için şu komutlar kullanılır :

W Register

PORTA PORTB

MOVF PORTA, W ; PortA’nın içeriğini W registerine taşı

MOVWF PORTB ; W reisterinin içeriğini PortB ‘ye gönder

PortB’ye bağlı olan 8 ledin ilk 4 tanesini yakacak olan veriyi göndermek içinde aşağıdaki komut yazılır ;

MOVLW H’0F’ ; W registerine H’0F’ i yükle
MOVWF PORTB ; W registeri içeriğini PortB’ye gönder
SONSUZ DÖNGÜ

PIC16F84 mikrodenetleyicisinde duraklama komutu yoktur.Bu işlemin yerine GOTO komutuyla programın akışı DONGU etiketine gönderildi.Görüldüğü gibi DONGU etiketi ile GOTO komutu arasında işlem yapan hiçbir PIC komutu bulunmamaktadır.Bu durumda program sonsuz döngü içersine girmiştir.

Örneğin ;

A portunun uçlarına enerji verildiğinde , B portunda karşılık gelen ledi söndüren bir program yapılmak istenirse ;

Bu programda A portundaki RA0 – RA4 uçlarının devamlı olarak okunup, B portuna gönderilmesi gerekir.Bunu devamlı olarak yapabilmek için programı ‘’ BAŞLA ‘’ etiketine gönderip, sonsuz döngüyü burda kurmak gerekiyor.

AKIŞ DİYAGRAMI

Programın PROG1.ASM ile arasındaki fark GOTO komutunun yazıldığı satır olacaktır.

GOTO BAŞLA ; Okumayı tekrarla

BİT TEST EDEREK KARAR VERMEK ( BTFSC , BTFSS )

Bir register içersindeki herhangi bir bit BTFSC veya BTFSS komutlarıyla test edilebilir.Bu test sonucuna göre program akışı istenilen komuta dallandırılabilir.

0 – 7 arasında bir sayı

BTFSC
,
Register Test Edilecek
Bit’i Belirler

TEST_PORTA
BTFSC PORTA, 1
GOTO TEST_PORTA
BSF PORTB, 0

DÖNGÜ DÜZENLEMEK

Sayaç Kullanarak Döngü Düzenlemek :

Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekebilir.Bu durumda bir register sayaç olarak kullanılır.İlkönce sayaç içerisine işlemlerin tekrar sayısını belirleyen sayı yüklenir.Daha sonra her bir işlem tekrarında sayaç içersindeki değer bir azaltılır.Azaltma işlemi DECFSZ komutuyla yapılır.Sayaç içer-sindeki sayı 0 (sıfır ) olunca döngü biter ve program ya bitirilir ya da başka bir komuta dallandırılarak devam eder.

DECFSZ komutu İngilizce’de ki ‘’ Decrement File register Skip if Zero ‘’ dur.Anlamı ; Registerden ‘’ 1 ‘’ çıkart, eğer sonuç ‘’ 0 ‘’ ise bir sonraki komuta atla.

DECFSZ komutunun yazılışı ;

0 veya W , 1 veya F W ise, sayaçtan ‘’ 1 ‘’ çıkarılır ve sonuç W registerine yazılır.
F ise, sayaçtan ‘’ 1 ‘’ çıkarılır ve sonuç sayaç içersine yazılır.
DECFSZ

TEKRAR
DECFSZ SAYAC, F
GOTO TEKRAR
BSF PORTB, 0

Evet

Hayır

Karşılaştırma Yaparak Döngü Düzenlemek :

Bazı işlerin önceden belirlenen sayıda tekrarlanması
gerekebilir.Bu durumda bir register sayaç ola-rak kullanılır.
Her bir işlem tekrarında sayaç içersinde ki sayı bir arttırılır.
Arttırma işlemi INCF komutu ile ya-pılır.Sayaç içersinde
ki sayı, işlemlerin tekrar edilme sayısına ulaşınca, döngü
sona erer.

CLRF SAYAC
TEKRAR
INCF SAYAC, F
MOVLW h’ 07 ‘
SUBWF SAYAC, W
BTFSS STATUS, 2 SUBWF
GOTO TEKRAR Hayır
DONGU
GOTO DONGU
END Evet

Döngünün tekrar sayısı W registeri içersine yüklenen sayı ile belirlenir.SAYAC değişkeni içersin-deki sayı, döngünün her tekrarında bir arttırılır ve SUBWF komutuyla SAYAC’ tan W’ nin içeriği çıkarılır. Çıkarma işlemi neticesinde STATUS registerin 0. ve 2. bit’indeki değer etkilenir.Bu bit’ler BTFSC komu-tuyla test edilir.Testler sonucunda istenilen değere ulaşılınca döngüye son verdirilir.

STATUS registerin 0. bit’ine CARRY FLAG (Taşma Bayrağı ), 2. bit’ine ZERO FLAG (Sıfır Bayrağı ) olarak adlandırılır.

STATUS register
Z C

Zero Flag Carry Flag

SUBWF KOMUTU :

SUBWF komutu çıkarma yapan bir komuttur.Aşağıdaki yazılım kuralına göre W registerinin içeri-ğini file registerinden çıkarır.Sonucu W registerine yazar.

W veya F olabilir.
SUBWF , W W ise çıkarma sonucu W registere yazılır.
F ise çıkarma sonucu File registere yazılır.

Çıkarma sonucu etkilenen C ve Z flag içersinde ki değer, W ve file registerin büyüklüklerine bağlıdır.

> W Z = 0 C = 1

= W Z = 1 C = 1

< W Z = 0 C = 0

SUBLW KOMUTU :

SUBLW komutu çıkarma yapan bir komuttur.Aşağıdaki yazım kuralına göre sabit ( L ) içersinden W registeri içeriğini çıkarır.Sonucu W registere yazar.

Sabit değer ( Binary, heksadesimal veya desimal olabilir. )
SUBLW

Çıkarma sonucunda W ve sabitin büyüklükleri C ve Z flagların değerini değiştirir.
> W Z = 0 C = 1

= W Z = 1 C = 1

< W Z = 0 C = 0

STATUS REGİSTER :

Status register ALU’ nun ( Aritmetik Logic Unit ) aritmetiksel durumunu ( Zero ve Carry flag registerleri ) ve RESET durumunu içeren verileri bulundurur. Ayrıca iki bitlik veri de data memory’deki ( RAM ) bank seçme bit’leri için ayrılmıştır.

STATUS registerinin içeriği bir çok komutun çalışması neticesinde bit’leri değişir. STATUS registerin Z, DC veya C bitlerini etkileyen bir komut kullanıldığında bu bit’lere yazma işlemi yapılamaz. Bu bit’lerin 1 veya 0 olma durumu kullanılan PIC’e bağlıdır. Bank seçmek için kullanılan RP0 ve RP1 bit’lerine yazmak mümkün olduğu halde, TO ve PD bit’ lerine yazma işlemi yasaklanmıştır. Bu nedenle bir STATUS registeri etkileyen bir komutun çalıştırılması sonucunda etkilenen bit’ler beklenenden farklı olabilir.

Örneğin, CLRF STATUS en yüksek üç bit’i 0 (sıfır ), Z bit’ini ise 1 ( bir ) yapar.Bu durumda STATUS register ‘’000u u1uu’’ olarak kalır.Buradaki ‘u’ nun anlamı unchanged’dir. (değişmez ).

Aşağıda ki tablo STATUS registerin her bir bit’inin hangi durumlarda 1 ve 0 olacağını gösterir.

STATUS REGİSTER BİTLERİ :

IRP RP1 RP0 TO PD Z DC C
bit 7 6 5 4 3 2 1 bit0

Bit 7 : IRP : Register Bank Select bit ( bank seçme biti )
0 = Bank 0,1 (h’00’-h’FF’ )
1 = Bank 2,3 (h’100’-h’1FF’ )
IRP biti PIC16F84’de kullanılmaz.IRP, 0 olarak alınmalıdır.

Bit 6-5 : RP1-RP0 : Register Bank Select bitleri ( bank seçme bitleri )
00 = Bank 0 (h’00’-h’FF’ )
01 = Bank 1 (h’80’-h’FF’ )

10 = Bank 2 (h’100’-h’1FF’ )
11 = Bank 3 (h’180’-h’1FF’ )
PIC16F84’lerde sadece RP0 bit’i kullanılır.RP1, 0 olarak kalmalıdır.

Bit 4 : TO : Time-out bit (Zaman dolma biti )

1 = PIC’e enerji verildiğinde, CLRWDT ve SLEEP komutu
çalışınca
0 = WDT zamanlayıcısında, zaman dolduğunda.

Bit 3 : PD : Power-down bit (Enerji kesilme biti )
1 = PIC’e enerji verildiğinde, CLRWDT komutu çalışınca
0 = SLEEP komutu çalışınca

Bit 2 : Z : Zero bit (Sıfır bit )

1 = Bir aritmetik veya mantıksal komutun sonucu 0 (sıfır ) olduğunda
0 = Bir aritmetik veya mantıksal komutun sonucu 0 (sıfır ) olmadığında

Bit 1 : DC : Digit carry /borrow bit ( Taşma/ödünç biti )
ADDLW ve ADDWF komutları kullanıldığında oluşan taşma ve ödünç alma olduğunda

1 = Alt 4 bitin 4. bitinde taşma olduğunda
0 = Alt 4 bitin 4. bitinde taşma olmadığında

Bit 0 : C : Carry/borrow bit bit ( Taşma/ödünç biti )

ADDLW ve ADDWF komutları kullanıldığında oluşan taşma ve ödünç alma olduğunda

1 = En solda ki 7. bit’te taşma olduğunda
0 = En solda ki 7. bit’te taşma olmadığında

NOT : RLF ve RRF komutları çalıştığında en sol bit veya en sağ bitin değeri carry bit’ine yüklenir.

ZAMAN GECİKTİRME ve ALT PROGRAMLAR

ZAMAN GECİKTİRME DÖNGÜLERİ :

Bazı işlemlerin yapılması esnasında belirli bir zaman hiçbir şey yapılmadan beklenmesi gerekebilir.Bir butona basıldığında/bırakıldığında kontakların birbirine teması esnasında ark meydana geli-yordu.Bu arkı önlemek için zaman geciktirme döngüsü gerekir.

Zaman geciktirme işlemlerini yazılım döngüleri kullanarak yapabiliriz ama PIC16F84’ün özel geciktirme olanakları vardır.Zaman geciktirmeleri ( TMR0 ve WDT ) komutları vardır.

Bir zaman geciktirme döngüsünde, gecikme zamanını tespit etmek için komutların icra süresi göz önüne alınır.RC osilatör kullanılan PIC devrelerinde bir komutun icra süresini hassas olarak mümkün değildir.Ancak kristal veya seramik rezanatör kullanılan devrelerde çok hassas gecikme döngüleri elde etmek mümkündür.

Dahili Komut Saykılı :

PIC16F84 mikrodenetleyicisinin girişine uygulanan osilatör frekansı 4’e bölünür.Bir komutun icra süresi bu frekansın bir saykılı süresindedir.

PIC16F84’ün osilatör girişine 4 MHz’lik bir kristal osilatör frekansı uygulanırsa, 16F84 bu frekansı kendi içersinde 4’e böldüğünde, 1 MHz’lik bir dahili frekans elde edilir.Bu frekansın bir saykılı ( T = 1/f = 1/1 MHz = 1 μS ) bir komutun icra süresidir.

Örneğin, PIC16F84 uygulanan XC osilatör frekansı 10 MHz ise, CLRF PORTB ve BSF STATUS,5 komutlarının çalışma süreleri :

10 MHz’lik frekansın bir saykılı T = 1/f = 1/106 Sn =0.1 µS eder.Dahili komut saykılı ise 4×0.1µS eder.

Sistem clock
10 MHz

0.1µs

Dahili clock CLRF PORTB
(Komut frekansı)
2.5 MHz
BSF STATUS, 5

0.4µS ( Komut Saykılı ) 0.4µS

PIC16F84 mikrodenetleyicisinin komutlarından 10 tanesi hariç diğerleri 1 komut saykılı süresinde çalışır.Bu komutlar :

KOMUT KOMUT SAYKILI
GOTO 2
CALL 2
RETURN 2
Program counter’a (PC) veri yazan komutlar 2
DECFSZ 1 ( Register içersindeki sayı 0 değilse )
2 ( Register içersindeki sayı 0’sa )
RETLW 2
RETFIE 2
INCFSZ 1 ( Register içersindeki sayı 0 değilse )
2 ( Register içersindeki sayı 0’sa )
BTFSC 1 ( Test edilen bit 1’se )
2 ( Test edilen bit 0’sa )
BTFSS 1 ( Test edilen bit 0’sa )
2 ( Test edilen bit 1’se )

Komut Saykılı Sayısının Bulunması :

Döngüde ki saykıl sayısı programın başında SAYAC adlı registere atanan (N) sayısına bağlı olduğu görülür.Bir döngünün kaç saykıllık gecikme oluşturacağını :

Komut Saykıl Sayısı : 1+1+1x(N-1)+2+2x(N-1)
1+1+N-1+2+2N-2
KSS : 3N+1

ÖRNEK : 10 MHz’lik bir osilatörden uygulanan clock frekansı PIC16F84’de 100 µS’lik gecikme sağlayan bir döngüde kaç saykıllık gecikme olur ?

T = 1/f = 1/106 Sn = 0.1µS eder.Dahili komut sayısı ise : 4×0.1µS = 0.4µS’dir.

KOMUT SAYKIL

MOWLW H’52’ 1
MOVWF SAYAC 1
NOP 1
NOP 1
NOP 1
DONGU
DECFSZ SAYAC, F 1×81+2
GOTO DONGU 2×81

TOPLAM 250 Saykıl

B u döngüde SAYAC içersine atanan N sayısı h’52’nin desimal sayı karşılığı 82’dir.Buna göre dön-günün kaç komut saykılı oluşturduğunu formülle bulursak ;

KSS = 3xN+1 = 3×82+1 = 247 saykıl

Saykıl sayısını 250’ye getirmek için eklenen üç NOP komut saykılını eklersek,

KSS = 247+3=250 eder.

Bu döngünün ne kadar sürelik gecikme sağlar :

Gecikme Süresi (GS) = 250×0.4µS = 100 µS

N sayısının bulunması :

PIC’e 4 MHz’lik frekans uygulandığında bir komut saykılı 1 µS olur.Bu durumda N sayısını belirlemek kolay olur.100 µS’lik bir gecikme için 100 saykıllık bir gecikme döngüsü oluşturulmalıdır.
PIC’e uygulanan harici frekansa f, dahili komut frekansına fk denilirse ;

Dahil komut frekansı ( fk ) = f / 4 olur.

Komut saykılı Tk = 1 / fk olur.

KSS = GS = GS x f
4/f 4

KSS = 3 x N olduğuna göre ;

N = GS x f / 12 olur.

ALT PROGRAMLAR

Program içersinde defalarca tekrar edilmesi gereken program parçaları olabilir.B u durumda aynı program komutlarını her defasında yazmak hem zor olur, hem de bellekte çok fazla yer kaplar.Bu sorunu gidermek amacıyla alt programlar bir defa yazılır, kullanılması gerektiğinde alt programın adı CALL komutundan sonra yazılarak çağrılır.Bu andan itibaren programın akışı alt programa geçer.Alt program komutları bittiğinde en sonuna yazılan RETURN komutu vasıtasıyla ana programa dönülür ve kaldığı yerden devam eder.

CALLALT_PROG komutuyla alt program çağrılarak çalıştırılmaya başlandığı anda, programın tekrar geri döneceği adres bilinmesi gerekir.İşte STACK REGİSTER bu adresin yazıldığı özel bir registerdir. Programcının bu registere adresin nasıl yazıldığı ile ilgilenmesi gerekmez.Çünkü assembler programı bu işlemi otomatik olarak yapar.Eğer çağrılan alt program içersinden başka bir alt program daha çağrıldıysa bu adresler stack register içersinde ardı ardına yazılır.Alt programlardan RETURN komutuyla geri dönülürken en son yazılan adres ilk önce işlem görür.

BİT KAYDIRMA ve MANTIKSAL İŞLEM KOMUTLARI

SOLA KAYDIRMA ( RLF )

RLF komutu, belirlenen bir file register içersinde ki bitlerin pozisyonunu her defasında bir sola kaydırmak için kullanılır.Register içersindeki bitler sola kaydığında MSB biti, STATUS registerde bulunan carry flag içersine yazılır.Carry flag içeriği ise registerin LSB bitine yazılır.

NOT : MSB ( Most Significiant Bit – Değerliği en yüksek bit, yani en soldaki bit.)
LSB ( Least Significiant Bit – Değerliği en düşük bit, yani en sağdaki bit.)

RLF komutunun yazılışı ;

RLF Destination (gideceği yer )W veya F

Destination W ise kaydırma sonucunda elde edilen bit paterni W registerine, F ise file registerine yazılır.

SAĞA KAYDIRMA :

RRF komutu belirlenen bir file register içersindeki bitlerin pozisyonunu her defasında bir sağa kay-dırmak için kullanılır.Register içersindeki bitler sağa kaydığında LSB biti, STATUS registerinde bulunan carry flag içersine yazılır.Carry flag içeriği ise registerin MSB bitine yazılır.

RRF Destination (gideceği yer )W veya F

Destination W ise kaydırma sonucunda elde edilen bit paterni W registere, F ise file registere yazı-lır.

COMF ve SWAPF KOMUTLARI :

COMF komutu, seçilen bir file register içersindeki bitleri tersine çevirir.Yani 1’ler 0, 0’lar 1 olur.

COMF Destination (gideceği yer )W veya F

Destination olarak W ise terslenen veri W registere, F ise file registere yazılır.

SWAPF komutu, seçilen bir file register içersindeki verinin ilk dört bitiyle son dört bitini yer değiştirir.

SWAPF Destination (gideceği yer )W veya F

MANTIKSAL İŞLEM KOMUTLARI

Mantıksal işlem komutları W veya bir file register içersinde istenilen bir veya birkaç bitin değerini bir komut saykılında değiştirmek yada test etmek amacıyla kullanılırlar.Bu komutlar ANDLW, ANDWF, IORLW, IORWF, XORLW, XORWF’dir.

ANDLW Komutu (İstenilen bir yada birkaç bit’i ”0” yapmak ) :

W register içeriğini istenen bir sabit vriyle AND’ler, elde edilen sonucu W registere yazar.Bu komut W register içerisinde istenilen bir veya birkaç bitin değerini ”0” yapmak için kullanılır.

ANDLW

NOT : Bir veriye AND işlemi uygulamaya ”maskeleme” denir.Yani bit ”0” ile AND’lenirse o bitin değeri ”0” olur.Diğeri aynen kalır.

”1” ile AND’leme bitlerin değerini değiştirmez.
”0” ile AND’leme bitin değerini ”0” olur.(Maskeleme)

ANDWF Komutu :

Seçilen bir file register ile W register içeriğini AND’ler, sonuç W veya F register içersine yazılır.

ANDWF Destination (gideceği yer)W veya F

IORLW Komutu ( İstenilen bitin değerini ”1” yapmak) :

W registerin içeriğini istenen bir sabit veri ile OR’lar, elde edilen sonucu W registere yazar.

IORLW

NOT : Bu komut W register içerisindeki 8 bitlik bir verinin istenen bir veya birkaç bitinin değerini ”1” yapmak için kullanılır.

”0” ile OR’lamada bitlerin değeri değişmez.
”1” ile OR’lamada bitin değeri ”1” olur.

IORWF Komutu :

Seçilen bir file register ile W registerin içeriğini OR’lar, sonucu W registere yada file registere yazar.

IORWF Destination (gideceği yer) W veya F

XORLW Komutu (İstenilen bir biti terslemek ) :

XORLW

NOT : B u komut W register içeriğini istenen bir sabit veriyle XOR’lar, elde edilen sonucu W register içersine yazar.

”0” ile XOR’lamada bitlerin yeri değişmez.
”1” ile XOR’lamada bitin değerinin tersi elde edilir.

XORWF Komutu :

Seçilen bir file registerle W registerinin içeriği XOR’lanır.Sonuç W veya F register içerisine yazılır.

XORWF Destination (gideceği yer) W veya F

ÇEVRİM TABLOLARI

Çevrim Tablosu ( Lookup Table ) :

Çevrim tabloları bir kodu başka bir koda çevirmek için kullanılırlar.Örneğin, PORTB’ye bağladığı-mız 7 segment display’in üzerinde heksadesimal karakterleri görmek istersek, çevrim tablosunda heksadesimal koda karşılık gelen uygun kodu seçip, PORTB’ye göndermek gerekir.

7 segment sürücünün 0-F arasında ki sayıları göstermesi için gereken kodlar ;

Çevrilecek kod.Hex sayı Çevrilen 7 segment kodu (portB’ye) 7 segment uçlarındaki veri 7 segment’te görülecek sayı
h’00′ h’3F’ 00111111 0
h’01′ h’06′ 00000110 1
h’02′ h’5B’ 01011011 2
h’03′ h’4F’ 01001111 3
h’04′ h’66′ 01100110 4
h’05′ h’6D’ 01101101 5
h’06′ h’7D’ 01111101 6
h’07′ h’07′ 00000111 7
h’08′ h’7F’ 01111111 8
h’09′ h’6F’ 01101111 9
h’0A’ h’77′ 01110111 A
h’0B’ h’7C’ 01111100 B
h’0C’ h’39′ 00111001 C
h’0D’ h’5E’ 01011110 D
h’0E’ h’79′ 01111001 E
h’0F’ h’71′ 01110001 F
Nokta h’80′ 10000000 .

7 x 470 Ω
Ortak Katodlu 7 segment display Katot

PROGRAM COUNTER ( SAYICI ) :

PIC16F84′ün 13 bitlik bir program sayıcısı vardır.GOTO ve CALL komutlarıyla kullanılan 11 bitlik adresler 2 Kbyte’lık program belleği bulunan PIC’leri adreslemek için yeterlidir.
PIC programlarında, program sayıcı PC kodu ile kullanılır.Program sayıcının alt 8 bitine PCL, üst 5 bitine de PCH adı verilir.

PCH PCL

12 11 10 9 8 7 6 5 4 3 2 1 0

Program sayıcının üst 5 bitini doğrudan okumak ve yazmak mümkün değildir.Ancak PIC16F84′ün RAM belleğinde h’0A’ adresinde bulunan ve adına PCLATH verilen özel registerden veri yüklenebilir.PCLATH registeri 5 bittir.

RETLW KOMUTU :

Bir alt programdan ana programa dönüş için kullanılan RETURN komutuna çok benzer.RETLW de ana programa dönüş için kullanılır.Tek bir farkla ; ana programa dönüş esnasında W registere bir sabit sayı yüklenir.Örneğin, ana programa dönüldüğünde W registerin içine h’3F’sayısı bulunması isteniyorsa ;

RETLW h’3F’ ;W’ye h’3F’ yükle ve ana programa dön

Bu Bilgiyi Paylaş:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • BlinkList
  • blogmarks
  • BlogMemes Fr
  • BlogMemes Sp
  • Blogosphere News
  • blogtercimlap
  • co.mments
  • connotea
  • Current
  • Design Float
  • Diigo
  • DotNetKicks
  • DZone
  • eKudos
  • email
  • Fark
  • Faves
  • Fleck
  • FriendFeed
  • FSDaily
  • Global Grind
  • Gwar
  • HackerNews
  • Haohao
  • HealthRanker
  • HelloTxt
  • Hemidemi
  • Hyves
  • Identi.ca
  • IndianPad
  • Internetmedia
  • Kirtsy
  • laaik.it
  • LinkaGoGo
  • LinkArena
  • LinkedIn
  • Linkter
  • Live
  • Meneame
  • MisterWong
  • MisterWong.DE
  • MSN Reporter
  • muti
  • MyShare
  • MySpace
  • N4G
  • Netvibes
  • Netvouz
  • NewsVine
  • NuJIJ
  • PDF
  • Ping.fm
  • Posterous
  • ppnow
  • Propeller
  • Ratimarks
  • Rec6
  • Reddit
  • RSS
  • Scoopeo
  • Segnalo
  • Simpy
  • Slashdot
  • Socialogs
  • SphereIt
  • StumbleUpon
  • Symbaloo
  • Suggest to Techmeme via Twitter
  • Technorati
  • ThisNext
  • Tipd
  • Tumblr
  • Twitter
  • Twitthis
  • Upnews
  • Webnews.de
  • Webride
  • Wikio
  • Wikio FR
  • Wikio IT
  • Wists
  • Wykop
  • Xerpi
  • Yahoo! Bookmarks
  • Yahoo! Buzz
  • Yigg
  • Add to favorites
  • Blogplay
  • 豆瓣
  • 豆瓣九点
  • Diggita
  • LaTafanera
  • MOB
  • QQ书签
  • SheToldMe
  • viadeo FR