Yüksek Performanslı RISC CPU Özellikleri: • • • • • • • • • • • •
• •
Öğrenmek için yalnızca 35 tek kelime komutları Đki dönüşümlü program komutları haricindeki bütün komutlar tek dönüşümde (400 ns @ 10 MHz) Đşletim hızı DC-10 MHz saat girişi DC-400 ns komut dönüşümü 14 bitlik geniş komutlar 8 bitlik geniş veriyolu 1K*14 EEPROM program hafızası 36*8 genel amaçlı register (SRAM) 64*8 chip üstünde EEPROM data hafızası 15 özel fonksiyonlu donanım registeri 8 düzeyde derin donanım deposu Direkt,endirekt ve bağımlı adresleme modları Dört kesinti kaynağı - Harici RB0/INT pini - TMRO zamanlayıcı taşması - PORTB <7:4> değişim kesintisi - Data EEPROM yazma taşması 1.000.000 EEPROM data hafızası ERASE/WRITE döngüleri EEPROM hafıza geçerliliği 40 yıldan fazla
CMOS Teknolojisi: • • • •
Düşük güç,yüksek hız CMOS EEPROM teknolojisi Bütünüyle statik dizayn Geniş aralıklı işletme voltajı: - Ticari : 2.0V-6.0V - Endüstriyel : 2.0V-6.0V Düşük güç tüketimi - < 2mA tipik @ 5V,4MHz - 60 µA tipik @ 2V,32 kHz - 26 µA tipik standby akımı @ 2V
Dış Yüzeysel Özellikler: • •
•
13 I/O pini ile bağımsız komut kontrolu Direkt LED sürücüsü için yüksek akımda indirme/çıkarma - Her pin için max. 25 mA’lik indirme - Her pin için max. 20 mA’lik bindirme TMRO: 8 bitlik programlanabilir ön derecelendirici ile 8 bitlik zamanlayıcı/sayac
Özel Mikrokontrolör Özellikleri: • • • • • • • •
Power-on Reset (POR) Power-up Timer (PWRT) Oscillator Start-up Timer (OST) Güvenli işlemler için chip üstünde olan RC osilatör ile Watchdog Timer (WDT) Kod koruması Güç korumalı SLEEP modu Seçilebilir osilatör seçenekleri Seri sistem içi programlama (iki pin yolu ile)
1.0 GENEL TANIMLAR
1
Şekil 3-1’de PIC16C84’ün sadeleştirilmiş blok diyagramı verilmiştir.
PIC16C84 düşük maliyetli , yüksek performanslı , CMOS , bütünüyle statik , 8 bitlik bir mikrokontrolördür. Bütün PIC16/17 mikrokontrolörleri gelişmiş bir RISC tasarımı içerir.PIC16CXX cihazları geliştirilmiş çekirdek(temel) özellikleri , 8 düzeyde derin depolama (stack) ve çoğul dahili ve harici kesme kaynaklarına sahiptir.Harvard tasarımının ayrık komut ve data taşıyıcıları (data bus) 14 bit genişliğindeki kelime komutlarını 8 bitlik ayrı bir data taşıyıcısı ile beraber içerir.2 basamaklı komut veriyolu , bütün komutların tek bir dönüşümde uygulamaya konulmasına izin verir.(Đki dönüşümlü program dalları gerektirenler hariç).Toplam 35 komut (azaltılmış komut seti) mevcuttur.Bunlara ek olarak , yüksek performans seviyesini sağlamak için kullanılan geniş bir register seti de kullanılmaktadır. PIC16CXX mikrokontrolörleri tipik olarak 2:1 kod sıkıştırması ve kendi sınıflarındaki diğer 8 bitlik mikrokontrolörlerin üzerinde 2:1’lik hız geliştirmesinde (10Mhz) sağlarlar. PIC16C84 36 byte’lık RAM , 64 byte’lık data EEPROM hafızası ve 13 I/O pinine sahiptir.Zamanlayıcı/sayaç da mevcuttur. PIC16CXX ailesi harici bileşenleri aza indirmek için bir takım özelliklerde içermektedir.Bunlar maliyeti düşürmek , sistem güvenirliliğinin sağlanması ve güç tüketiminin azaltılması şeklinde sayılabilir.Düşük maliyet çözümünü sağlayan tek pinli RC osilatör,güç tasarrufunu max. yapan LP osilatörü , standart kristal olan XT ve yüksek hız kristalleri için olan HS bu dört tane osilatör seçenekleridir.SLEEP modu güçten tasarrufu sağlar.Kullanıcı , harici - dahili kesme ve yenilemelerle chipi uyku modundan uyandırabilir.Güvenirliği yüksek Watchdog Timer , chip üzerinde bulunan RC osilatörü ile yazılımların kilitlenmesine karşı koruma sağlar. PIC16C84 EEPROM program hafızası , prototipleme ve üretim için kullanılan aynı cihaz paketinde sağlanmaktadır.Devre içi tekrar programlanbilmesi , kodun uygulamanın sonunda cihaz çıkarılmadan yenilenmesine izin verir.Bu durum , birçok uygulamanın geliştirilmesinde , cihazların kolaylıkla elde edilemeyeceği yerlerde kullanılabilir.Ancak , prıtotiplerde kod yenilemeleri gerektirebilir.Bu aynı zamanda kodun yenilenmesini gerektirebilen uzaktan uygulamalar için de kullanışlı bir faaliyettir.(oran enformasyonu gibi) Tablo 1-1’de PIC16C84 özellikleri listeler halinde verilmiştir.Ve Ek-F de bütün mikrocip mikrokontrolörlerin özellikleri de verilmiştir.
PIC16C84 yüksek hızlı otomotiv ve motor kontrol uygulamalarından düşük güç uzaktan kumanda sensörleri , elektronik kilitler , güvenlik araçları ve akıllı kartlara kadar olan geniş bir uygulama alanına mükemmel bir şekilde uymaktadır.EEPROM teknolojisi uygulama programlarının (transmitter kodları , motor hızları , alıcı frekansları güvenlik kodları , v.s ) istenilen özelliklerde olabildiğince hızlı ve geçerli yapılmasını mümkün kılar.Small footprint packages , bu mikrokontrolör serisini , boş alan sınırlamalarıyla birlikte tüm uygulamalarda , mükemmel yapmaktadır.Düşük maliyet , düşük güç , yüksek performans , kullanım kolaylığı ve I/O esnekliği PIC16C84’ün mikrokontrolör kullanımının daha önce düşünülmediği yerlerde(örneğin zamanlama fonksiyonları , seri iletişim , yakalama ve mukayese , PWM fonksiyonları ve yardımcı işlemci uygulamaları) bile çok yönlü olmasını sağlar. Seri sistem içi programlama özellikleri(2 pin üzerinden) ürünün düzenleme ve test edilmesi esnekliğini sağlar.Bu özellik bir ürünün seri hale getirilmesinde , yer ayarlama datasında kullanılır yada cihazın tesliminden önce mevcut olanaklar dahilinde programlanmasını sağlar.
1-1
Sınıf Ve Đleriye Yönelik Uyumluluk
PIC16C5X mikrokontrolör ailesi ile tanışık olanlar 16C84’ün 16C5X tasarımının geliştirilmiş versiyonu olduğunu bilirler.Geliştirmelerin detaylı bir listesi EkA’da verilmiştir.16C5X için yazılmış olan kod 16C84’ün portlarına kolaylıkla uygulanbilir.(Ek-B)
1-2
Gelişim Desteği
PIC16CXX ailesi , tam özellikli bir macro assembler, bir yazılım simulatörü , bir devre içi emulatör , düşük maliyetli geliştirme programlayıcısı ve tam özellikli bir programlayıcı tarafından desteklenir.Bir C derleyicisi ve bulanık mantık destek araçlarıda mevcuttur.
2
Tablo 1-1 : PIC16C8X Sınıfı Araçlar
2.0 PIC16C84 AYGIT DEĞĐŞĐKLĐKLERĐ
2.1 Elektriksel Yolla Silinebilen Aygıtlar
Frekans aralıkları ve paket seçeneklerinde bir değişiklik mevcuttur.Uygulama ve üretim gereksinmeleine bağlı olarak belirli aygıt seçeneği bu bölümdeki bilgiden yararlanılarak seçilebilir.Aygıt numarasıyla gösterilen 2 çeşit aygıt tipi vardır. 1. PIC16C84’deki C : Bu aygıtlar EEPROM program hafızasına sahiptirler ve standart voltaj aralığında işletilirler. 2. PIC16LC84’ deki LC : Bu aygıtlar EEPROM program hafızasına sahiptir ve genişletilmiş voltaj aralığında işletilirler.
Bu aygıtlar düşük maliyetli plastik paketlerde talep edilirler,hatta aygıt silinebilir ve tekrar programlanabilir.Bu, aynı aygıtın prototip geliştirilmesinde ve pilot programlarda aynen üretimde olduğu gibi kullanılmasını sağlar.Elektriksel yolla silinebilen aygıtların başka bir özelliğide Microchip’s PICSTART Plus ya da PROMATE II programlayıcı gibi aygıt programlayıcıları tarafından silinebilmeleri ve tekrar devre üstünde programlanabilmeleridir.
3
3.0 TASARIMA BAKIŞ 16CXX ailesinin yüksek performansı genelde RISC mikroişlemcilerinde bulunan bir takım tasarımsal özelliklerin bir sonucudur.Söze başlamak gerekirse , PIC16CXX Harvard tasarımını kullanır.Bu tasarım , program ve ayrık hafızalardan data girişlerini içerir.Yani aygıt , bir program memory bus’ı ve bir data memory bus içermektedir.Bu , program ve datanın aynı hafıdaki (aynı bus üzerinden giriş) alışıldık Von Neuman tasarımının bant genişliğini geliştirmiştir.Program ve data hafızasının ayrılması , 8 bit genişliğindeki data kelimesinin daha farklı bir şekilde boyutlnadırılmasını sağlayan komutlara izin verir.PIC16CXX opcode’ları 14 bit genişliğindedir.Ve tek kelime komutlarını uygulanabilir kılar.Tam bir 14 bit genişliğindeki program memory bus’ı 14 bitlik bir komutu tek döngüde toplar.2 basamaklı veri yolu , komutların toparlanması ve uygulamaya konulması durumlarında örtüşür.(Örnek 3-1)Sonuç olarak , tüm komutlar tek bir döngüde açılır.(400 ns@ 10 MHz) (program dalları hariç) PIC16C84 , 1K*14 program hafızasını adresler.Bütün program hafızası dahilidir. PIC16CXX aygıtları , register dosyalarını yada data hafızasını direkt yada endirekt yolla adresler.Program sayacını içeren bütün özel fonksiyonel registerler data hafızasında haritalanmıştır.Ortogonal(simetrik) bir komut seti , herhangi bir adresleme modunu kullanan herhangi bir register üzerinde herhangi bir işlemin taşınmasını mümkün kılar.Bu simetri tabiatı ve “özel optimal durumlar “ın azlığı , PIC16CXX ile programlamayı yeteri kadar verimli hale getirmiştir.Ek olarak şunuda söyleyebiliriz ki öğrenme eğrisi gözel görülür bir şekilde azaltılmıştır. PIC16CXX aygıtları 8 bitlik ALU ve çalışma registerlerini içermektedir.ALU , genel amaçlı bir aritmetik birimdir.Herhangi bir register dosyası ile çalışma registerindeki data arasında aritmetik ve Boolean fonksiyonları gerçekleştirilir. ALU 8 bit genişliğinde ve toplama , çıkartma , kaydırma ve mantıksal işlemler yapabilmektedir.Başka bir durum söz konusu değilse aritmetik işlemler doğasında 2’nin tümleyenidir.2 operandlı komutlarda tipik olarak 1 operand çalışma registeridir(W register) ve diğer operand dosya registeri yada acil bir sabittir.Tek operandlı komutlarda , operand ya W registeridir yada dosya registeridir. W registeri , ALU işlemlerinde kullanılan 8 bitlik bir çalışma registeridir.Bu ,
adreslenebilir bir register değildir. Yürürlüğe konan komuta bağlı olarak , ALU Carry(C) , Digit Carry(DC) , Zero(Z) bitlerinin değerlerini etkileyebilir.C ve DC bitleri çıkartmada borrow ve digit borrow out işlevlerini görür.Komutlara örnek olarak SUBLW ve SUBWF’ye bakınız. PIC16C84’ün basitleştirilmiş blok diyagramı şekil 3-1’de gösterilmiştir.Buna ilişkin pin tanımlamasıda Tablo 3-1’de verilmiştir.
4
Şekil 3-1: PIC16C84 Blok Diyagramı
5
Tablo 3-1: PIC16C8X Çıkış Pini Tanımlamaları Pin Name DIP SOIC I/O/P Buffer Tipi No. No. Tipi OSC1/CLKIN 16 16 I ST/CMOS(1) OSC2/CLKOUT 15 15 O -
MCLR
RA0 RA1 RA2 RA3 RA4/TOCKI
4
4
I/P
ST
17 18 1 2 3
17 18 1 2 3
I/O I/O I/O I/O I/O
TTL TTL TTL TTL ST
6 RB0/INT RB1 7 8 RB2 9 RB3 RB4 10 RB5 11 12 RB6 13 RB7 VSS 5 VDD 14 Kısaltmalar: I=Input
6 I/O 7 I/O 8 I/O I/O 9 10 I/O I/O 11 I/O 12 13 I/O 5 P 14 P O = Output - = not used
TTL TTL TTL TTL TTL TTL TTL/ST(1)
Tanımlama Kristal osilatör girişi/harici saat kaynağı girişi Kristal osilatör çıkışı/Kristal yada resonatorun kristal osilatör moduna bağlantıları.RC modunda , OSC2 pini, OSC1’in frekansının ¼’üne sahip olan CLKOUT’a çıkışlar.Ve komut döngüsü oranını belirler. Ana temizleme(reset) girişi/programlama voltaj girişi. Bu pin cihazın aktiv low kurucusudur. PORTA çift yönlü I/O portudur.
TMR0 zamanlama/sayaç’a bir saat girişi olarak seçilebilir.Çkış açık oluklu(open drain) tiptedir. PORTB çift yönlü I/O portudur.PORTB , tüm girişler üzerindeki zayıf dahili pull-up için yazılım programlayabilir. RB0/INT , harici bir kesme pini olarakta seçilebilir.
Değişmede kesme pini(interrupt on change pin) Değişmede kesme pini(interrupt on change pin) Değişmede kesme pini.Seri programlama saati Değişmede kesme pini.Seri programlama bilgisi Logic ve I/O pinleri için referans toprak Logic ce I/O pinleri için pozitif kaynak I/O=Input/Output P=Power TTL = TTL input ST=Schmitt Trigger input
Not 1: Bu buffer , RC osilatör modunda ve CMOS girişine göre ayarlandığında bir Schmitt Trigger girişi görevi yapar. Not 2: Bu buffer , seri programlama modunda kullanıldığında bir Schmitt Trigger girişi görevi görür.
6
uygulamaya konur.Saatler yürürlüğe konma akışı gösterilmiştir.
3.1 Zamanlama Planı/Komut Döngüsü
ve komutun Şekil 3-2’de
Saat girişi(OSC1’den) Q1,Q2,Q3,Q4 şeklinde isimlendirilmiş tekrar turlaması olmayan çeyrek saatler yaratmak için dahili bir şekilde 4’e bölünmüştür.Dahili olarak program sayacı (PC) her Q1’de yavaş yavaş arttırılır.Komut program hafızasında toplanır ve Q4’ün içindeki komut registerine yerleştirilir.Bu komutun Q1’den Q4’e takip esnasında şifresi çözülür ve
Şekil 3-2 : Saat/Komut Döngüsü
Örnek 3-1 : Komut Veriyolu Akışı
Program dalları hariç tüm komutlar tek döngüde gerçekleşir.Yeni komutla getirme ve yeri koyma işlemi yapılırken veriyolundan getirme komutunun akması esnasında 2 döngü sağlanmış olur.
3.2 Komut Akışı/Veriyollama Bir “komut döngüsü” 4 Q döngüsünden oluşur.Komut getirme ve yerine koyma işleminde , diğer bir komut döngüsü ile kod çözümü ve yerine koyma yapılırken bir komut döngüsü ile de yerine koyma getirme yapacak şekilde veri yollanır.Bununla beraber akı yoluna bağlı olarak her komut bir döngünün içersinde etkili bir şekilde yürürlüğe konur.Eğer bir komut program sayacının değişmesine neden olursa(Örneğin GOTO), bu durumda komutu tamamlamak için 2 döngü istenir(Örnek 3.1).Bir getirme döngüsü Q1’in
7
içindeki program sayacının(PC) yavaş yavaş artmasıyla başlar. Yürürlüğe koyma döngüsünde getirilen komut , Q1 döngüsünün içindeki “komut register”i içine yazılır.Bu komut daha sonra Q2 , Q3 , Q4 döngüleri esnasında çözülür ve yürürlüğe konur.Data hafızasıQ2 esnasında okunur(Operand okunur).Ve Q4 işlemdeyken yazılır(Gidilecek yere yazılır).
4.0 HAFIZA ORGANĐZASYONU PIC16C84’de iki hafıza bloğu vardır.Bunlar , program hafızası ve data hafızasıdır.Her bloğun kendi bus’ı vardır.Bu şekilde her bloğa giriş aynı osilatör döngüsü esnasında oluşabilir. Data hafızası genel amaçlı RAM ve özel fonksiyonlu registerler(SFRs) şeklinde ikiye ayrılır.Çekirdek(core)’i kontrol eden SFRs’lerin işletilmesi burada tanımlanmıştır.Çevresel modüllerin kontrol edilmesinde kullanılan SFRs’ler , herbir bağımsız çevresel modülü tartışan bölümde tanımlanmıştır. Data hafıza alanı data EEPROM hafızasını da içerir.Bu hafıza , data hafızasının içersine direkt olarak haritalanmak yerine endirekt olarak haritalanmıştır.Bu , data EEPROM hafızası (Read/Write)’nın adresini belirlemekte kullanılan bir endirekt adres belirteçidir.64 byte’lik data EEPROM hafızası 0h-3Fh adres aralığına sahiptir.EEPROM hafızası üzerinde daha fazla ayrıntı için Bölüm7.0’a bakınız.
4.1
Program Organizasyonu
Şekil 4-1 : Program Hafıza Haritası ve Depo
Hafıza
PIC16CXX , 8K*14 program hafıza alanını adresleme yeteneğine sahip 13 bitlik bir program sayacına(PC) sahiptir.PIC16C84 için yalnızca ilk 1K*14 (0000h-03FFh) değerleri fiziksel olarak gerçekleştirilmiştir(Şekil 41).Fiziksel gerçekleştirilmiş adres seviyesini aşan bir yere giriş “wraparound”olayına neden olur.Örneğin;20h , 420h , 820h , C20h , 1020h , 1420h , 1820h ve 1C20h aynı komutu alacaktır. Sıfırlama vektörü 0000h’da ve kesme vektörüde 0004h’dadır.
8
4.2 Data Hafıza Organizasyonu
tarafından aygıt işlemini kontrol etmek için kullanılır.Bu registerler static RAM’dir. Özel fonksiyon registerleri çekirdek ve çevresel gruplar olmak üzere 2 şekilde sınıflandırılabilir.Çekirdek fonksiyonları ile ilintili olanlar bu bölümde açıklanmıştır.Çevresel özelliklerin işlevi ile alakalı olanları ise belirli özelliklerin anlatıldığı bölümde açıklanmıştır. Şekil 4-2 : Register Dosya Haritası
Data hafızası 2 alana ayrılmıştır.Bunlardan ilki özel fonksiyon registerleri (SFR) , ikincisi ise genel amaç registerleri (GPR) alanlarıdır.SFR’ler cihazın işlemlerini kontrol ederler. Data hafızasının bölümleri(miktarları) parçalara ayrılmıştır.Bu hem SFR hemde GPR alanları için geçerlidir.GPR alanı genel amaçlı RAM’in 116 byte’ından daha fazlasının saklanmasına elverişlidir.SFR’nin bölümlenmiş alanları çevresel fonksiyonları kontrol eden registerler içindir.Depolama ,depo seçimi için kontrol bitlerinin kullanılmasını talep eder.Bu kontrol bitleri STATUS registerinde yer alır.Şekil 4-2’de data hafızası organizasyonu haritası gösterilmiştir. MOVWF ve MOVF komutları W registerinden gelen değerleri (“F”) register dosyasındaki herhangi bir yere gönderir ve “vice-versa” işlemi yapılır.Tüm data hafızasına, herbir register dosyasının kesin adresini kullanarak direkt yolla veya dosya seçim registeri(FSR) üzerinden endirekt olarak erişilebilir.Endirekt adreslemede , data hafızasında kısımlara ayrılmış alanların içine erişebilmek için RP1:RP0 bitlerindeki tanıtılmış değerler kullanılır.Data hafızası genel amaç registerlerini ve özel fonksiyon registerlerini içeren 2 kısım olarak bölümlendirilmiştir.Bölüm0(Bank 0) , RP0 bitini(STATUS<5>)temizlemekte kullanılır. RP0 bitini ayarlamak Bölüm1(Bank1)’i seçer.Her depo 7Fh (128 byte)’a kadar çıkabilir.Her depodaki ilk 12 alan özel fonksiyon registerleri için ayrılmıştır.Geri kalanlar ise static RAM olarak tedarik edilen genel amaç registerleridir.
4.2.1 Genel Amaçlı Register Dosyası
Tamamlanmamış data hafıza bölgesi; 0 gibi okunur. Not1:Fiziksel register değil.
Bütün aygıtlar bir miktar genel amaç register (GPR) alanına sahiptirler.Her GPR 8 bit genişliğindedir.Ve FSR’den ya direkt yada endirekt olarak yetkilendirilebilir.(Bölüm 4.5) Depo1’deki(Bank1) GPR adresleri Depo0’ daki adreslere haritalanmıştır.Örnek olarak , 0Ch yada 08h adres yerleri aynı GPR’ye yetkilendirilir.
4.2.2 Özel Fonksiyon Registerleri Özel fonksiyon registerleri (Şekil 4-2 ve Tablo 4-1) CPU ve çevresel fonksiyonlar
9
TABLO 4-1 : Register Dosya Özeti Adres
Đsim
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Güç üstündeki reset değeri
Diğer tüm resetlerdeki değer (not 3)
---- ----
---- ----
xxxx xxxx 0000 0000 0001 1xxx
uuuu uuuu 0000 0000 000q quuu
xxxx xxxx ---x xxxx
uuuu uuuu ---u uuuu
00h
INDF
01h 02h 03h 04h 05h
TMR0 PCL STATUS(2) FSR PORTA
Bank 0 FSR’nin içeriğini adres data hafızasında kullanır.(fiziki bir register değidir) 8 bitlik eş zamanlı saat/sayıcı Program sayacının(PC) değerli dizinli 8 biti(low order) IRP RP1 RP0 Z DC C TO PD Endirekt data hafıza adres belirteci 0 RA4 / RA3 RA2 RA1 RA0
06h
PORTB
RB7
RB0 / INT
xxxx xxxx
uuuu uuuu
EEDATA EEADR PCLATH INTCON
Tamamlanmamış(unimplemented) yer,”0” olarak okunur. EEPROM data registeri EEPROM adres registeri PC(1) ‘ in üst 5 biti için yazma buffer’ı GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
---- ---xxxx xxxx xxxx xxxx ---0 0000 0000 000x
---- ---uuuu uuuu uuuu uuuu ---0 0000 0000 000u
07h 08h 09h 0Ah 0Bh
TOCKI
RB6
RB5
RB4
RB3
RB2
RB1
Bank 1
80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 0Ah 0Bh
---- ---FSR’nin içeriğini adres data hafızasında kullanır.(fiziki bir register değildir.) 1111 1111 OPTION T0CS T0SE PSA PS2 PS1 PS0 INTEDG RBPU 0000 0000 PCL Program sayacının(PC) düşük değerli 8 biti(low order) (2) 0001 1xxx STATUS IRP RP1 RP0 TO PD Z DC C xxxx xxxx FSR Endirekt data hafıza adres belirteci 0 ---1 1111 TRISA PORTA data yön registeri 1111 1111 TRISB PORTB data yön registeri ------Tamamlanmamış(unimplemented) yer,”0” olarak okunur. WRER WRN ---0 x000 EECON1 EEIF WR RD ---- ---EECON2 EEPROM kontrol registeri 2 (fiziki bir register deği) (1) ---0 0000 PCLATH PC ‘ in üst 5 biti için yazma buffer’ı 0000 000x INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF Kısaltma : x = Bilinmeyen u = Değiştirilmemiş - = Tamamlanmamış “0” gibi okunur. q = Değer , duruma bağlı değişir.
INDF
NOT 1: Program sayacının üst byte’I direkt olarak yürürlüğe konulmaz.PCLATH , PC<12:8> için bir tutsak registerdir.PCLATH’ın içerikleri program sayacının üst byte’ına transfer edilebilir.Buna karşılık PC<12:8>’in içerikleri , PCLATH’e transfer edilemez. 2: STATUS registerindeki TO ve PD status bitleri , MCLR reset’I tarafından etkilenmezler. 3: Diğer (power-up) olmayan resetlerde ; MCLR ‘den harici reset ve Watchdog Timer reseti bulunur.
8
---- ---1111 1111 0000 0000 000q quuu uuuu uuuu ---1 1111 1111 1111 ---- ------0 q000 ---- ------0 0000 0000 000u
4.2.2.1 DURUM(STATUS) REGISTERI
komutlar hiçbir STATUS register bitine etki etmezler.
STATUS registerı , ALU’nun aritmetik durumunu,RESET durumunu ve data hafızası için banka seçim bitini içerir.Her registerda olduğu gibi sSTATUS registerı da herhangi bir komut için gidilecek yer görevi görür.Eğer STATUS registerı E,DC,C bitlerini etkileyecek bir komutun gideceği yer ise, o zaman bu 3 bite yazma yetkisi kaldırılır.Bu bitler, aygıt mantığına bağlı olarak konur ya da silinir.Bunların yanında, TO ve PD bitleri yazılamayan tiptedirler.Đşte bu noktada, STATUS registerının gideceği yer,komutun sonucuna bağlı olarak sanılandan farklı olabilir. ÖrneğinCLRF STATUS ,üst 3 biti temizleyip Z bitine yerleştirecektir.Bu durum, STATUS registerını 000u u1uu olarak bırakır. Sadece BCF,BSF,SWAPF ve MOVWF komutları,STATUS Registerını değiştirmek için kullanılmalıdır.(Tabvlo 9.2);Çünkü bu
Not1: IRP ve RP1 bitleri(STATUS <7:6>) PIC16C84 tarafından kullanılmazlar ve silinmiş bir şekilde programlanmalıdırlar.Bu bitlerden genel amaçlı R1W bitlerinin kullanımı tavsiye edilmez;çünkü bu yeni ürünlerin yenilenmesinde, bazı uyumsuzlklara sebep olabilmektedir. Not2: C ve DC bitleri , borrow (ödünç) ve elde bitleri olarak çıkarma işlemi görürler.SUBLW ve SUBWF komutlarına örnek olarak bakınız. Not3: STATUS registerı, Z,DC ya da C bitlerini etkileyecek bir komutun gideceği yer olduğu zaman,bu 3 bite yazma işlemi mümkün kılınmamıştır.Belirlenmişbitler,cihaz mantığına bağlı olarak yenilenecektirler.
ŞEKĐL 4-3: DURUM REGISTERI(ADRES 03h,83h) R/W-0 IRP bit 7:
R/W-0 RP1
R/W-0 RP0
R-1 T0
R-1 PD
R/W-X Z
R/W-X DC
R/W-X C
bit7 bit0 IRP:Register Bankası Seçim biti(endirekt adreslemede kullanılır) 0=Banka 0,1 (00h-FFh) 1=Banka 2,3 (100h-1FFh) IRP biti ,PIC16C8X tarafından kullanılmaz.IRP, kullanılmamış bir durumda bulunmalıdır.
bit 6-5:
RP1:RP0:Register Banka Seçim bitleri(direkt adreslemede kullanılır) 00=Banka 0 (00h-7Fh) 01=Banka 1 (80h-FFh) 10=Banka 2 (100h-17Fh) 11=Banka 3 (180h-1FFh) Her banka 128 baytlıktır.Sadece RP0, PIC16C8X tarafından kullanılır. RP1, kullanılmamış bir durumda bulunmalıdır.
bit 4:
TO:Time-out biti 1=Güç var modu(power-up),CLRWDT komutundan ya da SLEEP komutundan sonra 0=Bir WDT time-out’u oluşur
bit 3:
PD: Güç yok modu (power down) biti 1=Güç yok durumundan ya da CLRWDT komutundan sonra 0=SLEEP komutunun yürürlüğe konması ile birlikte
bit 2:
Z: Sıfır biti 1=Bir aritmetik ya da mantık işleminin sonucu sıfırdır 0=Bir aritmetik ya da mantık işleminin sonucu sıfır değildir
bit 1:
DC: Basamak elde/ödünç biti(ADDWF ve ADDLW komutları için)(ödünç için polaritenin tersi alınır) 1=Oluşan sonucun dördüncü düşük emir bitinden bir elde çıkarımı(carry-out) 0=Sonucun dördüncü düşük emir bitinden bir elde çıkarımı yoktur
bit 0:
C: Elde/ödünç biti(ADDWF ve ADDLW komutları için) 1=Oluşan sonucun en belirli bitinden bir elde çıkarımı(carry-out) 0=Sonucun en belirili bitinden bir elde çıkarımı yoktur
Not: Ödünç için kutup ters çevrilir.Đkinci operandın ikiye tümleyeni ile toplanarak, bir çıkarma işlemi gerçekleştirilir. Çevirme(rotate) komutları (RRF,RLF) komutları için, bu bit,kaynak registerının ya yüksek ya da düşük biti ile yüklenir.
11
4.2.2.2 SEÇENEK(OPTION) REGISTERI
çeşitli kontrol bitlerini içeren,yazılabilen ve de okunabilen tipte bir registerdır.
OPTION registerı ,TMR0/WDT önölçücüsü,harici INT bölücüsü,TMR0 ve PORTB üzerindeki zayıf Pull-up’ları ayarlayan
Not:Ön-ölçücü WDT(PSA=’1’)’a tayin edildiğinde TMR0, 1:1 önceden tayinine sahip olur.
ŞEKĐL 4-4: SEÇENEK REGISTERI(ADRES 81h) R/W-1 RBPU
R/W-1 R/W-1 R/W-1 INTEDG T0CS T0SE
R/W-1 R/W-1 PSA PS2
R/W-1 R/W-1 PS1 PS0
bit7
bit0
bit 7:
RBPU:PORTB Pull-up enable biti 1=PORTB Pull-up’lar disable durumundadırlar(yetki vermeme) 0=PORTB Pull-up’lar enable durumundadırlar(yetki verme) IRP biti ,PIC16C8X tarafından kullanılmaz.IRP, kullanılmamış bir durumda bulunmalıdır.
bit 6:
INTEDG:Kesme köşe seçim biti 1=RB0/INT pininin artan köşesinde kesme 0=RB0/INT pininin azalan köşesinde kesme
bit 5:
TOCS:TMR0 Saat(Clock) kaynağı seçim biti 1=RA4/T0CKI pini üzerinde geçiş 0=Dahili komut döngü saati(CLKOUT)
bit 4:
T0SE: TMR0 Kaynak köşe seçim biti 1=RA4/T0CKI pini üzerindeki yüksekten-düşüğe geçiş üzerindeki artış 0=RA4/T0CKI pini üzerindeki düşükten-yükseğe geçiş üzerindeki artış
bit 3:
PSA: Ön-ölçücü tayin biti 1=Ön-ölçücü,WDT’a tayin edilir 0=Ön-ölçücü,TMR0’a tayin edilir
bit 2-0:
PS2:PS0:Ön-ölçücü oran seçim bitleri Bit Değeri 000 001 010 011 100 101 110 111
TMR0 Oranı 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128 1 : 256
WDT Oranı 1:1 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128
8
4.2.2.3 INTCON REGISTERI
Not: Enable biti ya da küresel(global) enable biti GIE(INTCON<7>)’nin durumuna bağlı olmaksızın oluşabilecek bir kesme durumu gerçekleşirken,kesme durum tesbit bitleri (interrupt flag bit) devreye girer.
INTCON registerı,bütün kesme kaynakları için olan çeşitli yetkilendirici bitleri(enable) içeren ,okunabilir ve de yazılabilir türde bir registerdır. ŞEKĐL 4-5: INTCON REGISTERI(ADRES 0Bh,8Bh) R/W-0 GIE
R/W-0 EEIE bit7
R/W-0 T0IE
R/W-0 INTE
R/W-0 RBIE
R/W-0 T0IF
R/W-0 INTF
R/W-x RBIF bit0
bit 7:
GIE:Globak Kesme biti 1=Tüm dönüştürülmemiş kesmelere yetki verir 0=Tüm kesmeleri yetkisizleştir Not:Kesme biçiminin işlemini görmek için,bölüm 8.5’e bakınız.
bit 6:
EEIE:EE Yazma Tamamlama Kesim Enable biti 1=EE yazma tamamlama kesmesine yetki verir 0=EE yazma tamamlama kesmesine yetkiyi kaldırır
bit 5:
TOIE:TMR0 Taşma(Overflow) Kesim Enable biti 1=TMR0 kesmesini yetkilendirir 0=TMR0 kesmesine yetkiyi kaldırır
bit 4:
INTE: RB0/INT Kesim Enable biti 1=RB0/INT kesmesine yetki verir 0=RB0/INT kesmesine yetkiyi kaldırır
bit 3:
RBIE: RB Port Değişim Kesim Enable biti 1=RB Port Değişim Kesim bitine yetki verir 0=RB Port Değişim Kesim bitine yetkiyi kaldırır
bit 2:
T0IF: TMR0 taşma kesim flag biti 1=TMR0 taşmıştır(yazılımın içinden silinmesi gerekiyor) 0=TMR0 taşmamıştır
bit 1:
INTF: RB0/INT Kesim Flag biti 1=RB0/INT kesmesi meydana gelmiştir 0=RB0/INT kesmesi meydana gelmemiştir
bit 0:
RBIF: RB Port Değişim Kesim Enable biti 1=RB7:RB4 pinlerinden en az bir tanesinin durumu değişti(yazılım içinden silinmesi gerekiyor) 0=RB7:RB4 pinlerinden hiç bir tanesinde durum değişikliği yoktur.
9
R = Okunabilir bit W = Yazılabilir bit U = Tamamlanmamış bit “0” olarak okunur. -n = POR reset değeri
PCLATH<4:3>’ün uygulaması geri dönme komutları için talep edilmez.
4.3 Program Sayacı: PCL ve PCLATH
Not: PIC16C84 program hafızası 1,2 ve 3 (0800h-1FFFh) program sayfaları için kullanılan PCLATH<4:3> bitlerini siler.
Program sayacı (PC) , 13 bit genişliğindedir.Düşük byte PCL registeri , okunabilir ve yazılabilir bir registerdir.PC’nin yüksek byte’ı , PCLATH registerinden gelir ve direkt olarak okunamaz yada yazılamaz.PCLATH(PC latch high) registeri PC<12:8> için bir tutma registeridir.PC yeni bir değerle yüklendiği zaman PCLATH’ın içeriği program sayacının üstteki byte’ına transfer edilir.Bu olay PCL’ye yazılımda , CALL veya GOTO esnasında olur.PC’nin yüksek bitleri Şekil 4-6’da gösterildiği gibi PCLATH’dan yüklenmiştir.
4.4 Depo(Stack) PIC16C84 8 derinliğinde*13 bit genişliğinde bir donanım deposuna sahiptir(Şekil 41).Depo boşluğu ne bir programın ne de bir data boşluğunun parçası olmadığı gibi depo depo işaretleyiçiside okunabilir ve yazılabilir değildir. Bir CALL komutu gerçekleştirildiğinde ya da bir kesmenin varlığı onaylandığında , tüm 13 bitlik PC deponun üzerine itilir.RETURN , RETLW , yada RETFIE komutu açıldığında , depo patlatılır(popped).PCLATH , bir itme yada patlatma durumundan etkilenmez.
Şekil 4-6 : Farklı Durumlarda PC’nin Yüklenmesi
Not: Đtme yada patlama diye isimlendirilen bir mnemonics komutu yoktur.Bunlar CALL , RETURN , RETLW ve RETFIE komutlarının açılmasıyla oluşan olaylardır yada bir kesme adresinin yönlendirilmesiyle oluşan durumlardır. Depo , dairesel arabellek(buffer) işlemi görür.Bu , deponun 8 kez itilmesinden sonra dokuzuncu itilmede ilk itilmeden sonra saklanmış olan değerin üzerine yazılması biçimindedir.Onuncu itmede ikinci itmenin üstüne yazar. Eğer depo efektif olarak dokuz kez patlatılmışsa , PC değeri ilk patlamadan sonraki ile aynıdır.
4.3.1 Computed GOTO (Hesaplanmış GOTO) Hesaplanmış GOTO , program sayacına bir sapma(offset) eklenerek gerçekleştirilir (ADDWF PCL).Bir tablo oluştururken hesaplanmış GOTO metodunu okuyunuz , eğer tablo yerleri PCL hafıza sınırları (herbir 256 kelime bloğu) ile çakışırsa dikkat edilmelidir.
Not: Deponun yetersiz akış durumlarını yada deponun taşma durumlarını bildirmek amaçlı hiçbir status biti yoktur.
4.3.2 Program Hafıza Sayfalaması PIC16C84’ün 1K’lık program hafızası mevcuttur.CALL ve GOTO komutları 11 bitlik adres aralığına sahiptirler.Bu 11 bitlik adres aralığı , 2K boyutundaki program hafıza sayfasıyla birlikte bir dala(branch) izin verir.Bu sayfalama bitleri PCLATH<4:3> bitlerinden gelir(Şekil 4-6).Bir CALL yada GOTO komutunu gerçekleştirirken kullanıcı , bu sayfa bitlerinin (PCLATH<4:3>) istenilen program hafıza sayfasına programlanmasını sağlamalıdır.Eğer CALL komutu(yada kesmesi) açılırsa , tüm 13 bitlik PC depo(stack) üzerine itilir.Bu noktada
8
4.5 Endirekt Adresleme: INDF ve FSR Registerleri INDF’nin kendisinin endirekt olarak(FSR=0) okunuşu 00h’ı üretecektir. INDF registerine endirekt yolla yazma (STATUS bitlerinin etkilenmesi ihtimali olduğu bilinerek) bir işlem dışı olay şeklinde sonuçlanır. Örnek 4-2’de endirekt adresleme kullanılarak yapılmış 20h-20Fh RAM yerlerini temizlemekte kullanılan basit bir program gösterilmiştir.
INDF registerleri fiziki bir register değidir.INDF adres registerleri , FSR registerinin bulunduğu adresi adresleyen registerdir(FSR’nin yer belirtecidir).Đşte bu olaya endirekt adresleme denir. ÖRNEK 4-1: Endirekt Adresleme
• • • • • •
05 Register dosyası 10h değerini içerir. 06 Register dosyası 0Ah değerini içerir. 05 değerini FSR registerine yükleyiniz. INDF registerinin okunması 0Ah’lık bir değer olarak geri dönecektir. FSR registerinin bir değerinde(FSR=06) artması. INDF registerinin okunması sonucu 0Ah’lık bir değer şekline geri dönecektir.
ÖRNEK 4-2:Endirekt Adresleme Kullanılarak RAM’in Temizlenmesi
NEXT
mowlw movwf clrf incf btfss goto
0*20 ; initialize pointer FSR ; to RAM INDF ; clear INDF register FSR ; inc pointer FSR ,4 ; all done? NEXT ; NO, clear next
CONTINUE :
;YES , continue
Efektif 9 bit adresi 8 bitlik FSR registeri ve IRP biti (STATUS<7>) sıralanarak elde edilir(Bk. Şekil 4-7).Ama IRP , PIC16C84’te kullanılmaz.
Şekil 4-7 : Direkt/Endirekt Adresleme
9
5.0 I/O PORTLARI PIC16C84 ,PORTA ve PORTB olmak üzere 2 porta sahiptir.Bazı port pinleri cihazın üzerindeki diğer özellikleri için çeşitli alternatif fonksiyonlarla yol seçtirilmiştirler.
ÖRNEK 5.1 PORTA’YI ATAMAK
CLRF PORTA PORTA by
5.1 PORTA ve TRISA Registerleri
BSF MOVLW
PORTA, 5-bitlik bir tutucudur.RA4, bir Schmitt Trigger girisşi ve bir açık boşalma çıkışıdır.Btün diğer RA port pinleri, TTL giriş düzeylerine ve tam CMOS şıkış sürücülerine sahiptirler.Bütün pinler de, giriş ya da çıkış şeklinde düzenleyerecek data komut bitlerine(TRIS registerları) sahiptirler. Bir TRISA bitini ayarlamak(=1),PORTA pinini bir giriş haline getirecektir.Örneğin haberleşme çıkış sürücüsünü yüksek empedans moduna yerleştiriniz.Bir TRISA bitini (=0) temizlemek, haberleşen PORTA pinini bir çıkış durumuna getirecektir.Örneğin çıkış tutucusunun içeriğini, seçilen pine yerleştiriniz. PORTA registerlarını okumak demek, pinlerin durumunu okumak demektir;halbuki PORTA’ya yazmak,port tutucusuna yazmak manasına gelmektedir.Bütün yazma işlemleri okuma-çevirim-yazma operasyonları şeklindedir.Yani bir porta yazmak demek, port pininin önce okunduğu,daha sonra da bu değerin çevrime uğradığı ve en sonunda da port data tutucusuna yazıldığı anlamına gelir. RA4 pini, TMR0 saat girişi ile yol seçtirilmiştir.Şekil 5.1 : RA3:RA0 Pinleri Blok Diyagramı
STATUS, RP0 0x0F
; Initialize ; setting output ; data latches ; Select Bank 1 ; Value used to ; initialize
data MOVWF TRISA as inputs
; direction ; Set RA<3:0> ; RA4 as
outputs ; TRISA<7:5> are always ; read as ‘0’.
ŞEKĐL 5.2 RA4 Pininin Blok Diyagramı
Şekil 5-1’de I/O pinleri VDD ve VSS’e karşı diyot korumalı.Şekil 5-2’de ise sadece VSS’e karşı diyot korumalı Not: 500kHz’den düşük işletimde çalışan kristal osilatör konfigürasyonlarında, cihaz PORTA<0> durumuna getirişdiğinde, dahili Q- clock parazitiyaratabilir.Bu,RCmodunda çalışan harici bir saatte oluşmaz.Bu olayı engellemek için RA0 pini sabit tutulmalıdır; örneğin giriş/çıkış modunda RA0 pini açılmamalıdır.
8
TABLO 5.1: PORTA FONKSĐYONLARI
Đsim
Bit0
Buffer Tipi
RA0 RA1 RA2 RA3 RA4/TOCKI
bit0 bit1 bit2 bit3 bit4
TTL TTL TTL TTL ST
Fonksiyon Giriş/Çıkış Giriş/Çıkış Giriş/Çıkış Giriş/Çıkış Giriş/Çıkış ya da TMR0 için harici clock girişi. Çıkış, açık drain tipindedir.
TABLO 5.2: PORTA ĐLE BĐRLEŞTĐRĐLMĐŞ REGISTERLARIN
ÖZETĐ Adres
Đsim
Bit 7
Bit 6
Bit 5 Bit 4 Bit 3 Power-on Diğer
Bit 2
Bit 1 Reset’deki Değer
05h
PORTA
---
---
---
RA4/T0CKI
85h
TRISA
---
---
---
TRISA4
RA3
RA2
TRISA3 TRISA2
Bit 0 resetlerdeki Değer
RA1
RA0
---x xxxx
---u uuuu
TRISA1
TRISA0
---1 1111
---1 1111
Kısaltma: x=bilinmeyen u=değiştirilmemiş - =çoğaltılmamış;’0 olarak okunur.----- hücreler arttırılmamıştır,’0’ olarak okunur.
8
5.2 PORTB ve TRISB Registerleri
Bu kesme, cihazı SLEEP modundan uyandırabilir.Rutin kesme servisinde bulunan kullanıcı, aşağıdaki biçimde kesmeyi silebilir:
PORTB, 8-bit genişliğinde çift yönlü bir porttur.Haberleşme data yönü registerı TRISB’dir. TRISB registerında bulunan herhangi bir bitin üstünedeki ‘1’ ,haberleşen çıkış sürücüsünü yüksek empedans moduna sokar.TRISB registerında bulunan herhangi bir bitin üstündeki ’0’, çıkış tutucusunu seçilen pine yerleştirir. PORTB pinlerinin herbiri, zayıf bir dahili pull-up’lara sahiptir.Tek bir kontrol biti, bütün pull-up’ları çevirebilir.Bu, RBPU (OPTION<7>) bitini silerek yapılabilir.Zayıf pull-up ; port pini ,çıkış olarak ayarlandığı zaman otomatik olarak kapatılır.Pullup’lar,çalışma esnasında reset(Power-on Reset) yapamazlar. PORTB pinlerinden dördü, RB7:RB4, değişirken kesme(interrupt on change) özelliğine sahiptir. Sadece giriş olarak düzenlenmiş pinler böyle bir kesmeninoluşmasını sağlayabilirler.(Örneğin çıkış olarak düzenlenmiş herhangi bir RB/:RB4 pini,değişmede kesme mukayesesinden hariç tutulmuştur). Pinin giriş modundaki değeri,PORTB’nin son okumasından elde edilen eski tutucu değeriyle kıyaslanmıştır.Pinlerin “uyumsuz” çıkışları birlikte OR haline dönüştürülerek,RB portu değişim kesmesinin yaratılması sağlanmıştır. Şekil 5-3 : RB7:RB4 Pinleri Blok Diyagramı
a)PORTB’yi okuma(ya da yazma).Bu , uyumsuzluk durumuna son verecektir. b)Flag biti RBIF’yi silmek. Bir uyumsuzluk durumu, RBIF bitinin ayarlanmasını devam ettirecektir.PRTB’nin okunması,uyumsuzluk durumunu sona erdirecektir ve RBIF bitinin silinmesini mümkün kılacaktır. Bu 4 pin üzerindeki yazılımı ayarlanabilir pull-up’lar, uyumsuzluk özelliğindeki bu kesme ile birlikte tuş takımına kolay bir arabirim sağlar ve key-depression durumundan uyandırır. Not1:PORTB’nin açılması sırasındaki bir okuma işleminde (Q2 döngüsünün başlangıcında) I/O pininde bir değişiklik gerçekleştirilmesi gerkiyorsa,RBIF kesme flag biti ayarlanmayabilir. Değişmede kesme(interrupt on change) özelliği, key depression’dan uyandırma işlemi ve PORTB’nin yalnızca değişmede kesme özelliği için kullanıldığı durumlardatavsiyeedilmektedir. PORTB’nin değişmede kesme özelliği kullanılırken sorgulanması tavsiye edilen bir durum değildir. Şekil 5-4: RB3:RB0 Pinleri Blok Diyagramı Şekil 5-3 ve 5-4 ‘de
1: TRISB=”1” hafif çekme yetkili(Eğer OPTION registerindeki RBPU=”0” ise 2: I/O pinleri VDD ve VSS’ karşı diyot korumalı
9
ÖRNEK 5.1: PORTB’YĐ ATAMAK CLRF
PORTA
BSF STATUS, RP0 MOVLW 0x0F
MOVWF TRISA
; Initialize PORTA by ; setting output ; data latches ; Select Bank 1 ; Value used to ; initialize data ; direction ; Set RB<3:0> as inputs ; RB<5:4> as outputs ; RB<7:6> as inputs
TABLO 5.3: PORTB FONKSĐYONLARI
Đsim Bit Buffer Tipi Giriş/Çıkış Mevcudiyet Fonksiyonu RBO/INT bit0 TTL Giriş/Cıkış pini ya da harici kesme girişi.Dahili yazılımla programlanabilir zayıf pull-up. RB1 bit1 TTL Giriş/Cıkış pini.Dahili yazılımla programlanabilir zayıf pull-up. RB2 bit2 TTL Giriş/Cıkış pini.Dahili yazılımla programlanabilir zayıf pull-up. RB3 bit3 TTL Giriş/Cıkış pini.Dahili yazılımla programlanabilir zayıf pull-up. RB4 bit4 TTL Giriş/Cıkış pini(değişmede kesmeli).Dahili yazılımla programlanabilir zayıf pull-up. RB5 bit5 TTL Giriş/Cıkış pini(değişmede kesmeli).Dahili yazılımla programlanabilir zayıf pull-up. RB6 bit6 TTL/ST Giriş/Cıkış pini(değişmede kesmeli).Dahili yazılımla programlanabilir zayıf pull-up. RB7 bit7 TTL/ST Giriş/Cıkış pini(değişmede kesmeli).Dahili yazılımla programlanabilir zayıf pull-up. Kısaltma: TTL= TTL giriş ST= Schmitt Trigger Not 1: Seri programlama modu kullanıldığı zaman tampon Schmitt Trigger girişidir. TABLO 5.4: PORTB ĐLE BĐRLEŞTĐRĐLMĐŞ REGĐSTERLARIN
ÖZETĐ Adres
Đsim
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Power-on
Diğer Resetler-
Reset'deki
deki değer
değer 06h
PORTB
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0/INT
xxxx xxxx
uuuu uuuu
86h
TRISB
TRISB7
TRISB6
TRISB5
TRISB4
TRISB3
TRISB2
TRISB1
TRISB0
1111 1111
1111 1111
81h
OPTION
RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
1111 1111
1111 1111
Kısaltma: x=bilinmeyen u=değiştirilmemiş.Taranmış hücreler,PORTB tarafından kullanılmaz.
10
5.3 I/O Programlama Kabulleri
nuçta oluşan yüksek akım çıkışı, çipe zarar verebilir.
5.3.1 Çift Yönlü I/O Portları
5.3.2 I/O Portları Üzerinde Ardışıl Đşlemler
Yazmada kullanılan herhangi bir komut öncelikle bir okuma işleminden geçecektir.Buna müteakiben de bir yazma işlemi meydana gelecektir.BCF ve BSF komutları ,örnek olarak registerı CPU içinde oku;bit işlemini açar ve sonucu registera geriyazmada kullanılırlar.Bu komutların hem girişi, hem de çıkışı tanımlanmış bir porta uygulanması esnasında tedbir alınmalıdır.Örneğin, PORTB’nin bit5’inin üzerindeki bir BSF işlemi,PORTB’nin 8 bitinin tamamının CPU içine okunmasına neden olacaktır.Daha sonra BSF işlemi ,bit 5 üzerinde yerini alacaktır ve PORTB çıkış tutucularına yazılacaktır.PORTB’nin başka bir biti, bir çift-yönlü I/O pini olarak kullanılırsa ve bu aynı zamanda bir giriş olarak da tanımlanırsa pin üzerindeki giriş sinyali sunumu,CPU içine okunacaktır.Ve bu pinin data tutucusuna,önceki içeriğin üstüne tekrar yazılacaktır(overwrite).Pin,input modunda kaldığı sürece hiçbir problem oluşmaz.Zaten,bit0 çıkış moduna çevrildiğinde data tutucusu bilinmez bir duruma gelmiş olacaktır. Port registerının okunması demek,port pinlerinin değerlerinin okunması demektir.Port registerının yazılması da port pinlerinin değerlerinin yazılması demektir.Bir port üzerinde oku-çevir-yaz komutları uygulanırken(örneğin BCF,BSF,vs.),port pinlerinin değerleri okunur.Đstenilen işlem, bu değer üzerinden yapılır ve bu değer port tutucusuna yazılır. Düşük ya da yüksek aktif çıkış verilen bir pin,bu pin üzerindeki düzeyin değiştirilmesi amacıyla aynı anda harici cihazlarda sürülmemelidir(“wired-or”,”wired- and”).So-
Bir I/O portuna asli yazma olayı, bir komut döngüsünün sonunda meydana gelir.Halbuki okuma için data, komut döngüsünün başında geçerli olmak zorundadır(Şekil 5.5).Đşte bu noktada, aynı I/O portunun üzerine bir okuma ile takip edilen yazma işlemi taşınırken,dikkat sarf edilmelidir.Ardıiık komutlar,pin voltajının bir sonraki komutun CPU içine yazılmasının gerçekleştirilmesinden önce stabilize edilmelidir.Yoksa pinin önceki durumu,yeni bir durum hâline getirilmekten çok CPU içinde okunma şeklinde gerçekleşir.Şüpheye düşüldüğü zaman, bu komutları,bu I/O portunu çalıştırmayan bir NOP ya da başka bir komutla ayırmak gerekir. Örnek 5.3’te 2 ardışık oku-çeviryaz(örneğin BCF,BSF,vs.) komutlarının bir I/O portu üzerindeki etkisi gösterilmiştir. ÖRNEK 5.3 BĐR I/O PORTU ÜZERĐNDEKĐ OKU—ÇEVĐR-YAZ KOMUTLARI ;Initial PORT settings: PORTB<7:4> Inputs ; PORTB<3:0> Outputs ;PORTB<7:6> have external pull-ups and are ;not connected to other circuitry ; ; PORT latch PORT pins ; -----------------BCF PORTB, 7 ; 01pp ppp 11pp ppp BCF PORTB, 6 ; 10pp ppp 11pp ppp BSF STATUS, RP0 ; BCF TRISB, 7 ; 10pp ppp 11pp ppp BCF TRISB, 6 ; 10pp ppp 10pp ppp ; ;Note that the user may have expectes the ;pin values to be 00pp ppp.The 2nd BCF ;caused RB7 to be latched as the pin value ;(high).
Şekil 5-5: Ardışıl I/O Đşlemi
8
6.0 TIMER0 MODÜLÜ VE TMR0 REGĐSTERĐ Timer0 modülü zamanlama/sayacı aşağıdaki özelliklere sahiptir. • 8 bit’lik zamanlama/sayaç • Okunabilirlik ve yazılabilirlik • 8 bit’lik yazılım programlama özelliğine sahip önölçücü(prescaler) • Dahili ve harici saat seçimi • FFh’dan 00h’a kadar taşma üzerinde kesme • Harici saat için kenar seçimi(edge select)
Önölçücü(prescaler) Timer0 modülü ve Watchdog Timer arasında paylaştırılmıştır. Önölçücü tayini yazılım içersinde PSA kontrol biti(OPTION<3>)tarafından kontrol edilir. PSA silme biti önölçücüyü Timer0 modülüne atayacaktır.Önölçücü yazılabilir yada okunabilir değildir.Önölçücü(Bölüm 6-3)Timer0 modülüne atandığında önölçme değeri (1:2 , 1:4 , ……. , 1:256) , yazılım seçilebilir. 6.1 TMR0 Kesmesi
Zamanlama modu T0CS biti silinerek seçilir(OPTION<5>).Timer0 modülü her komut döngüsünü (ön ölçücü olmaksızın) çoğaltacaktır.TMR0 registeri yazılırsa ; çoğalma , sonraki iki döngüde engellenecektir(Şekil 6-2 , Şekil6-3).Kullanıcı , TMR0 registerine ayarlanmış bir değer yazarak çalışabilir. TOCS biti ayarlanarak sayaç modu seçilebilir(OPTION<5>).Bu modda , TMR0 hem her türlü artışta hem de RA4/T0CS pini kenar azalışında çoğalacaktır.Çoğalma kenarı ;T0 kaynak kenar seçim biti , T0SE(OPTION<4>) tarafından kararlaştırılacaktır.Harici saat girişindeki sınırlamaların detayları Bölüm 62’de anlatılacaktır.
TMR0 kesmesi , TMR0 registerinin FFh -00h aralığında taşması durumunda yaratılır. Bu taşma , T0IF bitini(INTCON<2>) ayarlar. Kesme , temizlemeyi mümkün kılan T0IE(INTCON<5>)tarafından belirlenir(masked).T0IF biti , yazılım içersinde bu kesme mümkün kılınmadan önce “Timer0 modülü rutin kesme serisi” tarafından temizlenmelidir.SLEEP modu esnasında zamanlayıcı kapatılmadan TMR0 kesmesi (Şekil 6-4) işlemciyi SLEEP’den uyandıramaz.
Şekil 6-1 : TMR0 Blok Diyagramı
Not1: T0CS, T0SE, PS2, PS1, PS0 ve PSA bitleriOPTIONregisterineyerleştirilmiştir. 2: Önölçücü (prescaler) Watchdog Timer ile paylaştırılmıştır. Şekil 6-2 : TMR0 Zamanlaması : Dahili Saat / Önölçücüsüz
8
Şekil 6-3 : TMR0 Zamanlaması : Dahili Saat / Önölçücü 1:2
Şekil 6-4 : TMR0 Kesme Zamanlaması
Not 1: T0IF kesme bayrağı(flag) buraya örnektir(her Q1) 2: Kesme gecikmesi=3.25 Tcy , Tcy=Komut döngü zamanı. 3: CLKOUT sadece RC osilatör modunda geçerli 4: Zamanlama saatinde(senkronize devreden sonra) , T0IF bitinin hemen FFh’dan 00h’ a ayarlanmasından zaman artar.TMR0 registeri 3 Tosc döngüsünden sonra tekrarlar(roll over).
9
6.2 TMR0’ın Harici Saatle Kullanımı
genişliğinin aşılmasıdır.AC elektriki özellikler kısmında 40-41 ve 42.parametrelere başvurunuz.
TMR0 için bir harici saat girişi kullanıldığında bazı talepleride beraberinde karşılamak zorundadır.Harici saat talebi , dahili faz saati(Tosc) senkronizasyonuna bağlıdır.Aynı zamanda , TMR0 registerinin senkronizasyonundan sonra anlık çoğalmasında bir gecikmede mevcuttur.
6.2.2 TMR0 Çoğalma Gecikmesi Önölçücü çıkışı dahili saatlerle senkronize edildiğinden ötürü , Timer0 modülünün çoğaldığı zamanda harici saat kenarının zamanlamasında da küçük bir gecikme oluşacaktır.Şekil 6-5’de harici saat kenarından zaman artışına kadar olan gecikme gösterilmiştir.
6.2.1 Harici Saat Senkronizasyonu
6.3 Önölçücü
Önölçücü kullanılmadığı zamanlarda harici saat girişi önölçücü çıkışının aynısıdır.RA4/ T0CKI pininin dahili faz saatleri ile senkronizasyonu; dahili faz saatlerinin , Q2 ve Q4 döngüleri üzerindeki önölçücü çıkışının modellenmesiyle sağlanır(Şekil 6-5).Burada , T0CKI’ nin en az 2 Tosc (+ küçük bir RC gecikmesi) yüksekliğinde olması ve en az da 2 Tosc (+ küçük bir RC gecikmesi) düşüklüğünde olması gerekmektededir.Bahsi geçen cihazın elektriki tanımlamasına başvurunuz. Bir önölçücü kullanıldığında harici saat girişi asenkron bir dalga sayacı tipinde önölçücü tarafından bölünmelidir.Bu sayede önölçücü çıkışı simetrik olacaktır.Harici saatin modelleme talebini karşılayabilmesi için dalga sayacı hesap içine katılmak durumundadır. Đşte tam bu noktada , T0CKI’nin önölçücü değeri tarafından bölünmüş en az 4 Tosc’luk (+ küçük bir RC gecikmesi) bir peryoda sahip olması gerekir.T0CKI’nin yüksek ve düşük zamandaki tek talebi , m,n. 10ns’lik darbe Şekil 6-5 : Harici Saat Đle TIMER0 Zamanlaması
Timer0 modülü için 8 bitlik bir sayaç da önölçücü olarak kullanılabilir(Watchdog Timer için sonölçücü gibi).Kısaca ;bu sayaç , bu notlarda “önölçücü”olarak anılmaktadır.Dikkat edilmesi gereken bir husus da Timer0 modülü ve Watchdog Timer için karşılıklı , kendine has tek bir önölçücünün bulunduğudur.Buradan , Timer0 modülü için bir önölçücü tayini , Watchdog Timer’ın bir önölçücüye sahip olmadığı anlamına gelir. PSA ve PS2:PS0 bitleri(OPTION<3:0>) , önölçücü tayinine ve önölçme oranlarına karar verirler. Timer0 modülüne tayin gerçekleştirildiğinde , Timer0 modülüne(Örneğin: CLRF 1 , MOVWF 1 , BSF 1 , ….vs.) yazılan tüm komutlar önölçücüyü silecektir.Bir WDT’ye tayin durumunda ise bir CLRWDT komutu , önölçücüyü Watchdog Timer ile beraber silecektir.Önölçücü , yazılabilir ya da okunailir değildir.
Not 1: Gecikme TMR0 saat giriş deiğişiminin 3 Tosc’den 7 Tosc’ye artmasından itibaren (Qsüresi=Tosc). Bununla beraber,TMR0 girişindeki iki kenar arasındaki sürenin ölçümündeki hata =+- 4 Toscmax. 2: Önölçücü yok ise harici saat kullanılır. 3: Örnekler olduğu zamanoklar belirteçtir.Kısa clock pulselerinede örnekler başarısız olabilir.
8
Şelik 6-6 : TMR0 / WDT Önölçücü Blok Diyagramı
Not : T0CS , T0SE , PSA , PS2:PS0 bitleri OPTION registeri içindedir.
8
6.3.1 Önölçücü Tayininin Açılması ÖRNEK 6-2 : Önölçücü değişimi (WDT→TMR0)
Önölçücü tayini , bütünüyle yazılım kontrolu altındadır.(Örneğin: Program açılması esnasında “on the fly” şeklinde değiştirilebilir.) Not: Tasarlanmış bir cihaz RESET’ini engellemek için aşağıdaki komut sırası takip edilerek önölçücü tayininin Timer0’dan WDT’ye dağiştirilmesi sağlanmalıdır(Örnek 61).Bu sıra , WDT mümkün kılınmadığı durumlarada dahi takip edilmelidir.Önölçücüyü WDT’den Timer0’a değiştirmek için de Örnek 6-2’de verilen sıra takip edilmelidir. ÖRNEK 6-1: Önölçücü değişimi (TMR0→WDT) BCF CLRF
STATUS, RP0 TMR0
BSF CLRWDT MOVLW MOVWF BCF
STATUS, RP0 b’xxxx1xxx’ OPTION STATUS, RP0
; Bölüm 0 ; TMR0 ve önölçücü silinir. ; Bölüm 1 ; WDT silinir. ; yeni seçilir. ; önölçücü değeri ; Bölüm 0
Tablo 6-1 : TMR0 ile Registerleri Birleştirme
Kısalmalar: x = Bilinmeyen u= Değişmeyen - =Tamamlanmamış,’0’diye okunur.Taralı hücreler Timer0 ile birleştirilmemiştir.
25
CLRWDT BSF MOVLW
STATUS, RP0 b’xxxx0xxx’
MOVWF BCF
OPTION STATUS, RP0
; WDT ve önölçücü silinir. ; Bölüm 1 ; TMR0 , yeni önölçücü değeri ve saat kaynağı seçilir. ; ; Bölüm 0
silinmesinin mümkünsüzlüğü , henüz tamamlanmamış bir yazma işleminin kaza ile sonlanmasını önler. WREN biti , kurulduğunda bir yazma işlemine izin verir.Güç artışında WREN biti temizdir.WRERR biti , bir MCLR reseti yada bir normal operasyon esnasında WDT time-out reseti tarafından yazma işlemi kesilirse kurulur.Bu durumlarda reseti takiben , kullanıcı WRERR bitini kontrol edip tekrar yerine yazabilir.Data ve adres , EEDATA ve EEADR registerleri içersinde değiştirilmeyeceklerdir. EEIF kesme flag biti yazma tamalandığı zaman kurulur.Bu , yazılım içinde temizlenmiş olmalıdır. EECON2 fiziksel bir register değildir.EECON2 bütün “0”ları okuyacaktır.EECON2 registeri EEPROM data yazması sırasında özel olarak kullanılır.
7.0 EEPROM DATA HAFIZASI EEPROM data hafızası normal işletimde (tam Vdd aralığında) okunabilir ve yazılabilirdir.Bu hafıza register dosya boşluğunda direkt olarak haritalanmamıştır.Bunun yerine , özel fonksiyon registerleri arasında endirekt olarak adreslenmiştir.Bu hafıza okuma ve yazma için 4 tane SFR kullanmıştır.Bu registerler ; • EECON1 • EECON2 • EEDATA • EEADR EEDATA , read/write için 8 bitlik datayı ve EEADR ‘de girilen EEPROM adresinin yerini elinde bulundurur.PIC16C84 aygıtları 0h’dan 3Fh’a kadarlık bir adres aralığı ile 64 byte’lık data EEPROM’una sahiptir. EEPROM data hafızası , byte’a okuma ve yazma izni verir.Bir byte yazma otomatik olarak yeri siler ve yeni datayı yazar(Yazmadan önce silme).EEPROM data hafızası yüksek erase/write döngüleri için oranlanmıştır.Yazma zamanı bir on-chip zamanlayıcısı tarafından kontrol edilir.Yazma zamanı gerilim ve ısıyla değişebileceği gibi chip’ten chip’e de değişebilir.Kesin limitler için lütfen AC özellikler kısmına bakınız. Aygıt , kod korumalı olduğu zaman CPU EEPROM data hafızasını okumaya ve yazmaya devam edebilir.Aygıt programlayıcısı bundan sonra bu hafızaya daha fazla erişim veremez.
7.3 EEPROM Data Hafızasının Okunması Bir hafıza yerinin okunabilmesi için kullanıcı , EEADR registerine adresi yazmak ve bundan sonrada kontrol biti RD(EECON1<0>) ’yi ayarlamalıdır.Data , EEDATA registeri içersindeki bir sonraki döngüde mevcuttur.Bundan dolayı , bir sonraki komut içersinde okunabilir.EEDATA , bu değeri kullanıcı tarafından başka bir okuma ve yazma işlemlerine kadar elinde bulundurur. ÖRNEK 7-1 : EEPROM Datasını Okuma BCF MOVLW MOVWF BSF BSF BCF MOVF
7.1 EEADR EEADR registeri max. 250 byte’lık EEPROM datasını adresleyebilir.EEPROM datasının yalnız ilk 64 byte’ı yerine getirilir. Üst 2 bit adres çözücüdür.Bu ; iki bitin, adresin 64 byte’lık hafıza boşluğunda yer aldığını onaylaması için “0” olması gerektiği anlamına gelir.
STATUS , RP0 CONFIG , ADDR EEADR STATUS , RP0 EECON1 , RD STATUS , RP0 EEDATA , W
; ; ; ; ; ; ;
Bölüm 0 Adres okuma Bölüm 1 EE okuma Bölüm 0 W=EEDATA
7.4 EEPROM Data Hafızasına Yazma
7.2 EECON1 ve EECON2 Registerleri
Bir EEPROM data yerine yazmada kullanıcı ilk olarak EEADR registerine adresi ve de EEDATA registerine datayı yazmalıdır.Daha sonra kullanıcı her byte için yazmanın başlatılmasında belirli belirli bir sırayı takip etmelidir.
EECON1 fiziki yolla yerine getirilmiş 5 adet düşük emir biti ile birlikte kontrol registeri görevini yapar.Üst 3 bit varolmayan bitlerdir ve “0” olarak okunurlar. RD ve WR kontrol bitleri okuma ve yazmayı başlatırlar.Bu bitler silinemezler ve yalnızca yazılımda kurulabilirler.Yazma ve okuma işleminin tamamlanmasında donanım içerisinden silinirler.WR bitinin yazılımdan
26
ÖRNEK 7-2 : EEPROM Datası Yazma ÖRNEK 7-3 : Yazma Doğrulaması BSF BCF
STATUS , RP0 INTCON , GIE
; ;
BSF MOVLW MOVWF MOVLW MOVWF BSF
EECON1 , WREN 55h EECON2 AAh EECON2 EECON1 , WR
; ; ; ; ; ;
Bölüm 1 INT’ler yetkisiz Yazma yetkili
BCF :
55h’ı yazma
: MOVF BSF READ BSF
AAh’ı yazma WR bitini kurma yazmaya başlama INT’ler yetkisiz
BCF
BSF INTCON , GIE ; Kalın yazılı komutlar istenen sıralamayı belirtmektedir.
STATUS , RP0
; ;
EEDATA , W STATUS , RP0
; ; ;
EECON1 , RD
;
STATUS , RP0
;
Bölüm 1 Her kod buraya gidebilir. Bölüm 0’ da olmalı Bölüm 1 Evet,yazılan değer okunur. Bölüm 0
; Yazılan (W registerindeki) ve okunan (EEDATA’daki) değer aynı mı? ;
Her byte için yukarıdaki sıra tam olarak takip edilmediği zaman yazma başlamayacaktır(EECON2’ye 55h’ın yazılması , EECON2 ’ye AAh’ın yazılması ve daha sonra da WR bitinin ayarlanması ).Bu kod bölümü esnasında kesmelerin yetkisizleştirilmesi tavsiye edilir. Ek olarak , EECON1 içindeki WREN biti yazmaya ayarlanmalıdır.Bu mekanizma , hatalı (beklenmeyen)kod açılmasına(Örneğin kayıp programlar) bağlı olarak kazara EEPROM datasına yazmaları önler.Kullanıcı , her zaman WREN bitini boşta bulundurmalıdır(EEPROM ’un güncelleştirilmesi durumu hariç).WREN biti donanım tarafından silinmez. Bir yazma sırasının başlatılmasından sonra , WREN bitinin silinmesi yazma döngüsünü etkilemeyecektir.WREN biti ayarlanmadıkça WR bitininde ayarlanması engellenecektir. Yazma döngüsünün tamamlanmasında WR biti donanım içersinde temizlenecektir ve EE yazma tamamlama kesme flag biti (EEIF) ayarlanacaktır.Kullanıcı ya bu kesmeyi mümkün hale getirecektir ya da bu biti oya sunacaktır.EEIF , yazılım tarafından temizlenmelidir.
SUBWF BTFSS GOTO : :
EEDATA , W STATUS , Z WRITE_ERR
; ; ; ; ;
0 farklı mı? Hayır,Yazma hatası Evet,Yazma iyi Program devam
7.6 Kışkırtıcı Yazmalara Karşı Koruma Cihazın data EEPROM hafızasına yazmak istemeyeceği durumlar vardır.Kışkırtıcı EEPROM yazmalarından korunmak için çeşitli mekanizmalar inşa edilmiştir.Güç arttırımında (power-up) WREN temizlenir.Bununla beraber güç arttırma zamanlayıcısıda (72ms’lik süre) EEPROM yazmasını önler. Yazım başlatma sırası ve WREN biti birlikte brown-out , powerglitch ya da yazılım fonksiyonsuzluğu gibi kazayla olabilecek yazmaları önler.
Not: Data EEPROM hafızası E/W döngü zamanı , 10ms’lik tanımlamayı (tipik) duruma bağlı olarak aşabilir.Yazma döngüsünün tamamlandığını onaylayabilmek için EE kesmesini kullanınız ya da WR biti’ni (EECON<1>) oya sununuz.Bu olayın ikiside yazma döngüsünün tamamlanmasını belirler.
7.7 Kod Koruması Esnasında Data Đşlemi Cihaz kod korumalı olduğu zaman; CPU , data EEPROM’una karıştırılmamış datayı okuyabilir ve yazabilir.ROM cihazları için 2 kod koruma biti vardır(Bölüm 8.1).Bir tane ROM program hafızası içindir ve diğeride data EEPROM hafızası içindir.
7.5 Yazmanın Doğrulanması Uygulamaya bağlı olarak EEPROM datasına yazılan değerin doğrulanması iyi bir programlama denemesi sonucunda talep edilebilir (Örnek 7-3).Bu doğrulanan değer , istenen değer olmak durumundadır.Bu EEPROM bitinin tanımlanan limit yakınında vurgulandığı uygulamalarda kullanılmalıdır. Genelde EEPROM yazma hatası “1” olarak yazılan fakat geri döndüğünde “0” olarak okunan bir bit şeklinde olacaktır(Kaçak bite bağlı olarak).
7.8 Güç Tüketim Kabulleri Not : EEADR<7:6> bitlerinin temizlenmesi tavsiye edilmektedir.Bu bitlerin herbirinin ayarlanması durumunda cihazın max. IDD akımı , ikiside silindiği durumdakinden daha çoktur.Tanımı 400µA’dir.EEADR<7:6>’nın silinmesiyle beraber max. değeri ≅150µA’dir.
27
Şekil 7-1 : EECON1 Registeri (88h Adresi) U -
U -
U -
R/W-0 EEIF
R/W-x WRERR
R/W-0 WREN
R/S-0 WR
bit7
R/S-x RD bit0
R = Okunabilir bit W = Yazılabilir bit S = Tamamlanmamış bit , “0” diye okunur. -n = POR reset değeri bit 7:5
Tamamlanmamış : “0” olarak okunur.
bit 4
EEIF : EEPROM Write Operation Interrupt Flag bit (EEPROM yazma işlemi kesme flag biti) 1 = Yazma işlemi tamamlanmış(Yazılımdan silinmiş olmalı) 0 = Yazma işlemi tamamlanmamış ya da başlatılmamış
bit 3
WRERR : EEPROM Error Flag Bit (EPROM hata bayrak biti) 1 = Yazma işlemi erken sonlandırılmış(bir MCLR reseti ya da normal işlem esnasında WDT reseti) 0 = Yazma operasyonu tamamlanmış
bit 2
WREN : EEPROM Write Enable Bit (EEPROM yazma yetki biti) 1 = Yazma döngülerine izin verilmiş 0 = Data EEPROM yazması engellenmiş
bit 1
WR : Write Control Bit (Yazma kontrol biti) 1 = Yazma döngüsü başlaması (Bu bit herbir yazma tamamlandığında donanım tarafından silinir.WR biti yazılım tarafından sadece kurulabilir(silinmez).
bit 0
RD : Read Control bit (Okuma kontrol biti) 1 = EEPROM’da okuma başlaması (Okumayı bir döngü alır.RD donanım içinden silinemez. RD biti yazılım içerisinden sadece kurulur(silinmez) 0 = EEPROM okuması başlamamıştır
Tablo 7-1 : Data EEPROM ile bitleri/registerleri birleştirme
Kısaltmalar : x = Bilinmeyen u = Değişmemiş - = Tamamlanmamış , “0” olarak okunur q = duruma bağlı değişken Taralı hücreler EEPROM datasında kullanılmıyor.
28
dir.Bu tasarım , cihazı güç kaynağı sabitlenirken reset’te tutar.Bu iki on-chip zamanlayıcısıyla çoğu uygulamada harici reset devresine ihtiyaç duyulmamaktadır. SLEEP modu çok düşük akımlı güç azaltma modu önerir.Kullanıcı , SLEEP’ den uyanıp harici reset , Watchdog timer timeout’u ya da bir kesmeye geçebilir.Uygulamaya uyacak parçayı sağlayan bazı osilatör seçenekleri vardır.LP kristal seçeneği güç tasarrufu yaparken , LC osilatör seçeneğide sistem maliyetinde tasarruf yapar.Konfigürasyon bitlerinden oluşmuş bir kurulum çeşitli seçeneklerin seçiminde kullanılır.
8.0 CPU’NUN KENDĐNE ÖZGÜ ÖZELLĐKLERĐ Bir mikrokontrolörü diğerlerinden farklı kılan realtime uygulamaların gerektirdiği özel devrelerdir.PIC16C84; Sistem güvenirliğinin max. hale getirilmesi , harici bileşenlerin elenmesinde maliyetin min. hale getirilmesi , güç tasarruf işletim modlarının sağlanması ve kod korumasının sağlanması amaçlarıyla örnekleyebileceğimiz bazı özelliklere sahiptir.Bu tarz özellikler aşağıda da belirtilmiştir; • OSC seçimi • Reset - Power-on Reset (POR) - Power-up Timer (PWRT) - Oscillator Start-up Timer (OST) • Kesmeler • Watchdog Timer (WDT) • SLEEP • Kod Koruması • ID yerleri • Devre içi seri programlama PIC16C84 yalnızca konfigürasyon bitleri tarafından kapatılabilen bir Watchdog Timer’a sahiptir.Arttırılmış güvenilirlik için kendi RC osilatörünü çalıştırır.Güç arttırımında (powerup) lüzumlu gecikmeleri öneren 2 zamanlayıcı vardır.Bunlardan biri osilatör başlangıç zamanlayıcısı(OST) ’dır.Bu zamanlayıcı kristal osilatör sabit olana kadar chip’i reset’te tutmak için tasarlanmıştır.Diğeride 72msn’lik (nominal) sabit gecikmeyi sağlayan (yalnızca güç arttırımında) power-up timer(PWRT)’
8.1 Konfigürasyon Bitleri Konfigürasyon bitleri programlanabilir (“0” olarak okunur) yada değişik aygıt konfigürasyonlarını seçmek amacıyla programlanmamış halde bırakılabilir(“1” olarak okunur).Bu bitler program hafıza yeri 2007h’da haritalanır.2007h adresi , kullanıcı program hafıza boşluğunun ötesindedir.Ve özel test/konfigürasyon hafıza boşluğuna (2000h-3FFFh) aittir.Bu boşluk sadece programla-ma esnasında erişimdedir. R = Okunabilir bit P = Programlanabilir bit U = Tamamlanmamış bit,”1” olarak okunur. -n = POR reset değeri u = Değiştirilmemiş
Şekil 8-1 : Konfigürasyon kelimesi
bit 13:5 bit 4
bit 3
Tamamlanmamış : “1” olarak okunur. CP : Code Protection bit (Kod koruma biti) 1 = Kod koruma kapalı 0 = Tüm hafıza kod korumalı PWRTE : Power-up Timer Enable Bit(Güç artım zamanı Yetki biti) 1 = Güç arttırımı yetkili 0 = Güç arttırımı yetkisiz
b bit 2
b bit 1:0
28
WDTE : Watchdog Timer Enable Bit(WDT yetki biti) 1 = WDT yetkili 0 = WDT yetkisiz FOSC1:FOSC0 : Oscillator Selection bit(Osilatör seçim biti) 11 = RC osilatör 10 = HS osilatör 01 = XT osilatör 00 = LP osilatör
8.2 Osilatör Konfigürasyonları
Tablo 8-1 : Seramik Resonator Đçin PIC16C84 Kapasitör Seçimi
8.2.1 Osilatör Tipleri
Mod
Frekans
OSC1/C1
OSC2/C2
XT
455 kHz 2.0 MHz 4.0 MHz
47-100 pf 15-33 pf 15-33 pf
47-100 pf 15-33 pf 15-33 pf
8.0 MHz 10.0 MHz
15-33 pf 15-33 pf
15-33 pf 15-33 pf
Test Edilmiş Aralıklar
PIC16C84 4 farklı osilatör modunda işletilebilir.Kullanıcı , 2 konfigürasyon bini (FOSC1 ve FOSC2) aşağıdaki 4 modu seçmek için programlayabilir. • LP Low Power Crystal • XT Crystal /Resonator • HS High Speed Crystal /Resonator • RC Resistor/Capacitor
HS
Not : C1 ve C2’nin tavsiye edilen değerleri , test edilmiş olan aralıklarla aynıdır.Yüksek kapasite , osilatörün stabilitesini arttırır fakat aynı zamanda da başlatma(start-up) süresini de arttırır.Bu değerler , sadece tasarım için bir kolaylık sağlar.Her rezonatörün kendine özgü karakteristikleri olduğundan dolayı kulanıcı harici bileşenlerin uygun değerleri için üreticiye danışılmalıdır.
8.2.2 Kristal Osilatör/Seramik Osilatör
Rezonatör Testi
XT , LP veya HS modlarında , osilasyonu yerleştirmek için bir kristal ya da seramik resonator , OSC1/CLKIN ve OSC2/CLKOUT pinlerine bağlanırlar.
455kHz
±
Panasonic EFO-A455K04B 0.3%
2.0 MHz
±
Murata Erie CSA2.00MG 0.5%
4.0 MHz
±
Murata Erie CSA4.00MG
Şekil 8-2 : Kristal/Seramik Resonator Đşlemi
0.5% 8.0 MHz
±
Murata Erie CSA8.00MT 0.5%
10.0 MHz
±
Murata Erie CSA10.00MTZ 0.5% Hiçbir resonatörde kapasitör yerleştirilmemiştir.
Tablo 8-2 : Kristal Osilatör Đçin PIC16C84 Kapasitör Seçimi
Not 1: Tablo 8-1 ve Tablo 8-2’de görülen C1 ve C2 değerleri tavsiye edilir. 2: Seri resistör(RS) , AT şerit kesme kristalleri için gerekebilir. 3: Kristal seçeneği ile RF değişebilir. PIC16C84 osilatör dizaynı , paralel kesim kristalinin kullanımını gerektirir.Seri kesim kristalinin kullanımı kristal üreticilerinin özelliklerinin dışında bir frekans verebilir.XT , LP ya da HS modlarında iken cihaz OSC1/CLKIN pininin sürümü için bir harici saat kaynağına sahip olabilir.(Şekil 8-3)
Mod XP XT
HS
Frekans
OSC1/C1
OSC2/C2
32 kHz 200 kHz
68-100 pf 15-33 pf
68-100 pf 15-33 pf
100 kHz 2 MHz 4 MHz
100-150 pf 15-33 pf 15-33 pf
100-150 pf 15-33 pf 15-33 pf
4 MHz 10 MHz
15-33 pf 15-33 pf
15-33 pf 15-33 pf
Not : Yüksek kapasite , osilatörün stabilitesini arttırır fakat aynı zamanda da başlama süresini de arttırır.Bu değerler , sadece tasarım için bir kolaylık sağlar.HS ve yerine göre XT modundayken , düşük sürüm seviyesine sahip ve bu seviyeyi aşan kristallerden sakınmak için Rs’e ihtiyaç duyulabilir.Her kristalin kendine özgü karakteristikleri olduğundan dolayı , kullanıcı harici bileşenlerin uygun değerleri için üreticiye danışmalıdır.
Şekil 8-3 : Harici Saat Girişi Đşlemi(HS , XT ya da LP osilatör konfigürasyonu)
Kristal Testleri
29
32.768 kHz
Epson C-001R32.768KA
±20 PPM
100 kHz
Epson C-2 100.00 KC-P
±20 PPM
200 kHz
STD XTL 200.000 KHz
±20 PPM
1.0 MHz
ECS ECS-10-13-2
±50 PPM
2.0 MHz
ECS ECS-20-S-2
±50 PPM
4.0 MHz
ECS ECS-40-S-4
±50 PPM
10.0 MHz
ECS ECS-100-S-4
±50 PPM
8.2.3 Harici Kristal Osilatör Devresi
8.2.4 RC Osilatör
Ya bir önceden paketlenmiş osilatör kullanılabilir ya da basit bir TTL kapalı osilatör devresi inşa edilebilir.Önceden paketlenmiş osilatörler geniş bir işletim aralığı ve de daha iyi bir stabilite sağlarlar.Đyi dizayn edilmiş bir kristal osilatörü TTL kapılarıyla birlikte iyi bir performans verecektir.Kristal osilatör devrelerinin 2 tipi mevcuttur;Biri seri rezonanslı biri de paralel rezonanslı. Şekil 8-4’de paralel rezonanslı bir osilatör devresi görülmektedir.Devre , kristalin ana frekansının kullanımı için tasarlanmıştır.74AS04 inverteri bir paralel osilatörün gerektirdiği 180° ‘lik faz değiştirmesini gerçekleştirir.4,7 kΩ’luk direnç ,stabilite için negatif geribesleme sağlar.10 kΩ’luk potansiyometre doğrusal düzlemde 74AS04’ü etkiler.Bu olay , harici osilatör tasarımlarında kullanılabilir.
Duyarlı olmayan zamanlama uygulamalarında RC cihaz seçeneği ek maliyet tasarrufları sunar.RC osilatör frekansı ; Kaynak geriliminin , direnç değerlerinin (Rext) , kapasite değerlerinin (Cext) ve de işletme sıcaklığının bir fonksiyonudur.Bununla beraber ; osilatör frekansı , normal işlem parametresi değişimine bağlı olarak üniteden üniteye değişim gösterir.Bundan başka , paket tipleri arasındaki lead frame capacitance farklılığı da osilasyon frekansını özellikle düşük Cext(harici kapasite) değerlerini etkiler.Kullanıcı , harici R ve C bileşenlerinin toleranslarına bağlı olarak hesap farklılaşmasını da almalıdır.Şekil 8-6 bir PIC16C84’e bağlanmış R/C kombinasyonunu göstermektedir.2,2 kΩ’un altındaki Rext(Harici direnç) değerleri için osilatör işlemi sabitlenemeyebilir ya da tümüyle durdurulabilir.Çok yüksek Rext değerleri için (Örneğin 1MΩ) osilatör sese , rutubete ve sızıntıya karşı duyarlı hale gelir.Burada Rext’in 3kΩ ve 100 kΩ arasında tutulması tavsiye edilir. Osilatör başka bir haricikapasitörü (Cext=0pf) işletmemesine rağmen biz gürültü ve stabilite sebeplerinden dolayı yukarıdaki değerlerde 20pf’ın kullanılmasını tavsiye ederiz.Küçük ya da başka harici kapasite olmaksızın , osilasyon frekansı PCB işlem izleme kapasitesi yada paket lead frame kapasitesi gibi harici kapasitelerdeki değişmelere bağlı olarak dinamik bir şekilde farklılaşma gösterebilir. Normal işlem değişimine bağlı olarak bölümden bölüme RC frekans farklılaşması için elektriksel tanımlar bölümüne bakınız.Farklılaşma büyük R ve küçük C için daha büyüktür. (kaçak akım farklılaşması RC frekansını R için daha fazla etkileyeceğinden).(Girişkapasitesininfarklılaşması RC frekansındakinden daha büyük bir etkiye sahip olduğundan). 4’e bölünmüş , OSC2/CLKOUT pininde bulunan osilatör frekansı test amaçlı yada diğer mantığı senkronize etmek için kullanılabilir.(Dalga formunu görmek için Şekil 3-2’ye bakınız) Şekil 8-6 : RC Osilatör Modu
Şekil 8-4 : Paralel Rezonantlı Harici Kristal Kristal Osilatör Devresi
Şekil 8-5 , seri rezonanslı osilatör devresini göstermektedir.Bu devre de kristalin ana frekansının kullanılması için tasarlanmıştır.Đnverter , 180° ‘lik faz değişiminigerçekleştirir.330 kΩ’luk dirençler , kendi doğrusal düzlemlerindeki inverterleri etkilemek negatif geri beslemeyi sağlarlar. Şekil 8-5 : Seri Rezonantlı Harici Seri Osilatör Devresi
Not: Aygıt osilatörü RC modunda iken OSC1 pinini harici bir saatle sürmeyiniz.Yoksa cihaza zarar verebilirsiniz.
30
Bazı registerler herhangi bir reset durumundan etkilenmezler , durumları bir POR resetinde bilinmez ve herhangi başka bir resette de değiştirilmemiştir.Diğer registerlerin çoğu “reset durumu” şeklindeki POR , MCLR yada normal işlem esnasındaki WDT reset’i ve SLEEP esnasındaki MCLR resetinde resetlenmiştirler.SLEEP esnasında WDT resetinden onlar etkilenmez.Çünkü bu resetin normal işletimi yeniden başlattığı görülür. Tablo 8-3’de program sayacı(PC) ve STATUS registeri için gerekli reset koşullarının tanımları verilmiştir.Tablo 8-4 de tüm registerlerin reset durumlarının tam tanımları verilmiş bulunmaktadır. TO ve PD bitleri farklı reset durumlarında (Bölüm 8-7) değişik biçimde ayarlanmış yada temizlenmiştirler.Bu bitler yazılımda resetin doğasının belirlenmesinde kullanılmıştır.
8.3 Reset PIC16C84 , değişik reset türleri arasında farklılık gösterir; • Power-on Reset (POR) MCLR normal işlem esnasında reset • MCLR SLEEP esnasında reset • WDT Reset(normal işlem esnasında) • WDT Uyanma (SLEEP esnasında) • Şekil 8-7 on-chip reset devresinin basitleştirilmiş bir blok diyagramını göstermektedir. Elekriki tanımlar MCLR pini için gerekli olan pals genişliğini belirler.
Şekil 8-7 : On-chip reset devresinin Basitleştirilmiş blok diyagramı
31
Tablo 8-3 : Program Sayacı ve STATUS Registeri Đçin Reset Durumu
Kısaltma : u = Değişmemiş x = Bilinmeyen Not: Uyanma gerçekleşdiği zaman kesme olur ve GIE biti kurulur , kesme vektörü ile PC yüklenir (0004h). Tablo 8-4 : Tüm Registerler Đçin Reset Durumları
Kısaltma : u =Değişmemiş x = Bilinmeyen - = Tamamlanmamışbit , “0” olarak okunur q = Duruma bağımlı değer Not 1: INTCON içindeki bir veya birçok bit etkileyecetir.(Wake-up nedeniyle) 2: Uyanma(wke-up) gerçekleştiği zaman kesme olur ve GIE biti kurulur,kesme vektörü ile PC yüklenir(0004h). 3: Herbir özel durum için reset değerleri Tablo 8-3’de listelenmiştir.
30
VDD çok yavaş arttığında TPWRT time-out’u ve TOST time-out’unun VDD’nin son değerine ulaşmadan zamanını doldurması olasıdır.Bu durumda(Şekil 8-12) haricibir Power-on Reset devresine ihtiyaç duyulabilir(Şekil 8-13).
8.4 Power-on Reset (POR) VDD artışı gözlendiği zaman chip üstünde bir Power-on Reset pulse’I yaratılır(1,2-1,7 V aralığında ).POR’dan avantaj sağlayabilmek için yalnızca MCLR pini direkt(yada bir direnç aracılığıyla) olarak VDD’ye bağlanır.Bu , genellikle Power-on Reset’i yaratmak için kullanılan harici RC bileşenlerini elimine edecektir. VDD için min. bir artış zamanı , bu özelliği işletebilmek için ilişkilendirilmelidir.Detaylar için elektriksel tanımlar bölümüne bakınız. Cihaz normal operasyonuna başladığında (Reset durumundan çıkar) cihaz işletim parametreleri(gerilim , frekans , ısı, …..) , işlemin onaylanması amacıyla tanıtılmalıdır.Eğer bu koşullarla buluşulmamışsa cihaz ,işletim koşulları ile buluşana kadar resette tutulmalıdır. POR devresi , VDD azaldığında dahili bir reset üretmez.
Şekil 8-8 : Harici Power-on Reset Devresi (Düşük VDD güç artışı için)
Not 1: Harici Power-on Reset devresine , yalnızca VDD power-up (Güç artımı) hızı çok yavaş olduğu zaman gereksinim duyulur. 2: R<40 kΩ durumu , R üzerindeki gerilim düşümünün 0,2V’u aşmaması amacı ile tavsiye edilmektedir(MCLR pini üzerindeki max. kaçak akım 5mA ‘dir.).Daha geniş bir gerilim düşümü , MCLR pini üzerindeki VIH değerini alacaktır. 3: R1=100Ω ‘dan 1 kΩ’a kadar olan durumu , MCLR’den harici kapasitör C’ ye doğru herhangi bir akım akışını sınırlandıracaktır. (MCLR pininin ,ESD yada EOS’e bağlı olarak bozulması (breakdown) olayında)
8.5 Power-up Timer (PWRT) Güç Artım Zamanlayıcısı Güç artım zamanlayıcısı (PWRT) , POR’ dan sabit 72ms’lik nominal time-out (TPWRT) sağlar(Şekil 8-9 , 8-10 , 8-11 , 8-12).Güç artım zamanlayıcısı , bir dahili RC osilatörü üzerinden işletilir.PWRT aktif olduğu sürece chip reset durumunda tutulur.PWRT gecikmesi , VDD’nin kabul edilebilir bir düzeyde artmasına izin verir.(Mümkün olan istisnalar , şekil 8-12’ de gösterilmiştir.) Konfigürasyon biti PWRTE , PWRT’yi devreye sokup devreden çıkartabilir.(Şekil 8-1) Güç artımı zaman gecikmesi TPWRT ; ısı ve işlem farklılıklarına bağlı olarak chip’ten chip’ e değişecektir.Detaylar için DC parametrelerine bakınız.
8.6 Osilatör Start-up Timer(OST) Osilatör Başlangıç Zamanlayıcısı Osilatör başlangıç zamanlayıcısı (OST) , PWRT gecikmesi bittikten sonra 1024 osilatör döngü gecikmesi’ni (OSC1 girişinden) sağlar (Şekil 8-9 , 8-10 , 8-11 , 8-12).Bu , kristal osilatörü yada rezonatörün başlama ve dengelenme durumlarını teyit eder. OST time-out (TOST) , yalnızca XT , LP ve HS modlarında ve sadece Power-on ya da SLEEP modundan uyanma durumlarında yürürlüğe komur.
29
Şekil 8-9 : Güç Artımında(power-up) time-out Aralığı (MCLR VDD ‘ye Bağlı Değil) : 1.Durum
Şekil 8-10 : Güç Artımında time-out Aralığı (MCLR VDD’ye Bağlı Değil) : 2.Durum
29
Şekil 8-11 : Güç Artımında time-out Aralığı (MCLR VDD’ye Bağlı) : Hızlı VDD Artış Zamanı
Şekil 8-12 : Güç Artımında time-out Aralığı (MCLR VDD’ye Bağlı ) : Yavaş VDD Artış Zamanı
VDD çok yavaş yükseldiği zaman TPWRT time-out’u ve TOST time-out’u , VDD final değerine gelmeden önce sona erirler.Bu örnekte V1≥VDD ise chip resete uygundur.
30
8.7 Time-Out Sırası Ve Güç Düşümü(Power Down) Durum Bitleri ( T0 / PD )
8.8 Brown-Out’da Reset Brown-out , cihaz gücü(VDD) min. değerine indiği zaman(Sıfıra değil) ve tekrar geri döndüğü zaman oluşan bir durumdur.Aygıt brown-out olayında resetlenmelidir. Bir brown-out oluştuğunda PIC16C84 cihazlarını resetlemek için Şekil 8-13 ve Şekil 814’de gösterilen harici brown-out koruma devreleri inşa edilebilir.
Güç artımında (Şekil 8-9 , 8-10 , 8-11 , 812) time-out sırası şu şekilde olur:Öncelikle PWRT time-out’u , POR süresini doldurduktan sonra yürürlüğe konur.Daha sonra OST aktif hale geçirilir.Toplam time-out , osilatör konfigürasyonu ve PWRTE konfigürasyon biti durumuna bağlı olarak değişim gösterir.Örneğin , PWRT’nin işlemden çıkarıldığı RC modunda hiçbir zaman time-out olmayacaktır.
Şekil 8-13 : Brown-out Koruması Devre-1
Tablo 8-5 : Çeşitli Konumlarda Time-Out Osilatör Konfigürasyonu
Güç Artımı (Power-up) PWRT Yetkili
XT ,HS ,LP RC
72 ms + 1024 Tosc 72 ms
PWRT Yetkisiz
SLEEP’den Çıkma (Wake-up)
1024 Tosc
1024 Tosc
-
-
Bu devrede;VDD ,VZ =Zener Gerilimi değerinin altına indiği zaman reset aktifleşir.
Time-out’lar POR reset pals’inden oluşacağından ötürü , eğer MCLR olabildiğince düşük bir uzunlukta tutulabilirse time-out’lar zaman aşımına uğrayacaktır.Daha sonra MCLR’ nin yükseğe getirilmesi ile birlikte çok hızlı bir şekilde yürürlüğe konmalar başlayacaktır(Şekil 8-9).Bu , birden fazla PIC16CXX cihazlarının paralel çalıştırılması durumlarında test amaçlı ve senkronizasyonla ilgili deneylerde kullanışlıdır. Tablo 8-6’da T0 ve PD bitlerinin önemi vurgulanmıştır.Tablo 8-3’de bazı özel reset koşullarının listesi vardır.Ve Tablo 8-4’de de tüm registerler için reset koşulları listelenmiştir.
Şekil 8-14 : Brown-out Koruması Devre-2
Bu brown-out devresi daha az masraflıdır , bununla birlikte daha az doğrudur.VDD aşağıda bulunan değerin altına düştüğünde Q1 transistörü kesime gider.
Tablo 8-6 : STATUS Bitleri Ve Anlamları TO
PD
Durum
1
1
Power-on Reset
0
x
x
0
POR ‘da T0 kurulur. POR ‘da PD kurulur.
0
1
WDT Reset (Normal işletimde)
0
0
WDT Wake-up
1
1
MCLR Reset normal işletimde
1
0
SLEEP ya da SLEEP den kesme uyanması esnasında MCLR Reset
VDD*{ R1/(R1+R2)}=0,7 V
29
8.9 Kesmeler Not 1: Bağımsız kesme flag bitleri , haberleşme maske biti yada GIE bitinin durumuna bağlı olmaksızın ayarlanırlar. Not 2: Küresel(global) kesme devreye alma biti(GIE) temizlenirken bir kesme oluşursa , GIE biti kasti olmadan kullanıcının kesme servis rutini ile devreye alınabilir(RETFIE komutu).Bunun oluşmasına sebep olacak olaylar; 1. Bir kesme tanınırken GIE bitini bir komut temizlerse 2. Kesme vektörüne program ulaşırsa ve kesme servis rutinini açarsa 3. Kesme servis rutini , RETFIE komutunun açılması ile tamamlanır.Bu , GIE bitinin ayarlanmasını (kesmeleri devreye koymasını) ve programın devreden çıkartma kesmelerine sebep olan komuta geri dönmesine neden olur. Kesmelerin küresel olarak yetkisizleştirilmesini sağlayana metod; • GIE bitinin aşağıda gösterilen koddaki gibi bir komutla temizlenmesini sağlayan metod:
PIC16C84 , 4 tane kesme kaynağına sahiptir: • Harici kesme RB0/INT pini • TMR0 taşma kesmesi • PORTB değişim kesmeleri (RB7:RB4 pinleri) • EEPROM yazma tamamlama kesmesi Kesme kontrol registeri (INTCON) , flag bitlerindeki bireysel kesme taleplerini kayıt eder.Bu aynı zamanda bireysel ve küresel kesim yürürlüğe koyma bitlerini de içerir. Küresel kesim yürülüğe konma biti , GIE (INTCON<7>) tüm maskelenmiş kesmeleri devreye sokar(ayarlanır ise) yada tüm kesmeleri devreden çıkartır(temizlenmiş ise).Bağımsız kesmeler , INTCON Registerindeki kendi haberleşme yürürlüğe koyma bitleri aracılığıyla devreden çıkartılabilirler.GIE biti resette temizlenir. “Kesmeden geri dönme” komutu RETFIE , kesmeleri tekrar devreye alan GIE bitini ayarlar ayarlamaz rutin kesmeden çıkar. RB0/INT pin kesmesi , RB port değişim kesmesi ve TMR0 taşma kesim flagları INTCON registeri içersinde bulunurlar. Bir kesmeye başvurulduğunda ; GIE biti , herhangi başka bir kesmeyi devreden çıkartır , geri dönme adresi depo üzerine itilir ve PC 0004h ile yüklenir.Harici kesme olayları için (RB0/INT pini yada PORTB değişim kesmesi gibi) düşünülen ama henüz gerçekleşmemiş kesmeler , 3 yada 4 komut döngüleri halinde bulunurlar. Tam olarak bağlantı , kesme olayının gerçekleşmesine bağlıdır(Şekil 8-16).Tasarlama bir ve iki döngü komutları için aynı olacaktır. Kesme servis rutinindeki kesme kaynağı , kesim flag bitlerinde yapılan seçimle kararlaştırılır.Kesme flag bitleri , sonsuz kesme taleplerinden korunmak için tekrar devreye alma kesmelerinden önce yazılım içinden temizlenmelidir.
LOOP
Şekil 8-15 : Kesme Mantığı
30
BCF
INTCON , GIE ; Tüm kesmeler yetkisiz BTFSC INTCON , GIE ; Tüm kesmeler Yetkisizmi? GOTO LOOP ; Hayır , tekrar dene ; Evet , program akışı devam
Şekil 8-16 : INT pini Kesme Zamanlaması
Not 1: INTF flağı buaraya örnektir(her Q1’de) 2: “Tcy =Komut döngü zamanı”nda kesme gecikmesi=3-4Tcy’dir.Gecikme , aynı komutta(PC) tek yada 2 komut döngüsüdür. 3: CLKOUT sadece RC modunda geçerlidir. 4: Min. INT pulse genişliği için AC özelliklere başvurunuz. 5: INTF , Q4-Q1 döngüleri esnasında herhagi bir zaman kurulmasıyla yetkilendirilir. alma bitinin yerleştirilmesi/temizlenmesi yoluyla devreye alınabilir yada devreden çıkartılabilir.
8.9.1 INT Kesmesi RB0/INT pinindeki harici kesme köşe tetiklemelidir.Ya INTEDG bitinin(OPTION<6>) ayarlanmasında artış gösterir yada INTEDG biti temizlendiğinde azalış gösterir.RB0/INT pini üzerinde geçerli bir köşe gözükürse , INTF biti (INTCON<1>) kurulur.Bu kesme INTE(INTCON<4>) kontrol bitinin temizlenmesiyle devreden çıkartılabilir.INTF flag biti bu kesmeyi devreden çıkartmadan kesme servis rutini üzerinden yazılım içersinden temizlenmelidir.INT kesmesi , işlemciyi SLEEP modundan uyandırabilir(Bölüm8.12).Bu yalnızca INTE biti SLEEP önceliğine konduğu durumda gerçekleşir.GIE bitinin durumu , işlemcinin wake-up’ı(uyanma) takiben kesme vektörüne uzanıp uzanmayacağına karar verir.
Not 1: PORTB’nin açılmasında bir okuma işlemi gerçekleşiyorken (Q2 döngüsünün başlaması ) , I/O pini üzerinde bir değişim olması gerekiyorsa , RBIF kesme flag biti ayarlanamayabilir.
8.10 Kesmeler Esnasında Genel Durumun Saklanması Bir kesme esnasında sadece geri dönme PC değeri depoda saklanır.Çoğunlukla , kullanıcılar bir kesme esnasında anahtar register değerlerini saklamak isterler(Örneğin W registeri ve STATUS registeri).Bu , yazılımda yerine getirilir. Örnek 8-1’de STATUS ve W registerlerinin değerleri saklanmış ve tekrar depolanmış tır.Kullanıcı tanımlı registerler W_TEMP ve STATUS_TEMP , W ve STATUS register değerleri için geçici depolama yerleridir. Örenek 8-1’de aşağıdakiler yapılmaktadır: a) W registerini depolar b) STATUS registerini STATUS_TEMP’de depolar c) Kesme servis rutin kodunu açar d) STATUS (ve Depo seçim biti) registerini yeniden depolar e) W registerini yeniden depola
8.9.2 TMR0 Kesmesi TMR0’daki bir taşma(FFh-00h) , T0IF (INTCON<2>) flag bitini kuracaktır.Kesme , T0IE (INTCON<5>) devreye alma bitinin yerleştirilmesi/temizlenmesi yoluyla devreye alıbilir yada devreden kaldırılabilir(Bölüm 6.0).
8.9.3 PORTB RB Kesmesi PORTB<7:4> üzerindeki bir giriş değişimi , RBIF (INTCON<0>) flag bitini kurar.Kesme , RBIE (INTCON<3>) devreye
29
Örnek 8-1 : RAM’deki STATUS ve W registerini Koruma PUSH
ISR
MOVWF
W_TEMP
; W , TEMP registerine kopyalanır
SWAPF
STATUS , W
; Swap durumu W içinde korunur
MOVWF
STATUS _TEMP
; STATUS_TEMP registerinde durum korunur
:
:
:
; Kesme servis rutini
:
; Gereken depo düzenlenmelidir
: POP
;
SWAPF
STATUS_TEMP , W
; STATUS_TEMP registeri ve W içindeki sonlandırılımış yere tekrar depola
MOVWF
STATUS
; W’yi STATUS Registeri içini gönder ; (Orjinal kısımda depoyu kur)
SWAPF
W_TEMP , F
; W_TEMP ve W_TEMP içinde sonlanmış yere tekrar depola
SWAPF
W_TEMP , W
; W_TEMP ve W içinde sonlanmış yere tekrar depola
8.11 Watchdog Timer (WDT)
lılıklarıyla değişir(DC tanımlar bölümüne bakınız).Eğer daha uzun time-out peryodları arzulanıyorsa 1:128’e kadarlık bölüm oranlı bir önölçücü ;WDT’ye, OPTION Registerine yazılım kontrolünün yazılması şartıyla atanabilir. Böylece 2-3 sn’ye kadar olan time-out peryotları gerçekleştirilebilir. CLRWDT ve SLEEP komutları WDT’yi ve sonölçücüyü(Eğer WDT’ye atanırsa) temizler ve time-out yada bir reset koşulunun oluşmasından korur. STATUS Registeri içindeki T0 biti bir WDT time-out’una bağlı olarak temizlenecektir.
Watchdog Timer , başka harici bileşenler talep etmeyen serbest çalışan on-chip RC osilatörüdür.RC osilatörü , OSC1/CLKIN pininin RC osilatöründen ayrılmıştır.Yani ; WDT , OSC1/CLKIN ve OSC2/CLKOUT pinlerindeki saat(clock) dursa bile çalışacaktır.Örneğin , SLEEP komutu yürürlüğe konduğu durumlarda buna rastlanır.Normal işletim esnasında bir WDT time-out’u bir cihaz reset’i yaratacaktır. Eğer cihaz SLEEP modunda ise bir WDT wake-up’ı(uyanma) cihazın uyanmasını ve normal işetimine devam etmesine sebep olur.WDT , konfigürasyon biti olan WDTE’nin “0” olarak daimi bir şekilde programlanmasıyla yetkisizleştirilebilir.(Bölüm 8.1)
8.11.2 WDT Programlama Kabulleri En kötü koşulların(VDD=min. , sıcaklık= max. , max. WDT önölçücüsü) WDT timeout’unun oluşmasından önce bir kaç saniye süreceği de göz önüne alınmalıdır.
8.11.1 WDT Peryodu WDT , 18 msn’lik bir nominal time-out peryoduna sahiptir(önölçücü olmaksızın).Time –out peryodları ısı , VDD ve kısmen işlem farkŞekil 8-17: WDT Blok Diyagramı
29
Tablo 8-7 : Watchdog Timer ile Registerlerin Birleştirilmesi Özeti
Kısaltma : x = Bilinmiyor.Taralı hücreler WDT tarafından kullanılmaz.
8.12.2 SLEEP Modundan Kalkış (Wake-up)
8.12 Güç Koruma Modu(SLEEP) Cihazdan güç kesilebilir (SLEEP) ve daha sonrada çalıştırılabilir(SLEEP modundan kalkma).
Cihaz , SLEEP modundan aşağıdaki olayların birini kullanarak kalkabilir; 1. MCLR pini üzerindeki harici reset girişi 2. WDT kalkışı (Eğer WDT yetkilendirilirse) 3. RB0/INT pininden kesme , RB port değimi yada data EEPROM yazma tamamlaması Çevresel fonksiyonlar , SLEEP esnasında kesmeler yaratamazlar.Çünkü hiçbir on-chip Q saati mevcut değildir. Đlk olay (MCLR Reseti)bir cihaz resetine sebep olacaktır.Diğer 2 olay da programın yürürlüğe konmasınınbir devamı olarak yorumlanır.T0 ve PD bitleri , bir cihaz resetinin sebebiyetinin belirlenmesinde kullanılabilir.PD biti(güç artımında kurulur.) SLEEP yürürlüğe konduğu zaman temizlenir.T0 biti , WDT time –out oluşur ise(ve wake-up’a sebep olursa) temizlenir. SLEEP komutu yürürlüğe konurken bir sonraki komut(PC+1) önceden alınır.Cihazın bir kesme olayındayken uyanması için buna ilişkin yetki biti kurulmalıdır(yetki verilmelidir).Kalkma(wake-up) , GIE bitinin durumuna bakmaksızın ortaya çıkar.GIE biti silinirse( yetkisi kaldırılırsa) , cihaz SLEEP komutundan sonraki komutuyla devam edecektir.GIE biti kurulur ise cihaz , komutu SLEEP komutundan sonra yürürlüğe koyar ve kesme adresine doğru dallara ayrılır(004h).SLEEP komutunun ardından gelen komutun yürülüğe konmasının istenmediği durumlarda kullanıcı SLEEP komutundan sonra bir NOP’a sahip olmalıdır.
8.12.1 SLEEP Güç koruma moduna SLEEP komutunun yürürlüğe konması ile girilir. Yetki verildiği anda Watchdog Timer silinir(Zira çalışmasına devam eder) ,PD biti (STATUS<3>) silinir , T0 biti (STATUS<4>) kurulur ve osilatör sürücüsü kapatılır.I/O portları SLEEP komutu açılmadan önceki durumlarını korurlar(Yüksek,düşük sürüm yada yüksek empedans). SLEEP modundaki en düşük akım tüketimi için bütün I/O pinlerini ya VDD yada VSS de yerleştiriniz(I/O pinlerinden harici devre akımı olmaksızın) ve harici saatleri yetkisizleştiriniz. Seyyar girişler yüzünden oluşan açma kapama akımlarını önlemek için , I/O pinleri (bunlar yüksek empedans girişleridir) harici olarak yükseğe yada düşüğe çekilmelidirler.T0CKI girişi de VDD yada VSS‘de olmalıdır.PORTB üzerindeki on-chip pull-up’larından(çekmeler) gelen katılımlarda hesaba katılmalıdır. MCLR pini lojik yüksek düzeyinde olmalıdır(V1HMC).WDT time-out’u tarafından yaratılan bir RESET’in MCLR pinini düşüğe sürmeyeceği bilinmelidir.
Şekil 8-18 : SLEEP Đle Kesme Arasında Kalkma(Wake-up)
30
Şekil 8-18 ile ilgili not: 1. XT , HS yada LP osilatör modu farzedilir. 2. TOST=1024TOSC(ölçek çizilmeden).Bu gecikme RC osilatör modu için yoktur. 3. GIE=”1” farzedilir.Bu olay wake-up’dan sonra , rutin kesmede işlemci atlamasında gerçekleşir. Eğer GIE=”0” ise yerine koyma devam eder. 4. CLKOUT , bu osilatör modunda geçerli değildir.Fakat zamanlama başvurusu için burada gösterilmiştir. ID yerinin en az 4 tanımlı biti kullanıma açıktır. 8.12.3 Kesmeleri Kullanarak ROM cihazları için bu değerlere yalnızca ROM koduyla birlikte başvurulabilir. Kalkış(wake-up)
8.15 Devre Đçi Seri Programlama
Küresel kesmeler yetkisizleştirildiğinde (GIE silindiğinde) ve hem kesme yetki bitine hem de kesme flag biti takımına herhangi bir kesme kaynağı sahip ise aşağıdakiler oluşacaktır. • Kesme , SLEEP komutunun açılmasından önce oluşursa , SLEEP komutu bir NOP olarak tamamlanacaktır.Burada WDT ve WDT sonölçücüsü silinmeyecek , T0 biti kurulmayacak ve PD bitleride silinmeyecektir. • Kesme , bir SLEEP komutunun yürürlüğe konması esnasında yada sonrasında meydana geldiği takdirde cihaz hemen SLEEP modundan kalkacaktır.SLEEP komutu kalkıştan önce bütünüyle yürürlüğe konacaktır.Burada WDT ve WDT sonölçücüsü silinecektir , T0 biti kurulacaktır ve PD biti desilinecektir. Flag bitleri , SLEEP komutunun yürürlüğe konmasından önce kontrol edilseler bile flag bitleri için SLEEP komutunun tamamlanmasından önce kurulma ihtimali mevcuttur.Bir SLEEP komutunun yürürlüğe konup konmadığını kararlaştırmak için PD biti test edilir.Eğer PD biti kurulmuşsa SLEEP komutu bir NOP olarak yürürlüğe konmuş demektir. WDT bitinin silindiğinin garanti altına alınması için SLEEP komutundan önce bir CLR/WDT komutu yürürlüğe konmalıdır.
PIC16C84 mikrokontrolörleri son uygulama devresindeyken seri olarak programlanabilirler.Bu , saat ve data için 2 hat ve güç , toprak ve programlama gerilimi içinde ayrı 3 hat ile basitçe yapılabilir. Cihaz , RB6 ve RB7 pinlerinin düşük tutulmasıyla bir program/doğrulanma moduna yerleştirilebilir(MCLR pininin VIL ‘den VIIH’a arttırılması sürecinde).RB6 programlama saati ve RB7 ‘de programlama hafızası olurlar.Hem RB6 hem de RB7 bu modda Schmitt Trigger girişleridir. Reset’ten sonra cihazı programlama/doğrulama moduna yerleştirmek için , program sayacı (PC) 00h yerini işaret eder.6 bit’lik komut cihaza sağlanır.Ve daha sonrada 14 bit’lik program datası cihaza yada cihazdan temin edilir(Yükle yada oku-yaz komutlarını kullanarak). Şekil 8-19 : Tipik Sistem Đçi Seri Programlama Bağlantısı
8.13 Program Doğrulanması/Kod Koruması Kod koruma bitleri programlanmamışsa , on-chip program hafızası doğrulama amaçlarıyla okunabilir.
8.14 ID Yerleri
ROM cihazlar için , program hafızası ve data EEPROM hafızası okunabilir fakat sadece data EEPROM hafızası programlanabilir.
Kontrol sonucu yada diğer kod tanım sayılarının saklanması için 4 hafıza yeri (2000h2003h) ID yeri olarak tasarlanmıştır.Bu yerler , normal yürürlüğe konma esnasında işletilebilir değildir.Lakin sadece program/doğrulanma esnasında okunabilir ve yazılabilirdir.Yalnızca
30
Kurma ∈ Đtalics Kullanıcını sınırladığı değer(font courier) Komut seti , yüksek ortogonaldır ve üç temel katagori şeklinde gruplanmıştır: • Byte-oriented • Bit-oriented • Literal ve kontrol Test şartı doğru olmadıkça yada program sayacı (PC) komut meydana geldiğinde değişmemişse tüm komutlar tek komur döngüsü ile yerine getirilir.Bu yerine getirmeyi , 2. döngünün NOP’u yerine getirmesi ile 2 komut döngüsü sağlar.Herbir döngü , 4 osilatör peryodundan meydana gelir.Bu nedenle , 4 MHz osilatör frekansı için normal komut yerine getirme zamanı 1µs’dir.Bu komut yerine getirme zamanı , program dalları için 2µs’dir. Tablo 9-2’deki liste , Microchip’s düzenleyicisi(MPASM) tarafından tanıtılmıştır. Şekil 9-1 genel formatlı komutlar gösterilmiştir. Not : Gelecek PIC16CXX ürünleri ile uygun ileriye yönelik korumada OPTION ve TRIS komutları kullanılmaz. Tüm örneklerde kullanıcı heksadesimal sayıyla temsil edilen formatı takip eder. 0xhh (h heksadesimal dijiti belli eder)
9.0 KOMUT SETĐ ÖZETĐ Herbir PIC16C84 komutu ;Komut tipini belirleyen OPCODE ve komutların işletimini daha iyi belirleyen bir yada birden fazla OPERAND içinde bölünmüş 14 bit’lik kelimedir.Tablo 9-2’de byte-orient’leri , bit orient’leri , literal ve kontrol işlemleri şeklinde listelenmiş PIC16CXX komut seti özeti verilmiştir. Tablo 9-1’de de opcode-alan tanımlamaları görülmektedir. Byte-oriented komutları : “f ” , bir dosya registeri işaretleyicisi ve “d ” de gidilecek yer işaretleyicisini temsil etmektedir.Dosya register işaretleyicisi , komut tarafından hangi dosya registerinin kullanılacağını belirler. Gidilecek yer işaretleyicisi , işlemin sonucunun nereye yerleştirileceğini belirler.Eğer , “d ” sıfır ise , sonuç W registerinin içine yerleştirilecektir.”d “ 1 ise sonuç komut tarafından belirlenecek bir dosya registerinde yer bulacaktır. Bit-oriented komutları : “b” , işlem tarafından etkilenen bitlerin adedini seçen bir bit-alan işaretleyecisini temsil eder.”f “ , bitinin bulunduğu dosyanın adresini temsil eder. Literal ve Kontrol Đşlemleri: “k “ , 8 veya 11 bit’lik sabit yada literal değeri temsil eder. Tablo 9-1 : OPCODE Alan Tanımları Tanım Alan f Register dosya adresi(0*00’dan 0*0Fh ‘a W
Çalışma registeri(akümülatör)
b
8 bit’lik dosya registerinede bit adresi
k
Literal alan , değişmez data yada etiket
x
Don’t care yeri(=0 yada1) Bu kurma , x=0 ile kod oluşturur. Gidilecek yerin seçimi;d=0 : W’de meydana gelmiş depo , d=1 :Dosya regiteri f’de meydana gelmiş depo d=1 ihmal
d
label
Etiket ismi
TOS
Büyük yığın
PC PCLATH
GIE WDT
Şekil 9-1 : Komutlar Đçin Genel Format Byte-oriented dosya register işlemleri 13 8 7 6 0 d F(File#) OPCODE d= 0 Gidilecek yer W için d= 1 Gidilecek yer f için f = 7 bit’lik dosya register adresi Bit-oriented dosya register işlemleri 13 10 9 7 6 0 OPCODE b(BIT#) f(FILE#) b = 3 bit’lik bit adresi f = 7 bitlik dosya register adresi
Program sayacı Program sayacı yüksek tutması
Literal ve Kontrol Đşlemleri
Global kesme yetki biti Watchdog timer/Counter
T0
Time-out biti
PD
Güç azaltım biti
General 13 OPCODE
Gidilecek yer(ya W registeri yada özel dosya register yeri)
k = 8 bit’lik hazır değer
dest []
Options
()
Gerçek anlam
→ <>
Atamak
8 7
0 k(literal)
CALL ve GOTO komutları sadece 13 11 10 OPCODE k(literal)
Register dosya alanı k= 11 bit’lik hazır değer
30
0
Tablo 9-2 : Komut Seti Özeti Mnemonic , Description Operands
Cycles
14-Bit Opcode Msb
Lsb
ADDWF
f ,d
Add W and f
1
C , DC , Z
1,2
ANDWF
f ,d
AND W with f
1
00
0101
dfff
ffff
Z
1,2
Clear f
1
00
0001
1fff
ffff
Z
2
1
00
0001
0000
0011
Z
1001
dfff
ffff
CLRW
F -
Clear W
dfff
ffff
Notes
00
CLRF
0111
Status Affected
COMF
f ,d
Complement f
1
00
Z
1,2
DECF
f ,d
Decrement f
1
00
0011
dfff
ffff
Z
1,2
DECFSZ
f ,d
Decrement f , Skip if 0
1(2)
00
1011
dfff
ffff
None
1
00
1010
dfff
ffff
Z
1111
dfff
ffff
None
INCF
f ,d
Increment f
1,2 ,3 1,2
INCFSZ
f ,d
Increment f , Skip if 0
1(2)
00
IORWF
f ,d
Inclusive OR W with f
1
00
0100
dfff
ffff
Z
1,2
MOVF
f ,d
Move f
1
00
1000
dfff
ffff
Z
1,2
1
00
0000
1fff
ffff
None
0000
0xx0
0000
None
MOVWF
f
Move W to f
1,2,3
NOP
-
No Operation
1
00
RLF
f ,d
Rotate left f through carry
1
00
1101
dfff
ffff
C
1,2
RRF
f ,d
Rotate right f through carry
1
00
1100
dfff
ffff
C
1,2
1
00
0010
dfff
ffff
C , DC , Z
1,2
1110
dfff
ffff
None
1,2
dfff
ffff
Z
1,2
SUBWF
f ,d
Subtract W from f
SWAPF
f ,d
Swap nibbes in f
1
00
XORWF
f ,d
Exclusive OR W with
1
00
0110
BIT-ORIENTED FILE REGISTER OPERATIONS f,b Bit Clear f 1 BCF
01
00bb
bfff
ffff
None
1,2
01bb
bfff
ffff
BSF
f,b
Bit Set f
1
01
None
1,2
BTFSC
f,b
Bit Test f , Skip if Clear
1(2)
01
10bb
bfff
ffff
None
3
BTFSS
f,b
Bit Test f , Skip if Set
1(2)
01
11bb
bfff
ffff
None
3
1
11
111x
kkkk
kkkk
C , DC , Z Z
LITERAL AND CONTROL OPERATIONS k Add literal and W ADDLW ANDLW
k
AND literal with W
1
11
1001
kkkk
kkkk
CALL
k
Call subroutine
2
10
0kkk
kkkk
kkkk
1
00
0000
0110
0100
1kkk
kkkk
kkkk
None
CLRWDT
-
Clear Watchdog Timer
T0 , PD
GOTO
k
Go to address
2
10
IORLW
k
Inclusive OR literal with W
1
11
1000
kkkk
kkkk
Z
MOVLW
k
Move literal to W
1
11
00xx
kkkk
kkkk
None
2
00
0000
0000
1001
None
01xx
kkkk
kkkk
None
RETFIE
-
Return from interrupt
RETLW
k
Return with literal in W
2
11
RETURN
-
Return from subroutine
2
00
0000
0000
1000
None
SLEEP
-
Go to standby mode
1
00
0000
0110
0011
SUBLW
k
Subtract W from literal
1
11
110x
kkkk
kkkk
T0 , PD C , DC , Z
11
1010
kkkk
kkkk k Exclusive OR literal with W 1 Z XORLW Not 1: I/O registeri , fonksiyonu kendi kendine değiştirdiği zaman (Örnek ; MOVF PORTB , 1 ) kullalan değer , kendi pinlerindeki temsil edilen değer olur.Örnek ; Eğer tutulan data, girişten dolayı pinlerin düzenlenmesi ve harici cihaz tarafından düşük sürülmesi için “1” ise bu data “0” ile geri yazılmış olur. 2: Eğer bu komut TMR0 registerinde yerine getirilir ise (ve , uygulanabilir d=1) önölçücü , eğer TMR0 düzenlenmişse temizlenmiş olmalıdır. 3: Eğer program sayacı (PC) değiştirilmiş yada şarta bağlı test doğru ise bu komut 2 döngüye ihtiyaç duyar.Đkinci döngü NOP’u yerine getirir.
55
9.1 Komut Tanımları ADDLW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
Yazım ve W’yu Ekle [label] ADDLW k 0≤k≤255 (W)+k → (W) C,DC,Z 11 111x kkkk kkkk W registerının içeriği 8-bitlik Yazımsal ‘k’ya eklenir ve W Registerına geri konur. 1 1 ADDLW
0x15
Komuttan önce W = 0x10 Komuttan sonra W = 0x25
ADDWF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
W ve f’nin Ekle [label] ADDWF f,d 0≤k≤127 d∈[0,1] (W)+(f) → (dest) C,DC,Z 00 0111 dfff ffff W registerının içeriğini ‘f’ye ekle.Eğer’d’ 0 ise, sonuç W registerının içerisinde depolanır.’d’ 1 ise,sonuç ‘f’ registerının içerisinde geri saklanır. 1 1 ADDWF
FSR,
0
Komuttan önce W = 0x17 FSR= 0xC2 Komuttan sonra W = 0xD9 FSR= 0xC2
56
ANDLW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
W ile birlikte yazımı ANDle [label] ANDLW k 0≤k≤255 (W).AND.(k) → (W) Z 11 1001 kkkk kkkk W registerının içeriği 8-bitlik Yazımsal ‘k’ ile AND’lenir. Sonuç,W Registerına geri konur. 1 1 ANDLW
0x5F
Komuttan önce W = 0xA3 Komuttan sonra W = 0x03
ANDWF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
W’yu f ile ANDle [label] ADDLW k 0≤f≤127 d∈[0,1] (W).AND.(f) → (dest) Z 00 0101 dfff ffff W registerını ‘f’ registerı ile ANDle.Eğer ‘d’ 0 ise, sonuç W registerı içinde saklanır. Eğer ‘d’ 1 ise, sonuç ‘f’ registerı içinde geri saklanır. 1 1 ANDWF
FSR, 1
Komuttan önce W = 0x17 FSR= 0xC2 Komuttan sonra W = 0x17 FSR= 0x02
BCF Dizim:
Bit Clear f [label] BCF f,b
57
Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım: Kelimeler: Döngüler: Örnek:
0≤f≤127 0→ (f) Yok 01 00bb bfff ffff ‘f’ içindeki ‘b’ biti silinir. 1 1 BCF
FLAG_REG,7
Komuttan önce FLAG_REG = 0xC7 Komuttan sonra FLAG_REG = 0x47
BSF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım: Kelimeler: Döngüler: Örnek:
Bit SET f [label] BSF f,b 0≤f≤127 0≤b≤7 1 → (f) Yok 01 01bb bfff ffff ‘f’ registerı içindeki ‘b’ biti set edilir. 1 1 BSF
FLAG_REG,
7
Komuttan önce FLAG_REG= 0x0A Komuttan sonra FLAG_REG= 0x0A
BTFSC Dizim: Operandlar:
f bit testi,Clear ise atla [label] BTFSC f,b 0≤f≤127
58
Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
0≤b≤7 F()=0 ise atla Yok 01 10bb bfff ffff Eğer ‘f’ registerı içindeki ‘b’ biti 0 ise,bir sonraki komut atlanır. Eğer ‘b’ biti 0 ise, mevcut komutun açılması esnasında , bir sonraki komut getirilir.Ve 2 döngülük komut yapmak yerine bir NOP açılır. 1 1(2) HERE FALSE TRUE
BTFSC FLAG,1 GOTO PROCESS_CODE • • •
Komuttan önce PC = address HERE Komuttan sonra if FLAG<1>=0, PC=address TRUE if FLAG<1>=1, PC=address FALSE
BTFSS Dizim: Operandlar:
Bit Test f,Set ise atla [label] BTFSS f,b 0≤f≤127 0≤b≤127
59
Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
Eğer (f)=1 ise atla Yok 01 11bb bfff ffff Eğer ‘f’ registerı içindeki ‘b’ biti 0 ise,bir sonraki komut atlanır. Eğer ‘b’ biti 0 ise, mevcut komutun açılması esnasında , bir sonraki komut getirilir.Ve 2 döngülük komut yapmak yerine bir NOP açılır 1 1(2) HERE FALSE TRUE
BTFSC FLAG,1 GOTO PROCESS_CODE • • •
Komuttan önce PC = address HERE Komuttan sonra if FLAG<1>=0, PC=address FALSE if FLAG<1>=1, PC=address TRUE
CALL Dizim: Operandlar: Đşlem:
YARI-Rutin Çağır (Subroutine Call) [label] CALL k 0≤k≤2047 (PC)+1 → TOS, k → (PC<10:0>), (PCLATH<4:3>)→(PC<12:11>)
Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
Yok 10 0kkk kkkk kkkk Yarı-rutin çağır.Đlk olarak, geri-dönüş adresi(PC+1) depo üzerine itilir.Onbir bitlik çabuk adres, PC bitleri<10:0> içerisine yüklenir.PC’ın üst bitleri, PCLATH’den yüklenir.CALL, iki döngülük bir komuttur. 1 2 HERE
CALL
THERE
Komuttan önce PC = address HERE Komuttan sonra PC = address THERE TOS = address HERE
CLRF Dizim: Operandlar: Đşlem:
Clear f [label] CLRF f 0≤f≤127 00h → (f)
60
Etkilenen Durum: Kodlama: Tanım: Kelimeler: Döngüler: Örnek:
1→Z Z 00 0001 1fff ffff ‘f’ registerının içeriği silinir ve Z biti kurulur.(set) 1 1 CLRF
FLAG_REG
Komuttan önce FLAG_REG = 0x5A Komuttan sonra FLAG_REG = 0x00 Z =1
CLRW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım: Kelimeler: Döngüler: Örnek:
W Registerını Sil(Clear) [label] CLRW Yok 00h → (W) 1→Z Z 00 0001 0000 0011 W registerı silinir.Sıfır biti set edilir. 1 1 CLRW
Komuttan önce W = 0x5A Komuttan sonra W = 0x00 Z=1
CLRWDT Dizim: Operandlar: Đşlem:
Watchdog Timer’ı Sil [label] CLRWDT Yok 00h → WDT 0 → WDT ön-ölçücüsü
61
Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
1 → T0 1 → PD C,DC,Z 00 0000 0110 0100 CLRWDT komutu,Watchdog Timer’ı reset eder.Bu komut,aynı zamanda WDT’nin önölçücüsünün de resetlenmesine sebep olur.T0 ve PD durum bitleri de set edilir. 1 1 CLRWDT
Komuttan önce WDT sayacı = ? Komuttan sonra WDT sayacı = 0x00 WDT ön-ölçücüsü = 0 T0 = 1 PD = 1 COMF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
F’i tümle [label] COMF f,d 0≤f≤127 d∈[0,1] (f) → (dest) Z 00 1001 dfff ffff ‘f’ registerının içeriği tümlenmiştir.Eğer’d’ 0 ise, sonuç W registerının içerisinde depolanır.’d’ 1 ise,sonuç ‘f’ registerının içerisinde geri saklanır. 1 1 COMF
REG1,0
Komuttan önce REG1= 0x13 Komuttan sonra REG1= 0x13 W= 0xEC
DECF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama:
Azalan f [label] DECF f,d 0≤f≤127 d∈[0,1] (f) – 1 → (dest) Z 00 0011 dfff ffff
62
Tanım:
Kelimeler: Döngüler: Örnek:
Azalan ‘f’ registerı.Eğer d ‘0’ ise,sonuç W registerında geri saklanır. 1 1 DECF
CNT,
1
Komuttan önce CNT = 0x01 Z=0 Komuttan sonra CNT = 0x00 Z=1
DECFSZ Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
Azalan f, 0 ise atla [label] DECFSZ f,d 0≤f≤127 d∈[0,1] (f)–1→ (dest);sonuç=0 ise atla Yok 00 1011 dfff ffff ‘f’ registerının içeriği azaltılmıştır.Eğer’d’ 0 ise, sonuç W registerının içerisinde depolanır.’d’ 1 ise,sonuç ‘f’ registerının içerisinde geri saklanır.Sonuç 0 ise,bir sonraki komut (bu zaten tutulmuştur) atılır. 1 1(2) HERE
DECFSZ GOTO CONTINUE • • •
CNT,1 LOOP
Komuttan önce PC = address HERE Komuttan sonra CNT= CNT-1 if CNT= 0 PC= address CONTINUE if CNT≠0, PC=address HERE+1
GOTO Dizim: Operandlar: Đşlem:
Etkilenen Durum: Kodlama:
Adres’e git [label] GOTO k 0≤k≤2047 k → (PC<10:0>) (PCLATH <4:3>)→ (PC<12:11>) Yok 10 1kkk kkkk kkkk
63
Tanım:
Kelimeler: Döngüler: Örnek:
GOTO,koşulsal bir kol değildir.11-bit’lik acele değer, PC bitlerinin<10:0> içerisine yüklenir.PC’ın üst bitleri, PCLATH<4:3>’ten yüklenir.GOTO, iki döngülük bir komuttur. 1 2 GOTO THERE
Komuttan sonra PC = Address THERE
INCF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
INCFSZ Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Artan F [label] INCF f,d 0≤f≤127 d∈[0,1] (f) + 1→ (dest) Z 00 1010 dfff ffff ‘f’ registerının içeriği tümlenmiştir.Eğer’d’ 0 ise, sonuç W registerının içerisinde depolanır.’d’ 1 ise,sonuç ‘f’ registerının içerisinde geri saklanır. 1 1 INCF
CNT,1
Komuttan önce CNT= 0xFF Z =0 Komuttan sonra CNT= 0x00 Z= 0xEC Artan f , 0 ise atla [label] INCFSZ f,d 0≤f≤127 d∈[0,1] (f)+1→(dest),sonuç=0 ise atla Yok 00 1111 dfff ffff ‘f’ registerının içeriği arttırılmıştır.Eğer’d’ 0 ise,
64
Kelimeler: Döngüler: Örnek:
sonuç W registerının içerisinde depolanır.’d’ 1 ise,sonuç ‘f’ registerının içerisinde geri saklanır.Sonuç 0 ise,bir sonraki komut (bu zaten tutulmuştur) atılır.Đki döngülük bir komut yapma yerine, bir NOP açılır. 1 1(2) HERE 1 CONTINUE
INCFSZ
CNT,
GOTO • • •
LOOP
Komuttan önce PC = addressHERE Komuttan sonra CNT = CNT+1 Eğer CNT= 0 ise, PC= addressCONTINUE Eğer CNT≠0 ise, PC=addressHERE +1
IORLW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
W ile birlikte kapsayan OR yazımı [label] IORLW k 0≤k≤255 (W).OR.(k)→ (W) Z 11 1000 kkkk kkkk W registerının içeriği 8-bitlik yazımsal ‘k’ ile OR’lanır. Sonuç,W Registerına geri konur. 1 1 IORLW
0x35
Komuttan önce W= 0x9A Z =0 Komuttan sonra W= 0xBF
IORWF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
f ile W’nun Or şelinde kapsanması [label] IORWF f,d 0≤f≤127 d∈[0,1] (W).OR.(f) → (W) Z 00 0100 dfff ffff W registerını, ‘f’ registerı ile OR şeklinde kapsa.Eğer d ‘0’
65
Kelimeler: Döngüler: Örnek:
ise,sonuç W registerında saklanır. Eğer d ‘1’ ise,sonuç ‘f’ registerında geri saklanır. 1 1 IORWF
RESULT, 0
Komuttan önce RESULT = 0x13 W = 0x91 Komuttan sonra RESULT = 0x13 W = 0x93
MOVLW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
Yazım’ı W’ya yolla [label] MOVLW k 0≤k≤255 k → (W) Yok 11 00XX kkkk kkkk 8-bitlik yazımsal ‘k’, W registerına yüklenir.Don’t care’ler, O’lar şeklinde toplanacaktır. 1 1 MÖVLW
0x5A
Komuttan sonra W= 0x5A
MOVF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
f’yi kaydır [label] MOVF f,d 0≤f≤127 d∈[0,1] (f) → (dest) Z 00 1000 dfff ffff ‘f’ registerının içeriği gidilecek yere kaydırılmıştır. Eğer’d’ 0 ise, gidilecek yer W registerıdır.d=1 ise,gidilecek
66
Kelimeler: Döngüler: Örnek:
yer ‘f’ file registerının kendisidir.d=1 durumu, status flag’I Z etkilendiğinden dolayı bir file registerını test etmekte kullanılabilir. 1 1 MOVF
FSR,
0
Komuttan sonra W=FSR registerındaki değer
MOVWF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım: Kelimeler: Döngüler: Örnek:
W’yu f’ye kaydır [label] MOVWF f 0≤f≤127 (W)→ (f) Yok 00 0000 1fff ffff Datayı W registerından ‘f’ registerına kaydır. 1 1 MOVWF
OPTION
Komuttan önce OPTION = 0xFF W = 0x4F Komuttan sonra OPTION = 0x4F W = 0x4F
NOP Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım: Kelimeler: Döngüler: Örnek:
Đşlem yok [label] NOP Yok Yok Yok 00 0000 0xx0 Yok 1 1
0000
NOP
67
SEÇENEK Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Not:
RETFIE Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Option Registerını Yükle [label] OPTION Yok (W) → OPTION Yok 00 0000 0110 0010 W registerının içeriği, OPTION registerı içinde yüklenmiştir.Bu komut, PIC16C5X ürünleri ile kod uyumluluğu için sağlanmıştır. OPTION, yazılabilir/ okunabilir bir register olduğundan dolayı, kullanıcı bu registerı direkt adresliyebilir. 1 1 Đleriye yönelik uyumluluğu sağlamak amacıyla ,gelişen PIC16CXX ürünleriyle bu komutu kullanmayınız.
Kesmeden geri dön [label] RETFIE Yok TOS → (PC) 1 → GIE Yok 00 0000 0000 1001 Yığın, açılmıştır ve yığının tepesi (TOS) PC’ye yüklenmiştir.Kesmeler, küresel kesme enable bitinin konmasıyla enable edilirler.Bu, iki döngülük bir komuttur.
68
Kelimeler: Döngüler: Örnek:
1 2 RETFIE
Komuttan sonra PC = TOS GIE = 1
RETLW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
Yazımı, W’a geri döndür [label] RETLW k 0≤k≤255 (k) → (W) TOS → (PC) Yok 11 01xx kkkk kkkk W registerı sekiz-bit’lik yazımsal ‘k’ ile yüklüdür. Program sayacı yığının tepesinden yüklüdür.Bu, iki döngülük bir komuttur. 1 2 CALL TABLE ;W contains Table ;offset value • ;W now has • value
•
TABLE ADDWF PC RETLW k1 RETLW k2
;W=offset ;Begin table ;
• • • RETLW kn
;End of table
Komuttan önce W = 0x07 Komuttan sonra W = k7’nin değeri
RETURN Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
Yarı-rutin’den geri dön [label] RETURN Yok TOS → (PC) Yok 00 0000 0000 0000 Yarı rutinden geri dönYığın, açılmıştır ve yığının tepesi (TOS) PC’ye yüklenmiştir. Bu,iki döngülük bir komuttur. 1 2 RETURN
Komuttan sonra
69
PC= TOS
RLF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
f’i Carry aracılığıyla sola döndür [label] RLF f,d 0≤f≤127 d∈ [0,1] Aşağıdaki tanıma bakınız. C 00 1101 dfff ffff f registerının içeriği Carry flag’i içinden bir bit sola kaydırılır.Eğer ‘d’ 0 ise, sonuç W registerının içerisine yerleştrilir.Eğer ‘d’ 1 ise, sonuç ‘f’ registerının içerisnde geri depolanır. C
Kelimeler: Döngüler: Örnek:
RRF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
f Registerı
1 1 RLF
REG1,0
Komuttan önce REG1 = 1110 0110 C =0 Komuttan sonra REG1 = 1110 0110 W = 1100 1100 C =1 f ’i Carry aracılığıyla sağa döndür [label] RLF f,d 0≤f≤127 d∈ [0,1] Aşağıdaki tanıma bakınız. C 00 1100 dfff ffff f registerının içeriği Carry flag’i içinden bir bit sağa kaydırılır.Eğer ‘d’ 0 ise, sonuç W registerının içerisine yerleştrilir.Eğer ‘d’ 1 ise, sonuç ‘f’ registerının içerisnde geri depolanır. C
f Registerı
70
Kelimeler: Döngüler: Örnek:
1 1 RRF
REG1,0
Komuttan önce REG1 = 1110 0110 C =0 Komuttan sonra REG1 = 1110 0110 W = 0111 0011 C =1 SLEEP Dizim: Operandlar: Đşlem:
Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
SUBLW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek 1:
Standby moduna gir [label] SLEEP Yok 00h → WDT 0 → WDT ön-ölçücüsü 1 → TO 0 → PD TO , PD 00 0000 0110 0011 Güç yok durum biti (PD) clear edilir.Time-out durum biti (TO)ise yerleştirilir.Watchdog zamanlayıcısı ve önölçücü silinir.Đşlemci,SLEEP moduna,ozilatr durdurulduğu zaman girer. 1 1 SLEEP
W’yu yazımdan çıkartmak [label] SUBLW k 0≤k≤255 k – (W) → (W) C,DC,Z 11 110x kkkk kkkk W registerı(2’nin tümleyeni metodu ile) sekiz bitlik ‘k’ yazımından çıkartılır. Sonuç, W registerı içerisine yerleştirilir. 1 1 SUBLW
0x02
Komuttan önce W=1
71
Örnek 2:
Örnek 3:
SUBWF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek 1:
C=1 Komuttan sonra W=1 C = 1,sonuç pozitif Komuttan önce W=2 C =? Komuttan sonra W=0 C = 1,sonuç sıfır Komuttan önce W=3 C =? Komuttan sonra W = FF C = 0,sonuç negatif
W’yu f’den çıkartmak [label] SUBWF f,d 0≤f≤127 d∈[0,1] (f) – (W) → (dest) C,DC,Z 00 0010 dfff ffff W registerı(2’nin tümleyeni metodu ile) ‘f’ registerından çıkartılır.’d’ 0 ise, sonuç ‘f’ registerı içerisinde geri saklanır. 1 1 SUBWF
REG1,1
Komuttan önce REG1 = 3
72
Örnek 2:
Örnek 3:
SWAPF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
W=2 C=? Komuttan sonra REG1 = 1 W=2 C = 1,sonuç pozitif Komuttan önce REG1 = 2 W=2 C =? Komuttan sonra REG1 = 0 W=2 C = 1,sonuç sıfır Komuttan önce REG1 = 1 W=2 C =? Komuttan sonra REG1 = FF W=2 C = 0,sonuç negatif
f ’i takas et [label] SWAPF f,d 0≤k≤255 d∈[0,1] (f<3:0>)→(dest<7:4>), (f<7:4>)→(dest<3:0>) Yok 00 1110 dfff ffff ‘f’registerının yüksek ve alçak baytları dönüştürülür.’d’ 0 ise,sonuç W registerı içine yerleştirilir.Eğer ‘d’ 1 ise,sonuç ‘f’ registerı içine yerleştirilir. 1 1 SWAP F
REG,
0
Komuttan önce
73
REG1 = 0xA5 Komuttan sonra REG1 = 0xA5 REG1 = 0x5A
TRIS Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
TRIS Registerını Yükle [label] TRIS 5≤f≤7 (W) → TRIS register (f) Yok 00 0000 0110 0fff Bu komut, PIC16C5X ürünleri ile kod uyumluluğu için sağlanmıştır.TRIS registerları, yazılabilir/ okunabilir registerlar olduklarından dolayı, kullanıcı bu registerları direkt adresliyebilir.
Kelimeler: Döngüler: Not:
1 1 Đleriye yönelik uyumluluğu sağlamak amacıyla ,gelişen PIC16CXX ürünleriyle bu komutu kullanmayınız.
XORLW Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
W ile EXOR yazımı [label] XORLW k 0≤k≤255 (W) .XOR. k → (W) Z 11 1010 kkkk kkkk W registerının içeriği, sekiz bitlik ‘k’ yazımı ile EXORlanır. Sonuç W registerı içine yerleştirilir. 1 1
Kelimeler: Döngüler: Örnek:
XORLW
0xAF
Komuttan önce W = 0xB5 Komuttan sonra W = 0x1A
74
XORWF Dizim: Operandlar: Đşlem: Etkilenen Durum: Kodlama: Tanım:
Kelimeler: Döngüler: Örnek:
f ile W’nun EXORlanması [label] XORWF f,d 0≤k≤127 d∈[0,1] (W) .XOR. (f) → (dest) Z 00 0110 dfff ffff W registerının içeriği, ‘f’ registerı ile EXORlanır.Eğer ‘d’ 0 ise, sonuç W registerı içinde depolanır.Eğer ‘d’ 1 ise ,sonuç ‘f’ registerı içine geri yerleştirilir. 1 1 XORWF REG
1
Komuttan önce REG = 0xAF W = 0xB5 Komuttan sonra REG = 0x1A W = 0xB5
75
10.0 PIC16C84 ĐÇĐN ELEKTRĐKSEL KARAKTERĐSTĐKLER Kesin Max. Sınırlar ↑ Çevreleyen ısı değeri Depolanan sıcaklık VSS ile ilgili olarak VDD voltajı VSS ile ilgili olarak MCLR voltajı (2) VSS ile ilgili olarak diğer tüm pinlerdeki voltaj Dağıtılan toplam güç (1) VSS pini çıkışı max. akımı VDD pini giriş max. akımı Giriş tutma akımı , IIK (V1<0 ya da V1>VDD) Çıkış tutma akımı , IOK(VO<0 ya da VO>VDD) Herhangi bir I/O pini tarafından yıkılan(sunk) max. çıkış akımı Herhangi bir I/O pini tarafından kaynaklanan max. çıkış akımı PORTA tarafından yıkılan(sunk) max. akım PORTA tarafından kaynaklanan max. akım PORTB tarafından yıkılan(sunk) max. akım PORTB tarafından kaynaklanan max. akım
……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ……….. ………..
-55 °C + 125 °C -65 °C + 150 °C -0.3 + 7.5 V -0.3 + 14 V -0.6 V (VDD +0.6 V) 800 mW 150 mA 100 mA ± 20 mA ± 20 mA 25 mA 20 mA 80 mA 50 mA 150 mA 100 mA
Not 1: Güçkaybı aşağıdaki gibi hesaplanır : Pdis=VDD∗{IDD-ΣIOH}+Σ{(VDD-VOH)∗IOH}+Σ(VOl∗IOL) Not 2: MCLR pinindeki 80 mA’den büyük akımları meydana getiren VSS’in altındaki gerilim darbeleri, tutmaya neden olur.Böylece , MCLR pinine “düşük” bir düzey uygulanırken bu pini direkt olarak VSS’e çekmek yerine 50-100Ω’lk bir seri direnç kullanılmalıdır.
↑ Not : Aşağıda listelenen “kesin max. değerler” altındaki zorlamalar cihaza daimi zarar verebilir.Bu , yukarıdaki işlem listelerinde ifade edilen özelliklerde belirtilmemiş olan , cihazın yalnız başına zorlama değeri ve fonksiyonel işletimidir.Genişletilmiş peryodlarda max. oran koşullarına ulaşmak cihazın güvenirliliğini etkileyebilir. Tablo 10-1 : Frekans Đşlemi ve Osilatör Konfigürasyonu Đçin Referans Cihaz Şartları
Not 1: Taranmış kısımlarda , fonksiyonluluk için test edilmiş osilatör seçimleri belirtilmiştir.Lakin bunlar , min./max. özelliklerini bildirmektedir.Đstenilen özellikleri sağlayan cihaz tipinin kullanıcı tarafından seçilmesi tavsiye edilir.
76
10.1 DC KARAKTERĐSTĐKLER : PIC16C84-04 (Ticari , Endüstriyel) PIC16C84-10 (Ticari , Endüstriyel)
* Bu parametreler karakterize edilmiş fakat test edilmemiştir. ↑ Başka bir durum bildirilmedikçe “Typ” kolonundaki data , 5.0V-25°C değerindedir.Bu parametreler yalnızca tasarımda yol gösterme içindir. Not
1: 2:
3:
4:
RAM datası kaybedilmeden SLEEP modunda VDD’nin azaltılması için bu limit geçerlidir. Kaynak akımı esas olarak işletme voltajı ve frekansının bir fonksiyonudur.I/O pininin yüklenmesi ve anahtarlama değeri , osilatör tipi , dahili kod açma örneği ve ısı gibi diğer etkenler de akım tüketimine tesir ederler.Aktif işletim modundaki tüm IDD ölçüleri için test koşulları ; OSC1=Kenardan kenara harici karedalga ; tüm I/O pinleri tetiklenmiş , değerleri VDD’ye çekilmiştir , T0CKI=VDD MCLR=VDD;WDT yetkili/yetkisiz şeklinde belirtilmiştir. SLEEP modundaki güç azaltım (Power down) akımı osilatör tipine bağlı değildir.Güç azaltım akımı , SLEEP modu çalışma bölgesinde , tüm yüksek empedans durumundaki I/O pinlerinde ölçülür ve VDD ya da VSS’e bağlanır. RC osilatör konfigürasyonu için , Rext üzerinden geçen akımı içermez.Dirençden geçen akım kΩ mertebesindeki Rext ile IR=VDD/2Rext formülünden hesaplanır.
77
10.2 DC KARAKTERĐSTĐKLER : PIC16LC84-04 (Ticari , Endüstriyel)
* Bu parametreler karakterize edilmiş fakat test edilmemiştir. ↑ Başka bir durum bildirilmedikçe “Typ” kolonundaki data , 5.0V-25°C değerindedir.Bu parametreler yalnızca tasarımda yol gösterme içindir. Not
1: 2:
3:
4:
RAM datası kaybedilmeden SLEEP modunda VDD’nin azaltılması için bu limit geçerlidir. Kaynak akımı esas olarak işletme voltajı ve frekansının bir fonksiyonudur.I/O pininin yüklenmesi ve anahtarlama değeri , osilatör tipi , dahili kod açma örneği ve ısı gibi diğer etkenler de akım tüketimine tesir ederler.Aktif işletim modundaki tüm IDD ölçüleri için test koşulları ; OSC1=Kenardan kenara harici karedalga ; tüm I/O pinleri tetiklenmiş , değerleri VDD’ye çekilmiştir , T0CKI=VDD MCLR=VDD;WDT yetkili/yetkisiz şeklinde belirtilmiştir. SLEEP modundaki güç azaltım (Power down) akımı osilatör tipine bağlı değildir.Güç azaltım akımı , SLEEP modu çalışma bölgesinde , tüm yüksek empedans durumundaki I/O pinlerinde ölçülür ve VDD ya da VSS’e bağlanır. RC osilatör konfigürasyonu için , Rext üzerinden geçen akımı içermez.Dirençden geçen akım kΩ mertebesindeki Rext ile IR=VDD/2Rext formülünden hesaplanır.
78
10.3 DC KARAKTERĐSTĐKLER :
PIC16C84-04 (Ticari , Endüstriyel) PIC16C84-10 (Ticari , Endüstriyel) PIC16LC84-04 (Ticari , Endütriyel)
* Bu parametreler karakterize edilmiş fakat test edilmemiştir. ↑ Başka bir durum bildirilmedikçe “Typ” kolonundaki data , 5.0V-25°C değerindedir.Bu parametreler yalnızca tasarımda yol gösterme içindir. Not
1: 2:
3: 4:
RC osilatör konfigürasyonundaki OSC1/CLKIN pini bir Schmitt Trigger girişidir. PIC16C84’ün RC modunda harici saat ile sürülmesi tavsiye edilmemektedir. MCLR pini üzerindeki kısadevre akımı , bütünüyle , uygulanan voltaj seviyesine bağlıdır. Belirlenen düzeyler normal işletme koşullarını temsil etmektedir.Daha yüksek kaçak akımları , farklı giriş gerilimlerinde ölçülebilir. Negatif akımın pinden dışarıya doğru geldiği kabul edilmektedir. Kullanıcı , 2 özellikten daha iyi olanını kullanabilir.
79
10.4 DC KARAKTERĐSTĐKLER :
PIC16C84-04 (Ticari , Endüstriyel) PIC16C84-10 (Ticari , Endüstriyel) PIC16LC84-04 (Ticari , Endütriyel)
↑ Başka bir durum bildirilmedikçe “Typ” kolonundaki data , 5.0V-25°C değerindedir.Bu parametreler yalnızca tasarımda yol gösterme içindir. Not
1:
Kullanıcı , kesmeleri kullanmalıdır ya da yazma döngüsünün tamamlandığını sağlamak için EEIF ya da WR bitlerinden birini seçmelidir.
80
Tablo 10-2 : Zamanlama Parametrelerine Bakış
1. 2.
Zamanlama parametre sembolleri , aşağıda verilen formatlar takip edilerek yaratılmıştır. TppS2ppS TppS
T
Frequencey T Time F Düşük durum(lowercase) sembolleri(pp) ve anlamları . . . pp 2 to os , osc OSC1 ck CLKOUT ost oscillator start-up timer cy cycle time pwrt power-up timer I/O port rbt io RB∗pins inp INT pin t0 T0CKI mc MCLR wdt watchdog timer Yüksek durum(uppercase) sembolleri ve anlamları . S Fall F High H Invalid(hi-empedance) I Low L
. P R V Z
. Period Rise Valid Hi-empedance
Şekil 10-1 : Ölçüm Parametre Bilgileri
Tüm zamanlar , şekilde gösterilen yüksek ve düşük ölçme noktaları arasında ölçülmüştür. Şekil 10-2 : Yükleme Durumları
81
10.5 Zamanlama Diyagramları Ve Özellikleri Şekil 10-3 : Harici Saat Zamanlaması
Tablo 10-3 : Harici Saat Zamanlaması Đhtiyaçları
* Bu parametreler karakterize edilmiş fakat test edilmemiştir. ↑ Başka bir durum bildirilmedikçe “Typ” kolonundaki data , 5.0V-25°C değerindedir.Bu parametreler yalnızca tasarımda yol gösterme içindir. Not
1:
Komut döngü peryodu (Tcy) , giriş osilatör zamanı taban peryodunun 4 katına eşittir.Belirlenmiş değerlerin tümü , cihaz çalışma kodlu işletim koşullarının altındaki belirlenmiş osilatörün tanımlama datasına dayanmaktadır.Belirlenmiş bu sınırların açılması osilatörün kararsız çalışmasında ve/veya beklenen akım tüketimindeki daha yüksek değerlerde meydana gelebilir.Bütün cihazlar , “min.” değerlerde çalıştırabilmek için OSC1 pinine uygulanan harici bir saat ile test edilir.Harici saat girişi kullanıdığında “max.” döngü zaman limiti tüm cihazlar için “DC”dir(saat olmadan).
82
Şekil 10-4 : CLKOUT ve I/O Zamanlaması Bütün testler belirlenmiş kapasitif yüklerle yapılmalıdır.
Tablo 10-4 : CLKOUT ve I/O Zamanlama Đhtiyaçları
* Bu parametreler karakterize edilmiş fakat test edilmemiştir. ↑ Başka bir durum bildirilmedikçe “Typ” kolonundaki data , 5.0V-25°C değerindedir.Bu parametreler yalnızca tasarımda yol gösterme içindir. Not
1:
Ölçüler , CLKOUT çıkışının 4∗Tosc olduğu yerlerde ve RC modunda iken alınmıştır.
83
Şekil 10-5 : Reset , Watchdog Timer , Osilatör Başlama Zamanı Ve Güç Artımı Zamanlayıcıları
Tablo 10-5 : Reset , Watchdog Timer , Osilatör Başlama Zamanı ve Güç Artımı Zamanlayıcı Đhtiyaçları
* Bu parametreler karakterize edilmiş fakat test edilmemiştir. ↑ Başka bir durum bildirilmedikçe “Typ” kolonundaki data , 5.0V-25°C değerindedir.Bu parametreler yalnızca tasarımda yol gösterme içindir.
84
Şekil 10-6 : TIMER0 Saat(Clock) Zamanlaması
Tablo 10-6 : TIMER0 Saat Đhtiyaçları
85
ebatlarına sahip olan cihazların tümü pin uyarlı değildir;örneğin,PIC16C52,PIC16C63 ile uyumlu olmasına karşın PIC16C55 ile uyumlu değildir. Pin uyumluluğu, cihazların aynı zellikleri sağladığı manâsına gelmez.Örnek olarak,PIC16C54,PIC16C71 ile pin uyumlu olmasına karşın A/D dönüştürücüsüne,PORTB üzeridneki zayıf Pull-up’lara ya da kesmelere sahip değildir.
11.0 PĐN UYUMLULUĞU Aynı paket tipi ve VDD ,VSS‘a ve MCLR pin yerlerine sahip olan cihazlar, pin uyumlu olarak tanımlanır.Bu durum, bu değişik cihazları aynı soket içinde işleme sokmayı mümkün kılar.Uyumlu cihazlar, uygulama soketi içinde öngörülen belirli işlemlere imkân verilmesi için yalnızca küçük yazılım modifikasyonarına ihtiyaç duyarlar (örnek, PIC16C56 ve PIC16 C61 cihazları).Aynı paket Tablo 10-1: Pin uyumlu cihazlar
Pin uyumlu cihazlar PIC12C508,PIC12C509 PIC16C54,PIC16C54A, PIC16CR54A, PIC16C56, PIC16C58A,PIC16CR58A, PIC16C61, PIC16C554,PIC16C556,PIC16C558, PIC16C620,PIC16C621,PIC16C622, PIC16C710,PIC16C71,PIC16C711, PIC16F83,PIC16CR83, PIC16C84,PIC16F84A,PIC16CR84 PIC16C55, PIC16C57,PIC16CR57B PIC16C62,PIC16CR62, PIC16C62A,PIC16C63, PIC16C72,PIC16C73,PIC16C73A PIC16C64,PIC16CR64,PIC16C64A, PIC16C65,PIC16C65A PIC16C74,PIC16C74A PIC17C42,PIC17CR42,PIC17C42A, PIC17C43,PIC17CR43,PIC17C44 PIC16C923,PIC16C924
Paket 8-pin 18-pin 24-pin
28-pin 28-pin 40-pin
40-pin 64/68-pin
65
30