You are on page 1of 129

INDEX

Sayfa

GR................................................................ HATA! YER ARET TANIMLANMAMI. MKROLEMC NEDR? .................................................Hata! Yer iareti tanmlanmam. MKRODENETLEYC NEDR?.......................................Hata! Yer iareti tanmlanmam. Neden Mikroilemci Deil de Mikrodenetleyici Kullanlyor? .................. Hata! Yer iareti tanmlanmam. MKRODENETLEYCLER HAKKINDA GENEL BLGLER ............. Hata! Yer iareti tanmlanmam. Neden PIC? .....................................................................Hata! Yer iareti tanmlanmam. Neden PIC16F84? ...........................................................Hata! Yer iareti tanmlanmam. PIC PROGRAMLAMAK N NELERE HTYACINIZ VAR? ............ Hata! Yer iareti tanmlanmam. IBM Uyumlu Bilgisayar..................................................Hata! Yer iareti tanmlanmam. Metin Editr ..................................................................Hata! Yer iareti tanmlanmam. Assembler Program........................................................Hata! Yer iareti tanmlanmam. PIC Programlayc Yazlm ............................................Hata! Yer iareti tanmlanmam. Programlanm PIC'i Deneme Kart................................Hata! Yer iareti tanmlanmam. PIC DONANIM ZELLKLER.............. HATA! YER ARET TANIMLANMAMI. PIC ETLER ...................................................................Hata! Yer iareti tanmlanmam. PIC'LERIN DI GRN.............................................Hata! Yer iareti tanmlanmam. PIC BELLEK ETLER..................................................Hata! Yer iareti tanmlanmam. PIC16F84.......................................................... HATA! YER ARET TANIMLANMAMI. PIC 16F84N PIN GRN........................................Hata! Yer iareti tanmlanmam. BESLEME GERLM.........................................................Hata! Yer iareti tanmlanmam. CLOCK ULARI ve CLOCK OSLATR ETLER ....................... Hata! Yer iareti tanmlanmam. RESET ULARI VE RESET DEVRES............................Hata! Yer iareti tanmlanmam. I/O PORTLARI .....................................................................Hata! Yer iareti tanmlanmam. PIC16F84'N BELLE......................................................Hata! Yer iareti tanmlanmam. Program Bellei...............................................................Hata! Yer iareti tanmlanmam. RAM Bellek ....................................................................Hata! Yer iareti tanmlanmam. W register ........................................................................Hata! Yer iareti tanmlanmam. PIC ASSEMBLY ............................................. HATA! YER ARET TANIMLANMAMI. ASSEMBLER NEDR? ........................................................Hata! Yer iareti tanmlanmam. PIC ASSEMBLY DL NEDR? .........................................Hata! Yer iareti tanmlanmam. PIC ASSEMBLY DL YAZIM KURALLARI .................Hata! Yer iareti tanmlanmam. Noktal Virgl (;).............................................................Hata! Yer iareti tanmlanmam. Girintiler ve Program Blmleri .....................................Hata! Yer iareti tanmlanmam. Balk...............................................................................Hata! Yer iareti tanmlanmam. Etiketler ...........................................................................Hata! Yer iareti tanmlanmam. Atama deyimi (EQU) ......................................................Hata! Yer iareti tanmlanmam. Sabitler ............................................................................Hata! Yer iareti tanmlanmam. ORG Deyimi ...................................................................Hata! Yer iareti tanmlanmam. Sonlandrma Blou..........................................................Hata! Yer iareti tanmlanmam. Byk ve Kk Harflerin Kullanm.............................Hata! Yer iareti tanmlanmam. PIC ASSEMBLY KOMUTLARININ YAZILI BM.Hata! Yer iareti tanmlanmam. Byte-Ynlendirmeli Komutlar ........................................Hata! Yer iareti tanmlanmam. Bit-Ynlendirmeli Komutlar ...........................................Hata! Yer iareti tanmlanmam. Sabit leyen Komutlar....................................................Hata! Yer iareti tanmlanmam. Kontrol Komutlar ...........................................................Hata! Yer iareti tanmlanmam.

SAYI VE KARAKTERLERN YAZILI BM............Hata! Yer iareti tanmlanmam. Heksadesimal saylar.......................................................Hata! Yer iareti tanmlanmam. Binary Saylar..................................................................Hata! Yer iareti tanmlanmam. Desimal saylar................................................................Hata! Yer iareti tanmlanmam. ASCII Karakterler ...........................................................Hata! Yer iareti tanmlanmam. PIC ASSEMBLY KOMUTLARI ........................................Hata! Yer iareti tanmlanmam. PIC PROGRAMLAMA.................................. HATA! YER ARET TANIMLANMAMI. LK PROGRAMINIZ...........................................................Hata! Yer iareti tanmlanmam. Bank Deitirme..............................................................Hata! Yer iareti tanmlanmam. Port'larn Giri veya k Olarak YnlendiriImesi ........Hata! Yer iareti tanmlanmam. AKI DYAGRAMl SEMBOLLER ..................................Hata! Yer iareti tanmlanmam. AKI DYAGRAMININ ZILMESI................................Hata! Yer iareti tanmlanmam. ASSEMBLY PROGRAM KOMUTLARININ YAZILMASI..................... Hata! Yer iareti tanmlanmam. Atama (EQU) Komutu Kullanarak Program Yazmak ....Hata! Yer iareti tanmlanmam. PROGRAMLARIN DERLENMES (MPASM) ................Hata! Yer iareti tanmlanmam. PROGRAMIN PIC'E YAZDIRILMASl.............................Hata! Yer iareti tanmlanmam. P16PRO'nun Balatlmas ...............................................Hata! Yer iareti tanmlanmam. PIC Seme (F3) ...............................................................Hata! Yer iareti tanmlanmam. Program Dosyasn Ama (F1)........................................Hata! Yer iareti tanmlanmam. PIC Konfigrasyonunu Ayarlama (F2) ...........................Hata! Yer iareti tanmlanmam. Program PIC'e Yazdrma (F4)........................................Hata! Yer iareti tanmlanmam. PROGRAMLANMI PIC'N DENENMES .....................Hata! Yer iareti tanmlanmam. BreadBoard zerine Kurulan Devre ile Denemek..........Hata! Yer iareti tanmlanmam. PIC Deneme Kart ile Denemek......................................Hata! Yer iareti tanmlanmam. MPASM'NlN RETT DER DOSYALAR ...............Hata! Yer iareti tanmlanmam. .LST Dosyas...................................................................Hata! Yer iareti tanmlanmam. .ERR Dosyas ..................................................................Hata! Yer iareti tanmlanmam. INCLUDE DOSYALARI .....................................................Hata! Yer iareti tanmlanmam. INCLUDE Dosyas Kullanarak Program Yazmak ............Hata! Yer iareti tanmlanmam. KONFGRASYON BTLERNN YAZILMASI............Hata! Yer iareti tanmlanmam. VER TRANSFER VE KARAR LEMLER................................ HATA! YER ARET TANIMLANMAMI. W REGSTERN KULLANIMI (MOVLW, MOVWF KOMUTLARI)... Hata! Yer iareti tanmlanmam. Veri Transferi ..................................................................Hata! Yer iareti tanmlanmam. Sonsuz Dng .................................................................Hata! Yer iareti tanmlanmam. BT TEST EDEREK KARAR VERMEK (BTFSC, BTFSS) ..................... Hata! Yer iareti tanmlanmam. DNG DZENLEMEK .............................. HATA! YER ARET TANIMLANMAMI. SAYA KULLANARAK DNG KULLANMAK (DECFSZ) ................ Hata! Yer iareti tanmlanmam. Basit Bir Zaman Gecikme Dngs Yapmak .................Hata! Yer iareti tanmlanmam. KARILATIRMA YAPARAK DNG DZENLEMEK (SUBLW, SUBWF, INCF, DECF KOMUTLARI) ..........................................................Hata! Yer iareti tanmlanmam. SUBWF Komutu .............................................................Hata! Yer iareti tanmlanmam. SUBLW Komutu.............................................................Hata! Yer iareti tanmlanmam. STATUS REGISTER............................................................Hata! Yer iareti tanmlanmam. STATUS REGSTER BlT'LER.....................................Hata! Yer iareti tanmlanmam.

ZAMAN GECKTRME VE ALT PROGRAMLAR....................... HATA! YER ARET TANIMLANMAMI. ZAMAN GECKTRME DNGLER ............................Hata! Yer iareti tanmlanmam. Dahili Komut Saykl ......................................................Hata! Yer iareti tanmlanmam. Tek Dng ile Minimum Zaman Geciktirme..................Hata! Yer iareti tanmlanmam. Tek Dng ile Maksimum Zaman Geciktirme ...............Hata! Yer iareti tanmlanmam. Komut Saykl Saysnn Bulunmas ................................Hata! Yer iareti tanmlanmam. N saysnn bulunmas .....................................................Hata! Yer iareti tanmlanmam. ift Dngl Zaman Geciktirme.....................................Hata! Yer iareti tanmlanmam. N Saysnn Hesaplanmas...............................................Hata! Yer iareti tanmlanmam. ALT PROGRAMLAR ..........................................................Hata! Yer iareti tanmlanmam. BT KAYDIRMA VE MANTIKSAL LEM KOMUTLARI .... HATA! YER ARET TANIMLANMAMI. SOLA KAYDIRMA (RLF) ..................................................Hata! Yer iareti tanmlanmam. SAA KAYDIRMA..............................................................Hata! Yer iareti tanmlanmam. COMF VE SWAPF KOMUTLARI.....................................Hata! Yer iareti tanmlanmam. MANTIKSAL LEM KOMUTLARI................................Hata! Yer iareti tanmlanmam. ANDLW Komutu (stenilen bir ya da birka bit'i "0" yapmak) ................. Hata! Yer iareti tanmlanmam. ANDWF Komutu ............................................................Hata! Yer iareti tanmlanmam. IORLVV Komutu (stenilen bit'in deerini "1" yapmak) ........................... Hata! Yer iareti tanmlanmam. IORWF Komutu..............................................................Hata! Yer iareti tanmlanmam. XORLW Komutu (stenilen bir bit'i terslemek)..............Hata! Yer iareti tanmlanmam. XORWFKomutu .............................................................Hata! Yer iareti tanmlanmam. Bir Byte'lk ki Veriyi Karlatrmak (XORLW, XORWF) ...................... Hata! Yer iareti tanmlanmam. Bir Byte'lk Veriyi "0" ile Karlatrmak (IORLW, IORWF).................... Hata! Yer iareti tanmlanmam. ARTMETK LEMLER ............................. HATA! YER ARET TANIMLANMAMI. ARTMETK LEM KOMUTLARI.................................Hata! Yer iareti tanmlanmam. 8 - BIT TOPLAMA.........................................................Hata! Yer iareti tanmlanmam. 16- BT TOPLAMA........................................................Hata! Yer iareti tanmlanmam. 8 - BIT IKARMA .........................................................Hata! Yer iareti tanmlanmam. 16- BITIKARMA .........................................................Hata! Yer iareti tanmlanmam. EVRM TABLOLARI ................................. HATA! YER ARET TANIMLANMAMI. EVRM TABLOSU (LOOKUP TABLE) NEDR?.........Hata! Yer iareti tanmlanmam. PROGRAM COUNTER (SAYICI) .....................................Hata! Yer iareti tanmlanmam. RETLW Komutu .............................................................Hata! Yer iareti tanmlanmam. STEP MOTOR KONTROL ..............................................Hata! Yer iareti tanmlanmam. KESMELER (INTERRUPTS)....................... HATA! YER ARET TANIMLANMAMI. KESME (INTERRUPT) NEDR? .......................................Hata! Yer iareti tanmlanmam. INTCON REGSTER..........................................................Hata! Yer iareti tanmlanmam. KESME KAYNAKLARI......................................................Hata! Yer iareti tanmlanmam. Harici Kesmeler...............................................................Hata! Yer iareti tanmlanmam. TMRO Sayc Kesmesi....................................................Hata! Yer iareti tanmlanmam. PORTB Lojik Seviye (RB4-RB7) Deiiklik Kesmesi ..Hata! Yer iareti tanmlanmam. KESME ALT PROGRAMLARININ DZENLENMES Hata! Yer iareti tanmlanmam. Tm Kesme lemlerini Aktif Yapma Bayra (GIE) .....Hata! Yer iareti tanmlanmam. Kesme Esnasnda W ve Status Registeri Saklamak ........Hata! Yer iareti tanmlanmam.

Kesme Alt Programlar Nereye Yazlmal? ....................Hata! Yer iareti tanmlanmam. Kesme Gecikmesi............................................................Hata! Yer iareti tanmlanmam. Tek Pals reticinin Kullanm.........................................Hata! Yer iareti tanmlanmam. DONANIM SAYICILARI................................................................................................... 100 DONANIM SAYICISI/ZAMANLAYICISI NEDR?....................................................... 100 TMR0 SAYICI/ZAMANLAYICISI(TIMER/COUNTER).............................................. 100 OPTION REGSTER .......................................................................................................... 100 TMR0 SAYICININ ZELLKLERl ................................................................................. 101 Frekans Blme Saysnn (Prescaler) Kullanlmas............................................................ 102 TMR0 ve WDT Oran ........................................................................................................ 102 Frekans Blme Saysnn Atanmas ................................................................................... 104 TMR0'dan WDT'ye Prescaler Deeri Atamak:.................................................................. 104 WDT'den TMR0'a Prescaler Deeri Atamak:.................................................................... 104 TMRO Saycsnn Kullanlmas........................................................................................ 104 TMR0 Sayc Kesmesine Ait rnekler .............................................................................. 108 TMR0 Saycsn stenilen Bir Saydan Balatmak............................................................ 110 WDT ZAMANLAYICISI (WATCHDOG TIMER) ......................................................... 111 Zaman Am Sresi ........................................................................................................... 112 SLEEP Komutunun Kullanlmas ...................................................................................... 113 D/A VE A/D EVRME LEMLER.......... HATA! YER ARET TANIMLANMAMI. DJTAL/ANALOG EVRC ..........................................Hata! Yer iareti tanmlanmam. Ladder(Merdiven) Diren Devresi Kullanmak ...............Hata! Yer iareti tanmlanmam. 8 Bit D/A konvertr Entegresi Kullanmak .........................Hata! Yer iareti tanmlanmam. PWM (Pulse Width Modulation) Metodu Kullanmak ......Hata! Yer iareti tanmlanmam. PWM Metodu..................................................................Hata! Yer iareti tanmlanmam. ve Bekleme Sresinin Tespit Etmek ...........................Hata! Yer iareti tanmlanmam. ANALOG / DJlTAL EVRC.........................................Hata! Yer iareti tanmlanmam. PIC16F84'n Giri Seviyesinin lm .........................Hata! Yer iareti tanmlanmam. A/D evrim Metodu Kullanarak Diren lmek ............Hata! Yer iareti tanmlanmam.

GR
MKROLEMC NEDR? MKRODENETLEYC NEDR? MKRODENETLEYCLER HAKKINDA GENEL BLGLER PIC PROGRAMLAMA N NEYE HTYACIMIZ VAR

MKROLEMC NEDR?
Gnmzde kullanlan bilgisayarlarn zelliklerinden bahsedilirken duyduunuz 80386, 80486, Pentium-ll, Pentium-lll birer mikroilemcidir (Microprocessor). Mikroilemciler bilgisayar programlarnn yapmak istedii tm ilemleri yerine getirdii iin, ou zaman merkezi ilem nitesi (CPU- Central Processing Unit) olarak da adlandrlr. PC adn verdiimiz kiisel bilgisayarlarda kullanld gibi, bilgisayarla kontrol edilen sanayi tezgahlarnda ve ev aygtlarnda da kullanlabilmektedir. Bir mikroilemci ilevini yerine getirebilmesi iin aadaki yardmc elemanlara ihtiya duyar. Bunlar: 1. Input (Giri) nitesi. 2. Output (k) nitesi. 3. Memory (Bellek) nitesi. Bu niteler CPU chip'inin dnda, bilgisayarn ana kart zerinde bir yerde farkl chip'lerden veya elektronik elemanlardan oluur. Aralarndaki iletiimi ise veri yolu (Data bus), adres yolu (Address bus) denilen iletim hatlar yapar.

Intel, Cyrix, AMD, Motorola mikroilemci reticilerden birkadr, Gnmzde mikroilemciler adn verdiimiz kiisel bilgisayarlarda kullanlmaktadr.

genellikle PC

MKRODENETLEYC NEDR?
Bir bilgisayar ierisinde bulunmas gereken temel bileenlerden RAM, I/O nitesinin tek bir chip ierisinde retilmi biimine mikrodenetleyici (Microcontroller) denir. Bilgisayar teknolojisi gerektiren uygulamalarda kullanlmak zere tasarlanm olan mikrodenetleyiciler, mikroilemcilere gre ok daha basit ve ucuzdur. Gnmz mikrodenetleyicileri otomobillerde, kameralarda, cep telefonlarnda, fax-modem cihazlarnda, fotokopi, radyo, TV, baz oyuncaklar gibi saylamayacak kadar pek ok alanda kullanlmaktadr. Gnmz mikrodenetleyicileri birok chip reticisi tarafndan retilmektedir. Her firma rettii chip'e farkl isimler vermektedir. rnein Microchip firmas rettiklerine PIC adn verirken, Intel'in rettii ve 1980'lerin banda piyasaya srd 8051, bazen MCS-51 olarak da adlandrlr.

Neden Mikroilemci Deil de Mikrodenetleyici Kullanlyor?


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

MKRODENETLEYCLER HAKKINDA GENEL BLGLER


Neredeyse her mikroilemci (CPU) reticisinin rettii birka mikrodenetleyicisi bulunmaktadr. Bu denetleyicilerin mimarileri arasnda ok kk farklar olmasna ramen aa yukar ayn ilemleri yapabilmektedirler. Her firma rettii chip'e bir isim ve zelliklerini birbirinden ayrmak iin de para numaras vermektedir. rnein Microchip rettiklerine PIC adn, para numaras olarak da 12C508, 16C84, 16F84, 16C711 gibi kodlamalar verir. Intel ise rettii mikrodenetleyicilere MCS-51 ailesi adn vermektedir. Genel olarak bu adla anlan mikrodenetleyici ailesinde farkl zellikleri bulunan rnleri birbirinden ayrt etmek iin para numaras olarak da 8031AH, 8051AH, 8751AHP, 8052AH, 80C51FA gibi kodlamalar kullanlmaktadr. Bir uygulamaya balamadan nce hangi firmann rn kullanlacana, daha sonra da hangi numaral denetleyicinin kullanlacana karar vermek gerekir. Bunun iin mikrodenetleyici gerektiren uygulamada hangi zelliklerin olmas gerektii nceden bilinmesi gereklidir. Aada bu zellikler sralanmtr: Programlanabilir dijital paralel giri/k. Programlanabilir analog giri/k. Seri giri/k ( senkron, asenkron ve cihaz denetimi gibi). Motor veya servo kontrol iin pals sinyali k. Harici giri vastasyla kesme. Timer vastasyla ile kesme. Harici bellek arabirimi. Harici bus arabirimi (PC ISA gibi). Dahili bellek tipi seenekleri(ROM, EPROM, PROM ve EEPROM).

Dahili RAM seenei. Kayan nokta hesaplamas.

Daha da ayrntya girecek olursak bu listede sralanacak zellikler uzayp gidecektir. imdi de bizim bu kitapta ele aldmz Microchip'in rn olan PIC'i neden setiimize deinelim. Microchip, 8-bit'lik mikrodenetleyici ve EEPROM reten bir Amerikan irketidir. Arizona eyaletinde iki, Tayland ve Tayvan'da da birer tane olmak zere toplam drt fabrika ile kendi alannda dnyada sz sahibi olan bir chip reticisidir.

Neden PIC?
Bilgisayar denetimi gerektiren bir uygulamay gelitirirken seilecek mikrodenetleyicinin ilk olarak tm isteklerinizi yerine getirip getirmeyeceine, daha sonra da maliyetinin dklne bakmalsnz. Ayrca, yapacanz uygulamann devresini kurmadan nce setiiniz mikrodenetleyicinin destekledii bir yazlm zerinde simlasyonunu yapp yapamayacanz da dikkate almalsnz. Yukarda saydmz zellikleri gz nne aldmzda Microchip'in rettii PIC'leri kullanmak en aklc bir yol olduunu grlmektedir. te, bu kitapta PIC'leri ele alnmamzn nedenlerini yle sralayabiliriz. Yazlmn Microchip'ten veya internetten parasz olarak elde edilebilmesi. ok geni bir kullanc kitlesinin bulunmas. PIC'lerin ok kolaylkla ve ucuz olarak elde edilebilmesi. Elektronikle hobi olarak uraanlarn bile kullanabildikleri basit elemanlar kullanarak yaplan donanmla programlanabilmesi. ok basit reset, clock sinyali ve g devreleri gerektirmeleri.

PIC, adn ngilizce'deki Peripheral Interface Controller cmlesindeki kelimelerin ba harflerinden alm olan bir mikrodenetleyicidir. Eer bu cmleyi Trke'ye evirirsek, evresel niteleri denetleyici arabirim gibi bir anlam kacaktr. PIC gerekten de evresel niteler ad verilen lamba, motor, role, s ve k sensr gibi 1/0 elemanlarn denetimini ok hzl olarak yapabilecek ekilde dizayn edilmi bir chip'tir. RISC mimarisi ad verilen bir yntem kullanlarak retildiklerinden bir PIC'i programlamak iin kullanlacak olan komutlar olduka basit ve say olarak da azdr. 1980'lerin bandan itibaren uygulanan bir tasarm yntemi olan RISC (Reduced Instruction Set Computer) mimarisindeki temel dnce, daha basit ve daha az komut kullanlmasdr. rnein PIC16F84 microdenetleyicisi toplam 35 komut kullanlarak programlanabilmektedir.

Neden PIC16F84?
Bu kitapta programlanmas ve rnek uygulamalar verilen PlC'in 16F84 serisi olmasnn en nemli nedeni: PIC16F84 (veya PIC16F84A) mikrodenetleyicisinin program belleinin flash teknolojisi ile retilmi olmasdr. Flash memory teknolojisi ile retilen bir bellee yklenen program, chip'e uygulanan enerji kesilse bile silinmez. Yine bu tip bir bellee stenirse yeniden yazlabilir. Flash bellekler bu zellikleri ile EEPROM bellekler ile ayn grnmektedirler. Gerekten de Flash ile EEPROM bellek ayn eylerdir. Ancak baz reticiler tarafndan EEPROM bellee Flash ROM da denilmektedir. Flash bellee sahip olan PIC16F84'i programlayp ve deneylerde kullandktan sonra, silip yeniden program yazmak PIC ile yeni almaya balayanlar iin byk kolaylktr. Bylece ie yeni balayanlar yaptklar programlama hatalar nedeniyle chip'i atmak zorunda kalmayacaklardr. Geri EPROM program memory'si olan chip'lere de yeniden yazmak mmkndr ama, bu durumda bir EPROM silici cihazna ihtiya vardr. Bir silici cihaz bulunsa bile program bellekten silmek iin en azndan 10-15 dk beklemek zorunda kalnacaktr. te PIC16F84'n bu zellii mikrodenetleyici kullanmaya yeni balayanlar iin ideal bir seenektir. PIC16F84' sememizin ikinci nedeni de, programlama donanmnn ok ucuz ve kullanl olmas ve hatta ou merakl elektronik kullanc tarafndan bile retilebilmesidir. Kitabn Ekler blmnde adresini verdiimiz firmann rettii programlayc donanm ve yazlm demeli olarak istenebilmesi Trkiye'deki kullanclar iin ok byk bir avantajdr. PIC16F84' programlamak iin rendiiniz her eyi dier PIC 16/17 mikrodenetleyicilerinin uygulamalarnda da 'kullanabilmeniz, yaplan seimin doruluunu gstermektedir.

PIC PROGRAMLAMAK N NELERE HTYACINIZ VAR?


PIC 16/17 mikrodenetleyicilerin programlamasn ve uygulamalarda nasl kullanlacan renmek iin neleri bilmek ve nelere sahip olunmas gerekenler aada sralanmtr: IBM uyumlu bir bilgisayara sahip olmak ve temel kullanmlar bilmek.

Bir metin editrn kullanmasn bilmek. Bir assembler programna sahip olmak. PIC programlayc donanmna sahip olmak. PIC programlayc yazlm. PIC Programlanm PIC'i denemek iin breadboard, g kayna ve elektronik elemanlar. Programlanm bir PIC'i deneme kart.

IBM Uyumlu Bilgisayar


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

Metin Editr
Assembly dili komutlarn yazp bir metin dosyas oluturmak iin EDIT veya NotPad gibi bir editr kullanabilmeniz gerekir. sterseniz ASM uzantl metin dosyalarnz yazabileceiniz PFE editrn de kullanabilirsiniz. Bu editrn hem DOS hem de VVINDOVVS altnda alan versiyonlar bulunmaktadr ve PIC konusunda destek veren bir internet sitesinden alnmtr. Ekler blmnde adn verdiimiz firma da bu program disket ierisinde sunmaktadr.

Assembler Program
PIC Assembly dili ad verilen ve toplam 35 komuttan oluan programlama dilini bu kitapta reneceksiniz. Bu komutlar basit bir editrde yazabiliyoruz. Ancak, ngilizce'deki baz kelimelerin ksaltmasndan oluan bu dilin komutlarn PIC'in anlayabilecei makine diline eviren bir programa ihtiyacmz vardr. Bu programa assembler adn veriyoruz. Text dosyas biiminde kaydedilmi olan assembly dili komutlarn makine diline eviren MPASM'nin hem DOS altnda hem de WINDOWS altnda alan versiyonu bulunmaktadr. Bu program Microchip firmasnn internetteki www.microchip.com adl sitesinden parasz olarak download edilebilecei gibi kitabn Ekler blmnde adresi verilen firmadan da elde edebilirsiniz. MPASM'nin kullanm hakknda detayl bilgiyi 5. blmde bulacaksnz. Microchip bir de ierisinde hem metin editr hem MPASM assembler programn bulunduran MPLAB programn PIC programlayclarnn kullanmna sunmaktadr. Bu programn bulunduu CD-ROM yine www.microchip.com adresinden parasz olarak istenebilir. MPLAB'n kurulumu ve kullanlmasyla ilgili gerekli detay bilgiyi Ekler blmnde bulacaksnz.

Yukarda (sada) PIC16F84 ve PIC16C84 mikrodenetleyicileri programlayabileceiniz, ok basit bir donanm bulunan programlama kart resmi verilmitir. Bu kartla ilgili detayl bilgiyi Ekler blmnde bulacaksnz.

PIC Programlayc Yazlm


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

Programlanm PIC'i Deneme Kart


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

PIC DONANIM

ZELLKLER

PIC ETLER PICLERN GRN PIC BELLEK ETLER

PIC ETLER
Microchip rettii mikrodenetleyicileri 4 farkl gruba (Genellikle aile diye adlandrlr.) ayrarak isimlendirmitir. PIC ailelerine isim verilirken kelime boyu (VVord lenght) gz nne alnmtr. imdi kelime boyunun ne anlama geldiine bakalm. Microprocessor veya mikrodenetleyiciler kendi ilerindeki dahili veri saklama alanlar olan registerleri arasndaki veri al veriini farkl saydaki bit'lerle yaparlar. rnein 8088 mikro ilemcisi chip ierisindeki veri al veriini 16-bit ile yaparken, Pentium ilemcileri 32-bit'lik verilerle iletiim kurarlar. Bir CPU veya MCU'nun dahili veri yolu uzunluuna kelime boyu denir. Microchip PIC'leri 12/14/16 bit'lik kelime boylarnda retmektedir ve buna gre aadaki aile isimlerini vermektedir. PIC16C5XXailesi 12-bit kelime boyu, PIC16CXXX ailesi 14-bit kelime boyu, PIC17CXXX ailesi 16-bit kelime boyu, PIC12CXXX ailesi 12-bit/14-bit kelime boyuna sahiptir. Bir CPU veya MCU'nun chip dndaki harici nitelerle veri alveriini ka bit ile yapyorsa buna veri yolu bit says denir. PIC'ler farkl kelime boylarnda retilmelerine ramen harici veri yolu tm PIC ailesinde 8-bit'tir. Yani bir PIC, I/O portu aracl ile evresel nitelerle veri alverii yaparken 8-bit'lik veri yolu kullanr. PIC programlayclar program kodlarn yazarken bir komutun ka bit'lik bir kelime boyundan olutuuyla pek fazla ilgilenmezler. Seilen bir chip'i programlarken uyulmas gereken kurallar ve o chip'le ilgili zelliklerin bilinmesi yeterlidir. Bu zellikler PIC'in bellek miktar, I/O portu says, A/D dntrcye sahip olup olmad, kesme (interrupt) fonksiyonlarnn bulunup bulunmad, bellek tipinin ne olduu (Flash, EPROM, EEPROM vb.) gibi bilgilerdir. Bu zelliklerin en son deiikliklerini ieren gncel ve tam bir listesine microchip'in kataloglarndan ulamak mmkndr. Aadaki tabloda Nisan 1997 tarihine kadar retilen PIC'lerin listesi verilmitir. Katalogdan alnan bu tablo orijinali bozulmadan zellikle ngilizce olarak verilmitir. nk bu gibi bilgilere ulamak istenildiinde Trke kataloglar bulmak mmkn deildir. Bylece katalog okurken PIC'lerle ilgili zellikleri veren ngilizce kelimeleri renmeye zorlanm olacaksnz. Tablo ierisinde anlayamadnz kelimelerin anlamlarn kitabn sonundaki szlkten bulabilirsiniz.

PIC'LERIN DI GRN
PIC'ler ok farkl ambalajlarla piyasaya sunulmaktadrlar. Bu kitapta program rnekleri verilen PIC16F84, 18-pinli DIP tipinde ambalajlanm olandr. Standart DIP (Dual In-Line Package) olarak ambalajlanm olan PIC'ler 0.3 in geniliindedir. Her iki tarafnda 0.1 in aralklarla yerletirilmi 9 pin bulunmaktadr. PIC16F84 ekil-a da grlmektedir. ekil-b de ise 0.6 in geniliinde, her iki tarafnda 0.1 in aralklarla yerletirilmi 20 pini bulunan PIC16C74 grlmektedir. Bu rneklerin dnda farkl pin saysna sahip baka DIP ambalajl PIC'ler de bulunmaktadr. Geni bilgi iin Microchip'in kataloglarna bakmanz neririz.

PIC BELLEK ETLER


Farkl zellikte program bellei bulunan PIC'ler microchip firmas tarafndan piyasaya srlmektedir. Bunlar:

Silinebilir ve programlanabilir bellek (Erasable PROgrammable Memory-EPROM). Elektriksel olarak silinebilir ve programlanabilir bellek (Electrically Erasable PROgrammable Memory-EEPROM). FLASH bellek olarak da adlandrlr. Sadece okunabilir bellek (Read-Only Memory-ROM).

Her bir bellek tipinin kullanlaca uygulamaya gre avantajlar ve dezavantajlar vardr. Bu avantajlar; fiyat, hz, defalarca kullanmaya yatknlk gibi faktrlerdir. EPROM bellek hcrelerine elektrik sinyali uygulayarak kayt yaplr. EPROM zerindeki enerji kesilse bile bu program bellekte kalr. Ancak silip yeniden baka bir program yazmak iin ultra-viole n altnda belirli bir sre tutmak gerekir. Bu ilemler EPROM silici denilen zel aygtlarla yaplr. EPROM bellekli PIC'ler iki farkl ambalajl olarak bulunmaktadr: Seramik ambalajl ve cam pencereli olan tip, silinebilir olan tiptir. Plastik ambalajl ve penceresiz olan tipler ise silinemez (OTP) tiptir. Seramik ambalajl ve pencereli olan bellek ierisindeki programn silinmemesi iin pencere zerine k geirmeyen bir bant yaptrlr. Ultra-viole ile silinmesi istenildiinde bu pencere alr ve silici aygt ierisinde belirli bir sre bekletilir. Plastik ambalajl EPROM'lar ise programlandktan sonra silinmesi mmkn deildir ve fiyat silinebilen tipe gre olduka ucuzdur. Silinemeyen tipe OTP (One Time Programmable - Bir defa programlanabilir) olarak adlandrlr. EEPROM bellei bulunan bir PIC ierisine program yazmak iin PIC programlayc vastasyla elektriksel sinyal gnderilir. EEPROM zerindeki enerji kesilse bile bu program bellekte kalr. Program silmek veya farkl yeni bir program yazmak istendiinde PIC programlaycdan elektriksel sinyal gnderilir. Bu tip bellee sahip olan PIC'ler genellikle uygulama gelitirme amacyla kullanlrlar. Microchip bu tip bellee ou zaman FLASH bellek olarak da adlandrmaktadr. Fiyatlar silinemeyen tiplere gre biraz pahaldr. Bellek eriim hzlar ise EPROM ve ROM'lara gre daha yavatr. PIC 16C84 ve PIC 16F84'ler bu tip program belleine sahiptir. ROM program belleine sahip PIC'lerin programlar fabrikasyon olarak yazlrlar. EPROM ve EEPROM edeerlerine nazaran fiyatlar olduka dktr. Ancak fiyatnn dklnden dolay gelen avantaj bazen ok pahalya da mal olabilir. ROM bellekli PIC programlarnn fabrikasyon olarak yazlmas nedeniyle PIC'in elde edilme sresi uzundur. Programda oluabilecek bir hatann PIC'e program yazldktan sonra tespit edilmesi, eldeki tm PIC'lerin atlmasna da neden olabilir. Bu tip PIC'ler ok miktarda retilecek bir rnn maliyetini drmek amacyla seilir. Program hatalar giderilemedii iin uygulama gelitirmek iin uygun deildir. Microchip, ROM program bellekli PIC'lere para numaras verirken "CR" (PIC16CR62, PIC16CR84 gibi) harfleri kullanlr.

PIC16F84
PIC16F84N PIN GRN BESLEME GERLM

CLOCK ULARI VE CLOCK OSLATR ETLER RESET UCU VE RESET DEVRES I/O PORTLARI PIC16F84N BELLE

PIC 16F84N PIN GRN

CMOS teknolojisi ile retilmi olan PIC16F84 ok az enerji harcar. Flash bellee sahip olmas nedeniyle clock giriine uygulanan sinyal kesildiinde registerleri ierisindeki veri aynen kalr. Clock sinyali tekrar verildiinde PIC ierisindeki program kald yerden itibaren almaya balar. RAO-RA3 pinleri ve RBO-RB7 pinleri I/O portlandr. Bu portlardan girilen dijital sinyaller vastasyla PIC ierisinde alan programa veri girilmi olur. Program verileri deerlendirerek portlar kullanmak suretiyle d ortama dijital sinyaller gnderir. D ortama gnderilen bu sinyallerin akm yeterli olmad durumda ykselte devreleri (rle, transistr v.s) ile ykseltilerek kumanda edilecek cihaza uygulanr. Portlarn maksimum sink ve source akmlan aada verilmitir. Bu akmlar genellikle bir LED srmek iin yeterli olduundan, bu kitapta verilen uygulama devrelerinde herhangi bir ykseltme ilemi yaplmamtr. I/O pini Sink akm Source akm 25 mA 20 mA

Hatrlatma amacyla sink ve source akmlarnn ne olduudan bahsedelim. Sink akm, gerilim kaynandan k potuna doru akan akma, source akm ise 1/0 pininden GND ucuna doru akan akma denir.

PIC16F84'n ektii akm, besleme gerilimine, clock giriine uygulanan sinyalin frekansna ve l/O pinlerindeki yke bal olarak deiir. Tipik olarak 4 MHz'lik clock frekansnda ektii akm 2 mA' kadardr. Bu akm uyuma modunda (Sleep mode) yaklak olarak 40 ^A' e der. Bilindii gibi CMOS entegrelerdeki giri ular muhakkak bir yere balanr. Bu nedenle kullanlmayan tm giriler besleme geriliminin +5V luk ucuna balanmaldr. PIC16C84 ve PIC16F84 zellikleri tamamen ayns olan PIC'lerdir. Her ikisi de FLASH bellee sahip olmalarna ramen Microchip ilk rettii EEPROM bellekli PIC'ler "C" harfi (C harfi CMOS'dan gelmektedir.) ile tanmlarken, son zamanlarda rettii EEPROM bellekli PIC'leri "F" harfi (FLASH) ile tanmlamaktadr. Bizim bu kitapta rneklerini verdiimiz programlar iin her iki PIC de kullanlabilir. PIC16F84A ile PIC16F84 arasnda da herhangi bir fark yoktur. PIC'i tanmlayan bu harf ve rakamlardan sonra yazlan 10/P, 04/P clock giriine uygulanacak maksimum frekans belirtir. rnein 10 MHz'e kadar frekanslarda PIC16F84-10/P kullanlrken, 4 MHz'e kadar frekanslarda PIC16F84-04/P kullanlabilir.

BESLEME GERLM
PIC'in besleme gerilimi 5 ve 14 numaral pinlerden uygulanr. 5 numaral Vdd ucu +5 V'a, 14 numaral Vss ucu da topraa balanr. PIC'e ilk defa enerji verildii anda meydana gelebilecek gerilim dalgalanmalar nedeniyle istenmeyen arzalar nlemek amacyla Vdd ile Vss arasna 0.1 F lk bir dekuplaj kondansatr balamak gerekir. PIC'ler CMOS teknolojisi ile retildiklerinden ok geni besleme gerilimi aralnda (2 ~ 6 V) almalarna ramen 5 V luk gerilim deneyler iin ideal bir deerdir.

CLOCK ULARI ve CLOCK OSLATR ETLER


PIC belleinde bulunan program komutlarnn altrlmas iin bir kare dalga sinyale ihtiya vardr. Bu sinyale clock sinyali denilir ve Trke'de "klok" olarak okunur. PlC16F84'n clock sinyal girii iin kullanlan iki ucu vardr. Bunlar OSC1(16 pin) ve OSC2 (15.pm) ulardr. Bu ulara farkl tipte osilatrlerden elde edilen clock sinyalleri uygulanabilir. Clock osilatr tipleri unlardr: RC - Diren/kondansatr (Resistor/Capacitor). XT - Kristal veya seramik resonatr (Xtal). HS - Yksek hzl kristal veya seramik resonatr (High Speed ). LP - Dk frekansl kristal (Low Power). Seilecek olan osilatr tipi PIC'in kontrol ettii devrenin hz gereksinimine bal olarak seilir. Aadaki tablo hangi osilatr tipinin hangi frekans snrlar ierisinde kullanlabileceini gsterir. Osilatr tipi RC LP XT HS (-04) HS (-10) HS (-20) Frekans snr 0 4 MHz 5 200 KHz 100 KHz 4 MHz 4 MHz 4 10 MHz 4 20 MHz

PIC'e balanan clock osilatrnn tipi programlama esnasnda PIC ierisinde bulunan konfigrasyon bitlerine yazlmaldr. Osilatr tipini belirten kodlar (RC, XT, HS ve LP) kullanarak konfigrasyon bitlerinin nasl yazlaca programlama rnekleri verilirken detayl olarak incelenecektir. RC clock osilatr, PIC'in kontrol ettii elektronik devredeki zamanlamann ok hassas olmas gerekmedii durumda kullanlr. Belirlenen deerden yaklak %20 sapma gsterebilirler. Bir diren ve kondansatrden oluan bu osilatrn maliyeti olduka dktr. OSC1 ucundan uygulanan clock frekans R ve C deerlerine baldr. ekilde RC osilatrn clock giriine balan ve eitli R, C deerlerinde elde edilen osilatr frekanslar rnek olarak verilmitir.

R 10 K 10 K 10 K

C 20 pF 220 pF 0,1 F

fOSC (yaklak) 625 KHz 80 KHz 85 KHz

RC osilatrn PICe balants ve rnek R, C deerleri


OSC1 ucundan uygulanan harici clock frekansnn 1/4' OSC2 ucunda grlr. Bu clock frekans istenirse devrede kullanlan dier bir eleman srmek iin kullanlabilir. Kristal kontroll clock osilatrleri zamanlamann ok hassas olmas gerektiinde kullanlr. Bu tip clock osilatrleri metal bir kutu grnmndedir ve ekilde grlmektedir. Bu tip osilatrlere kondansatr balants gerekmez. PIC assembly programlama dili ile yazlan zaman geciktirme (Time delay) dnglerinde yaplacak hesaplamalar kolaylatrmak iin genellikle 4 MHz'lik kristal clock osilatrleri kullanlmas tavsiye edilir. Bu durumda harici clock frekans (OSC1) 4'e blndnde, dahili clock frekans 1 MHz olur (OSC2). ou PIC assembly komutu bir komut saykl sresinde (dahili clock) altndan, bir komutun ilevini gerekletirme sresi 1 mikro saniye olur. Bu sre ise deneysel almalar iin olduka uygundur.

Kristal ve kondansatr kullanlarak yaplan osilatrler de zamanlamann nemli olduu yerlerde kullanlr. Kristal osilatrlerin kullanld devrelerde kristale balanacak kondansatrn seimine zen gstermek gerekr. Aada hangi frekansta ka (F lk kondansatr kullanlacan gsteren tablo grlmektedir.
OSLATR TP LP FREKANS 32 KHz 200 KHz 100 KHz XT 500 KHz 1 MHz 2 MHz 4 MHz KONDANSATR 33 68 pF 15 47 pF 47 100 pF 20 68 pF 15 68 pF 15 47 pF 15 33 pF

HS

8 MHz 20 MHz

15 47 pF 15 47 pF

Seilen kondansatr deerlerinin yukardaki deerlerden yksek olmas, elde edilen kare dalgalarn bozuk olmasna ve PIC'in almamasna neden olur. C1 ve C2 kondansatrlerin deerleri birbirine eit olmaldr.

Seramik resonatrler, ierisinde kondansatrleri hazr bulunan osilatrlerdir. Fiyatlar ucuz ve hassastrlar (+/- %1.3 ). Kk bir seramik kondansatre benzeyen resonatrlerin ucu vardr. Bu ulardan ortadaki topraa, dier iki ucu da OSC1 ve OSC2 ularna balanrlar. Hangi ucun OSC1'e balanaca nemli deildir, her ikisi de balanabilir.

RESET ULARI VE RESET DEVRES


PIC16F84'n besleme ularna gerilim uyguland anda bellekteki programn balang adresinden itibaren almasn salayan bir reset devresi vardr. Bu reset devresi PIC ierisindedir ve "Power-on-reset" denir. MCLR ucu ise kullancnn program kesip, kasti olarak balangca dndrebilmesi iin kullanlr. PIC'in 4 numaral MCLR ucuna uygulanan gerilim 0 V olunca programn almas balang adresine dner. Programn ilk adresten itibaren tekrar alabilmesi iin reset ucuna uygulanan gerilimin +5 V olmas gerekir. Bir buton aracl ile reset ilemini yapan devre ekilde grlmektedir.

I/O PORTLARI
PIC16F84'n 13 adet giri/k portu vardr. Bunlardan 5 tanesine A portu (RAO-RA4), 8 tanesine de B portu (RBORB7) denir. 13 portun her biri giri ya da k olarak kullanlabilir. PIC ierisinde adna TRIS denilen zel bir data ynlendirme registeri vardr. Bu register aracl ile portlarn giri/k ynlendirmesinin nasl yaplaca hakknda detayl bilgiyi programlama konusunda bulacaksnz. I/O portlarndan geebilecek 25 mA lik bir sink akm veya 20 mA lik source akm LED'leri dorudan srebilir. Bu akmlar ayn zamanda LCD, lojik entegre ve hatta 220 V luk ehir ebekesine bal bir lambay kontrol eden triyak bile tetiklemeye yeterlidir. k akm yetmedii durumda ykselte devreleri kullanarak daha yksek akmlara kumanda etmek mmkn olabilir.

B portunun 8 ucu, PIC ierisinde dahili olarak 50 KQ luk direnlerle pull-up yaplm gb etk gsterir. Bu durum ekilde temsili olarak grlmektedir PIC'in ierisinde gerekte bir pull-up direnci deil, farkl bir mantksal devre vardr.

Bu 8 pull-up direncinin tamam option register ierisindeki yazlm aracyla iptal (Disable) edilebilir veya geerli (Enable) klnabilir. Port ularndan herhangi birisi k olarak ynlendirildiinde o utaki pull-up direnci otomatik olarak iptal olur. PIC'e enerji verildiinde (Power-on-reset) ise tm pull-up'lar iptal edilir A portunun 4. biti, TOCKI ad verilen harici timer/counter giri ucu ile ortaklaa kullanlr. Bu nedenle 16F84'n pin grn zerinde 3 numaral pin ucuna RA4/TOCKI yazlmtr. RA4 ucu k otarak ynlendirildiinde ak kollektr ozellgnden dolay harici olarak muhakkak bir pull-up direncine balanmaldr RA4 ucundan sadece sink akm geebilir, kaynak (source) akm vermesi mmkn deildir.

PIC16F84'N BELLE
PIC16F84 mikrodenetleyicisinin bellei, program ve RAM bellei olmak zere iki ayr bellek bloundan oluur. Microchip'in kataloglarnda PIC denetleyicilerin RISC ilemci olarak tantlmasnn nedeni de budur. nk Harvard Mimarisi ile retilen RISC ilemcilerde program bellei ile data bellei birbirinden ayndr. Oysa PC'lerde kullanlan ou

mikroilemci mimarisinde byle bir ayrm yoktur. Bu da demektir ki; burada ayrntsna girmeye gerek grmediimiz nedenlerden dolay mikroilemciler, mikrodenetleyicilere gre komut ilemede daha yavatrlar.

Program Bellei
PIC16F84'n 1 Kbyte'lk program bellei vardr. Her bir bellek hcresi ierisine 14 bit uzunluundaki program komutlar saklanr. Program bellei flash (elektriksel olarak yazlp silinebilir.) olmasna ramen, programn almas esnasnda sadece okunabilir.

PIC16F84'n program bellei ierisinde sadece assembly komutlar saklanr. Bu komutlar dnda RETLW komutu ile birlikte kullanlan snrl miktarda data da yklenilebilir. NOT: Yukarda PIC16F84'n program bellek haritasndaki adresler gsterilirken sol tarafta heksadesimal notasyon kullanlmtr. PIC programlama esnasnda da bellek adresleri bu ekilde yazlr. 0xXX heksadesimal notasyonunda X'ler 0~F arasndaki herhangi bir sayy, "0x" ise bu saylarn heksadesimal olduunu belirtir. rnein 0x0F, heksadesimal OF says demektir. 0x3FF ise 3FF heksadesimal saysn gsterir. PIC16F84'n program belleine 14 bit uzunluunda toplam 1024 tane komut yazlabilir. Bellek haritasnda son bellek adresinin 0x3FF=1023 gsterilmesinin nedeni, adresin 0'dan balamasndandr. Adres 1'den balasayd son adres 0x400=1024 olacakt.

RAM Bellek
PIC16F84'n 0x00~0x4F adres aralnda ayrlm olan RAM bellei vardr. Bu bellek ierisindeki file registerleri ierisine yerletirilen veriler PIC CPU'sunun almasn kontrol ederler. File registerlerin bellek uzunluu 8 bit'tir. Sadece PCLATH registeri 5 bit uzunluundadr. File register ad verilen zel veri alanlarnn dnda kalan dier bellek alanlar, normal RAM bellek olarak kullanlrlar. Yani bu alanlarda programda ierisindeki deikenler iin kullanlr.

PIC16F84'n RAM bellei iki sayfadan (Bank'tan) meydana gelir. Bank0'daki registerlerin adresleri 0x00~0x4F arasnda, bank1'deki registerlerin adresleri de 0x80~0xCF arasndadr. Toplam 80 tane file register olmasna ramen programlamaya yeni balayanlar bank1'de 80, bank 2'de 80 olmak zere 160 register alan olduunu sanrlar. Oysa, dikkat edilirse baz zel amal registerler her iki bank'ta da grlr. rnein PCL, STATUS, PCLATH, INTCON gibi. Ayrca 0x0C adresinden sonra RAM (data bellei) olarak kullanlan blgedeki veriler 0x8C adresinden itibaren glgelendirilmitir(shadowed). Glgeleme, otomatik kopyalama ilemi olarak alglandnda anlalmas daha kolay olacaktr. rnekle izah edecek olursak: 0x8C adresine yazlan bir veri 0x00 adresinde de grlr. te bu sebeplerden dolay 160 deil toplam 80 file register alan vardr. Bir bank'taki registeri kullanabilmek iin o bank'a gemek gerekir. Bank deitirme ilemi programlama rnekleri verilirken detayl olarak ilenecektir. Yalnz burada bir eyden daha bahsetmek gerekir. Baz zel registerlerin her iki bank'ta da grlmesinin nedeni, bank deitirme ilemine gerek duyulmakszn kullanlabilmesi iindir. NOT: File register haritas zerinde adresleri verilmi olan zel registerlerin ilevini ve nasl kullanldn bu aamada anlamaya almanz yararsz olacaktr. Programlama rnekleri verilirken ok daha kolay anlayacanz dnceyim.

W register
PIC16F84'n RAM bellek alannda grlmeyen bir de W registeri vardr. W register bir akmlatr veya geici depolama alan olarak dnlebilir. W registerine direkt olarak ulamak mmkn deildir. Ancak dier registerlerin ierisindeki verileri aktarrken erimek mmkndr. Bir PIC'te gerekleen tm aritmetik ilemler ve atama ilemleri iin W register kullanma zorunluluu vardr. rnein iki register iindeki veriler toplanmak istendiinde, ilk olarak registerlerden birinin ierii W registere aktarlr. Daha sonra da dier registerin ierisindeki veri W registeri ierindekiyle toplanr. Bu registerin kullanm zellikleri yine programlama konusunda detayl olarak ele alnacaktr.

PIC ASSEMBLY
ASSEMBLER NEDR? PIC ASSEMBLY DL NEDR? PIC ASSEMBLY DILI YAZIM KURALLARI PIC ASSEMBLY KONUTLARININ YAZILI BM SAYI VE KARAKTERLERN YAZILI BM PIC ASSEMBLY KOMUTLARI

ASSEMBLER NEDR?
Assembler, bir text editrnde assembly dili kurallarna gre yazlm olan komutlar PIC'in anlayabilecei hexadesimal kodlara eviren (derleyen) bir programdr. Microchip firmasnn hazrlad MPASM bu ii yapan assembler programdr. Assembler'e ou zaman compilerde (derleyici) denilir.

PIC ASSEMBLY DL NEDR?


Assembly dili, bir PIC'e yaptrlmas istenen ilerin belirli kurallara gre yazlm komutlar dizisidir. Assembly dili komutlar ngilizce dilindeki baz ksaltmalardan meydana gelir. Bu ksaltmalar genellikle bir komutun almasn ifade eden cmlenin ba harflerinden oluur. Bylece elde edilen komut, bellekte tutulmas kolay (mnemonic) bir hale getirilmitir. rnein: BTFSC (Bit Test F Skip if Clear) - File registerdeki bit'i test et, eer sfrsa bir sonraki komutu atla, anlamnda kullanlan ingilizce cmlenin ksaltmasdr.

PIC ASSEMBLY DL YAZIM KURALLARI


PIC assembly programlarnn yazlmas iin kullanlan text editrlerinden l.blmde bahsetmitik. Bu editrler Windows altnda alan NOTPAD veya DOS altnda alan EDIT en uygunlardr. Bunlarn dnda printer kontrol komutlar iermeyen ve ASCII kodunda dosya retebilen herhangi bir editr de kullanlabilir. MPLAB kullanldnda ayrca bir editr kullanmaya gerek yoktur. nk MPLAB'n iinde hem bir text editr hem de MPASM bulunmaktadr. MPASM assembler programnn yazlan komutlar doru olarak alglayp, PIC'in anlayabilecei heksadesimal kodlara dntrebilmesi iin u bilgiler program iinde zel formatta yazlmas gerekir:

Komutlarn hangi PIC16XX iin yazld, Programn bellekteki hangi adresten balayaca, Komutlarn ve etiketlerin neler olduu, Programn biti yeri,

Basit bir rnekle bu bilgilerin program iinde nasl yazldn gsterelim. Program ilk olarak PIC16F84'e B portunun 8 ucunu da k olarak tantacak. Daha sonra bu porttaki ilk drt bitini lojik 1, sonraki drt bitini de lojik 0 yapacak. Son olarak program sonsuz bir dngye girecektir. Bu ilemleri yapacak olan programn ak diyagram ve komutlar aadaki gibi olacaktr.

;-----PICTEST1.ASM-------------

--------------10/3/2000 -------------

LIST P=16F84 ;---------------------------------------------------------------------------------; Adres tanmlama Blou STATUS EQU 0x03 PORTB EQU 0x06 TRISB EQU 0x86 ;---------------------------------------------------------------------------------ORG 0x00 ;program 0x00dan balat. ;---------------------------------------------------------------------------------; portlarn durumunu belirleme blou START CLRF PORTB ; port Bnin iini sfrla BSF STATUS,5 ; BANK1e ge CLRF TRISB ; port Bnin ularn output yap BCF STATUS,5 ; tekrar BANK0a ge

;---------------------------------------------------------------------------------; program blou MOVLW 0x0F ; W registerine 0x0Fi ykle MOVWF PORTB ; Wyi port Bye ykle ;---------------------------------------------------------------------------------; sonlandrma blou DONGU GOTO DONGU END ;----------------------------------------------------------------------------------

Noktal Virgl (;)


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

Girintiler ve Program Blmleri


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

Assembler, yukarda belirtildii gibi komutlarn kolona blnerek yazlm olduunu varsayar. Belirtilen kolona yazlmayan bir komut olduunda ise bunu da kabul eder. Ancak, hexadesimal kodlara dntrme (Compile) esnasnda hatalar bir uyar (Warning) olarak belirtir. Assembly komutlar yazlrken kolonlar arasnda verilen TAB'larn uzunluu nemli deildir. SPACE tuu ile verilen aralk da assembler tarafndan TAB olarak alglanr. Yukarda verdiimiz rnek, programlamaya yeni balayanlar iin karmak gelebilir. Ancak, uzun ve zor programlar yazmaya baladktan sonra aklamalar yaplm, blmlere ayrlm pic pogramlarnn daha kullanl olduu grlr. nk programlar bu ekilde yazldnda daha sonraki gelitirmelere aktr. Aradan zaman gese bile bir program gelitirmek iin tekrar ele aldnzda, program ierisine yazlan aklamalar ihtiyacnz olan hatrlatmalar yapacaktr. imdi de verdiimiz ayn rnei, her iki yazm biimi arasndaki tercihi kendiniz yapabilmeniz iin blmler arasna boluk vermeden, aklamalar silerek sadece kolon halinde yeniden yazalm. STATUS LIST EQU P=16F84 0x03

PORTB TRISB START

EQU EQU ORG

0x06 0x86 0x00

CLRF PORTB BSF STATUS,5 CLRF TRISB BCF STATUS,5 MOVLW 0x0F MOVWF PORTB DONGU GOTO END DONGU

Balk
Programn en bandaki bilgilere balk blm denilir. ========== PICTEST1.ASM =====================10/03/2000====== LIST P=16F84 Balk blmnde program dosyasnn ad ve hazrland tarih, istenirse hazrlayann ad da yazlabilir. lk satr, bir aklama satrdr ve assembler tarafndan derlenmez. LIST P=16F84 satr, programn hangi PIC iin yazldn belirtir. LIST bir compiler bildirisidir. Yani compiler'i ynlendiren bir komuttur ve yegane kullan amac yeri burasdr. Balk blmnde ayrca verdiimiz rnekte kullanlmayan NCLUDE komutu da kullanlabilir. NCLUDE komutu adresleri sabit olan STATUS, PORTA, PORTB, TRISA, TRISB gibi zel registerlerin "atamalar" blounda adreslerini her defasnda belirtme zorunluluunu ortadan kaldrmak iin kullanlan bir compiler bildirisidir. Bu bildirinin kullanl ilerdeki program rneklerinde daha detayl olarak verilecektir. Bu kitaptaki tm program rnekleri verilirken yukardaki rnekte verdiimiz bala benzer bir balk kullanlacaktr.

Etiketler
PIC belleindeki bir adresin atand, hatrlamay kolaylatran ksaltmalardan meydana gelen sembolik isimlere etiket denilir. rnein PORTB etiketi, PIC16F84'n file register belleindeki B portunun bulunduu adresi temsil eden etikettir. Etiketler program ierisinde 1. kolona yazlr. PORTB EQU 0x06 ifadesi program ierisinde yazldktan sonra B portunun hangi adreste olduunu aklda tutmaya gerek yoktur. EQU (eitleme) ifadesidir. Bu ifade BASIC programlama dilindeki (=), PASCAL programlama dilindeki (:=) ifade ile ayn anlamdadr. Programn herhangi bir yerinde PORTB etiketi kullanldnda, B portunun adresi olan 0x06 yazlm gibi ilem grr. Birinci kolona yazlan ve adres atanmayan etiketler de kullanlabilir. rnein START ve DONGU bu tip etiketlerdir. Bu etiketler program akn istenilen bir yere dallanmasn salamak amacyla kullanlr. Program ak yukardan aaya doru devam ederken GOTO DONGU komutu ile, ak DONGU yazlan etikete dallandrlr. Bu etiketin adresi bir zel register adresi gibi fiziksel bir adres deildir. Bu ekilde tanmlanan bir etikete assembler otomatik olarak bir adres atar. Bu adresi bizim bilmemiz gerekmez. Etiket tanmlarken uyulmas gereken kurallar unlardr: Etiketler 1. kolona yazlmaldr. Etiketler bir harfle veya alt izgi( _) ile balamaldr. Etiketler ierisinde Trke karakterler kullanlamaz. Etiketler bir assembly komutundan oluamaz. Etiketlerin ierisinde alt izgi, rakam, soru iareti bulunabilir. Etiketler en fazla 31 karakter uzunluunda olabilir. Etiketlerde byk/kk harf duyarll vardr. ("Dng" olarak tanmlanm bir etiketi program ierisinde "dng" yazarak kullanlamaz.)

Atama deyimi (EQU)


EQU deyimi PIC16F84'n belleindeki bir hexadesimal adresi belirlenen bir etikete atamak iin kullanlr. Aada atama deyimine birrnek gsterilmitir.

Sabitler
PIC assembly dilinde heksadesimal saylar birer sabittir, Sabitler MOVLW ve baz mantksal ve aritmetik ilem komutlarnda kullanlrlar.

ORG Deyimi
ORG ingilizcedeki "origin" kelimesinden gelmektedir. ORG deyimi iki ama iin kullanlr.

Program komutlarnn hangi adresten itibaren baladn gsterir. PIC16F84'n Interrupt alt programlarnn balang adresini belirlemede kullanlr.

Sonlandrma Blou
PIC16F84'n duraklama (halt) komutu yoktur. Program belirli bir yerde duraklatmak iin bazen sonsuz dng kullanlr.

DONGU GOTO DONGU END


Yukardaki sonsuz dngde DONGU etiketine assembler otomatik olarak bir adres verir. GOTO DONGU komutu ise program akn devaml olarak ayn adrese gnderir. Bu durumda program belirlenen adreste duraklatlm olur. END deyimi ise program komutlarnn sona erdiini assembler'a bildirir. Her program sonunda END deyimi muhakkak kullanlmaldr. Aksi halde program devam derlenirken dosya sonunun belirtilmediini belirten bir hata mesaj verecektir.

Byk ve Kk Harflerin Kullanm


PIC assembler komutlarnn byk veya kk harfle yazlmas nemli deildir. stenirse byk/kk harf karm komutlarda kullanlabilir. rnein Movlw, movlw, MOVLW komutlar arasnda hibir fark yoktur. Ancak etiketler byk/kk harf duyarldr. Start ile START birbirinin ayns deildir. Herhangi bir karkla neden olmamas iin hep byk veya hep kk harf kullanmak en iyi seimdir.

PIC ASSEMBLY KOMUTLARININ YAZILI BM


PIC16F84'n toplam 35 tane komutu vardr. Bu komutlarn yazl biimini grupta toplayabiliriz. 1. Byte-ynlendirmeli komutlar. 2. Bit-ynlendirmeli komutlar. 3. Sabit ileyen komutlar. 4. Kontrol komutlar. Komutlarn yazl biimlerini aklarken baz tanmlama harfleri kullanacaz. nce bu harflerin anlamlarn verelim: f = File register d = destination (gnderilen yer) d=0W register d=1file register k = Sabit veya adres etiketi b = Bit tanmlayc b = Binary saylar belirleyen harf (rnein b'00001111' gibi) d = Desimal saylar belirleyen harf (rnein d'16' gibi)

Byte-Ynlendirmeli Komutlar

rnek:

MOVF 0x03, 0 MOVF STATUS , 0 MOVF STATUS ,1

;0x03 adresindeki file registerin ieriini W registeri ierisine kopyalanr.

;STATUS registerin ierii W registere kopyalanr.


; STATUS registerinin ierii yine kendi iine yazlr.

NOT: Byte-ynlendirmeli komutlarda destination (gnderilecek'' yer) belirleyen d'nin yazld yere 0 veya 1 yazmak hatrlatc olmayabilir. MPASM bunu dikkate alarak 0 yerine w, 1 yerine f yazmaya izin verir. MPASM'nin MS-DOS versiyonunda ise w ve f harflerinin otomatik olarak kullanlmasna izin verilmez. Bu durumda her programn tanmlama blmnde aadaki eitlikler yazlmaldr.

W EQU 0 F EQU 1
Bu eitliklerden sonra komutlarda destination belirlemek iin w ve f harfleri kullanlabilir. rnein:

INCF, INCF,

w f

; SAY registerinin ierii 1 arttrldktan sonra sonu W registerine yazlr.(W=SAY+1) ; SAY registerinin ierii 1 arttrldktan sonra sonu yine SAY registeri iine yazlr.

(SAY=SAY+1)

Bit-Ynlendirmeli Komutlar

rnek: BCF 0x03, 5

; 0x03 adresindeki registerin 5. bitini sfrla BSF STATUS, BESBIT ;STATUS registerinin BESBIT etiketiyle tanml olan bitini "1" yapar. (Tanmlama

blounda BESBIT EQU 5 yazlmas gerekir.)

Sabit leyen Komutlar

rnek: MOVLW 0x2F

ADDLW b00101111

;W registerine 2F heksadesimal saysn ykler. ;W registeri ierisindeki sayya 00101111 binary saysn ekler.

Kontrol Komutlar

rnek: GOTO DONGU

CALL TIMER

;Program ak DONGU olarak belirlenen etikete dallanr. ; Program ak TIMER etiketi ile belirlenen adresteki alt programa dallanr.

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

SAYI VE KARAKTERLERN YAZILI BM


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

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

STATUS

EQU EQU EQU EQU EQU

0X03 3 03 03h h03 0xFF

(Bu kitapta rneklerde kullanlacak biim)

MOVLW komutu ile W registeri ierisine yklenecek olan FF heksadesimal sabitler ise aadaki gibi yazlabilir.

MOVLW hFF

Eer FF heksadesimal saysn aadaki gibi kullanmaya kalkarsanz almaz

MOVLW FP FFh
nk kural olarak heksadesimal saylar muhakkak "0" veya "h" harfi ile balamaldr.

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

MOVLW b00001010 ANDLM b00001111

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

MOVLW MOVLW

d15 d255

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

RETLW RETLW

A T

PIC ASSEMBLY KOMUTLARI


Yer Deitirme veya Ykleme Komutlar
Komut ve rnek MOVLW k MOVLW h 0F' MOVF f,d MOVF TEST,0 MOVMF f MOVWF PORTA Move W to f Move f ngilizce tanm Move Literal to W Trke aklamas K sabit deerini W registerine ykler. W<-OP f registerinin ieriini W veya fe ykler. d=0 WTEST d=1 TESTTEST W registerin ieriini f registerine ykler. PORTAW

Register eriini Deitirme Komutlar


CLRF CLRF CLRW CLRW COMF COMF F,d SAY, 0 Complement f F TRISA Clear W Clear f f registerinin ieriini siler (sfrlar). TRISA00000000 W registerin ieriini siler (sfrlar). W00000000 F registerinin iindeki say terslenir. Yani tm 1'ler 0, 0'lar 1 olur. Sonu W veya f registerine yklenir. SAY= 0011011 ise, d=0 d=1 olsayd DECF f,d Decrement f W11001010 SAY11001010

F registerinin ierisindeki sayy "1" eksiltir. Registerin ierii h'00' ise, "1" eksiltildiinde h'FF' olur. Sonu W veya f registerine yazlr. GIT=h' 2C" ise 2C-1=2B d=1 d=0 olsayd GIT2B W2B

DECF

GIT,1

INCF

f,d

Increment f

F registerinin ierisindeki sayy "1" artrr. Registerin ierii h' FF' ise, "1" arttrldnda h' 00' olur. Sonu W

veya f registerine yazlr. INCF GIT, 0 GIT=h' 2C' ise 2C+1=2D d=0 d=1 olsayd BCF BCF BSF BSF RLF f,b PORTB,5 f,b PORTA,3 f,d Rotate Left f Bit Set f Bit Clear f W2D GIT2D

f registerinin ierisindeki saynn b.ninci bitini sfrlar. PORTB = b'11111111' ise, PORTBb' 11011111 F registerinin ierisinde saynn b.ninci bitini 1 yapar. PORTA = b 00000000' ise, PORTAb' 00001000 f registeri ierisindeki sayy bir pozisyon sola kaydrr. Registerden taarak Carry bayrana yazlan bit, LSB'ye yazlr. Sonu W veya f registerine yklenir.

RLF

KAY,0

RRF

F,d

Rotate Right f

F registeri iersindeki sayy bir pozisyon saa kaydrr. Registerden taarak Carry bayrana yazlan bit, MSB'ye yazlr. Sonu W veya f registerine yklenir.

RKF

KAY,1

SWAPF SWAPF

f,d DEG,1

Swap nibbles inf

f registerinin ierisindeki ilk drt bit ile son drt biti yer deitirir. Sonu W veya f registerine yklenir. DEG = b' 00101111' ise, d=1 olduundan d=0 olsayd DEG11110010 W11110010

Program Akn Kontrol Etme Komutlar


GOTO GOTO CALL CALL k DOMGU k TIMER Call subroutine Go to address Program ak k adresine dallanr. Program, DNG etiketinin yazld yere dallanr ve buradan itibaren devam eder. Program ak k etiketinin bulunduu yerdeki alt programa dallanr. Program TIMER etiketinin yazld alt program satrlarnn balangcna dallanr ve buradan itibaren devam eder. Return from subrouitine Return with Literal in W H'2F' Return From Interrupt f,b PORTA,2 Bit Test F, Skip if Clear Alt program komutlarnn en sonuna yazlan bu komut, program akn ana programa geri dndrr. Program akn alt programdan ana programa dndrr ve W registerine k sabitini ykler. Alt programdan ana programa dndrr ve W registerine 2F yklenir. Program akn interrupt alt programndan ana programa dndrr. F registerinin b.inci bit'ini test eder. Eer bu bit "0"sa program ak bir sonraki komuta geer.

KETRN RETLW RETLW RETFIE BTFSC BTFSC

BTFSS BTFSS

f,b PORTA,0

Bit Test F, Skip if Set

F registerinin b.inci bit'ini test eder. Eer bu bit "1"se program ak bir sonraki komuta geer.

DECFSZ DECFSZ

f,d SAYAC,!

Decrement f, Skip if Zero

F registerinin ieriini "1" azaltr. Register ierii 0'sa bir sonraki komuta atlar. Sonu W veya f registere yazlr. SAYAC=h' 2F ise 2F-1=2E d=0 olsayd Wh' 2E d=1 olduundan SAYACh'2E'

INCFSZ INCFSZ

F,d SAYAC, 1

Increment f, Skip if Zero

F registerinin ieriini "1" arttrr. register ierii "0"sa bir sonraki komuta atlar. Sonu W veya f registere yazlr. SAYAC=h' 2F ise 2F+1=30 d=1 d=0 SAYACh' 30' Wh'30"

Mikrodenetleyici Kontrol Komutlar


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

Mantksal Komutlar
ANDLW ANDLW K b 0110001' AND Literal with W W registerin ierii ile k sabitine AND ilemini uygular. Sonu W registerine yazlr. W = b' 10011101' ise, b' 00110001' sabitin deeri b 00010001' AND ilemi sonucu Wb 00010001' ANDWF f,d AND W with f W registeri ile file register ieriine AND ilemini uygular. Sonu W veya f registerine yazlr. W=b' 11111111' ise, TEST=b11011110 ise, b' 11011110' AND ilemi sonucu d=0 ise d=1 olduundan IORLW IORLW k B-00101000Inclusive OR Literal with W Wb' 11011110' TESTb' 11011110

ANDWF

TEST,1

W registerin ierii ile k sabitine OR ilemini uygular. Sonu W registerine yazlr. W =b' 10000100' ise b' 00101000' sabitin deeri b' 10101100' OR sonucu , W b' 10101100

IORWF

f,d

W registeri ierii ile file registerin ieriine OR ilemini uygular. Sonu W veya f registerine yazlr.

IORWF

TEST,1

W = b' 10000100" ise, TEST = b' 00101000 ise, b' 10101100 OR sonucu d=0 ise d=1 olursa Wb' 10101100" TESTb 0101100 '

XORLW XORLW

k b' 00101000

Exclusive OR Literal withW

W registerin ierii ile k sabitine XOR ilemini uygular. Sonu W registerine yazlr. W = b 00000000 ise b' 00101000 sabitin deeri b' 11010111" XOR sonucu Wb' 11010111'

XORWF<" XORWF

P.S- .. . TEST,1

Exclusive OR W with f

W register ile file register ieriine XOR ilemini uygular. Sonu W veya f registerine yazlr. W = b' 00000000' ise, TEST = b' 00101000' ise, b' 11010111" XOR sonucu d=0 ise d=1 olursa Wb' 11010111" TESTb' 1101011'l'

Aritmetik lem Komutlar


ADDWF ADDWF f,d TOPLA,0 Add W with f W registerinin ieriini f registeri ile toplar. Sonu W veya f registerine yazlr. W=h' 2A' ise, TOPLA=h ' 31' ise, h' 2A'+h' 31'=b' 5B' d=1 ise d=0 olduundan ADDLW ADDLW SUBLN SUBLW k H' 2F' k H' 90' Add Literal andW TOPLAh' 5B' Wh' 5B'

W registerinin ieriini k sabit deeri ile toplar. Sonu W registerine yazlr. W=h' B0 ise, h' B0'+h' 2F'=h' DF' Wh' DF'

Subtract W from Literal K sabit deerinden W registeri ieriini karr. Sonu W registerine yazlr. W=h' 83 ise h' 90'-h' 83' = h' 07 Wh' 07

SUBWF SUBWF

f,d CIK,1

Subtract W from file register

f registerinin ieriinden W registerinin ieriini karr. Sonu W veya f registerine yazlr. W=h' 83' ise, CIK=h' 90' ise, h' 90'-h' 83'=h' 07 d=0 ise d=1 olduundan Wh' 07 CIKh07'

lem Yapmayan Komut


NOP No Operation Bir komut saykl sresince hibir ilem yapmayan bir komuttur. Bir dahili komut sresinde alr. Bu nedenle zaman geciktirme ilemlerinde kullanlr.

PIC PROGRAMLAMA
LK PROGRAMINIZ AKI DYAGRAMI SEMBOLLER AKI DYAGRAMININ ZLMES ASSEMBLY PROGRAM KOMUTLARININ YAZILMASI PROGRAMLARIN DERLENMES (MPASM) PROGRAMIN PICE YAZDIRILMASI PROGRAMLANMI PICN DENENMES MPASMNN RETT DER DOSYALAR INCLUDE DOSYALARI KONFGRASYON BTLERNN YAZILMASI

LK PROGRAMINIZ
Bu nitede, basit bir program ele alp, bunun ak diyagramnn nasl izildiini, program komutlarnn nasl yazlarak derlendiini daha sonra da bu programn PIC'e nasl yazldn gstereceiz.

Program, PIC'e enerji verince portB'nin 0. bit'ine bal olan bir LED'i direkt olarak yakacaktr. Programa balamadan nce kullanacamz zel file registerlerin adreslerini vereceiz. Daha sonra da STATUS registerini kullanarak bank deitirme ileminin nasl yapldn greceiz.

Yukarda grlen RAM haritasnda sadece bu programda kullanlacak olan zel registerler gsterilmitir. Dier registerlerin ne ie yarad ileriki programlarda sras geldiince verilecektir. 3. Blmde PIC16F84'n RAM'inden bahsedilirken RAM'in iki blmden (Bank0, Bank1) meydana geldiini sylemitik. RAM ierisindeki bir zel registerin kullanlabilmesi iin, o registerin bulunduu bank'a gemek gerektiinden de bahsetmitik. imdi bank deitirmenin nasl yapldn grelim.

Bank Deitirme
Bir bank'tan dier bank'a gemek iin STATUS register denilen zel registerin 5. ve 6. bit'inin durumunu deitirmek gerekir.

STATUS REGSTER

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

PIC16F84'n sadece 2 bank' bulunduundan, sadece 5. bit'in deerini deitirmek yeterlidir. 6. bit'in deeri daima "0" olmaldr. Zaten PIC'e enerji verildiinde (Power-on reset) 5. ve 6. bit'in deeri "0"dr. Bu bit'ler ayn zamanda dier reset girileri (MCLR ucundan yaplan harici reset ve Watchdog timer reset) yapldnda da "0" olur. Yani PIC'i altrmak iin

enerji verildiinde direkt olarak bank0 seilmi olur. Bu durumda bank deitirme ilemine gerek duyulmakszn bank0'daki registerler kullanlabilir. STATUS registerinin 5. bit'ini "1" yapmak iin BSF komutu, "0" yapmak iin de BCF komutu kullanlr. Aada bank deitirmek iin kullanlan komutlar grlmektedir.

BSF h'03', 5 Bank1 seilir. BCF h'03', 5 Bank0 seilir.


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

Bu sylediklerimizi bir rnek vererek ematik olarak gsterelim. rnein, PortA'nn 1. ve 2. bitleri giri, dier bitlerim k olarak ynlendirelim.

PortA'nn sadece 5 ucu bulunduundan, TRISA registerinin ilk 5 biti ierisine yazlan veriler PORTA'y ynlendirir. Dier bit'lerin 0 veya 1 olmasnn hibir nemi yoktur. PortB'nin 2, 3, 6. bitlerini giri dierlerini k olarak ynlendirmek iin de aadaki konfigrasyon yaplr.

AKI DYAGRAMl SEMBOLLER


Tm programlama dillerinde olduu gibi assembly dili programlarn yazmadan nce ak diyagram izmek iyi bir alkanlktr. Ksa programlarda, genellikle karar ilemlerinin olmad programlarda ou zaman ak program izmeye gerek duyulmaz. Ancak uzun ve karmak mantk ilemlerinin youn olduu programlar yazarken direkt olarak komutlar yazmaya balamak ksa bir sre sonra iinden klmaz hale getirebilir. Bu nedenle programlar yazmadan nce ak diyagramn izerek, komutlarn hangi sraya gre yazlacan grmek iin grsel bir dnme ortam yaratlm olunur. Programlama dillerinde ortak olarak kullanlan ak sembolleri vardr. Bu sembollerin neler olduunu ve nerelerde kullanlacan aada greceksiniz.

AKI DYAGRAMININ ZILMESI


lk programmz, PIC'e enerji verdiimizde PORTB'nin 0. bit'ine bal LED'i otomatik olarak yakacaktr. Buna gre ak diyagramn izelim.

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

ASSEMBLY PROGRAM KOMUTLARININ YAZILMASI


Ak diyagram izildikten sonra, ilemleri gerekletirecek olan assembly komutlar yazlr. Assembly komutlar ASCII kodunda dosya reten bir editrde hazrlanmas gerekir. Bu editrler, DOS altnda alan EDIT, VVINDOVVS altnda alan NOTPAD olabilir. Kullanmaya alk olduunuz herhangi bir editr de bu i iin uygundur. Biz bu kitapta PFE adl bir editr kullanacaz. Aada assembly komutlarnn editrde yazl' biimi grlmektedir.

;===DENEME.ASM====27/04/2000======= LIST P=16F84 ;PIC16F84 MPASMye tant CLRF h'06' ;PORTBye bal LEDleri sndr BSF h'03', 5 ;BANKle ge CLRF h'86' ;PORTBnin tm ularn k yap BCF h'03', 5 ;BANK0'a ge BSF h'06', 0 ;PORTB'nin 0.bitindeki LEDi yak END ;Program komutlarnn sonu
ilk programmzn komutlarn yazarken daha sonraki almalarnzda hatrlatc olmas iin yukarda grld gibi yanlarna aklamalar yazabilirsiniz. imdi bu program MPASM'yi kullanarak derlemeden nce, ayn program daha anlalr ve daha ksa yazl biimlerine bir gz atalm. Dikkat ederseniz komutlar yazarken kullandmz register ve portlarn RAM bellekteki adreslerini belirttik. rnein;

CLRF h'06"
PORTB'nin RAM bellekteki adresi

BSF

h'03", 5
STATUS registerin RAM bellekteki adresi

Registerlerin RAM'daki adreslerini kullanarak komutlar yazldnda, komutun hangi registeri kullandn ilk bakta anlamak zordur. Bu durumda tm registerlerin adreslerini ezbere bilmek zorunluluunu getirmektedir. Halbuki atama deyimi (EQU) kullanarak registerleri nceden tantmak daha anlalr komutlar yazmay salayacaktr.

Atama (EQU) Komutu Kullanarak Program Yazmak


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

NOT: Hazrladnz DENEME.ASM kaynak dosyasn hangi klasre kaydedeceiniz bazen nemli olabilir. rnein, bizim bu kitaptaki programlar PIC'e yazdrmak iin kullandmz P16PRO program ".HEX" uzantl programlar sadece belirli bir klasrden ykleyebilir. Bu klasr de P16PRO.EXE programnn bulunduu klasrdr. MPASM ise kaynak dosyay hangi klasrden aldysa, oluturaca (.HEX) uzantl dosyay da ayn klasre kaydeder. Bu durumda editrnzde oluturduunuz ".ASM" uzantl dosyay kaydedeceiniz klasr nemli olmaktadr. Eer siz baka bir PIC programlayc program kullanyorsanz yukarda anlattmz durum geerli olmayabilir. Bu nedenle kullandnz programlarn zelliklerini iyi renmeniz gerekir.

;===DENEME.ASM====27/04/2000======= LIST P=16F84 ;PIC16F84'n MPASM'ye tant PORTB EQU h'06'

STATUSEQU TRISB EQU CLRF BSF CLRF BCF BSF END

h'03' h'86" PORTB ;PORTB'ye bal LED'leri sndr STATUS, 5 ;BANKl'e ge TRISB ;PORTB'nin ularn. k yap STATUS, 5 ;BANKO'a ge PORTB, 0 , ;PORTB'nin O.bitindeki LED'i yak ;Program komutlarnn sonu

Grld gibi komutlarn hangi registeri kulland kolayca anlalmaktadr mein;

BSF STATUS, 5 BANKl'e gemek iin STATUS registerin 5. bitini "1" yap
STATUS

BSF PORTB,0 ;PORTB'nin 0. ucuna bal LED'i ;yakmak iin 0. biti "1" yap.
PORTB

PROGRAMLARIN DERLENMES (MPASM)


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

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

Processor penceresinden 16F84 seiniz. Tab size penceresine "8" yaznz.

Derlenecek olan program semek iin: "Browse" butonuna tklaynz. Alan pencereden DENEME.ASM dosyasn iaretleyip "Tamam" butonuna basnz. imdi "Source File Name" penceresinde derleyeceiniz programn" adn greceksiniz. Program derlemek iin "Assembler" butonuna tklaynz, Programn baaryla derlendii "Assembly Successful" mesajyla" anlalr. Ayn zamanda derleme baarl olduunda 100% yazan pencerenin yeil renge dnmesinden anlalr. NOT: Kaynak programda(DE^EMEASM) hatalar varsa, pencere ierisindeki mesaj "Errors Found" biiminde olacaktr. Pencerenin ortasndaki bandn rengi ise krmzya boyanacaktr Eer bylesi bir durumla karlarsanz hatann nedenlerini bu aamada aratrmanza gerek yoktur. Tek yapacanz ey editr yeniden altrp program iyice inceleyip kitaptakinden farkl yazdnz yerleri dzeltmenizdir. Elbette ki program kaydedip yeniden derlemeniz gerekecektir. Hatalarn nedenini ve nasl dzeltileceini ilgili aklamalar ileride verilecektir. Assembly programn derlediinizde DENEME.HEX adnda hexadesimal kodlara dntrlm olan bir dosya otomatik olarak kaydedilecektir. Bu dosya, kaynak dosyann(.ASM uzantl) olduu klasrde bulunacaktr.

PROGRAMIN PIC'E YAZDIRILMASl


Heksadesimal kodlara dntrlm olan assembly program PIC'e yazdrmak iin iki eye daha ihtiyacmz var. Bunlar: 1. 2. Bilgisayarn paralel veya seri portuna balanan PIC programlama seti, .HEX uzantl dosyadaki program kodlarn PIC programlama setine gnderen PIC programlayc yazlm.

PIC'leri programlamak iin kullanlan ok deiik elektronik devreler kullanmak mmkndr. Bu devrelerin bazlar bilgisayarn seri portuna, bazlarda paralel portuna balanmaktadr. Bizim bu kitaptaki programlan PIC'e yazdrmakta kullandmz set 50'den fazla PIC'i programlayabilen ve adna ProtoPlC denilen elektronik devredir. ProtoPIC, bilgisayarn paralel portuna balanmaktadr. Bu devrenin kullanm ve elde edilmesiyle ilgili detayl bilgi kitabn ekler blmnde verilmitir. Programnz PIC'e yazdrmaya balamadan nce ltfen bu blm dikkatlice okuyunuz. Aada ProtoPIC setinin bilgisayara balan grlmektedir.

HEX uzantl dosyadaki program kodlarn PIC programlama setine paralel veya seri port araclyla PlC'e gnderen eitli yazlmlar bulunmaktadr. Ancak her yazlm elinizde bulunan programlama setine uygun olmayabilir. Bu nedenle hangi programlama setini kullanyorsanz o sete uygun yazlm kullanmanz gerekir. ProtoPIC programlama seti iin hazrlanm olan ve adna P16PRO denilen yazlm bulunmaktadr. Biz bu kitaptaki programlar PIC'e yazdrmak iin P16PRO'yu kullandk.

P16PRO'nun Balatlmas
P16PRO bir DOS programdr. Ancak bu program Windows altndan da altrabilirsiniz. Eer bilgisayarnz her alta Windows 95/98 ile balyorsa program DOS ortamndan altrmak iin; Balat mensnden "MS-DOS Komut lstemi"ni seerek DOS ortamna dnLinnz. Daha sonra C:\P16PRO klasrne geip, P16PRO yazp "Enter" tuuna basnz.

P16PRO'yu altrmak iin her defasnda DOS ortamna dnmek zor geliyorsa, programnz en kolay olarak masa stnden altrmaktr. Bunun iin; Masa stndeyken mouse'un sa tuuna tklaynz. Alan pencereden "Yeni"yi daha sonra da "Ksayol"u seiniz. Ksayol olutur penceresi aldnda "Gzat" butonuna tklayarak hard diskinizdeki P16PRO.EXE programn bulup, bu programa uygun bir simge seerek masastne yerletiriniz. Bundan sonra simge zerine tkladnzda aadaki program penceresi ekrana gelecektir.

PIC Seme (F3)


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

Program Dosyasn Ama (F1)


P16PRO klasr ierisine kaydettiiniz ",HEX" uzantl dosyay amak iin; F1 tuuna basn. "Open Program File" penceresinden PIC'e yazdrmak istediiniz DENEME.HEX dosyasn yukar aa tularn kullanarak sein ve "Enter" tuuna basn.

Ana ekrana dndnzde ekrandaki "PROGRAM DATA" yerinde setiiniz programn dosyasnn adn (DENEME.HEX) greceksiniz. Yine bu pencere ierisinde Heksadesimal kodlara dntrlm assembly komutlarn greceksiniz. Programn yklenmesi esnasnda ekrann ortasndaki kk bir pencere oluacaktr. Bu pencerede, (.HEX) uzantl program ierisinde konfigrasyon bilgilerinin yer almad ynnde bir uyar bulunmaktadr. Konfigrasyon bilgilerinin program ierisinde yer almasnn nemi yoktur. nk ayn konfigrasyon bilgilerini ekrann sa st kesinde bulunan "Fuses" penceresinde grlen deerlere sonradan ayarlamak mmkndr. NOT: Konfigrasyon bilgilerinin nasl yazldn ileride detayl olarak inceleyeceiz.

PIC Konfigrasyonunu Ayarlama (F2)


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

F2 tuuna basn ve "Config" penceresindeki sekmeyi TAB ve boluk brakma SPACE BAR kullanarak konfigrasyonu seip "Enter" tuuna basn. Yeniden ekrana dndnzde ekrann sa st kesinde setiiniz konfgrasyonu "Fuses" penceresinde greceksiniz. imdi, bu ilemleri yaparak pencerede aadaki konfigrasyonun grlmesini salaynz.

Program PIC'e Yazdrma (F4)


Artk PIC'i programlama aamasna geldiniz. ProtoPIC programlama setinizin bilgisayara bal olduundan emin olduktan sonra;

F4 tuuna basn. "Info" penceresinde gsterildii gibi PlC'i sokete yerletirin.

PIC'i yerletirdikten sonra programlamaya balamak iin "Enter" tuuna basn. Yeni alan "Info" penceresinde srasyla "Programrning", "Verifying", "Blowing fuses", "Verifying fuses" ve "Total time....sec" mesajlarn greceksiniz. Bu esnada PIC programlama setinin yeil yanp snerek programlama ileminin yapldn gsterecektir. Programlama ilemi bittiinde "Enter" tuuna basarak programlama modundan knz.

PROGRAMLANMI PIC'N DENENMES


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

BreadBoard zerine Kurulan Devre ile Denemek


Programladnz PIC'in almasn izlemek amacyla aadaki devreyi bir breadbord zerinde kurunuz.

Bu devrede PIC iin gerekli olan clock sinyalini bir RC osilatr salamaktadr. MCLR reset girii terslenmi olduundan aktif "0"da ilev grr. Reset girii, 1K diren zerinden 5V'a balanmtr. 100 nF'lk direncin grevi, PIC'e enerji verildiinde meydana gelebilecek gerilim dalgalanmalannn PIC'e zarar vermesini nlemek iindir. Devreye enerji verdiinizde PIC'in RBO bacana bal olan LED dorudan yanacaktr. DENEME.ASM assembly programn yazarken yapmak istediimiz ey de zaten buydu.

PIC Deneme Kart ile Denemek


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

NOT: Bu kitapta verilen programlar yukarda zelliklerini verdiimiz deneme kartnn dizaynna gre verilmitir. Bu dizaynda PortB'nin tm klarna LED balanmtr. Bu durum programlamaya yeni balayanlarn port klarn ynlendirme ilemlerindeki karmakl ortadan kaldrr. Kitabn arkasndaki adn verdiimiz firmadan farkl dizaynda olan deneme kartn satn aldysanz programlarnz yazarken bu kartn zelliklerini dikkate almanz gerekir. Deneme kartnza programladnz PIC16F84' yerletirerek 5V DC g kaynana balaynz. D0 LED' PIC'e enerji verir vermez yanacaktr.

MPASM'NlN RETT DER DOSYALAR


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

.LST Dosyas
.LST dosyasn kullandnz editrden aabilirsiniz. Bu dosya iki sayfadan olumutur. llksayfada (PAGE 1); Komutun program bellei veya RAM'daki adresi (LOC), Komutlarn hexadesimal karlklar (OBJECT), Kaynak program ve satr numaralan (LINE SOURCE TEXT) verilir.

kinci sayfada ise (PAGE 2); Programda kullanlan etiketler (SYMBOL TABLE) ve adresleri (VALUE), Bellek kullanm haritas ('X'ler kullanlan alan, '-' ler kullanlmayan alan gsterir.) Kullanlan ve bo kalan alann miktar (DENEME.LST dosyasnda kullanlan alan=5, kullanlmayan alan=1019), Hata (Error) says, uyar (Warning) says verilir. DENEME.ASM 5-10-2000 22:57:44 LINE SOURCE TEXT VALUE P=16F84 ;PIC16F84'n MPASM'ye tant PAGE 1

MPASH 02.30 Released LOC OBJECT CODE

00001 ;===DENEME.ASM====27/04/2000======= 00002 LIST 00000006 00000003 00000086 0000 0186 00003 PORTB EQU EQU CLRF h'06" h'03' h'86' PORTB 00004 STATUS EQU 00005 TRISB 00006

;PORTB'ye bal LED'ieri sndr

0001 1683 00007 BSF 0002 0186 00008 CLRF 0003 1283 00009 BCF 0004 1406 00010 BSF 00011 MPASM 02.30 Released SYMBOL TABLE LABEL PORTB STATUS END

STATUS, 5 ;BANKl'e ge TRISB ;PORTB'nin ularn k yap STATUS, 5 ;BANKO'a ge PORTB. 0 ;PORTB O.bitindeki LED'i yak ;Program komutlarnn sonu PAGE 2

DENEME.ASM 5-10-2000 22:57:44 VALUE 00000006 00000003

TRISB _16F84

00000086 00000001

MEMORY USAGE MAP (X = Used, '-' = Unused) 0000 : XXXXX----------- ---------------- ---------------- ---------_---__. All other memory blocks unused. Program Memory Words Used: Errors : Harnings : Messages ; 0 0 reported, 0 reported, 0 suppressed 1 suppressed 5 Program Memory Nords Free: 1019

.ERR Dosyas
Bu dosyay da kullandnz editrden aabilirsiniz. Eer assembly komutlarnn yazlnda bir hata yaptysanz, hatal satr numaras ve hatann ne olduu yazldr. Hatasz programlarda bu dosyann ii botur. imdi DENEME.ASM dosyasnda bir hata yaparak bu dosyada ne yazldn grelim. DENEME.ASM dosyasnn 6. satrndaki "CLRF" komutunu "CLR" olarak deitirin. Daha sonra da program MPASM ile derleyip, ERR dosyasn editrle grntleyin.

Warning[207) C:\P16PRO\DENEME.ASM 6 : Found label after column 1. (CLR) Error[122] C:\P16PRO\DENEME.ASM 6 : Illegal opcode (PORTB) Yazlan kaynak dosyada hata varsa, LST uzantl dosyada da bu hatalar gsterilir. LST uzantl dosyadaki hatalar, hatann yapld satrdan hemen sonra yazlmas nedeniyle grlmesi daha kolaydr.

INCLUDE DOSYALARI
Assembly programlarn yazarken kullanlacak olan registerlerin adreslerini tanmlama blmnde kullanmak, program daha anlalr hale getirmektedir. Aslnda PIC16F84 mikrodenetleyicisinin RAM belleindeki zel registerlerin adresleri sabittir. yleyse adresleri sabit olan registerleri her program yazarken yeniden tanmlamak gereksiz grlmektedir. Microchip bu durumu gz nne alarak INCLUDE dosyalarn kullanma sunmutur. Header file denilen bu dosyalar kullanmak suretiyle programlar yazarken her defasnda register adreslerini tanmlama zorunluluu kaldrlmtr. MPASM ile derlenebilecek her PIC iin ayr bir INCLUDE dosyas bulunmaktadr. Bu dosyalar MPASM programnn bulunduu klasr ierisindedir. Dosyalar grmek iin editrnz kullanabilirsiniz ya da DOS ortamna dnp D[R komutu ile INC uzantl dosyalar listeleyebilirsiniz. imdi INCLUDE dosyalarnn ne ie yaradn ve nasl kullanldn grelim.

INCLUDE Dosyas Kullanarak Program Yazmak


Bir .INC dosyasn kaynak program ierisinde kullanabilmek iin, INCLUDE bildirisinden sonra dosyann ismini yazmak yeterlidir. PIC16F84 mikrodenetleyicisi iin kullanacamz dosyann ad "P16F84.INC" dir. imdi bu dosyay editrmzle aarak ierisinde neler yazldna bakalm. Editrnzle MPASM klasr ierisine girerek P16F84.INC dosyasn anz. Aadaki listeyle karlaacaksnz. LIST ;P1684.INC Standard Header File, Version 2.00 Microchip Technology, Inc. NOLIST
;This header file defines configurations,registers,and other useful bits o ;information for the PIC16F84 microcontroller. These names are taken to match the ;data sheets as closely as possible.

;Note that the processor must be selected before this file is included. The ;processor may be selected the following ways: ;1. Command line switch: ; C:\ MPASM MYFILE.ASM /PIC16F84 ; 2. LIST directive in the source file ; LIST P=PIC16F84 ; 3. Processor Type entry in the MPASM full-screen interface ;-------------------------------------------------------------------------------;Revision History ;--------------------------------------------------------------------------------

;Rev: Date:

Reason:

;2.00 07/24/96 Renamed to reflect the name change to PIC16F84. ;1.01 05/17/96 Corrected BADRAM map ;1.00 10/31/95 Initial Release ;------------------------------------------------------------------------------;Verify Processor ;------------------------------------------------------------------------------IFMDEF __16F84 MESSG "Processor-header file mismatch. Verify selected processor." ENDIF -------------------------------------------------------------------------------; Register Definitions -------------------------------------------------------------------------------W EQU H'OOOO' F EQU H'OOOl' ;----- Register Files-----------------------------------------------------INDF EQU H'0000' TMRO EQU H'000l' PCL EOU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' EEDATA EQU H'0008' EEADR EQU H'0009' PCLATH EQU H'000A' INTCON EQU H'000B' OPTION_REG TRISA TRISB EECONl EECON2 ;----- STATUS IRP RPl RPO NOT_TO NOT_PD Z DC C ;----- INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF ;----- OPTION NOT_RBPU INTEDG TOCS TOSE PSA PS2 EQU EQU EQU EQU EOU Bits --------------------------EQU EQU EQU EQU EQU EQU EQU EQU Bits -------------------------EQU EQU EQU EQU EQU EQU EQU EQU Bits -------------------------EQU EQU EQU EQU EOU EQU H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'000l' H'0000' H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'000l' H'0000' H0081 H'0085' H'0086' H'0088' H'0089'

PSl EQU H'000l' PSO EQU H'0000' ;----- EECONl BitS ----------------------. EEIF EQU H'0004' WRERR EQU H'0003' WREN EQU H'0002' WR EQU H'000l' RD EQU H'0000' ;-------------------------------------------------------------------------------; RAM Definition __MAXRAM H'CF' __BADRAMH'07', H 50 -H 7F', H'87' ;-------------------------------------------------------------------------------Configuration Bits _CP_ON EQU H'000F' _CP_OPF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _PWRTE_OFP EQU H3FFF _WDT_OM EQU H'3FFF' _WDT_OFF EQU H3PFB _LP_OSC EQU H3FFC _XT_OSC EQU H3FFD' _HS_OSC EOU H3FFE _RC_OSC EQU H'3FFF'

Dosyay inceleyecek olursanz RAM ierisindeki tm file registerlerin adresleri EQU komutu ile tanmlanmtr. Bu durumda P16F84.INC dosyasn kaynak program ierisinde MCUJDE "P16F84.INC" eklinde yazarsak, aadaki komutlar yazmak zorunda kalmayacaz.
PORTB EQU h'06' STATS EQU h'03' TRISB EQU h'86' Status registerin her bir bit'ine bir isim verildiinden (IRP EQU H'0007, RP1 EQU H'0006', RP0 EQU H'0005'... gibi) hangi bit kullanlmak isteniyorsa o bitin numaras deil de ismi kullanlabilir. rnein;
BSF STATUS , 5 BSF STATUS,RPO

yerine yazlabilir.

Yukarda sylenenler INTCON, OPTION, EECON1 registerleri iin de geerlidir. Ayrca konfigrasyon bit'lerine de isim verildiinden, PIC'e yazdrlmas gereken konfigrasyon bit'lerinin hexadesimal karlklar yerine tanmlanan isimler kullanlr. imdi DENEME.ASM kaynak dosyasn INCLUDE dosyas kullanarak yeniden yazalm. Kodlarn daha da azaldn greceksiniz. ;===DEMEME.ASM====27/04/2000====== LIST P=16F84 ;PIC16F84'n MPASM'ye tant. INCLUDE 'P16F84.IMC" CLRF PORTB ;PORTB'ye bal LED'leri sndr BSF STATUS, RP0 ;BANKl'e ge CLRF TRISB ;PORTB'nin ularn k yap BCF STATS, RP0 ;BANKO'a ge BSF PORTB, 0 ;PORTB'nin 0.bitindeki LED'i yak END ;Program komutlarnn sonu

KONFGRASYON BTLERNN YAZILMASI


Konfigrasyon bit'leri, PIC'e gerilim uyguland anda PIC'in uymas gereken koullar belirlemede kullanlr. Bu koullar PIC uygulama devresine baldr. rnein uygulama devresinde RC osilatr kullanlyorsa, bu koul kaynak program ierisinde bulunmaldr ve PIC'e yazdrlmaldr. Konfigrasyon bit'leri aadaki koullar belirlemede kullanlr:

Osilatr tipini (RC, XT, HS, LP gibi) belirlemek, Watchdog tmer'i ON veya OFF yapmak, Povver-on-reset (PIC'e enerji verildiinde reset) durumunu ON veya OFF yapmak, Kod korumay ON veya OFF durumuna getirmek (PIC'e yazlan programn okunmasn engellemek iin yaplr.)

lk programmzda konfigrasyon bit'lerini yazmadmz grdnz. Aslnda program ierisinde yazma zorunluluu da yoktur. nk ou PIC programlayc yazlm, bu bit'lerin program PIC'e yazdrma esnasnda yazlabilmesi veya deitirilmesi iin olanaklar tanmtr. rnein, P16PRO programlaycsnda F2 tuuna basarak ekrana getirdiimiz pencerede bu konfigrasyonu yapabiliyoruz. imdi de konfigrasyon belirlemede kullanlan tanmlarn neler olduunu grelim. Koul Kod koruma var Kod koruma yok Power-on-reset var Power-on-reset yok Watchdog timer devrede Watchdog timer devrede yok Low Power Osilatr Kristal osilatr High Speed osilatr RC Osilatr Yazlacak tanm kodlar _CP_ON _CP_OFF _PWRTE_ON _PWRTE_OFF _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _RC_OSC

Yukardaki konfigrasyon tanmlamalarn kullanarak DENEME.ASM programn yeniden yazalm. Koul tanmnn "_CONPG" komutuyla baladna ve her bir koul tanm arasnda bir boluk ve "&" iareti bulunduuna dikkat ediniz. ;===DENEME.ASM====27/04/2000 ======= LIST P=16F84 ;PIC16F84'n MPASM'ye tant INCLUDE "P16F84.INC" _CONFIG _CP_OFF S_WDT_OFF ;_PWRTE_OFF S_RC_OSC CLRF PORTB ;PORTB'ye bal LED'leri sndr BSF STATUS, RP0 ;BANKle ge CLRF TRISB ;PORTB'nin ularn k yap BCF STATUS, RP0 ;BANK0a ge BSF PORTB, 0 ;PORTBnin 0.bitindeki LED'i yak END ;Program komutlarnn sonu

VER TRANSFER ve KARAR LEMLER


W REGISTERNN KULLANIMI (MOVLW, MOVWF KOMUTLARI) BIT TEST EDEREK KARAR VERME (BTFSC, BTFSS)

W REGSTERN KULLANIMI (MOVLW, MOVWF KOMUTLARI)


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

MOVF PORTA, W MOVWF PORTB

;PortA'nn ieriini W registere ta ;W registerin ieriini PortB'ye gnder

PortB'ye bal olan 8 LED'in ilk drt tanesini yakacak olan veriyi gndermek iin de aadaki komutlar yazlmaldr.

MOVLW

H0F ;W registerine H OH ykle

MOVWF
CLRF PORTB

PORTB

;W registeri ieriini PortB'ye gnder

Eer bir register ierisine H'00' verisi gnderilmek istenirse, o registerin ierisini CLRF komutu ile silmek daha pratik bir yntemdir.

;PortB'nin ieriini sfrla

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

lem Basamaklar
1. 2. Program editrnzde yazdktan sonra, PROG1.ASM adyla kaydediniz. Daha sonra da MPASM ile derleyiniz. PIC programlaycnz blgisayannza balayp PIC'i programlaynz. Programlama esnasnda aada verilen konfigrasyona dikkat ediniz. RC, OFF, ON, OFF

Osilatr tipi Watchdog timer(WDT) Power Up Timer(PWRT) Code Protect (CP)

P16PRO programnn sa st tarafndaki Fuses penceresi aadaki gibi olmaldr.

3.

Breadboard zerinde aadaki devreyi kurunuz. 4. Devreye enerji vermeden nce A1, A2, A3 butonlarna birlikte veya tek olarak basnz. Devreye enerji veriniz. Bastnz butonlarla snen LED'leri karlatrnz.

5. 6.

NOT: Hibir butona basmadnzda RB0-RB4 ularna bal olan tm LED'lerin yank olduunu greceksiniz. Sebebi, A portunun tm ularnn pull-up oluundandr. Hangi butona bastysanz, o porta giren veri 0'dr. A portundaki veri

direkt olarak B portuna transfer edildiinden, baslan butonun karlndaki LED snecektir. Program tekrar altrmak iin PIC'in enerjisini kesip yeniden vermeniz gerekmez. RESET tuuna basmanz yeterlidir. 7. 8. B portundaki LED'leri durumunu deitirmek iin nce butona/butonlara basn, daha sonra da RESET tuuna basnz. Eer breadboard zerine yukardaki devreyi kurma olananz yoksa, programladnz PIC'i denemek iin hazr deneme kartnz kullannz.

Sonsuz Dng
PIC16F84 mikrodenetleyicisinde duraklama komutu olmad iin yukardaki programda bu ilemin yerine geen aldatc bir duraklama uyguladk. Programn en sonunda GOTO komutu ile programn ak DONGU etiketine gnderildi. Grld gibi DONGU etiketi ile GOTO komutu arasnda ilem yapan hibir PIC komutu bulunmamaktadr. Bu durumda program sonsuz dng ierisine girmitir. Sonsuz dng ierisine istenirse komut yazlabilir. Bu durumda RESET tuuna baslana kadar ya da PIC'in enerjisi kesilene kadar ayn komutlar defalarca tekrarlanabilir. imdi PROG1.ASM'de ok kk deiiklik yaparak bu ilemi grelim.

PROGRAM-2) A portunun ularna bal butonlara basld srece, B portunda o butona karlk gelen LED'i sndren program. Bu programda A portundaki RA0-RA4 ularnn devaml olarak okunup B portuna gnderilmesi gerekiyor. Bunu devaml olarak yapabilmek iin program "BASLA" etiketine gnderip, sonsuz dngy buraya kurmak gerekiyor. Ak diyagramn yeniden izelim. Programn PROG1.ASM ile arasndaki tek fark GOTO komutunun yazld satr olacaktr. lem Basamaklar 1. PROG1.ASM' yi editrnze ykleyerek GOTO ile balayan satr aadaki gibi deitiriniz. Yeni program PROG2.ASM adyla kaydediniz. BASLA ;Okumay tekrarla Program derledikten sonra PIC'e yazdrnz. PIC16F84' yukarda kurduunuz devreye veya deneme kartna yerletirip program altrnz. Programn almas esnasnda buton/butonlara basarak snen

GOTO 2. 3. 4.

LED'leri izleyiniz.

BT TEST EDEREK KARAR VERMEK (BTFSC, BTFSS)


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

Komutun ileyiini rnek bir program parasnn ak diyagramn izerek inceleyelim.

PROGRAM-3) PortB'nln 0. bitine bal LED'i, A portunun 1. bit'indeki butona basnca yakan program.

;===PROG3.ASM====22/05/2000======= LIST P=16F84 PORTA EQU h'05" PORTB EQU h'06' STATUS EQU h'03' TRISA EQU h'85' TRISB EQU h'86' CLRF PORTB BSF STATUS, 5 CLRF TRISB MOVLW h'FF' MOVWF TRISA BCF STATUS, 5 TEST_PORTA BTFSC PORTA, 1 GOTO TEST_PORTA BSF PORTB, 0 DONGU GOTO DONGU END

;PORTB'ye bal LED'leri sndr ;BANKl'e ge ;PORTB'nin ularna. k yap ;W registere h'FF' ykle ;PortA'nn ularn giri yap ;BANKO'a ge ;A portunun 1. bitini test et ;0 deilse tekrar test et ;B portunun 0. Bitini l(Bet) yap

lem Basamaklar 1. 2. 3. 4. 5. Programn tanmlamalar blmnde INCLUDE komutunu kullannz. Program PROG3.ASM olarak kaydediniz. Program derledikten sonra PIC'e yazdrnz. PIC16F84' deneme kartna yerletiriniz. Program altrdnzda LED'lerin snk olduunu izleyiniz. A1 butonuna basarak RBO ucuna bal LED'in yandn grnz.

KENDNZ UYGULAYINIZ
Farkl butonlara (A2 veya A4'den birisini ) basnca, B portundaki (RBO-RB4 ularna bal herhangi birisi) bir LED'i yakan program kendiniz yaznz ve deneme kart zerinde almasn grnz. PROGRAM-4) A portunun 2. bit'indeki butona basnca B portuna bal tm LED'leri yakan program. Bu programn PROG3.ASM'den tek fark portB'ye gnderilecek olan verinin farkl (b'00000001' yerine b111111111) olmasdr. BCF veya BSF komutlaryla sadece bir bit'i 0(clear) veya 1(set) yapabiliyoruz. Bu nedenle bu komutun kullanld yerde deiiklik yapmamz

lem Basamaklar 1. PROGS.ASM'yi editrnze ykleyip "TEST_PORTA" etiketinden sonra yazlanlar aadaki gibi deitiriniz. Yeni program PROG4.ASM olarak kaydediniz.

TEST_PORTA BTFSC PORTA, 2 ;PortA'nn 2. Biti 0(clear) nu.? GOTO TEST_PORTA ;Tekrar test et MOVLW H'FF' ;W registere b'11111111' ykle MOVWF PORTB ;W registeri portB'ye gnder
DONGU GOTO END DONGU

2. 3. 4.

Program derledikten sonra PIC16F84'e yazdrn. PIC' breadboard zerine kurduunuz devre zerinde ya da deneme kartnda altrnz. A2 butonuna basnca B portundaki tm LED'lerin yandn grnz.

PROGRAM-5) A portunun 4. bitine bal olan buton basl tutularak PIC'e enerji verildiinde, B portundaki LED'leri snk tutan, butondan el ekildiinde ilk drt LED'i yakan program. Bu programn PROG4.ASM'den fark BTFSC komutu yerine BTFSS komutunu kullanmak zorunda oluumuzdur. nk A portunun 4. bit'indeki butonu basl tutuumuzda buradaki veri 0(clear)dr. Butondan elimizi ektiimizde veri 1(set)tir. Butona basl durumdayken LED'lerin snk kalabilmesini salamak iin BTFSS komutuyla program ak "TEST_PORTA" etiketine gnderilmelidir. Buna gre ak diyagramnn sadece deien blmn yeniden izelim. lem Basamaklar 1. Editrnze PROG4.ASM'yi ykleyerek aadaki deiiklikleri yapnz. Yeni program PROG5.ASM adyla kaydediniz.

TEST_PORTA BTFSS PORTA, 4 ;PortA'nn 4. bit'i l(set) mi? GOTO TEST_PORTA ;Hayr, tekrar test et MOVLN H'0F' ;Wregistere b00001111 ykle MOVWF PORTB ;W registeri portB'ye gnder DONGU GOTO DONGU END 2. Program PIC16F84'e yazdrdktan sonra deneme yerletiriniz. 3. A4 butonunu basl tutup, PIC'e gerilim uygulaynz.

devresine

4. 5.

Butona bastnz srece LED'lerin snk kaldn, elinizi eker ekmez B portundaki ilk 4 LED'in yandn izleyiniz. Yeni denemeler yapmak iin RESET butonuna basarak program tekrar altrn.

DNG DZENLEMEK
SAYA KULLANARAK DNG KULLANMAK (DECFSZ KOMUTU) KARILATIRMA LE DNG DZENLEMEK (SUBLW, SUBWF KOMUTLARI) STATUS REGSTER

SAYA KULLANARAK DNG KULLANMAK (DECFSZ)


Baz ilemlerin nceden belirlenen sayda tekrarlanmas gerekebilir. Bu durumda bir register saya olarak kullanlr. ilk nce saya ierisine ilemlerin tekrar saysn belirleyen say yklenir. Daha sonra her bir ilem tekrarnda saya ierisindeki deer bir azaltlr. Azaltma ilemi DECFSZ komutu ile yaplr. Saya ierisindeki say 0 (sfr) olunca dng biter ve program ya bitirilir ya da baka bir komuta dallandrlarak devam eder. DECFSZ komutu ngilizce'deki "Decrement file register Skip if Zero" dur. Trke'ye evirirsek u anlam kar; Registerden "1" kart, eer sonu "0"sa bir sonraki komuta atla. DECFSZ komutunun yazl ve rnek ak diyagram aadaki gibidir.

PROGRAM- 6) A portunun 1. bitine bal butona 10 defa basnca B portunun 0. bit'indeki LED'i yakan program. ;==PROG6.ASM====25/05/2000===== LIST P=16F84 INCLUDE "P16F84.INC" SAYAC EQU h'0C' ;SAYAC registerinin adresi CLRF PORTB BSF STATUS, 5 CLRF TRISB MOVLW h'FF' MOVWF TRISA BCF STATUS, 5 BASLA MOVLW D'10' ;W registerine 10 saysn ata MOVWF SAYAC ;W registerini SAYAC'a ykle TEST BTFSC PORTA,1;PortA'nn 1. biti lmi? GOTO TEST ;Hayr, tekrar test et NOP ;Bir saykl bekle NOP ; " NOP ; " NOP ; " NOP ; " NOP ; " NOP ; " NOP ; NOP ; NOP ; NOP ; NOP ; NOP ; NOP ; NOP ; DECPSZ SAYAC, F ;SAYAC=SAYAC-1, SAYAC=0 m? GOTO TEST ;Hayr, PortA'ya. test et BSF PORTB, 0 ;Evet, PortB 0. bitini 1 yap END lem Basamaklar 1. Program yazdktan sonra PIC'i programlaynz.

2. 3.

PIC'i deneme kartna yerletiriniz. A1 butonuna ksa srelerle 10 defa basnz.

NOT: Butona basma says 10'a ulamadan PortB'nin 0. bit'indeki LED'in yandn greceksiniz. Sebebini yle aklayabiliriz; A1 butonu pull-up yaplmtr. Yani butona baslmadnda +5V'ta dr. Basldnda ise OV olur. Butona 2 defa basldmz dnerek PortA'nn RA1 ucundaki gerilimin erisini aadaki gibi izelim. Butonlar mekanik kontaklardan yapldndan butonun braklmas esnasnda ark oluacaktr. ekilde de grld gibi ilk baslta gerilim dalgalanmalar olmaktadr. Bu dalgalanmalar esnasnda gerilim defa OV seviyesine inmektedir. Butona bas biimi ve kontaklarn durumuna gre bu say azalabilir veya artabilir. Butona bir defa basld halde 2~3 defa baslm gibi OV seviyesine inecektir. PIC komutlarnn icra edilme sresi ok ksa olduundan her 0V seviyesine ini, butona baslm gibi ilem grerek SAYAC registeri ierisinden her defasnda "1" karacaktr. Bu da bizim beklediimiz ilemden farkl bir sonu douracaktr. Butonda meydana gelen ark nlemek amacyla NOP komutlar kullanlmtr. NOP komutu 1 saykl sresince hibir ey yapmadan CPU'nun gecikme yapmasn salar. Kullanlan be NOP komutu ark nlemek iin yeterli gelmedii deneyde aka grlmektedir. Eer NOP komutu saysn 100'e karrsak, 100 saykllk bir gecikme salayabiliriz. Bu da ilk OV seviyesinden sonra oluan 0V'larn alglanmamasn salayabilir. 4. Programdaki NOP komutlarnn saysn 100'e, (Gerekiyorsa daha fazla) kararak programn doru olarak almasn salaynz. Programlar ierisinde gerekli olan bu tip zaman gecikmelerini salamak amacyla yzlerce NOP komutu yazmak, bellei gereksiz olarak doldurmak demektir. Ayn zamanda iyi bir programlama teknii deildir. 8. blmdeki zaman geciktirme dngleri bu gibi ilemleri gerekletirmek iin ska kullanlmaktadr.

Basit Bir Zaman Gecikme Dngs Yapmak


imdi de DECFSZ komutu kullanarak yaplan dng ierisinde hibir ilem yapmayan komutlar kullanarak belirli bir zaman gecikme dngs yaplabilir. rnein 768 tane NOP komutunu alt alta yazarak gecikme salamak yerine, 3 tane NOP komutunu ard ardna 256 defa altrmak program ierisinde daha az yer kaplar. imdi bunu bir rnek programla gsterelim. PROGRAM-7) A portunun 1. bit'indeki butona bastka B portundaki LED'leri binary 9'dan 0'a kadar azaltarak yakan program.
Buton zerinde meydana gelebilecek ark DECFSZ komutu ile yaplan basit bir zaman gecikme dngs ile salanmtr.

;===PROG7.ASM====29/05/2000======= LIST P=16F84 INCLUDE "P16F84.INC" SAYACl EQU H'0C' ;SAYACl registerinin adresi SAYAC2 EQU H0D ;SAYAC2 registerinin adresi CLRF PORTB ;PortB'yi sfrla BSF STATUS,5 ;BANKle ge CLRF TRISB ;PortB'nin tm ular k HOVLW H'FF' ;Wh'FF HOVWF TRISA ;PortA'nn tm ular giri BCF STATUS, 5 ;BANK0a ge BASLA MOVLW H'0A' ;Wh'0A' MOVWF SAYACl ;SAYAClW TEST BTFSC PORTA,1 ;PortA'nn 1. bit'i 0 m? GOTO TEST ;Hayr, tekrar test. et GECIKME ;Gecikme salama blm MOVLW H'FF' ;Wh'FF' MOVWF SAYAC2 ;SAYAC2W GECIKIME ;Gecikme salama blm DECFSZ SAYAC2, F ;SAYAC2SAYAC2-1, SAYAC2=0 m? NOP ; Arkn snmesini bekle NOP ; NOP ; GOTO GECIKME ;Hayr, SAYAC2'yi tekrar azalt AZALT DECFSZ SAYACl, F ;SAYACK-SAYACl-1 ,SAYAC1=0 m? GOTO YAK ;Hayr, YAK etiketine atla GOTO BASLA ;Evet, baa dn YA; MOVF SAYACl, W ; WSAYACl MOVWF PORTB ;SAYAC1i PortB'ye gnder GOTO TEST ;PortA'yi tekrar test et. END ;Prograa kodlarnn sonu

lem basamaklar
1. 2. 3. 4. PIC' programladktan sonra breadboard zerine kurduunuz devreye y; da deneme kartnza yerletiriniz. PIC'e gerilim vererek altrnz. A1 butonuna ok ksa olarak basp elinizi ekiniz. ilk yanan lamba 9' gsterecektir. Lambalar aadaki gibi yanacaktr. 9 Butona tekrar basarak lambalarn azalan binary saylar gstermesini salaynz.

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

KARILATIRMA YAPARAK DNG DZENLEMEK (SUBLW, SUBWF, INCF, DECF KOMUTLARI)


Baz ilerin nceden belirlenen sayda tekrarlanmas gerekebilir. Bu durumda bir register saya olarak kullanlr. Her bir ilem tekrarnda saya ierisindeki say bir arttrlr. Arttrma ilemi INCF komutuyla yaplr. .Saya ierisindeki say ilemlerin tekrar edilme saysna ulanca, dng sona erer ve program ak baka bir komuta geer. Bu karlatrma yntemiyle yaplan dngnn ak diyagramn aadaki gibi izebiliriz.

Dngnn

tekrar

says

registeri ierisine yklenen say ile belirlenir. SAYAC deikeni ierisindeki say dngnn her tekrarnda bir artrlr ve SUBWF komutuyla SAYAC'tan Wnin ierii karlr. karma ilemi neticesinde STATUS registerin 0. ve 2. bit'indeki deer etkilenir. Bu bit'ler BTFSC komutuyla test edilir. istenilen Testler deere sonucunda ulalnca

dngye son verdirilir. STATUS registerin 0. bit'ine CARRY FLAG (Tama bayra), 2. bit'ine ZERO FLAG ((Sfr bayra) olarak adlandrlr. STATUS register

SUBWF Komutu
SUBWF komutu karma yapan bir komuttur. Aadaki yazm kuralna gre W registerin ieriini file registerden karr. Sonucu W register ierisine yazar.

karma sonucunda etkilenen C ve Z flag ierisindeki deer, W ve file registerin byklklerine baldr.

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

W<MEM W<MEM

W=MEM W<MEM

MOVWF MOVLW SUBWF BTFSC GOTO BSF

MEM H50 MEM, W STATUS,0 XXXX PORTB, 0

W>MEM W>MEM

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

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

rnek program paralar: 1. Sabit= W durumu MOVLW h50 SUBWF h50 Sabit<W BTFSC STATUS,2 Sabit=W Sabit>W GOTO XXXX BSF PORTB, 0 Sabit=W 2. Sabit < W durumu MOVLW SUBLW Sabit=W BTFSC Sabit>W GOTO BSF 3. Sabit> W durumu MOVLW SUBLW Sabit=W BTFSC GOTO Sabit<W BSF h'40" h'50' STATUS,0 XXXX PORTB, 0 Sabit>W Sabit>W XXXX PORTB, 0 Sabit<W h60 h'50' STATUS,0 Sabit<W

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

END

lem Basamaklar
1. 2. PIC' programlayp deneme kart zerine yerletiriniz. PIC'i altrnz. PortB'nin LED'lerinin aadaki gibi yandn grnz.
76 543210 000Cr

Sabitin deeri h'05', W registerin deerinden h'04" byk olduundan C flag'n (STATUS registerin 0. bit'i) deeri "1", Z flag'n (STATUS registerin 2. bit deeri de "0". olacaktr. Bu nedenle sadece portB'nin 0. bitine bal olan LED yanacaktr. Dier LED'lerin neden yank olduunu anlamak iin STATUS register hakknda aada verilen detayl bilgileri inceleyiniz.

KENDNZ UYGULAYINIZ
Sabit deere W registerden byk veya eit deerler girerek, PIC'i yenider programlaynz. Daha sonra da PIC'i altrarak STATUS registerin durumunu LED'lerden izleyiniz.

STATUS REGISTER
STATUS register ALU'nun (Aritmetik Logic Unit) aritmetiksel durumunu (Zero ve Carry flag registerleri) ve RESET durumunu ieren verileri bulundurur. Ayrca iki bitlik veri de data memory'deki (RAM) bank seme bitleri iin ayrlmtr. STATUS registerin ierii bir ok komutun almas neticesinde bit'ler deiir. STATUS registerin Z, DC veya C bitlerini etkileyen bir komut kullanldnda bu bitlere yazma ilemi yaplamaz. Bu bitlerin 1 veya 0 olm; durumu kullanlan PIC'e baldr. Bank semek iin kullanlan RPO ve RP1 bitlerini yazmak mmkn olduu halde, TO ve PD bitlerine yazma ilemi yasaklanmtr. Bu nedenle bir STATUS registeri etkileyen bir komutun altrlmas sonucunda etkilenen bitler beklenenden farkl olabilir. rnein, CLRF STATUS en yksek biti 0(sfr), Z bit'ini ise 1(bir) yapar. Bu durumda STATUS register "000u u1uu" olarak kalr. (Buradaki "u" nun anlam unchanged deimezdir.) Aadaki tablo STATUS registerin her bir bit'inin hangi durumlarda 1 ve 0 olacan gsterir.

STATUS REGSTER BlT'LER


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

IRP

Bit 7: IRP: Register Bank Select bit (Bank seme bit'i) 0= Bank 0, 1 (h00'- h'FF') 1=Bank 2,3 (h'100'-h'1FF') IRP biti PIC16F84 de kullanlmaz. IRP, 0 (sfr) olarak kalmaldr. Bit 6-5:RP1:RPO: Register Bank Select bit (Bank seme bitleri) 00= Bank 0 (h'00'-h'FF') 01=Bank 1 (h'80'-h'FF') 10=Bank2(h'100'-h'17F') 11=Bank3(h'180'-h'1FF') PIC16F84'de sadece RP0 biti kullanlr. RP1, 0 (sfr) olarak kalmaldr. Bit 4: TO: Time-out bit (Zaman dolma bit'i) 1= PIC'e enerji verildiinde, CLRWDT ve SLEEP komutu alnca. 0= WDT zamanlaycsnda, zaman dolduunda. Bit 3: PD: Power-down bit (Enerji kesiime bit'i) 1= PIC'e enerji verildiinde ve CLRVVDT komutu alnca. 0= SLEEP komutu alnca. Bit 2: Z: Zero bit (Sfr bifi) 1 = Bir aritmetik veya mantksal komutun sonucu 0 (sfr) olduunda. 0= Bir aritmetik veya mantksal komutun sonucu 0 (sfr) olmadnda. Bit 1: DC: Digit carry/borrow bit (Tama/dn biti) ADDLW ve AODVVF komutlar kullanldnda oluan tama ve dn alma olduunda) 1= All drt bitin 4. bit'inde tama meydana geldiinde. 0= Alt drt bitin 4. bit'inde tama meydana gelmediinde. Bt 0: C: Carry/borrow bit (Tama/dn biti) ADDLW ve ADDVVF komutlar kullanldnda. Oluan tama ve dn alma olduunda) 1= En soldaki 7. bit'te tama olduunda. 0= En soldaki 7. bit'le tama olmadnda, Not: RLF ve RRF komutlar altnda en sol bit veya en sa bitin deeri carry bit'ine yklenir.

PROGRAM-9) SUBWF komutu kullanlarak oluturulan dngye rnek program.

Bu programda SAYAC adl bir registerin ierisine dngnn tekrar says konulmutur. Dngnn her tekrarnda INCF komutuyla SAYAC ierisindeki deer bir arttrlr. SUBWF komutuyla W register ierisindeki sabit say karlatrlr. Karlatrma sonunda etkilenen zero flag kontrol edilerek dng sona erdirilir. ;===PROG9.ASM====05/06/2000======= LIST P=16F84

INCLUDE "P16F84.INC" SAYAC


CLRF BSF CLRF BCF BASLA CLRF PORTB ;portB'yi sil CLRF SAYAC ;SAYAC sil TEKRAR MOVF SAYAC, W ;SAYAC' W registere ykle PORTB ;W registeri PortB'ye gnder IMCF ;SAYACSAYAC+1 MOVLW h'07' ;W registere h'07" ykle SUBWF SAYAC, W ;WSAYAC-W BTFSS STATUS, 2 ;STATUS bit2=l mi? GOTO TEKRAR ;Hayr, TEKRAR'a git DONGU GOTO DONGU END

EQU

h'OC'

;SAYAC registerini tanmla

PORTB ;PortB'yi temizle STATUS, 5 ;BANK2'ye ge TRISB ;PortB'nin tm ularn k yap STATUS, 5 ;BANKl'e ge

MOVWF SAYAC, F

lem Basamaklar
1. 2. 3.
76543210 oooooo

Program PIC'e yazdrp, deneme katnza veya breadboard zerine kurduunuz devreye yerletiriniz. PIC'e gerilim uygulaynz. PortB'deki LED'ler birka mikrosaniye sonra h'06' saysn binary olarak gsterecektir.

Sonu: PIC'e gerilim uyguladktan sonra, PortB'de yukardaki saynn gsterilmesine kadar geen sre, dngnn alma sresidir. Bu sre dngnn tekrar saysyla doru orantldr. MOVLW h'07' satrnda W registeri ierisine atanan h'07' says yerine baka bir say yazmak suretiyle dngnn tekrar etme says deitirilebilir. Yukardaki programda, dng ierisine tekrar edilecek herhangi bir komut yazlmamtr (Programda verilmek istenen konunun zn daha karmak hale getirmemek iin). Eer bir komutu nceden tespit ettiiniz sayda almasn istiyorsanz, bu dng ierisine yazabilirsiniz. KENDlNZ UYGULAYINIZ SAYAC ierisine ve W register ierisine konulacak saylar kendiniz tespit ederek LED'lerin binary 9 saysn gstermesini salayan program kendiniz yapnz. LED'ler aadaki gibi yanmas gerekir.

ZAMAN GECKTRME ve ALT PROGRAMLAR


ZAMAN GECKTRME DNGLER

ALT PROGRAMLAR

ZAMAN GECKTRME DNGLER


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

Dahili Komut Saykl


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

PIC16F84'n osilatr giriine 4 MHzlik bir kristal osilatr frekans uygulanrsa, PIC16F84 bu frekans kendi ierisinde 4'e bldnde, 1 MHzlik bir dahili frekans elde edilir. Bu frekansn bir saykl (T=1/f=1/1MHz=1 S )bir komutun icra sresidir. rnein, PIC16F84" uygulanan XC osilatrn frekans 10 MHz ise, CLRF PORTB ve BSF STATUS, 5 komutlarnn alma srelerini yle gsterebiliriz: 10 MHzlik frekansn bir saykl T=1/f =1/106 Sn=0.1 S eder. Dahili komut saykl ise 4x0.1S eder.

PIC16F84 mikrodenetleyicisinin komutlarndan 10 tanesi hari dierleri 1 komut saykl sresinde alr. Bu komutlar aadakilerdir.

Komut GOTO CALL RETURN 2 2 2

Komut saykl

Program counter'a (PC) veri yazan komutlar 2

DECFSZ RETLVV RETFIE NCFSZ BTFSC BTFSS

1 (Register iensindeki say 1'se) 2 (Register ierisindeki say 0'sa) 2 2 1 (Register ierisindeki say 1'se) 2 (Register ierisindeki say 0'sa) 1 (Test edilen bit 1'se) 2 (Test edilen bit 0'sa) 1 (Test edilen bit 0'sa) 2 (Test edilen bit 1'se)

Tek Dng ile Minimum Zaman Geciktirme


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

Tek Dng ile Maksimum Zaman Geciktirme


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

Komut Saykl Saysnn Bulunmas


Dngdeki saykl says programn banda SAYAC adl registere atanan (N) saysna bal olduu grlmektedir. yleyse bir dngnn ka saykllk gecikme oluturacan bulan bir forml oluturacak olursak; Komut Saykl Says KSS = 1+1+1x(N-1)+2+2x(N-1) =1+1+N-1+2+2N-2 = 3N+1 N says byk bir say olduunda 1 saykllk bir sre gecikme dngsnde ok nemli bir rol oynamayaca dnlrse, yukardaki formldeki 1 saysn iptal edebiliriz. Bu durumda forml aadaki gibi yazabiliriz. KSS=3N rnek: 10 MHzlik bir osilatrden uygulanan clock frekans uygulanan PlC16F84'de 100 Slik gecikme salayan bir dngde ka saykllk gecikme olduunu bulalm. 10 MHZlik frekansn bir saykl T=1/f =1/106 Sn=0.1 S eder. Dahili komut saykl ise 4x0.1S=0.4 S dir.

Komut
MOVLW H'52" MOVNF SAYAC NOP NOP NOP DONGU 1 1 1 1 1

Saykl

DECFSZ SAYAC, F 1x81+2 GOTO DONGU 2x81 Toplam 250 saykl Bu dngde SAYAC ierisine atanan N says h'52' nin desimal say karl 82'dir. Buna gre dngnn ka komut saykl oluturduunu formlle bulacak olursak; KSS=3xN+1= 3x82+1=247 saykl Saykl saysn 250'ye getirmek iin eklenen NOP komut saykln eklersek, KSS=247+3=250 eder. Bu dngnn ne kadar srelik bir gecikme salayacan bulalm: Gecikme Sresi(GS)=250*0.4 S= 100S

N saysnn bulunmas
PIC'e 4 MHzlik frekans uygulandnda bir komut sayklnn 1 S olacan biliyoruz. Bu durumda N saysn belirlemek kolaydr. 100Slik bir gecikme iin 100 saykllk bir gecikme dngs oluturulmaldr. N saysn hesaplarsak N=KSS/3= 100/3=33.3 olmaldr. Bu say yaklak 33 desimal saysdr. Heksadesimale dntrrsek, h'21'eder. zetlersek, 4 MHzlik harici clock frekansnda 100 Slik gecikme oluturan dngde SAYAC registeri ierisine atanan say h'21' olmaldr. PIC'e uygulanan frekans 4 MHz dan farkl olursa bu defa KSS saysn bulmak iin bir forml retelim; PIC'e uygulanan harici frekansa f, dahili komut frekansna fk dersek; Dahil komut frekans(fk)= f/4 olur. Komut saykl Tk=1/fk olur. (Bir komutun alma sresi) fk y yerine koyarsak:

Tk =

1 4 = S f f 4

KSS =

GS GSf = 4 4 f

KSS=Gecikme sresi(GS)/Tk dr.

KSS=3xN olduunu daha nce bulmutuk. imdi N'i yalnz brakarak KSS' nin yukarda bulduumuz eitliini yerine koyarsak; N=KSS/3 burada KSS'yi yerine koyalm.

GSf GSf N= 4 = 3 12

neticede N=GSxf/12

formlyle N says bulunur.

rnek: 300 Slik gecikme yapan zaman geciktirme dngsnde, N says ka olmaldr? (PIC'e bir kristal osilatrden 10 MHzlik frekans uygulanmaktadr.) GS=300S, f=10MHz N=GSxf/12 N=300x10/12=250 250 saysn heksadesimale dntrrsek, N=h'FA' olarak buluruz.

ift Dngl Zaman Geciktirme


Maksimum gecikme yapan tek dngde oluturulan 766 saykllk sre az gelebilir. Bu durumda i ie iki veya daha fazla dng kullanlabilir. imdi bu kitaptaki ou zaman geciktirme ilemlerinde kullanacamz ift dngnn ak diyagramn ve program yapalm.

N Saysnn Hesaplanmas
SAYAC1 registeri ierisine konulan sayya M, SAYAC2 registerine yklenen sayya da N diyerek program yazalm. Komut GECIKME DONGU1 MOVLW MOVWF DONGU2 DECFSZ GOTO DECFSZ GOTO RETURN SAYAC2,F DONGU2 SAYAC1,F DONGU1 Toplam 1xNxM 2xNxM 1Xm 2Xm 2 196608 saykl hFF SAYAC2 1xM 1xM MOVLW MOVWF hFE SAYAC1 Saykl 1 1

Toplam komut saykl says M ve N saylarnn 3 kat kadardr. yleyse bunu forml biiminde yazarsak; Yaklak olarak KSS=3xMxN olur. Bu geciktirme programnda M ve N saylar h'FF' olduuna gre elde edilen komut saykl says maksimum elde edilebilecek olan saydr. Bu say da, KSS=3x256x256=196608 saykl eder. 1 MHzlik dahili clock sayklnda bu sre 196608S = 197 S (yaklak) rnek: ift dngl bir zaman geciktirme programndan 12 S lik bir gecikmesi isteniyorsa M ve N saylar ne olmaldr? Not: PIC'e harici olarak uygulanan clock frekans= 4 MHz dir. Bu frekans 4'e blndnde 1 MHzlik dahili komut frekans elde edilir. zm: KSS=3xMxN dir. M ve N saylarna ayn saylan vererek bu program yapacamz dnelim. M=N olduundan yukardaki forml, KSS=3xM2 olarak yazabiliriz. 12 mS= 12000S eder. Dahili clock frekans 1 MHz olduundan 12000 komut saykl gerekir. 12000=3xM2 M2= 2000/3 M=63.2 desimal = h'3F' M ve N birbirine eit olduundan M=h'3F' N=h'3F' olarak bulunur. Bylece ift dngl zaman geciktirme devresinde 12 mS lik zaman gecikmesi iin, SAYAC1 ve SAYAC2 registerleri ierisine h3F' says yklenmelidir.

ALT PROGRAMLAR
Program ierisinde defalarca tekrar edilmesi gereken program paralar olabilir. Bu durumda ayn program komutlarn her defasnda yazmak hem zor olacak, hem de bellekte ok fazla yer kaplayacaktr. Bu sorunu gidermek amacyla: alt programlar bir defa yazlr, kullanlmas gerektiinde alt programn ad CALL komutundan sonra yazlarak arlr. Bu andan itibaren programn ak alt programa geer. Alt program komutlar bittiinde en sonuna yazlan RETURN komutu vastasyla ana programa dnlr ve kald yerden devam eder. Bir alt programn almasn ematik olarak aadaki gibi gsterebiliriz. CALL ALT_PROG komutuyla alt program arlarak altrlmaya baland anda, programn tekrar geri dnecei adres bilinmesi gerekir. ite STACK REGSTER bu adresin yazld zel bir registerdir. Programcnn bu registere adresin nasl yazld ile ilgilenmesi gerekmez. nk assembler program bu ilemi otomatik olarak yapar. Eer arlan alt program ierisinden baka bir alt program daha arldysa bu adresler stack register ierisinde ard ardna yazlr. Bu nedenle registere stack (yn) ad verilmitir. Alt programlardan RETURN komutuyla geri dnlrken en son yazlan adres ilk nce ilem grr. imdi yukarda verdiimiz rnekteki ilem srasn alayalm: 1. 2. 3. 4. 5. 6. 7. Ana programn ilk komutundan itibaren program almaya balar. CALL_ALTPROG (Programn ak ALT_PROG adl alt programa geer) Ana programdan kld andaki adres STACK REGSTER'e yazlr. Alt program komutlan alr. RETURN, Alt program komutlarnn bittiini gsterir. Program akn ana programda kald yerdeki adrese gnderir. STACK registerde yazl bulunan aynlma adresi alnr. Ana program kald yerden itibaren almaya balar ve END komutu ile sona erer. PROGRAM-10) Zaman gecikme dngs kullanarak PortB'ye bal ola tm LED'leri belirli zaman aralklaryla yakp-sndren program. ;===PROG10.ASM====07/06/2000==="== LIST P=16F84 INCLUDE "P16F84.IHC" SAYACl EQU h0C SAYAC2 EQU hOD CLRF PORTB BSF STATUS, 5 CLRF TRISB BCF STATUS, 5 TEKRAR MOVLW h00 MOVWF PORTB CALL GECIKME MOVLW h'FF' MOVWF PORTB CALL GECIKME GOTO TEKRAR

GECIKME MOVLW MOVWF DONGUl MOVLW MOVWF DONGU2 DECFSZ GOTO DECFSZ GOTO RETURN END

;Alt program balangc h'FF' SAYACl h'FF' SAYAC2 SAYAC2, F DONGU2 SAYACl, F DONGUl

lem Basamaklar
1. 2. 3. PIC'i programlayarak deneme kartnza veya breadboard zerine kurduunuz devre zerine yerletiriniz. Deneme setine gerilim uygulayarak PortB'deki tm LED'lerin belirli aralklarla yanp sndn grnz. SAYAC1 ve SAYAC2 deikenleri ierisine atanan saylan deitirerek LED'lerin 0.5 sn aralklarla yanp-snmesini salaynz.

PROGRAM-11) PortA'nn 1. Numaral ucuna bal butona 10 defa bastktan sonra PortB'deki tm LED'leri yakan program. Bu program 7. blmde dngleri anlatrken yaptmz rnekte uygulamtk. Ancak A portuna bal butonda meydana gelen ark sndrmek iin dzenlediimiz dng bunu engelleyemediini grdnz (Gecikme zaman ok ksa olduu iin.) imdi gecikme zamann istediimiz kadar ayarlayabildiimiz program dnglerini rendiinize gre, bu ilemi tam olarak gerekletiren PIC' programlayalm.

;===PROG11.ASM====08/06/2000======= LIST P=16F84 INCLUDE "P16F84.IMC" SAYACl EQU h'OC' SAYAC2 EQU h0D MEM EQU h'OE' CLRF PORTB ;PortB'yi sfrla BSF STATUS, 5 ;BANK2'ye ge CLRF TRISB ;PortA'nn 1. Bit'i giri

BSF TRISA, 1 ;portB'nin ular k BCF STATUS, 5 ;BANKl'e ge CLRF MEM ;MEM registerini sfrla TEKRAR BTFSC PORTA, 1 ;PortA'nn l.bit'i 0 m? ;Hayr, tekrar test et GOTO TEKRAR INCF MEM ;Evet, MEM=MEM+1 MOVF MEM,W ;WMEM SUBLW d'l0' ;W = d'l0' - W BTFSC STATUS,2 ;STATUS'un 2.bit'i 0 m ? GOTO YAK ;Hayr, Z=1 CALL GECIKME ;Evet, buton arknn snmesini bekle GOTO TEKRAR ;Butonu test iin baa git YAK MOVLW hFF ;WhFF MOVWF PORTB ;PortB'deki tm LED'leri yak DONGU GOTO DONGU ;===========; Gecikae alt program.=========== GECIKME MOVLW h'FF' MOVWF SAYACl DONGU1 MOVLW h'FF' MOVWF SAYAC2 DONGU2 DECFSZ SAYAC2, F GOTO DONGU2 DECFSZ SAYACl, F GOTO DONGUl RETURN END lem Basamaklar 1-) PIC'i programlayarak deneme kartnza yerletriniz. 2-) Deneme kartna gerilim vererek PIC' altrnz. 3-) A1 butonuna belirli aralklarla 10 defa basnz. Butona 10. defa bastnzda portB'deki tm LED'lerin yandn grnz.

BT KAYDIRMA ve MANTIKSAL LEM KOMUTLARI


SOLA KAYDIRMA (RLF) SAA KAYDIRMA (RRF) COMF ve SWAPF KOMUTLARI

MANTIKSAL LEM KOMUTLARI

SOLA KAYDIRMA (RLF)


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

MSB

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

PROGRAM-12) PortB'ye bal 8 LED zerindeki bir LED'in yann belirli aralklarla kaydran (LED0'dan LED7'ye doru) program. Yanarak kayan LED en sona geldiinde tm LED'ler snk kalr. ;===PROG12.ASM====09/06/2000======= LIST INCLUDE SAYACl EQU SAYAC2 EQU CLRF h'0C' h'0D' PORTB ;PortB'yi sfrla BCF BSF CLRF BCF STATUS, 0 STATUS, 5 TRISB STATUS, 5 ;Carry flag' sfrla ;BANKl'e ge. ;PortB'nin tm ular ka. ;BANK0'a ge. ;W registerini PortB'ye ykle ;Gecikme yap ;PortB'deki veriyi sola kaydr. ;Carry flag 1 mi? ;Hayr, ;b'0000000l' saysn W'ye ykle P=16F84 "P16F84.IHC"

MOVLW h'0l' MOVWF PORTB TEKRAR CALL RLF GOTO DONGU

GECIKME PORTB, F TEKRAR

BTFSS STATUS, 0

GOTO

DONGU

;Evet, Sonsuz dngye gir. GECIKME

;Gecikme alt program

MOVLW h'FF' MOVWF SAYACl DONGUl MOVLW h'FF' MOVWF SAYAC2 DONGU2 DECFSZ SAYAC2, F GOTO DONGU2 DECFSZ SAYACl, F GOTO DONGUl RETURN END

lem Basamaklar
1. 2. PlC'i programlaynz. Deneme kartnza yerletirerek gerilim uygulayp devreyi altrnz. En soldaki bit'ten balayarak saa doru yanan LED'i izleyiniz. Program bittiinde tm LED'ler snk kalacaktr. Program tekrar altrmak iin RES tuuna basnz.

SAA KAYDIRMA
RRF komutu, belirlenen bir file register ierisindeki bit'lerin pozisyonunu her defasnda bir saa kaydrmak iin kullanlr. Register ierisindeki bit'ler saa kaydnda LSB bit'i, STATUS registerde bulunan carry flag ierisine yazlr. Carry flag ierii ise registerin MSB bit'ine yazlr.

RRF komutunun yazl aadaki gibidir. RRF File Register d Destination (Gidecei yer) W veya F Destination W ise kaydrma sonucunda elde edilen bit paterni W registere, F ise file registere yazlr. rnein MEM adndaki bir file register ierii H'49' ise RLF komutu altrldnda MEM registerinin ieriinin ne olduunu ematik olarak gsterelim. H'49'= b'01001001' dir. MOVLW h'49' MOVWF MEM RKF MEM, F

PROGRAM-13) PortB'ye bal olan 8 LED zerinde bjr LEDin yann saa-sola kaydran ve bu ilemi devaml olarak yaptran program. (Bu programn adn ok eskiden nl bir TV dizisindeki otomobilden alarak "Karaimek" diyoruz. Bu otomobilin de nndeki LED'lerin yan saa-sola kayarak yanyordu,.);:Bu nedenle programa ksaca karaimek program diyebilirsiniz.

;===PROG13.ASM====12/06/2000======= LIST P=16F84 INCLUDE "P16F84.INC" SAYACl EQU h'0C' SAYAC2 EQU h'0D' CLRF PORTB BCF STATUS, 0 ;Carry flag' sfrla BSF STATUS, 5 CLRF TRISB BCF STATUS, 5 MOVLW h'0l' ;b'0000000l' saysn W'ye ykle MOVWF PORTB ;W registerini PortB'ye ykle SOL CALL GECIKME ;Gecikme yap RLF PORTB, F ;PortB'deki veriyi sola kaydr. BTFSS PORTB, 7 ;PortB 7. Bit 1 mi? GOTO SOL ;Hayr, sola kaydr. SAG CALL GECIKME ;Gecikme yap RRF PORTB, F ;PortB'deki veriyi saa kaydr. BTFSS PORTB, 0 ;PortB 0. Bit 1 mi? GOTO SAG ;Hayr, saa kaydr GOTO SOL ;Evet, sola kaydr. GECIKME ;Gecikme alt program MOVLW h'FF' MOVWF SAYACl DONGUl MOVLW h'FF' MOVWF SAYAC2 DONGU2 DECFSZ SAYAC2, F

GOTO DONGU2 DECFSZ SAYACl, F GOTO DONGUl RETURN END

lem Basamaklar
1. 2. PIC'i programlayp, deneme kart zerine yerletirerek altrnz. Yanan LED'in nce en sola ulatktan sonra bu defa saa doru kaydn ve bu ilemin devaml olarak tekrar ettiini grnz.

Yanan LED'in en sola ulatnda PORTB'nin 7. Bitinin "1" olup olmad kontrol edildiine dikkat ediniz. Yanan LED en saa ulatnda da 0. bit kontrol edilmektedir.

COMF VE SWAPF KOMUTLARI


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

MOVNF MEM COMF MEM, F 0 1 MEM 0 0 0 1 1 1 1 1 0 0 1 0 1 0

PROGRAM-14) PortB'deki LED'leri dnml olarak ilk nce ilk drt bit'indeki, sonra da son drt bit'indeki LED'leri yakan program.

; ===PROG14.ASM====14/06/2000======= LIST P=16F84 INCUJDE "P16F84.INC" SAYACl EQU h0C SAYAC2 EQU h0D CLRF PORTB BSF STATUS, 5 CLRF TRISB BCF STATUS, 5 MOVLW h0F ;b'00001111' saysn W'ye ykle MOVWF PORTB ;w registerini PortB'ye ykle TERSLE COMF PORTB, F ;PortB'deki veriyi tersle CALL GECIKME ;Gecikme yap GOTO TERSLE

GECIKME ;Gecikme alt program MOVLW h'FF' MOVWF SAYACl DONGUl MOVLW h'FF' MOVWF SAYAC2 DONGU2 DECFSZ SAYAC2, F GOTO DONGU2 DECFSZ SAYACl, F GOTO DONGUl RETURN END

lem Basamaklar
1.

Program PIC'e yazdrdktan sonra deneme kartna takp, gerilim uygulaynz. PortB'deki LED'lerin dnml olarak ilk nce ilk drt tanesi daha sonra son drt tanesinin aralklarla yandn grnz.

2.

SWAPF komutu, seilen bir file register ierisindeki verinin ilk drt bit'iyle son drt bit'ini yer deitirir. Yazl aadaki gibidir. SWAPF File Register d Destination (Gidecei yer) W veya F MEM adl bir file register ierisine h'C6' verisi yerletirilirse SWAPF komutu altrldnda oluan durumu ematik olarak aadaki gibi gsterebiliriz. MOVLW hC6 MOVWF MEM SWAPF MEM, F

MANTIKSAL LEM KOMUTLARI


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

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


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

Yukardaki ilemi BCF komutu ile yapmak isteseydik, birden fazla BCF komutu kullanmak gerekirdi. Halbuki, ANDLW komutuyla ayn anda (Bir komut sayklnda) 2 bit'in deeri deitirebildik.

ANDWF Komutu
Seilen bir f'le register ile W register ieriini AND'ler, sonu W veya F register ierisine yazlr. Komutun yazl aadaki gibidir. ANDWF File Register d Destination (Gidecei yer) W veya F rnein, PORTA registerinin ierii b'00101100' olsun. W registerin ierisine b"l 1011111' verisi yerletirerek 5. bit'in ieriini "0" yapan ve PORTB'ye gnderen komutlar yazalm. MOVLW b'11011111 AMDWF PORTA, W MOVWF PORTB DONGU GOTO DONGU

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


W registerin ierini istenen bir sabit veri ile OR'lar, elde edilen sonucu V registere yazar. Komutun yazl aadaki gibidir. IORLW Sabit

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

IORWF Komutu
Seilen bir file register ile W registerin ieriini OR'lar, sonucu W registere ya da file registere yazar. Komutun yazl aadaki gibidir. IORWF File Register d Gidecei yer W veya F

XORLW Komutu (stenilen bir bit'i terslemek)


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

XORWFKomutu
Seilen bir file register ile W registerinin ierii XOR'lanr. Sonu W veya F register ierisine yazlr. Komutun yazl aadaki gibidir.

XORWF File Register

d Destination (Gidecei yer) W veya F

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


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

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


W register iindeki bir byte'lk verinin "0" olup olmadn test etmek iin "0" sabit verisiyle OR'lanr. Bu ilem iin IORLW komutu kullanlr. Bir file register ierisindeki verinin "0" olup olmadn kontrol etmek iin, W register ierisine "0" verisi atandktan sonra bu ikisi OR'lanr. Bu ilem iin IORWF komutu kullanlr. OR'lama sonucunda karlatrlan byte'lar aynysa, yani ierikleri "0" sa, Z flag"1"olur. rnein, W register ieriinin "0" olup olmadn kontrol etmek iin aadaki komutlar yazmak gerekir. MOVLW b00000000 TEST_W IORLW b00000000 BTFSS STATUS, 2 GOTO TBST_W DEVAM

PROGRAM-15) PortA'nn 1. ve 2. bit'lerine bal olan A1 ve A2 butonlarnn her ikisi birden basl olduunda PortB'nin 0. bit'ine bal LED'i yakan program. NOT: PortA'nn girileri pull-up yapldndan butonlara baslmadnda giriler "1" dir. PIC16F84'n portA girilerinden sadece 5 tanesi kullanldndan PortA'daki 8 bitlik verinin deerlii en yksek son bitinin deeri daima "0" dr. Bu nedenle A1 ve A2 butonlarnn her ikisi birden basl olduunda portA'daki veri 00011001 'olur.

;==PROG15 -ASM====17/06/2000======= LIST P=16F84 INCLUDE "P16P84.INC" CLRF PORTB ;PortB'yi sil BSF STATUS, 5 ;BANKl ' e ge MOVLW h' FF' ;WhFF MOVWF TRISA ;PortA'nn tm ular giri CLRF TRISB ;PortB'nin tm ular k BCF STATUS, 5 ;BANK0a ge TEST_ PORTA MOVLW b000ll00l ;b'0001100l XORWF PORTA, W ;WPORTA XOR W BTFSS STATUS, 2 ;Z flag 1 mi? GOTO TEST_PORTA ;Hayr, PortA'y tekrar test et YAK MOVLW h'0l' ;Evet, Wh'0l' MOVWF PORTB ;PortB'nin 0.LEDini yak DONGU GOTO DONGU

10
ADDLW ADDWF SUBLW SUBWF RLF RRF

ARTMETK LEMLER
ARTMETK LEM KOMUTLARI 8 BT TOPLAMA 16 BT TOPLAMA 8 BT IKARMA 16 BT IKARMA

ARTMETK LEM KOMUTLARI


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

KOMUT
Sabiti W registerden karr. W registerle F(file) registerini toplar. Sabitten W registerini karr. F registerden W registerini karr. F register ierisindeki bit'leri bir sola kaydrr. (Bit'lerin dn Carryflag aracl ile olur.) F register ierisindeki bit'leri birsaa kaydrr. (Bit'lerin dn Carryflag aracl ile olur.)

AIKLAMA

PIC16, 0-255 arasndaki 8 bit'lik saylar pozitif saylar olarak ele alr. Negatif bir say 2'nin complement'i (tersi) alnmas suretiyle ifade edilerek toplama veya karmas yaplabilir. Ancak bu ilem, kitabmzn hedefledii teknik bilginin zerindedir. Bu nedenle sadece 8 ve 16 bit'lik pozitif saylar toplama karma \e arpma ilemlerini renerek mikro denetleyicilerle yapabileceiniz olduka kullanl programlar yapabileceksiniz. 0-255 saylar arasndaki 8 bit'lik toplamada, carry flag elde edilen sonucun 8 bit'in dna tap tamadn gsterir. Eer, Carry Flag=0 ise, sonu 8 bit'ten fazla deildir. Carry Flag=1 ise, sonu 8 bit'ten fazladr. Yani tama vardr. 0-255 saylar arasndaki 8 bit'lik karmada,carry flag, elde edilen sonucun negatif veya pozitif olduunu gsterir. Eer, Carry Flag=1 ise, sonu pozitiftir. Carry Flag=0 ise, sonu negatiftir. karma ileminde Carry Flag (Tama bayra) gerekten bir tama ilemini gstermediine dikkat ediniz. PIC16'nn STATUS registerinde dn alma (Borrovv Flag) olmadndan, Carry Flag'n "0" olma durumunu dn alma olarak deerlendirilir. Bu konuyu 16 bit karma ilemini anlatrken daha jyi anlayacaksnz.

8 - BIT TOPLAMA
Bir byte'lk iki say iki ekilde toplanabilir. ilki, W register sabit bir say ile toplanr(ADDLW), sonu W registere yazlr. ikincisi, W registerle bir file register ierii toplanr(ADDWF), sonu W veya F registere yazlr. ADDLN h'02' ; h'02' saya-s W registere eklenir. ; W ile MEM toplanp, MEM'e yazlr. h'03" h'00' 1 h'04' h'0l' 1 h'FF' h'00' l ADDWF MEM, F Heksadesimal say toplama rnekleri: h'06' + h'01' Sonu h'07' CarryFlag 0 h'02' h'FF' 0 + h'FD' + h'FD' + h'FD' + h'01'

ki saynn toplamndan elde edilen sonu h'FF' den bykse, tama meydana gelecek ve Carry Flag "1" olduunda ne yapmak gerektiini 16 bit toplamada anlatacaz.

PROGRAM-16) W register ierisindeki h'5A" saysyla, h'53' saysn toplayp, sunucu B portundaki LED'lerde gsteren program. /s. ;===PROG16.ASM====17/06/2000======= LIST P=16F84 INCLUDE "P16F84.IMC" CLRF PORTB BSF STATUS, 5 CLRF TRISB BCF STATUS, 5 MOVLW h5A ADDLW h53 MOVWF PORTB DONGU GOTO DONG END

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

01011010 + 01010011 0 Carry Flag 10101101

h'5A' h'53 h'AD'

lem Basamaklar
1. 2. PIC16F84'u programlayarak deneme devrenizin zerine yerletirip, gerilim uygulaynz. PortB'deki LED'lerin "ooo" biiminde yandn grnz

NOT: Deneme kart zerindeki LED'lerin sralanmasna dikkat ediniz. Bizim verdiimiz bit paterninin sras, en soldaki MSB, en sadaki LSB'dir. 3. Toplamlar h'FF' i gemeyen iki sayy yukardaki programda kendiniz girerek sonucu devreniz zerinde LED'lerden izleyiniz.

16- BT TOPLAMA
Toplama ileminde kullandmz saylar 1 byte=h'FF'=d'256' dan daha byk olduunda ne yapmamz gerekir? Kolay, iki veya daha fazla byte ile gsteririz. rnein, h'01FD' saysn iki paraya blerek h'01' iin bir A registeri, h'FD' iin bir B registeri kullanarak ilemleri yaparz. Aada 16-bit toplama ileminin nasl yapldn anlatrken B registerinin ieriine alt byte, A registerinin ieriine de st byte diyeceiz. 16-bit toplama ilemlerinde vereceimiz rneklerde kullanacamz 2 byte, 0-65535 arasndaki desimal saylar ifade etmeye yeterli olacaktr. Bilgisayar aritmetiinde 2 byte'lk veriler kullanarak yaplan ilemlere "Double precision - ift duyarlkl" ilemler ad verilir. imdi double precision toplama ileminin nasl yaplacan grelim: 1. 2. 3. Toplanacak iki saynn nce alt byte'lar toplanr. Eer alt byte'larn toplamnda tama varsa, st byte'lardan birisine "1" eklenir. st byte'lar toplanr.

Double precision toplama ilemini bir ak diyagram izerek ifade edelim:

rnein h'1613' saysyla h'01F0' saysn toplarsak alt byte'ta meydana gelen tamay heksadesimal ve binary olarak toplama ileminde nasl meydana geldiini aadaki gibi gsterebiliriz. h1613=d5651 =b0001011000010011 +h01F0 =d0496 =b0000000111110000 h1803 =d6147 =b0001100000000011 PROGRAM-17) h'61A3' ve h'2EE0' saylarn toplayan program. Program altnda toplamn alt byte' PortB'deki LED'lerde grlr. st byte'n toplamn grmek iin A1 butonuna baslr. 2 byte'lk h'61A3' saysna A, h'2EE0' saysna da B dersek, bu saylar 1 byte'lk veri depolayabilen 2 tane file register kullanmamz gerekir. imdi programda kullanacamz file registerlerin adn belirleyelim.

;===PROG17.ASM====22/06/2000======s= LIST P=16F84 INCLUDE "P16F84.INC" CLRF PORTB ;PORTB" yi sil. BSF STATUS, 5 ;BANKl'e ge. CLRF TRISB ;B portu tm ular k. MOVLW h'FF' ;Wh'FF' MOVWF TRISA ;A potu tm ular giri. BCF STATUS, 5 ;BANK0'a ge. AL EQU h'0C' ;AL registerinin adresi AH EQU h'0D' ;AH registeri adresi BL EQU h'0E' ;BL registerinin adresi BH EQU h'0F' ;BH registerinin adresi BASLA MOVLW h'A3' ;Wh'A3' MOVWF AL ;ALh'A3' MOVLW h'61' ;Wh'61' MOVWF AH ;AHh'61' MOVLW h'E0' ;Wh'E0' MOVWF BL ;BLh'E0' MOVLW h'2E' ;Wh'2E' MOVWF BH ;BHh'2E" TOPLA MOVF AL, W ;WAL ADDWF BL, P ;BL=BL+W(AL), alt byte toplam BTFSC STATUS, 0 ;CARRY FLAG=1 mi ? INCF BH, P ;Evet, BH=BH+1 MOVF AH, W ;WAH ADDWF BH, F ;BH=BH+W(AH) , st byte toplam ALT_BYTE_GOSTER MOVF BL, W ;WBL MOVWF PORTB ;Alt byte toplamn gster TEST_A1 BTFSC PORTA, 1 ;A1 butonuna basld m? GOTO TEST_A1 ;Hayr, tekrar test et UST_BYTE_GOSTER MOVF BH, W ;Evet, W0BH MOVWF PORTB ;st byte toplamn gster. DONGU GOTO DONGU END

lem Basamaklar
1. 2. PIC16F84' programlayarak deneme kartnza yerletiriniz. Deneme kartnza gerilim uygulandnda LED'lerin "ooooo" biiminde yanarak alt byte'larn toplamn gsterdiini izleyiniz. (h'83')

3. 4. 5.

A1 butonuna basnz, bu defa st byte'larn toplamn LED'lerde "oooooo" biiminde grnz.(h'90') Alt byte' tekrar grmek iin RESET butonuna basnz. PROG17.ASM'de deikenler ierisine girilen verileri deitirerek yeni oluan toplam nce kendiniz hesaplaynz. Daha sonra PIC' programlayarak sonucu deneme kartnz zerinde gzleyiniz.

8 - BIT IKARMA
Bir byte'lk iki saynn iki ekilde karmas yaplabilir. lki, sabit bir saydan W registerin ierii karlr(SUBLW). ikincisi, seilen bir file register ieriinden W register ierii karlr(SUBWF), sonu W veya F registere yazlr. SUBLW SUBWF h'02' MEM, F ;h'02'den W registeri karlr. ;MEM'den W registeri karlr.

Kk saydan byk say karlnca Carry Flag=0, byk saydan kk say karlnca veya saylar birbirine eit olunca Carry Flag=1 olur. rnekler: h'05' - h'06' hFF CarryFlag 0 h'05' - h'05' h00 1 h'05' - h'04' h01 1

CarryFlag 0 ise sonu negatif, 1 ise pozitiftir. PROGRAM-18) PORTB registeri ierisindeki h'5A' saysndan W registeri ierisindeki h'53' saysn karan, sonucu PORTB'ye bal LED'lerde gsteren program.(Byk saydan kk say karma rnei.) ;===PROG18.ASM====22706/2000======= LIST P=16F84 INCLUDE "P16F84.INC" CLRF PORTB ;PORTB'yi sil BSF STATUS, 5 ;BANKl'e ge CLRF TRISB ;B portu tm ular CIKIS BCF STATUS, 5 ;BANK0'a ge MOVLW h'5A' ;Wh'5A' MOVWF PORTB ;PORTBW MOVLW h'53' ;Wh'53' SUBWF PORTB, F ;PORTBPORTB - W DONGU GOTO DONGU END

lem Basamaklar
1. 2. PIC16F84' programlayp deneme kartna yerletiriniz. Deneme kartna gerilim uygulayp program altrdnzda portB'deki LED'ler "ooooo" biiminde yanacaktr.

PROGRAM-19) PORTB registeri ierisindeki h'52' saysndan W registeri ierisindeki h'53' saysn karan, sonucu PORTB'ye bal LED'lerde gsteren program. (Kk saydan byk sayy karma rnei.) ;===PROG19.ASM====22/06/2000======= LIST P=16F84 INCLUDE "P16F84.INC" CLRF PORTB ;PORTB'yi SI BSF STATUS, 5 ;BANKl'e ge CLRF TRISB ;B portu tm ular k BCF STATUS, 5 ;BANK0'a ge MOVLW h'52' ;Wh'52' MOVWF PORTB ;PORTBW MOVLW h'53' ;Wh'53'

SUBWF PORTB, F ;PORTBPORTB - W COMPF PORTB ;PortB'nin tersini al INCF PORTB ;PortB'ye "1" ekle DONGU GOTO END DONGU

lem Basamaklar
1. 2. PIC16F84' programlayp deneme kartna yerletiriniz. Deneme kartna gerilim uygulayp program altrdnzda portB'deki LED'lerin "ooooooo" biiminde yandn grnz.

16- BITIKARMA
Double precision karmada iki byte'lk veriler kullanldndan saylar ifade etmek iin iki file register kullanmak gerekir. rnein, 2 byte'lk h'61A8' saysna A, h'2EE0' saysna da B dersek, bu saylardan her birini 1 byte'lk veri depolayabilen 2 tane file register kullanmamz gerekir.

1. 2. 3. 4.

imdi double precision karma ileminin nasl yapldn grelim: Alt byte'lar birbirinden karlr. Alt byte'larn karmas sonucunda dn alma varsa(Carry Flag=0'sa), st byte'lardan birisnden "1" karlr. Eer dn alma yoksa (Carry Flag=1'se) st byte'larn birbirinden karmas yaplr. PROGRAM-20) h'0004' saysndan h'0001' saysn karan program. Program altnda karma sonucunun alt byte' PortB'deki LED'lerde grlr. st byte' grmek iin A1 butonuna baslr. 2 byte'lk h'0004' saysna A, h'0001' saysna da B dersek, bu saylar 1 byte'lk veri depolayabilen 2 tane file register kullanmamz gerekir. imdi programda kullanacamz file registerlerin adn belirleyelim.

AL AH BL

===PROG20.ASM====23706/2000======= LIST P=16F84 INCLUDE "P16F84.INC" CLRF PORTB ;PORTB' yi sil. BSF STATUS, 5 ;BANKl'e ge. CLRF TRISB ;B portu tm ular k. MOVLW h'FF' ;Wh'FF' MOVWF TRISA ;A potu tn ular giri. BCF STATUS, 5 ;BANK0'a ge. EQU h'0C' ;AL registerinin adresi EQU h'0D' ;AH registeri adresi h'0F' ;BL registerinin adresi EQU

BH EQU h'0D' ;BH registerinin adresi BASLA MOVLW h'04" ;Wh'04' MOVWF AL ;ALh'04' MOVLW h'00' ;Wh'00' MOVWF AH ;AHh'00' MOVLW h'0l' ;Wh'0l' MOVWF BL ;BLh'0l' MOVLW h'00' ;Wh'00' MOVWF BH ;BHh'00' CIKAR MOVF BL, W ;WBL SUBWF AL, F ;AL=AL-W(BL), alt byte sonucu BTFSS STATUS, 0 ;CARRY FLAG=0 m ? DECF AH, F ;Evet, AH=AH-1 MOVF BH, W ;Hayr, WBH SUBWF AH, F ;AH=AH-W(BH), st byte sonucu ALT_BYTE_GOSTER MOVF AL, W ;WAL MOVWF PORTB ;Alt byte sonucunu gster TEST_A1 BTFSC PORTA, 1 ;A1 butonuna basld m? GOTO TEST_A1 ;Hayr, tekrar test et MOVF AH, W ;Evet, WAH MOVWF PORTB ;st byte sonucunu gster. DONGU GOTO DONGU END

lem Basamaklar
1. 2. 3. 4. 5. PIC16F84' programlayarak deneme kartnza yerletiriniz. Deneme kartnza gerilim uygulandnda LED'lerin "oooooo" biiminde yanarak alt byte'larn karma sonucunu gsterdiini izleyiniz. (h'03') A1 butonuna basnz, bu defa st byte'larn karma sonucunu LED'lerde "oooooooo" biiminde grnz.(h'00') PROG20.ASM'de deikenler ierisine girilen verileri deitirerek yeni oluan karma sonucunu nce kendiniz hesaplaynz. Daha sonra PIC' programlayarak sonucu deneme kartnz zerinde gzleyiniz.

11

EVRM TABLOLARI
EVRM TABLOSU NEDR? PROGRAM COUNTER 7 SEGMENT DISPLAY KULLANMAK STEP MOTOR KONTROL

EVRM TABLOSU (LOOKUP TABLE) NEDR?


evrim tablolar bir kodu baka bir koda evirmek iin kullanlrlar. rnein PORTB'ye baladmz 7 segment display'in zerinde heksadesimal karakterle grmek istediimizi dnelim. evrim tablosuna yerletirdiimiz heksadesima koda karlk gelen uygun kodu seip, PORTB'ye gndermemiz gerekir. Aada ^ segment srcnn 0~F arasndaki saylar gstermesi iin gereken kodla verilmitir. Bu kodlar rnek olarak vereceimiz programlarda kullanacaz. (evrilecek kod Hex say) h'00' h'01' h'02' h'03' h'04' h'05' h'06' h'07' h'08' h'09' h'OA' h'OB' h'OC' h'OD' h'OE' h'OF' Nokta evrilen 7 segment kodu (PORTB'ye) h'3F' h06' h'5B' h'4F' h'66' h'6D' h'7D' h'07' h'7F1 h'BF' h'77' h'7C' h'39' h'5E' h'79' h'71' h'80' 7 segment ularndaki veri 00111111 00000110 01011011 01001111 01100110 01101101 01111101 00000111 01111111 01101111 01110111 01111100 00111001 01011110 01111001 01110001 10000000 0 1 2 3 4 5 6 7 8 9 A b C d E F . 7 segment'te grlecek say

rnek program vermeye balamadan nce evrim tablosuna yerletirilen uygun kodun seiminin nasl yaplacandan bahsedelim. lk olarak bu seme iini gerekletiren program sayc'y (PROGRAM COUNTER), daha sonra da kodu ana programa gnderen RETLW komutunu incelememiz gerekiyor.

PROGRAM COUNTER (SAYICI)


PIC16F84'n 13 bit'lik bir program saycs vardr. GOTO ve CALL komutlaryla kullanlan 11 bit'lik adresler 2 Kbyte'lk program bellei bulunan PIC'leri adreslemek iin yeterlidir. PIC16F84'n 1 Kbyte'lk program bellei olduundan daha nce bahsetmitik. PIC programlarnda, program sayc PC kodu ile kullanlr. Program saycnn alt 8 bit'ine PCL, st 5 bit'ine de PCH ad verilir.

Program saycnn st 5 bit'ini dorudan okumak ve yazmak mmkn deildir. Ancak PlC16F84'n RAM belleinde h'0A' adresinde bulunan ve adna PCLATH verilen zel registerden veri yklenebilir. PCLATH registeri de 5 bit'tir.

2 Kbyte'tan daha fazla bellei olan PIC'lerde gereklidir. Bu tip PIC'lerde 1'den fazla BANK bulunmaktadr. Dier BANK'lara geebilmek iin bu iki bit kullanlr.

14 bit program bellei olan PIC'lerde (PIC16CXXX ve PIC16FXX) herhangi bir adresi tanmlamak iin 11 bit yeterlidir (211=2048=2 Kbyte). 1 Kbyte'lk bellei olanlarda ise 10 bit yeterlidir(210 =1024=1 Kbyte). Bu kitapta rnekleri verilecek olan programlar genellikle 256 Kbyte' (28=256 byte) gemeyeceinden, program belleinin ilk 8 bit'ini (PCL) kullanmak yetecektir. Eer 256 byte'tan daha fazla yer kaplayan programlar yazmak gerekirse PCLATH registerinin 0, 1 ve 2. bit'ini de kullanmak gerekecektir. PCLATH kullanm bizim hedef aldmz teknik bilginin stnde ar detay olduundan bu konuya girmeyeceiz.

RETLW Komutu
Bir alt programdan ana programa dn iin kullanlan RETURN komutuna ok benzer. RETLVV de ana programa dn iin kullanlr. Tek bir farkla; ana programa dn esnasnda W registere bir sabit say yklenir. rnein, ana programa dnldnde W registerinin ierisinde h'3F' says bulunmas isteniyorsa, komut aadaki gibi yazlr.

RETLW h'3F'

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

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

PROGRAM-21) 7 segment display zerinde "5" saysn gsteren program. NOT: Program 5 saysna karlk gelen h'6D' saysn semek iin kullanlan PC ve evrim tablolarnn kullanlmasn aklamas bakmndan nemlidir. ;===PROG21.ASM====26/06/2000======= LIST P=16F84 INCLUDE "P16F84.INC" CLRF PORTB ;PortB'yi sil BSF STATUS, 5 ;BANKl'e ge CLRF TRISB ;PortB k BCF STATUS, 5 ;BANK0a ge BASLA MOVLW h05 ;Wh05(test says) CALL CEV_TAB MOVWF PORTB DONGU GOTO DONGU CEV_TAB ADDWF RETLW h'3F' RETLW h'06" RETLW h'5B' PCL, F ;PCLW(h05)

RETLW h'4F' RETLW h'66' RETLW h'6D RETLW h'7D' RETLW h07 RETLW h'7F' RETLW h6F' RETLW h'77' RETLW h'7C' RETLW h'39' RETLW h'5E' RETLW h'79" RETLW h'71" RETLW h'80' END

;Wh'6D'

Programn almasn BASLA etiketinden itibaren takip edelim; 1. MOVLW h05 komutuyla W registere h'05' says yklenir. 2. CALL CEV_TAB komutuyla program ak alt programa geer. 3. ADDWF PCL, F komutuyla program saycnn alt 8 bit'i (PCL) ierisine W registerinde bulunan h'05' says yklenir. Program ak 5. satrdaki RETLVV komutuna dallanr. 4. RETLW h6D komutu W register ierisine h'6D' saysn ykler. Buradaki h'6D' says, PORTB'ye bal olan 7 segment display'de "5" saysnn grntlenmesi iin gerekli olan koddur. 5. Ana programa dnen program ak MOVWF PORTB komutuyla devam eder. Bylece PORTB'ye gnderilen h'6D' says 7 segment display'de S saysnn grntlenmesini salar. lem Basamaklar 1. Breadboard zerine yukarda verilen devreyi kurunuz. PROG21,ASI\/ programn deneme kart zerinde kolaylkla altrabilirsiniz. Kart zerinde yaplacak ey, LED-SEGMENT seme anahtarn SEGMENT konumuna almaktr. 2. PIC16F84' programlayarak devreniz zerine yerletiriniz. PIC'e gerilim uyguladnzda 7 segment display zerinde "5" saysn grnz. PROGRAM-22) PORTB'nin ularna bal 7 segment display'de 0~F arasnda saydran program. Saylar arasndaki duru GECIKME alt program tarafndan salanmtr. ;===PROG22.ASM====27/06/2000======= LIST P=16F84

INCLUDE "P16F84.INC"
SAYACl EQU h'0C' SAYAC2 EQU h0D SAYAC EQU h0E CLRF PORTB BSF STATUS, 5 CLRF TRISB BCF STATUS, 5 BASLA MOVLW h00 ;b'00001111' saysn W'ye ykle MOVWF SAYAC ;SAYACW DONG MOVF SAYAC, W ;WSAYAC ANDLW B00001111 ;W'nin st drt bitini sfrla CALL CEV7SEG ;Kod evinne alt programn ar MOVWF PORTB ;Kodu 7 segmentte gster INCF SAYAC, F ;SAYACSAYAC+1 CALL GECIKME ;Gecikme yap GOTO DONGU ;Yeni bir say iin baa dn. CEV7SEG ADDWF PCL,F ;PCLW(SAYAC) RETLW h3F ;1 RETLW h06 ;2 RETLW h5B ;3 RETLW h4F ;3 RETLW h'66 ;4 RETLW h6D ;5 RETLW h7D ;6 RETLW h07 ;7 RETLW h7P ;8 RETLW h6P ;9

RETLW h77 ;A RETLW h7C ;b RETLW h'39" ;C RETLW h'5E' ;d RETLW h'79' ;E RETLW h'71' ;F GECIKME ;Gecikme alt program MOVLW hFF MOVWF SAYACl DONGUl MQVLW hFF MOVWF SAYAC2 DONGU2 DECFSZ SAYAC2, F GOTO DONGU2 DECPSZ SAYACl, F GOTO DONGUl RETURN END lem Basamaklar 1. PIC16F84' programlayarak, breadboard zerine kurduunuz devre veya deneme kartna yerletiriniz. 2. PIC'e gerilim uygulayarak program altrnz. 7 segment zerinde 0~F arasndaki saylarn belirli zaman aralklaryla grlecektir. Say "F" e gelince tekrar 0a dnecektir.

STEP MOTOR KONTROL


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

Kullandmz step motor 2 phase (faz), 20 admldr. Bu da 360 lik tam bir dn ierisinde 18 lik admlarla ilerleyen motor demektir. X-X ve Y-Y ularna uygulanacak gerilimler elektromknatslarda oluacak N-S kutuplarnn ynn belirleyecektir. Step motorlarn dier bir eidi de unipolar step motorlardr. Bu motorlarda be kablo k vardr. Bunlarda da yine iki sarm olmakla birlikte, her sarmn ortasndan bir u daha karlmtr. Bu ular birbirine balanarak(COM) u elde edilmitir. Aada bu tip motorun ematik gsterilii verilmitir.

imdi de drt ulu bir step motorun saa doru dnmesi iin stator sarglarnda olumas gereken kutuplamay adm adm gsterelim.

Akmn gei yn mknatslanmann da ynn belirleyeceinden yukardaki ekillerde verilen admlardaki kutuplamay salayacak gerilimler X, "X Y, Y ularndan verilir. PIC ularndan verilecek olan bu gerilimler iin aadaki tabloyu karabiliriz. __ Adm X X Y Y 1 1 0 0 0 2 1 0 0 1 3 0 0 0 1 4 0 1 0 1 5 0 1 0 0 6 0 1 1 0 7 0 0 1 0 8 1 0 1 0 9(1) 1. adm ile ayn Yukardaki gerilimler tablosundaki "1" ler, motorun ularma uygulanacak olan pozitif gerilimleri ifade etmektedir. Bu gerilim 5 V olabilecei gibi, motor src devresi (Transistrl bir ykselte devresi) tarafndan elde edilecek daha byk bir gerilim de olabilir. Biz uygulamalarmz denemek iin PORTB'ye baladmz LED'leri kullandmz iin bu tablodaki deerleri PIC assembly programnda kullandmz evrim tablosuna (lookup table) yazmanz yeterlidir. Ancak bir motor src devresi yapldysa transistrleri srmek iin daha farkl bir tablo gerekebilir. Step motor kullanlan gerek uygulama devresinde bu durum gz nne alnmaldr. PIC kndan step motora uygulanan sinyalin frekans ok yksek olduundan step motor bu frekansta uygulanan gerilimlerle yeterli kutuplama salamayabilir. Bu nedenle evrim tablosundaki admlar arasnda gecikme salayan alt program muhakkak kullanlmaldr. Aada PIC ularndan kmas gereken gerilimlerin zaman tablosu verilmitir, inceleyiniz.

PROGRAM-23) Bipolar (4 ulu) bir step motoru bir yne doru A1 butonuna bastka adm adm dndren program. Step motor Lilanna gnderilecek gerilimler PORB'deki RBO-RB3 ularna balanan LED'lerde grlr.

;===PROG23.ASM====30/06/2000======= LIST P=16F84 INCLUDE "P16F84.INC" SAYAClEQU h'0C'

SAYAC2EQU h'0D' ADIM EQU h'0E' CLRF PORTB ;PortB'yi sil BSF STATUS, 5 ;BANKle ge MOVLW h'FF' ;Wh'FF' MOVWF TRISA ;PortA'nn tm ular giri CLRF TRISB ;PortB'nin tm ular k BCF STATUS, 5 ;BANK0'a ge MOVLW h'FF' ;Wh'FF' MOVWF ADIM ;ADIMW (h'FF') BASLA INCF ADIM, F ;ADIMADIM+1 (h'FF'+h'01' =h-00 ) MOVF ADIM, W ;WADIM ANDLW b'00000111' ;Wnin st 5 bitini maskele. CALL ADIMTBL ;Bifc paternini se. ANDLW b00001111 ;W'nin st 4 bitini maskele. MOVWF PORTB ;Bit paternini PORTB'de gster. CALL GECIKME ;LED'leri bir sre yank tut. GOTO BASLA ;Yeni bir bit paterni iin git. ADIMTBL ADDWF PCL, F RETLW b'000l' RETLW b'1001 RETLW b'1000 RETLW b'1010' RETLW b'00l0' RETLW b'0110' RETLW b'0l00' RETLW b'0l0l' GECIKME ;Gecikme alt program MOVLW h'FF' MOVWF SAYACl DONGUl MOVLW h'FF' MOVWF SAYAC2 DONGU2 DECFSZ SAYAC2, P GOTO DOMGU2 DECFSZ SAYACl, F GOTO DONGUl RETURN END

lem Basamaklar
1. 2. 3. PIC16F84' programlaynz. PIC deneme kartna veya breadboard zerinde kurduunuz devre zerine yerletiriniz. PIC'e gerilim uygulayarak program altrnz. A1 butonuna aralklarla basnz. PORTB'nin 0, 1, 2, 3. ularna bal olan LED'lerin programdaki evrim tablosuna gre srayla yandn grnz.

4.

PROGRAM-24) Bir step motoru PORTA'nn 1. bitine bal A1 butonuna basnca saa, A1 ve A2 butonlarna birlikte basnca da sola dndren program. Step motor ularna gnderilecek olan gerilimler PORTB'deki LED'lerde grlr.

;===PROG24.ASM====02/07/2000======= LIST P=16P84 INCLDE "P16F84.INC" SAYACl EQU h'0C' SAYAC2 EQU h'0D' ADIM EQU h0E' CLRF PORTB ;PortB'yi sil BSF STATUS, 5 ;BANKl'e ge MOVLW h'FF' ;Wh'FF' MOVWF TRISA ;PortA'nn tm ular giri CLRF TRISB ;PortB'nin tm ular k BCF STATUS, 5 ;BANK0'a ge MOVLW h'FF' ;Wh'FF' MOVWF ADIM ;ADIMW (h'FF') BASLA

BTFSC GOTO BTFSC GOTO SOL

PORTA, 1 BASLA PORTA, 2 SAG

;PORTA'nn l.biti 0 m? ;Hayr, tekrar test et. ;PORT'nn 2. biti 0 m? ;Hayr, saa dndr.

INCF ADIM, F ;ADIMADIM+1 (h'FF+h01=h00) MOVF ADIM, W ;WADIM ANDLW b'00000111' ;W'nin st 5 bitini maskele. CALL ADIMTBL ;Bit paternini se. AMDLW b'00001111 ;w'nin st 4 bitini maskele. MOVWF PORTB ;Bit paternini PORTB'de gster. CALL GECIKME ;LED'leri bir sre yank tut. GOTO BASLA ;Yeni bir bit paterni iin git. SAG DECF ADIM, F ;ADIMADIM+1 (h'FF'+h'01' =h" 00 ) MOVF ADIM, W ;WADIM ANDLW b'00000111 ;W'nin st 5 bitini maskele. CALL ADIMTBL ;Bit paternini se. AMDLW b'00001111 ;W'nin st 4 bitini maskele. MOVWF PORTB ;Bit paternini PORTB'de gster. CALL GECIKME ;LED'leri bir sre yank tut. GOTO BASLA ;Yeni bir bit paterni iin git. ADIMTBL ;evrim tablosu ADDWF PCL, F RETLW b000l RETLW b'1001 RETLW b'l000' RETLW b'1010' RETLW b'00l0' RETLW b'0110' RETLW b'0100 RETLW b'0101 GECIKME ;Gecikme alt program MOVLW h'FF' MOVWF SAYACl DONGUl MOVLW h'FF' MOVWF SAYAC2 DONGU2 DECFSZSAYAC2, F GOTO DONGU2 DECFSZSAYACl, F GOTO DONGUl RETURN END lem Basamaklar 1. PIC16F84' programlayarak deneme kartnza yerletiriniz. PIC'e gerilim uygulayarak program altrnz. 2. A1 butonuna basarak motorun saa dnmesi iin PortB'den kan gerilimleri RB0-RB3 arasndaki LED'lerden izleyiniz. 3. A1 ve A2 butonlarna birlikte basarak motoru ters ynde evirecek gerilimleri LED'lerden izleyiniz.

12

KESMELER (INTERRUPTS)
KESME (INTERRUPT) NEDR? INTCON REGISTER KESME KAYNAKLARI KESME ALT PROGRAMLARININ DZENLENMES

KESME (INTERRUPT) NEDR?


Mikro ilemcilerle yeni almaya balayan ou kimseler, interrupt kelimesini duymalarna ramen, kullanmlarnn zor olduu dncesiyle programlar ierisinde kullanmaktan ekinirler. Oysa, renilmesi ve uygulamas pek de zor olmayan interrupt alt programlar kullanlarak, program ierisinde kullanlacak komut says azaltlr ve bir sr mantksal karklklar nlenir.

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

lk bakta bir kesme meydana gelmesinin, alt program arma ileminden fark olmad izlenimi verebilir. Ancak ok nemli bir fark vardr. Normal alt program arma, program ierisine yazlan komutlar vastasyla yaplr. Kesme alt programlarnn arlmasn ise donanmda oluan deiiklikler yapar. Bir kesme meydana geldiinde, o anda almakta olan komutun almas tamamlanr. Daha sonra program ak PIC program belleinin h'0004' adresine (PIC16F84'de) atlar ve bu adresteki komutu altrr. Bu komut, "kesme servis program" veya ksaca "kesme alt program" diyeceimiz alt programn aran bir GOTO komutudur. PIC, kesme alt program altktan sonra ana programn hangi adresine geri dneceini unutmamaldr. Bu nedenle mikro denetleyici kesme olutuu anda alan komutun adresini STACK(Yn) registerine kaydeder. Alt program ilevini tamamlayp, program ak ana programa geince bu adresten itibaren devam eder. Kesme alt programndan ana programa dn komutu RETFIE (Return From lnterrupt)'dir.

Kesme olay esnasnda meydana gelen olaylar sralayacak olursak; Kesme olay meydana geldiinde STACK registerin olduau adrese (h'23F') atla. Ana programn kald adresi STACK registere yaz. h'04' adresindeki komutu altr(Bu komut kesme alt programn arr.) Kesme alt programnn olduu adrese atla. Kesme alt programn altr. Alt programn en son komutu RETFIE'dir. STACK (Yn) registerin bulunduu adrese git. Ana programa dn adresini al. Ana programn kesildii yerdeki adresten bir sonraki adrese git ve devam et.

INTCON REGSTER
INTCON (Interrupt Control) registeri RAM bellekte h'0B' adresinde bulunan zel registerlerden bir tanesidir. Bu register ierisinde her bir kesme kayna iin bir flag ve bir de global kesme bayra vardr. Tm kesme ilemlerinin kontrol bu register aracl ile yaplr. bit7 6 5 4 3 2 1 T0I E INT E RBI E T0I F 0 INT F RBI F

G IE
Bt 7: GIE: Tm kesme ilemlerini iptal etme bayra 0= Tm kesmeler geersiz (Disable) 1 = Aktif yaplm olan tm kesmeler geerli (Enable) Bit 6: EEIE: EEPROM bellee yazma ilemi tamamlama kesmesi 0= Geersiz (Disable) 1=Geerli (Enable) Bit 5: TOIE: TMRO sayc kesmesini aktif yapma bayra 0= Geersiz(Disable) 1=Geerli(Enable) Bit 4: INTE: Harici kesmeyi aktif yapma bayra 0= Geersiz(Disable). Harici kesmeler kabul edilmez. 1= Geerli (Enable). Harici kesmeler kabul edilir. Bit 3: RBIE: PORTB(4, 5, 6, 7. bit'leri) deiiklik kesmesini aktlf yapma bayra 0= Geersiz(Disable). PORTB'deki deiiklikler kesme oluturur. 1= Geerli(Enable). PORTB'deki deiiklikler kesme oluturmaz. Bit 2: TOIF: TMRO saycs zaman am bayra 0= Zaman am yok. 1= Zaman am var. (h'FF' den h'00' a gei.)

E EIE

Bit 1: INTF: Harici kesme bayra 0= Harici kesme olumadnda. 1= Harici kesme olutuunda. Bit 0: RBIF: PortB deiiklik bayra 0= RB4-RB7 ularnda deiiklik yok. 1= RB4-RB7 ularndan en azndan birisinde deiiklik var.

KESME KAYNAKLARI
PIC16F84 kesmeleri aadaki 4 kaynaktan gelebilir: 1. 2. 3. 4. Harici(External) kesme (PIC16F84'n RBO/INT ucundan giren sinyal.) TMR0 saycsnda oluan zaman am kesmesi (TMRO saycsnn h'FF' den H'OO'a gelmesi.) PORTB (4, 5, 6 ve 7 bit'ler) lojik seviye deiikliinden. EEPROM bellee yazma ileminin tamamlanmasnda meydana gelen kesme

Harici Kesmeler
Harici kesmelerin kullanlabilmesi iin iki ey gereklidir; yazlm ve donanm. Yazlm aracl ile PORTB'nin RBO/INT ucu dardan gelebilecek kesmeyi alabilecek biimde hazrlanmaldr. Bu hazrlama ilemi iin iki ilem yaplr; 1. 2. RB0/INT ucu giri olarak ynlendirmeli. INTCON registeri ierisindeki ilgili bayrak (INTE bayra) kullanlarak harici kesme ilemi aktif (geerli) yaplmaldr.

Harici kesmenin kullanlabilmesi iin bir de donanm gereksinmesi vardr. Bu da RBO ucundan sinyal girmek iin gerekli elektronik devredir. RBO/INT giriinden uygulanacak sinyalin kenar tetiklemesi nemlidir. OPTION registerin 6. bit'i bu utan girilen sinyalin ykselen kenarda m yoksa alalan kenarda m kesme oluturulacana karar vermekte kullanlr.

Kesme alt programnn almas esnasnda gelebilecek yeni kesmeleri engellemek iin, kesme olutuu zaman INTCON register'deki 4. bit (INTE bayra) "0" yaplmaldr. Eer bir harici kesme(RBO/INT ucundan sinyal girii) meydana gelirse, INTCON register ierisindeki INTF bayra "1" olur. INTF bayra interrupt alt program ierisinde tekrar "0" yaplmaldr. Aksi halde tekrarlanan kesmelerle karlalr. Yukarda sylediklerimizi ksaca zetlersek, bir harici kesme olutuunda yaplacak ilemlerin sras yledir: Sonraki kesmeleri pasif (geersiz) yapmak iin (INTE bayran "0" yap.) Kesme alt programn altr. INTF kesme bayran "0" yap. Yeni kelimeleri aktif(geerli) yapmak iin (INTE bayran "1" yap.)

TMRO Sayc Kesmesi


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

PORTB Lojik Seviye (RB4-RB7) Deiiklik Kesmesi


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

PORTB kesmesi aadaki ekillerde silinebilir; RBIE bit'i (INTCON registerin 3. bit'i) silinmek suretiyle, PORTB'yi okuduktan sonra RBIF bit'ini silmek suretiyle.

KESME ALT PROGRAMLARININ DZENLENMES


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

Kesme Esnasnda W ve Status Registeri Saklamak


Bir kesme olay meydana geldiinde program says (PC) ierii STACK registere otomatik olarak kaydedilir. Mikrodenetleyici bu sayede kesme ileminden dnte hangi adrese dneceini bilir. Dier registerlerin ieriinin deimemesi isteniyorsa, bu registerlerin korunma ilemi programcnn sorumluluuna braklmtr. Eer W ve STATUS registerin ierii korunmak isteniyorsa, gerekli komutlar kesme alt programnn ierisinde yer almaldr. Register ieriini saklama ilemi alt programn banda, geri ykleme ilemi ise sonunda bulunmaldr. imdi bir kesme olutuunda yaplmas gereken ilemleri sralayalm: W registeri bir deikene ykle. STATUS registeri bir deikene ykle. Kesme ilemini gerekletir. STATUS registeri geri ykle. W registeri geri ykle. Kesme alt programndan dn (RETFIE).

Bu ilemleri yapacak komutlar yazalm: ORG h'004" GOTO KESME_ALT_PROG KESME_ALT_PROG : MOVWF SAKLA_W ;W registerini ykle 2: SWAPF STATUS, W ;STATUS ieriini SWAP yap. 3: MOVWF SAKLA_S ;STATUS ieriini sakla ;Kesme alt program komutlar 4: SWAPF SAKLA_S, W ;STATUS ieriini yeniden SWAP yap 5: MOVWF STATUS ;STATUS registere yeniden ykle 6: SWAPF SAKLA_W, F ;W ieriini SWAP yap. 7: SWAPF SAKLA_W, W ;W'yi yeniden SWAP yap ve W'ye yaz RETFIE SWAPF komutu bir register ieriini baka bir registere STATUS registerini deitirmeden yklemek iin kullanlmtr. SVVAPF komutuyla alt drt bit ile st drt bit'in yeri deiir. Bu nedenle alt programdan geri dnlmeden nce tekrar SVVAPF komutu eski haline getirilmesi gerekir. Belki, bu ilem iin neden MOVF komutu kullanmadmz aklnza gelebilir. Kullanamayz, nk MOVF komutu STATUS registerdeki Z(zero-sfr) bayrann ieriini deitirir. Bu da zero flag'n durumunu kontrol ederek ilem yapan bir programda hatalara neden olabilir. imdi yukarda yaplan ilemlerin daha pekimesi iin bir rnek verelim. Kesme alt programna girmeden nce W registerin ierii b'00001111', STATUS registerin ierii de b'00110100' olsun. Yukardaki program komutlarnn her birinde W ve STATUS'un ieriklerini inceleyelim.

Grld gibi interrupt alt program ierisinde alan komutlar W ve STATUS'un deerini deitirmesi ihtimaline karlk SAKLA_W ve SAKLAJ registerleri geici depolama registeri olarak kullanlmtr. Ana programa ge dnte bu saklama registerlerinin ierikleri ayn kalmas salanmtr.

Kesme Alt Programlar Nereye Yazlmal?


Bir kesme meydana geldiinde "Interrupt vektor" ad verilen adres gsterici program belleinin h'004' adresini gsterir. te kesme alt programnn ilk komut buraya yazlmaldr.

Kesme kullanlmad zaman ana program, program belleinin h'0000 adresinden itibaren h'0004' adresine doru herhangi bir karkla sebep olmada alr. Eer kesme kullanlyorsa programc tarafndan baka bir alma sras dzenlenmelidir.

Interrupt kullanlan programlarn dzenlenmesi aadaki gibi olmaldr: ORG h000 GOTO BASLA ORG h004 GOTO INT_ALT_PROG ; BASLA Ana program komutlara. INT_ALT_PROG Kesme alt program komutlar RETFIE ;Ana program balangc ;Kesme alt program balangca.

Kesme Gecikmesi
Bir kesme olutuunda, kesme alt program almadan nce gecikme meydana gelir. Bu gecikmeye "kesme gecikmesi" denir. Aa-yukar 3 veya 4 komut saykl sresidir. Zamanlamann ok nemli olduu uygulamalarda bu gecikme gz nne alnmaldr. PROGRAM-25) Bu program RBO/INT ucundan girilen bir sinyal ile kesme oluturulmasna rnektir. Aadaki ekilde de grld gibi portA'nn 1. bit'ine bal butonun basl olup olmadn gsteren basit bir programdr. A1 butonuna basld anda RB1 ucuna bal LED1'in yan bu programn devaml olarak altn gsterir. RB0/INT ucundan bir sinyal girerek kesme oluturmak iin RB0 ucuna bir buton balanmtr. INT butonuna basnca kesme oluur ve kesme alt program alarak RB2 ucuna bal olan LED2'yi yakar. Bu da ana program normal olarak alrken harici bir kesme meydana geldiinde programn buna tepki verdiini ve LED2'yi yaktn gsterir.

rnek olarak verdiimiz deneme kartndaki portB'nin ularnn tamamna LED balandndan program-25'i bu program denemek iin kullanamayz. Yukardaki devreyi breadboard zerinde kurunuz. Besleme ve osilatr devreleri iin kullanlacak elemanlar ema zerinde gsterilmemitir. Elinizdeki olanaklara gre kristal veya RC osilatr devresini nceki bilgilerinizden yararlanarak kurunuz.

;===PROG25.ASM====05/07/2000======= LIST P=16F84 INCLUDE "P16F84.INC" ORG h'000' GOTO BASLA ORG h'004" GOTO INT_ALT_PROG BASLA MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF h'FF' ;Wh'FF' TRISA ;PortA tm ular giri h00000001 ;Wh'Ol' TRISB ;PortB 0. bit giri hl0llllll ;Wb'10111111', den kenar OPTION_REG ;W'yi OPTION registere ykle

CLRF PORTB BCF INTCON, 1 BSF BSF TEST INTCON, 7 INTCON, 4

;PortB'yi sil ;INTF bayran sil, ;kesme sinyaline hazrla ;Global kesmeyi geerli yap ;RB0/INT kesmesini geerli yap

BTFSS PORTA, 0 ;PortA'nn 1. bit'ini test et GOTO SOMDUR_LED1 YAK_LED1 BSF PORTB, 1 ; PortB'nin 1. bit'ini "1" yap GOTO TEST S0NDUR_LED1 BSF PORTB, 1 ; PortB'nin 1. bit'ini "0" yap GOTO TEST INT_ALT_PROG BCF INTCON,1 ; INTF bayran sil MOVLW b00000100 ; Terslenecek bit'i W'ye ykle XORWF PORTB,F ; RB2'yi tersle RETFIE ; Kesme alt programndan dn. END

Programdaki
MOVLW b10111111 MOVWF OPTION_REG Komutlaryla RBO ucundan girilen sinyalin den kenannda kesme oluturmas salanmtr.

INTCON registerindeki bayraklarn kurulmas iin de aadaki komutlar kullanlmtr.

BCF INTCON,1 BSF IMTCON,7 BSF INTCON,4


INTCON REGlSTER

Kesme olaynn meydana geldiini gsteren ve PortB'nin 2. bit'ine bal LED2'nin durumunu deitirmek iin aadaki komutlar kullanlmtr.

MOVLW b00000100 XORWF PORTB, F

lem Basamaklar 1. PIC16F84' programlaynz. 2. Bu program denemek iin breadboard zerinde kurduunuz devre zerinde deiiklik yapmak zorundasnz. Dikkat ederseniz PortB knn tmne LED balamtk. imdi RB1 ucuna baladmz. LED'i karp, buton balamamz gerekiyor. Dier balantlar aynen kalabilir. 3. PIC'i kurduunuz devre zerine yerletirip gerilim uygulaynz. 4. A1 butonuna basnz. Butona bastnz srece LEDI'in yank kaldn grnz. 5. Programn almas esnasnda bir kesme meydana getirmek iin INT butonuna ksa sreyle basnz. LED2 yanksa, snecektir. Eer snk durumdaysa yanacaktr. Sonu: Grlyor ki, PIC programlarnda kesme kullanldnda mikro denetleyicmin ilem yapma gcn geniletebiliyoruz. Ana program devaml olarak ilevini srdryor(LED1' istediimiz zaman yakp, sndrebiliyoruz.) Ancak dardsu-.gelen bir sinyal bu ilemi ksa bir sreyle kesip baka bir ii (LED2'nin durumur deitiriyor.) yapyor ve ak yine ana programa geiyor. PIC'e uygulanan kesmeler stenirse peryodik olarak yaplabilir. rnein: kesme girii olarak bir clock sinyali kullanlabilir. Bir saycnn belirli bir deere ulatnda rettii sinyal de kesme meydana getirilebilir. Peryodk kesme uygulama program rneklerini 13. blmde TMRO ve WDT sayclarn anlatrken vereceiz.

Tek Pals reticinin Kullanm


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

13

DONANIM SAYICILARI
DONANIM SAYICISI / ZAMANLAYICISI NEDR? TMR0 SAYICI /ZAMANLAYICISI (TMR0 Counter/Timer) OPTION REGISTER TMR0 SAYICISININ ZELLKLER WDT ZAMANLAYICISI (Watchdog Timer)

DONANIM SAYICISI/ZAMANLAYICISI NEDR?


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

TMR0 SAYICI/ZAMANLAYICISI(TIMER/COUNTER)
RAM bellein h'01' adresinde TMRO ad verilen zel bir register TMRO saycsdr. TMRO programlanabilen bir saycdr. Yani saymaya istenilen bir saydan veya h'OO'dan balatlabilir, herhangi bir anda ierii sfrlanabilir. Bu saycy detayl.olarak incelemeden nce zellikleri yle sralayabiliriz: 8-bit bir saycdr. Yazlabilir/okunabilir. Programlanabilen frekans blme deeri (Prescaler value) Harici veya dahili clock ile say art Den veya ykselen kenar tetiklemesi (harici olarak) Sayc deeri artan yndedir (H'00',h'01',h'02........h'FF') TMR0'n deeri h'FF'den h'00'a gelince ilgili flag'i "1" yaparak kesme oluturur. TMR0 saycsnn nemli zelliklerinden birisi de ana program veya kesme alt programlar alrken sayma ilemini durdurmamasdr. Sayma ilemi devam ederken h'FF' den h'00'a geite meydana gelen tama (overflow), INTCON registerin 2. bit'inde (T0IF bayra) grlr. Yani, bu esnada T0IF bayra "1" olur. Gerekiyorsa bu bayrak kontrol edilerek kesme oluturulabilir. imdi TRMO ve WDT sayclarnn kontrolnde kullanlan OPTION registerden bahsettikten sonra ayrntlara geelim.

OPTION REGSTER
Option register, RAM bellein 1. bank'ndaki h'81' adresinde bulunan zel bir registerdir. B portunun klarnn pull-up yaplma durumunu kontrol eden, kesme sinyalinin tetikleme kenarn seen, TMRO ve WDT iin frekans blme says iin gerekli bit'leri bulunduran, TMRO veya VVDT'yi seme bayra bulunan ve tm bu ileri kontrol eden 8-bit'lik bir registerdir. Aada bu registerin her bir bit'inin ne grevleri yapt aklanmtr.

TMR0 SAYICININ ZELLKLERl


TMR0 Saycsnn zelliklerini ve almasn anlamak aadaki blok ema zerinde daha kolay olacaktr.

Sayc iindeki saynn arttrlmas iin gerekli olan clock sinyali iki farkl kaynaktan salanabilir: 1. Dahili komut sinyali, 2. Harici dijital sinyal (RA4/T0CKI ucu).
PIC'i altran osilatr olarak kristal kullanldnda dahili komut sinyali de ok hassastr. Bu nedenle dahili komut sinyali seildiinde sayma ve zamanlama ilemleri ok hassas olarak yaplabilir.

Harici dijital sinyal portA'nn 3. bit'inden (RA4/T0CKI) uygulanr. Baz ilemler iin dahili komut sinyalinin frekans ok yksek olabilir. Bu durumda daha dk frekansl harici bir sinyal kayna kullanlabilir. Harici dijital sinyal, PIC tarafndan saylmas gereken bir sinyal de olabilir. TMR0'n sinyal kaynan semek iin OPTION registerin 5. bit'i (TOCS) kullanlr. Sinyal kaynandan gelen sinyal, direkt olarak TMR0' besleyebilecei gibi frekans blc aracl ile de beslenebilir. Frekans blme says TMRO veya WDT'ye OPTION registerin 3. bit'i (PSA) ile ynlendirilir. Her iki saycdaki blme oranlar birbirinden farkl olduuna dikkat ediniz. OPTION registerin 0, 1, 2. bit'leri kullanlarak 8 farkl frekans blme deeri seilebilir. TMR0 saycsn tetikleyecek olan sinyal direkt olarak sinyal kaynandan salanmak isteniyorsa, yani frekans blc bypas yaplmak isteniyorsa, frekans blme deeri WDT'ye atanr. Bu ilemin PSA bit'i ile yapldn sylemitik.

Frekans blme deeri TMR0'a atandnda, TMR0'a yazmak iin kullanlan tm komutlar frekans blme deerini siler. Bu komutlar unlar olabilir. CLRF, MOVWF, BSF gibi....

Frekans blme deeri kullanlmadan, direkt olarak harici sinyal kullanlrsa, dahili komut sinyali ile
elemeyi(senkronizasyonu) salamak iin 2 saykllk bir gecikme salanr.(Blok emaya baknz.) Harici dijital sinyal uygulandnda TMRO saycsnn ierisindeki saynn, sinyalin hangi kenarnda (Ykselen/den) artacan belirlemek iin OPTION registerin 4. bit'i (T0SE) aracl ile belirlenir. TMR0 saycsndan k sinyalleri aadaki durumlarda oluur: 1. 2. RAM bellein h'01" adresindeki TMRO registeri okununca. Saycnn h'FF'den h'00'a geiinde meydana gelen tama sinyalinin INTCON registerinin 2. bit'ine (TOIF bayra) "1" yazlmas annda.

TMR0'daki saylar artran, saycya uygulanan sinyallerdir. Saylar, harici dijital sinyal aracl ile arttrldnda istenirse bu sinyaller saylabilir. Bu durumda TMR0 sinyal sayc olarak kullanlm olur.

Frekans Blme Saysnn (Prescaler) Kullanlmas


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

rnein, Prescaler deeri b'000' seilirse, TMR0 oran 1/2, WDT oran 1/1 seilir. Prescaler deeri b'010' seilirse, TMR0 oran 1/8, WDT oran 1/4 seilir. Prescaler deeri b'111' seilirse, TMR0 oran 1/256, WDT oran 1/128 seilir.

TMR0 ve WDT Oran


TMR0 veya WDT sayclarnn ka dahili komut sayklnda br defa bir st sayya geiini belirleyen orandr. rnein, TMR0 oran 1/2 ise, 2 komut sayklnda bir defa st sayya gei olur. TMR0 oran 1/8 ise, 8 komut sayklnda bir defa st sayya gei olur. TMR0 oran 1/256 ise, 256 komut sayklnda bir defa st sayya gei olur. Bilindii gibi program belleine yerletirilen komutlarn almas iin PIC'e harici bir osilatrden clock sinyali (fosc) uygulanmas gerekir. Bu frekans PIC tarafndan 4'e blnerek OSC2 ucundan darya verilir. te 4'e blnen bu frekansn bir saykl bir komutun almas iin geen sredir. rnein, 4 MHz lik bir kristal osilatr kullanlan PIC'te, dahili komut saykl (Periyodu) sresi yle bulunur fkomut Tkomut = fosc/4 = 4 MHz/4 = 1 MHz = 1/fkomut = 1/1 MHz = 1S (Dahili komut saykl suresi)

imdi de clock frekans bilinen bir PIC'te TMR0 saycsnn ka |JLS aralklarla saydn veya ka u,S aralklarla kesme sinyali verdiinin nasl hesaplanaca ile ilgili rnekler verelim. rnekler: 1. Prescaler deeri b'000' seilirse TMR0'n sayma aral sresi ne olur? Prescaler= b'000' olduunda TMR0 oran 1/2 olur. fOSC = 4 MHz olarak alnrsa Tkomut = 1 S olur.

Grlyor ki, TMRO saycs dahili komut sayklnn 2 sayklnda 1 defa artyor. Bylece TMR0'n sayma aral sresi kolayca hesaplanmaktadr. TMRO sayma aral sresi = Tkomut x TMR0 oran = 1 S x 2 = 2 S TMR0 saymaya baladndaki ilk say h'00' ise bu say h'FF'e gelince kesme sinyali oluturacaktr. Bu say aral ondalk olarak 256 eder. yleyse TMR0'n ka saniye aralklarla kesme sinyali vereceini bulalm: Kesme gecikmesi 2. = TMRO sayma aral x 256 = 2 S X 256 =512 S Prescaler deeri b'010' seilirse TMR0'n sayma aral sresi ve kesme gecikmesi ka S olur? Prescaler=b'010'olduunda TMRO oran 1/8 olur. fosc = 4 MHz olarak alnrsa Tkomut = 1 S olur.

TMR0 saycs dahili komut sayklnn 8 sayklnda 1 defa artmaktadr. TMR0 sayma aral sresi = Tkomut x TMR0 oran =1 S x 8 = 8 S TMRO saymaya baladndaki ilk say h'00' ise TMR0'n ka saniye aralklarla kesme sinyali vereceini bulalm: Kesme gecikmesi = TMR0 sayma aral x 256 =8 S x 256 = 2048 S 2 ms 3-) Prescaler deeri b'111' seilirse TMR0'n sayma aral sresi ve kesme gecikmesi ka S olur? Prescaler=b'111' olduundaTMR0 oran 1/256 olur. fosc = 4 MHz olarak alnrsa Tkomut = 1 S olur.

TMRO saycs dahili komut sayklnn 256 sayklnda 1 defa artmaktadr. TMR0 sayma aral sresi = Tkomut x TMR0 oran =1 S x 256 = 256 S
TMR0 saymaya baladndaki ilk say h'00' se TMR0'n ka siniye aralklarla kesme sinyali vereceini bulalm:

Kesme gecikmesi = TMR0 sayma aral x 256 = 256 S x 256 = 65536 S 65.5 mS

Frekans Blme Saysnn Atanmas


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

TMR0'dan WDT'ye Prescaler Deeri Atamak:


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

WDT'den TMR0'a Prescaler Deeri Atamak:


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

TMRO Saycsnn Kullanlmas


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

TMR0'n altn nasl anlarz? TMR0 registerini herhangi bir anda okuyarak. TMR0 registerinin herhangi bit'ini test ederek. H'FF' den h'00'a geite oluan kesme sinyalini test ederek. Kesme annda INTCON registerinin 2. bit'i (T0IF bayra) "1" olur. TMR0'n almas esnasnda PIC16F84 yklendii dier ileri yapmaya devam eder. Neler yaplmad srece TMRO almasna devam eder? Silinmedii srece (CLRF TMR0) ierisine say yazlmad srece (rnein MOVLW h'05', MOVWF TMR0) Mikrodenetleyici RESET yaplmad srece.

Her kesme oluunda TMR0'n balang says yeniden yklenmeli mi? Evet, nk h'FF'e ulaan sayc otomatik olarak h'00'dan balar. Eer balang says devaml olarak belirli bir (N) says olmas isteniyorsa, her kesme olutuunda bu say TMR0'a atanmaldr. TMR0' durdurmak mmkn mdr? Hayr, PIC alt srece saymaya devam eder. Fonksiyonlarndan yararlanlmak istenmiyorsa, program ierisinde kullanlmaz. Ancak kesme bayran (T0IF) "1" yapmaya devam eder. PROGRAM-26) PortB'nin 0. bit'ine bal LED'i flash yaptran program. LED'in yanp snme aralklarndaki gecikmeyi TMR0 saycs yapmaktadr. Bu program dijital k sinyali retmek iin kullanlmtr. TMR0'n sinyal kayna olarak dahili komut saykl kullanlm ve TMR0 oran 1/256 seilmitir. Kristal osilatr kullanlan uygulamalarda kesme gecikmesi ok ksa olduundan LED'in flash yapmas grlmeyebilir. Bu durumda RB0 ucuna osilaskop balayarak k izlenebilir. Eer RC osilatr kullanlyorsa seilen R ve C deerlerine gre frekans ok drlrse LED'in yanp snd grlr.

;===PROG26.ASM==s=09/07/2000======= LIST P=16F84 IMCLUDEP16F84.INC" CLRF PORTB BSF STATUS, 5 ;Bankl CLRF TRISB ;PORTB tm ular k BCF STATUS, 5 ;Bank0 BASLA CLRWDT ;Prescaler atama ilemine hazrla BSF STATUS, 5 ;Bankl MOVLW b11010111 ;TMR0, yeni prescaler deerini ;ve sinyal kaynan se MOVWF OPTION_REG ;OPTION registere yaz. CLRF PORTB YAK BSF PORTB, 0 ;LED'i yak. CALL GECIKME ;GECIKME alt programn ar. SOMDR BCF PORTB, 0 ;LED'i sndr. CALL GECIKME ;GECIKME alt programn ar. GOTO YAK ;Yakp-sndrmeye devam et. GECIKME CLRF TMR0 ;TMR0 h00a kur, saymaya bala

TEST_BIT BTFSS TMR0, 5 ;TMR0n 5. bit'i "1" mi? GOTO TEST_BIT ;Hayr, 5. bit'i tekrar test et. RETURN ;Ana programa dn. END Programda OPTION registere atanan verilerin anlam aadaki gibidir.

TMR0 registerinin tamam okunabilir veya bu rnekte olduu gibi sadece bir bit'i test edilir. TMR0'n 5. bit'i "1" olduunda ulalan say 32'dir (desimal). Yani sayc 0'dan 32'ye kadar saydrlmaktadr.

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

Deneme devresinde 4 MHz lik kristal osilatr kullanld dnlrse; Bir komut saykl 1 Sdir. TMR0 ierisindeki saylar 256 komut sayklnda bir defa artacandan (TMRO oran 1/256 olduundan.)

TMR0, 32'ye kadar sayacandan 0'dan 32'ye kadar sayma sresi: 256 S x 32 = 8192 S 8.2 mS eder. Biz deneme devrelerinde RC osilatr kullandmzdan bu sre ok daha uzun olabilir. lem Basamaklar 1 PROG26.ASM programn derledikten sonra PIC16F84'e yazdrnz. 2 Breadboard zerinde kurduunuz devre zerindeki RC osilatrn frekansn olduka drmek iin R=10 K, C=0.1 F seiniz. Yaklak olarak 85 Hzlik bir frekans elde edeceksiniz. 3 PIC'i devrenize yerletirerek program altrnz. PortB'nin 0. bit'indeki LED'in flash yaptn grnz. 4 Deneme devrenizde kristal osilatr kullanyorsanz LED'in flash yaptn gremeyeceksiniz. Bu durumda bir osilaskop balayarak elde edilen kare dalgay grn ve bir sayklnn ka S de olutuunu lnz. PROGRAM-27) TMR0 saycsnn sinyal kayna olarak harici dijital sinyal (RA4/T0CKI ucu) kullanlmasna rnek programdr. Ayrca TMR0'n okunabilme ve sinyal sayc olarak kullanlabilme zelliini de gsterir. Program, PortA'nn 3. bit'ine bal olan butona (RA4) basldnda portB'deki LED'lerde binary olarak artan saylar gsterir. RA1 butonuna basnca TMR0 registerini sfrlar ve saymaya 0'dan itibaren tekrar balatr.

Programda OPTION registere atanan verilerin anlam aadaki gibidir.

TMR0 sinyal kayna olarak RA4 girii seildiinden, bu butona her basta TMR0'n ierisindeki say 0'dan itibaren ykselir. RA4 butonuna baslmad srece (Yeni bir sinyal gelinceye kadar) TMR0 ierisindeki say sabit kalr. TMR0'n sfrlanmas yine harici bir girile (RA1 butonu) yaplyor.

;===PROG27.ASM====12/07/2000======= LIST P=16F84 INCLUDE "P16F84.IMC" CLRF PORTB BSF STATUS, 5 ;Bankl CLRF TRISB ;PORTB tm ular k MOVLW h'FF' ;Wh'FF' MOVWF TRISA ;PortA tm ular giri BCF STATUS, 5 ;Bank0 BASLA CLRF PORTB ;PortByi sil CLRF TMR0 ;TMR0 saycs ve prescaler' sil

CLRWDT ;WDT'yi sil BSF STATUS, 5 ;BANKl MOVLW b00101111 ;Prescaler deerini ata MOVWF OPTION_REG ;OPTION registere yaz. BCF STATUS, 5 ;BANK0 CLRF PORTB ;PortB'yi sil DONGU MOVF TMR0, W ;WTMRO MOVWF PORTB ;PORTBW BTFSS PORTA, 1 ;PortA 1. bit "0" m? CLRF TMRO ;Evet, TMR0 sfrla GOTO DONGU ;Hayr, tekrar test et END lem Basamaklar 1 PROG27.ASM'yi PIC16F84'e yazdrp, deneme kartna yerletiriniz. 2 Deneme kartna gerilim uygulayarak program altrnz. 3 A4 (PortB'nin 3. bit'ine bal) butona bastka PORTB'deki 8 LED'in binary artan saylar gstermesini salaynz.

TMR0 Sayc Kesmesine Ait rnekler


PROGRAM-28) TMR0 sayc kesmesine rnek programdr. PortB'deki LED'lerin binary olarak artan saylar gstermesini salar. Bu programdaki LED'lerin sayma aralklarndaki duruu iin TMRO zamanlaycs kullanlmtr.

;===PROG28.ASM====17/07/2000======= LIST P=16F84 INCLUDE "Pl6F8 4.INC" ORG h'00' GOTO BASLA ORG h'04' GOTO LED_YAK ;Kesme alt programna git. BASLA BSF STATUS, 5 ;Bankl CLRF TRISB ;PORTB tm ular k MOVLW b'00000lll' ;Wb00000lll 1/256 MOVWF OPTION_REG ;OPTION_REGW BCF STATUS, 5 ;BANK0 MOVLW h00 ;Wh'00' MOVWF TMR0 TMR0W MOVLW b10100000 ;GIE"1", TOIE1", TOIF0" MOVWF INTCON ;INTCONW CLRF PORTB ;PortB'yi sil DONGU GOTO DONGU LED_YAK BCF INTCON, T0IF ; T0IF"0" INCF PORTB, F ; PORTBPORTB+1 MOVLW h00 ; Wh00 MOVWF TMR0 ; TMR0W RETFIE ; Alt programdan dn END Programdaki OPTION ve INTCON registerlerin kurulmasn ve programn aklamasn ekillerle aklayalm.

LED_YAK kesme alt programnda yaplan ilemler

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

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

Program ierisinde PORTB'ye bal olan LED'lerin binary artan saylar gstermesi iin PORTB'nin ierii her defasnda "1" arttrlr.

TMR0 saycsnn tekrar h'00'dan itibaren saymas iin TMR0'a h'00' says atanmaldr. Bu say atanmamas halinde yine h'00'dan balayacaktr. Ancak, saymaya balama says farkl olmas isteniyorsa, o say mutlaka TMR0'a atanmaldr.

TMR0 Saycsn stenilen Bir Saydan Balatmak


TMR0'n ierisine h'00' atandnda maksimum kesme sresi, h'FF' atandnda ise minimum kesme sresi elde edilir. imdi 4 MHz clock osilatr ile alan bir PIC'te prescaler 1/256 seildiinde elde edilen maksimum kesme sresini bulalm. fosc= 4 Mhz ise Tkomut = 1 S TMR0=0 olduundan h'00' dan h'FF'e kadar 256 defa sayar. Prescaler= 1/256 olduundan, TMR0 saycs 256 sayklda 1 defa saylarn arttrr. yleyse maksimum kesme sresi; Kesme gecikmesi =Tkomut x Prescaler x (h'FF'-TMR0 ilk says) formlyle bulunur. Kesme gecikmesi= 1 S x 256 x (256 - 0)= 65536 S 65.5 mS eder. Gecikme zamann hesaplamak iin fosc frekansn kullanarak bir forml oluturursak aadaki formul kullanabiliriz. Kesme gecikmesi =

(256 TMR 0 ilk sayay x prescaler ) f OSC / 4

Kesme gecikmesi : TMR0'n oluturaca kesme sinyali aral (S ) TMRO ilk says Prescaler fOSC : TMR0'a atanan say (Ondalk say) : Frekans blme says (2, 4, 8,16, 32, 64, 128, 256). Prescaler kullanlmad zaman bu sayy 2 alnz(Senkronizasyon nedeniyle.) : PIC'e uygulanan osilatrn frekans (MHz)

Eer istenilen kesme gecikme sresini salamak iin TMRO ilk saysnn ne almas gerektiini bulmak iin bu defa aadaki forml kullanabiliriz.

Kesme gecikme sresi x f OSC TMR0 ilk sayay= 256 4 x Pr escaler


rnek: 1.28 mS kesme gecikmesi salamak iin TMRO ierisine hangi saynn atanmas gerekir? (Fosc=4 Mhz, Prescaler=128) 1.28mS-> 1280 S eder.

1280 S x 4 MHz 5120 TMR0 ilk sayay= 256 = 256 512 = 246 4 x 128
Heksadesimal karl hF6 dr. TMR0'a h'FF' atandnda minimum kesme sresi oluur. Ancak LED'in yanp-snme sresi 0 S olmaz. nk kesme alt program komutlarnn alma sresi minimum kesme sresini oluturur. Bu da kesme olutuunda GOTO LED_YAK komutuyla alt programa geen aktan sonra alan komutlardr. Bu sre RETFIE komutuyla biter. imdi bu sreyi hesaplayalm. fOSC= 4 MHz olduunu dnelim. Dahili komut saykl = 1 S Ana programda TMR0'n almaya balatlrken kullanlan komutlar: MOVLVV h'FF' 1 saykl MOVWF TMR0 1 saykl Toplam = 2 saykl Kesme olutuktan sonra alt programda alan komutlar: Kesme gecikmesi GOTO LED_YAK BCF TCON, T0F INCF PORTB, F MOVLW h'00' MOVWF TMR0 RETFIE Toplam = 2 saykl 2 saykl 1 saykl 1 saykl 1 saykl 1 saykl 2 saykl 10saykl

Yukarda yaptmz hesaplamaya gre kesme olutuunda alan komutlar 10+2=12 komut saykl sresi geecektir. Bir komut saykl 1 |JLS olduuna gre toplam sreyi hesaplayalm; 10 saykl x 1 |J.S = 12 ^S eder. Grlyor ki, formlle hesaplama sonucunda 0 |JLS lik kesme sresi hesaplamamza ramen, alt program komutlarnn almas hesaba katlnca minimum kesme sresi 12 ^S olmaktadr (fosc= 4 MHz olduunu dndmzde.)

WDT ZAMANLAYICISI (WATCHDOG TIMER)


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

OPTION registerin WDT ile ilgili 4 bit'i vardr. WDT zamanlaycsn semek iin OPTION registerin 3. bit'i "1" yaplmaldr. WDT orannn ise 0, 1, 2. bit aracl ile seilen frekans blme says(prescaler) ile belirlendiini sylemitik. Seilen prescaler deerine gre TMR0'n ve VVDT'nin farkl oranlar aldna dikkat ediniz.

WDT zamanlaycsnn sinyal kayna, PIC ierisine yerletirilmi bir osilatrdr. Bu osilatrn WDT'ye salad nominal zaman am sresi 18 mS dir. Prescaler deeri artrlarak bu sre 2.3 saniyeye kadar karlabilir.

Zaman Am Sresi
WDT'nin CLRWDT komutuyla reset yapldktan sonra saymasn tamamlayp, batan tekrar saymaya balad anda kadar geen sredir. WDT'nin saymasn tamamlad anda zaman am sinyali verir. Bu sinyal STATUS registerin 3. ve 4. bit'indeki flaglarn durumunu deitirir.

WDT zamanlaycsyla kontrolden km bir program tekrar resetleyerek kontrol ele almay planladysanz ana program banda bu bit'leri kontrol etmelisiniz. Reset gerekletikten hemen sonra da bu bit'leri kontrol etmek gerekir. Bylece WDT'nin zaman am sresi dolduunda program ak baka bir yere dallandrabilirsiniz. rnek program paras: WDT_KONT BTFSS STATS, 4 ; T0 bit' i 1 mi? CALL AAA ; Evet, AAA alt programn ar. MOVLW h'FF' ; Hayr, program akna devam et.

MOVWF TRISA

; PORTA'nn tm ular giri

PIC ierisinde bulunan WDT zamanlaycsnn geerli (enable) veya geersiz (disable) yaplmas yazlm aracl ile yaplmaz. PIC programlamaya yeni baladnzda PIC'e yazma program anlatlrken konfigrasyon bit'lerinden bahsetmitik. Bu konfigrasyon bit'leri program ierisinde yazld gibi, PIC programlayc programndaki "Fuses" penceresi ierisinden de enable yaplacan sylemitik. Bu nedenle WDT zamanlaycy kullanabilmek iin PIC'i programlama esnasnda "Fuses" penceresinden Watchdog Timer="ON" yaplmaldr. 5. blmde konfigrasyon bit'lerini program ierisinde belirlenebileceini sylemitik. Hatrlatmak amacyla bir rnek verecek olursak, VVDT'nin aktif yapld konfigrasyon satr aadaki gibi olmaldr. _CONFIG _CP_OFF & _WDT_OFF & PWRT_ON & _RC_OSC WDT zamanlaycsn programn almas esnasnda geersiz (disable) /apmak mmkn deildir. Sadece CLRWDT komutu kullanlarak RESET yaplabilir. Bu durumda WDT, h'00'dan itibaren tekrar saymaya balar. Sayma sresi bitince STATUS registerindeki T0 bayran "0" yapar.

SLEEP Komutunun Kullanlmas


SLEEP komutu genellikle PIC'in ierisindeki programn devaml olarak ?almas gerekmeyen uygulamalarda kullanlr. Bu komut alnca program olduu yerde durur. Tm zel registerler (OPTION, STATUS, INTCON vs.) ve RAM erisindeki bilgiler sakl tutulur. PIC uyuma (Sleep) moduna girmi olur. Bu esnada PIC16F84'n ektii akm 40 A e kadar der. SLEEP komutu kullanlarak, program ierisinde kullanlan ve herhangi bir ?evresel olay test eden software dnglerini kullanlma gereksinimini ortadan kaldrr. Bylece daha sade program yazma olanan yaratr. rnein bir hrsz alarm sistemini kontrol eden programda, programn devaml olarak almas gerekmez. Belirli aralklarla evredeki olaylar denetlemesi gereken bu sistemdeki PIC'i uyuma modundan WDT uyandrr. Program alarak giri portlarndan alarmn almasn gerektirmeyen bir giri yoksa, tekrar SLEEP komutunu altrarak PIC'i uyuma moduna sokar. SLEEP modundan k sadece WDT'nin zaman am sinyali ile deil, harici kesme sinyalleri vastasyla da yaplabilir. PROGRAM-29) PortB'ye bal 8 LED zerinde binary artan saylar gsteren program. WDT'ye atanan prescaler deerine gre, LED'ler saymaya devam ederken portB ierisindeki veri h'FF'e ulamadan WDT zaman am sinyali nedeniyle LED'lerin yan 0'dan itibaren tekrar balatlr. ;===PROG29.ASM====10/08/2000======= LIST P=16F84 INCLDE "P16F84.INC" SAYACl EQU h'0C' SAYAC2 EQU h'0D' BASLA BSF STATUS, 5 ; BANKl MOVLW b00001110 ; WDT seilir. MOVWF OPTIOM_REG ; OPTION_REQW CLRF TRISB ; PortB'nin ular k BCF STATUS, 5 ; BANKO SONDUR CLRF PORTB ; PortB'yi sil YAK CALL GECIKME ; GECIKME alt program INCF PORTB, 1 ; PORTBPORTB + 1 GOTO YAK GECIKME MOVLW h4F ; Wh4F MOVWF SAYACl ; SAYAClW DONGUl CLRF SAYAC2 ; SAYAC20 DONGU2 DECFSZ SAYAC2, 1 GOTO DONGU2 DECFSZ SAYACl, 1 GOTO DONGUl RETURN

END lem Basamaklar 1 2 3 PIC16F84'e PROG29.ASM programn yaznz. Program yazdrrken kullandmz PIC programlaycdaki "Fuses" penceresinde WDT=ON yaptktan sonra yazdrma ilemini balatnz. PIC'i deneme kartna yerletirerek programnz altrnz. PortB'deki LED'lerde binary artan saylar grnz. Sayma ilemi devam ederken WDT zaman am sinyali program reset ederek tekrar O'dan itibaren saymaya balatacaktr. LED'lerdeki say kaa ulatnda reset gerekleeceini u anda sylememiz mmkn deildir. nk kullandnz RC osilatrn frekansna ve WDT oranna baldr. WDT orann deitirerek programn reset olma sresini deitiriniz. PIC'i yeniden programlayarak deneme kartnzda deneyiniz.

14

D/A ve A/D EVRME LEMLER


DJTAL/ANALOG EVRC ANALOG/DJTAL EVRC

DJTAL/ANALOG EVRC
PIC16F84 kullandnz bir uygulama devresinde analog voltaj k gerekebilir. Bu durumda portlardan kan dijital sinyalleri analog voltaja evirme ilemi sz konusu olmaktadr. Bu ilemi yapmak iin bir ok yntem vardr Bunlardan ilki, PIC kna ladder (merdiven) diren devresi ve bir OP-AMF balayarak yaplan D/A eviricidir. ikincisi ise, ok daha basit bir yntem olan PIC kna D/A evirici entegre balamaktr.
Microchip firmas PIC kullanclarnn bu ihtiyacn karlamak amacyla piyasaya srd bir ok mikrodenetleyisi bulunmaktadr. rnein PIC14C000 mikrodenetleyicisi giriine uygulanan dijital sinyali dorudan analog voltaj k olarak verebilmektedir. D/A evirici entegre bu PIC'in ierisine yerletirilmi olduundan knda baka bir devre kullanmaya gerek kalmamaktadr. Bu tip PIC'lerin incelenmesi ayr bir kitap konusu olduunda imdilik ayrntlara girmeyeceiz.

Bu kitapta bizim ele aldmz PIC16F84'n sadece dijital girii ve k bulunmaktadr. D/A evrimi yapabilmek iin yapabileceimiz tek ey, PlC kndan aldmz dijital sinyali analog gerilime evirme ilemidir. imdi D/A evrimi ilemi iin kullanmak zorunda olduumuz yntemleri aklayalm.

Ladder(Merdiven) Diren Devresi Kullanmak


rnek D/A evirici olarak vereceimiz devrede PIC'ten 4 bit'lik dijital ve ktn dnrsek, aadaki ladder diren devresi ile bu sinyali Analog gerilim eviren devreyi aadaki gibi izebiliriz.

PortB'den kan sinyalin b'00001000' (RB3=1) olduunu dnrsek, bu devrede Vk ucundan alnacak gerilimin deerini bulalm:

0-5 V arasnda analog gerilim elde etmek iin gerekli olan dijital klar aadaki gibidir.
RB3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 RB2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 RB1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 RBO 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 VIKI 0.00 0.33 0.67 1.00 1.33 1.67 2.00 2.33 2.67 3.00 3.33 3.67 4.00 4.33 4.67 5.00

8 Bit D/A konvertr Entegresi Kullanmak


PIC'ten kan dijital veriyi analog gerilime dntrebilmek iin uygulanabilecek ikinci yntem bir D/A entegresi kullanmaktr. Biz P/N AD558 entegresini rnek olarak vereceiz. Bu entegre ierisinde yukardaki rnekte verdiimiz ladder direnler ve toplayc amplifikatr (OP-AMP) hazr olarak bulunmaktadr. Entegre 5 V DC ile almakta ve giriine uygulanan dijital sinyali 0-2.55 V arasnda gerilim vermektedir.

AD 558 entegresindeki CE ve CS ularnn fonksiyonlar ayndr. Birisini (CE) topraa balayn. CS giri verisinin ykselen kenarnda girilen datay kilitlemek iin kullanlan utur. Bu nedenle portA'nn 0. bit'inden uygulanacak sinyalin ykselen kenarnda kilitleme yaplmas gerekir.

PROGRAM-30) PortB'nin RBO-RB7 ularndan kan dijital veriyi analog veriye eviren program. Bu program yukarda AD 558 entegresiyle kurulan devreye gre yaplmtr. PortB'nin ucundan kmas istenen veri b'10000000'dir. Bu veri AD 558 entegresiyle 1.27 Vluk gerilime evrilir. ;===PROG30.ASM====12/08/2000======= LIST P=16P84 INCLUDE "P16F84.INC" BASLA BSF STATUS, 5 ;Bankl CLRF TRISA ;PORTA tm ular k CLRF TRISB ;PORTB tm ular k BCF STATUS, 5 ;Bank0 CLRF PORTA ;CS ucunu "0" yap MOVLW b10000000;Wb10000000 MOVWF PORTB ;AD 558 entegresine giden veri BSF PORTA, 0 ;AD 558'in CS ucu ykselen kenar BCF PORTA, 0 ;AD 558'in CS ucu den kenar DONGU GOTO DONGU AD 558 entegresine girilen verilerin ka Vluk gerilime dntrleceine ait birka rnek veren tablo aadadr.
Haksadesimal say h'00' h'0F' h'B0' h'FF' VIKI 0.00 0.15 1,27 2.55

lem Basamaklar 1. PROGSO.ASM'yi PIC16F84'e yazdrnz. 2. AD 558 entegresiyle yaplan A/D evirici PIC devresini breadboard zerine kurunuz. 3. PIC'i deneme devrenize yerletirerek gerilim uygulaynz. Vk ucuna bir voltmetre balayarak 1.27 Vluk gerilimi lnz. PROGRAM-31) AD 558 konvertr kullanarak kurulan devrede testere dii dalga reten program. ;===PROG31.ASM====14/08/2000======= LIST P=16P84 INCLUDE "P16F84.INC" VOLT EQU h0C SAYAC EQU h0D BASLA BSF STATUS, 5 ; Bankl CLRF TRISA ; PORTA tm ular k CLRF TRISB ; PORTB tm ular k

BCF STATUS, 5 ; Bank0 CLRF PORTA ; CS ucunu "0" yap CLRF VOLT ; VOLT deikenini sfrla DONGU MOVF VOLT, W ; WVOLT (h'00') MOVWF PORTB ; PORTBW BSF PORTA, 0 ; AD558'deki datay kilitle BCF PORTA, 0 ; INCF VOLT, F ; VOLTVOLT +1 GOTO DONGU

lem Basamaklar
1. 2.

3.

PIC16F84' programlayarak AD558 ile yaptnz devre zerine yerletiriniz. Vk ucuna bir osilaskop balaynz ve ayarlarn yapnz. Vk aadaki testere dii dalgay grnz.

PROGRAM-32) AD558 entegresiyle kurulan devrede sins dalgas reten program. Bu programda portB'ye gnderilen binary saylar evrim tablosu ierisine yerletirilmitir. 19 voltaj seviyesi daha da arttrlarak sins dalgasnda birbirine daha yakn gerilimler elde edilebilir. Bu durumda k erisi titrek olmayacaktr. Sins dalgasnn frekans, evrim tablosuna yerletirilen saylarn okluu ile drlecei gibi, k verileri arasnda gecikme alt program kullanlarak da ayarlanabilir. ;===PROG32.ASM====16/08/2000======= LIST P=16F84 INCLUDE "P16F84.INC" SAYAC EQU h0D OFSET_SAY EQU h0C BASLA BSF STATUS, 5 ;Bankl CLRF TRISA ;PORTA tm ular k CLRP TRISB ;PORTB tm ular k BCF STATUS, 5 ;Bank0 CLRF PORTA ;CS ucunu "0" yap SAYKIL CLRF OFSET_SAY ;Tablo ofset sayacn sfrla ADIM MOVF OFSET_SAY, W ;WOfset sayacn yaz CALL TABLO MOVWF PORTB ;Veriyi portB'ye k BSF PORTA, 0 ;AD558'e kilitleme sinyali BCF PORTB, 0 CALL GECIKME MOVF OFSET_SAY, W ;Ofset sayacn W'ye yaz SUBLW h'23' ; Saykl bitti mi? BTFSC STATUS, 2 ; Zero flag' kontrol et. GOTO SAYKIL INCF OFSET_SAY ; OFSET_SAYOFSET + 1 GOTO ADIM GECIKME MOVLW h'0l' ; 3N+3 saykl(desimal), N=1 MOVWF SAYAC ; WSAYAC TEKRAR DECFSZ SAYAC, F ; SAYACSAYAC - 1 GOTO TEKRAR ; SAYAC 0 deil RETURN TABLO ADDWF PCL, F ; OFSET_SAY' PLC'ye ykle

RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW END

h'80' h'95' h'AD' h'Cl' h'D3' h'E2' h'EF' h'F8' h'FD' h'FF' h'FD' h'F8' h'EF' h'E2' h'D3 h'Cl' h'AD' h95 h'80' h'6A' h'54' h'40' h'2E' h'lE' h'll' h'08" h'02' h'00' h'02' h'08' h'll' h'lE' h'2E' h'40' h'54" h'6A'

; 1.28 Volt ; 1.50 ; 1.72 ; 1.92 ; 2.10 ; 2.26 ; 2.39 ; 2.48 ; 2.54 ; 2.55 ; 2.54 ;2.48 ;2.39 ;2.26 ;2.10 ;1.92 ;1.72 ;1.50 ;1.28 ;1.06 ;0.84 ;0.64 ;0.46 ;0.30 ;0.17 ;0.08 ;0.02 ;0.00 ;0.02 ;0.08 ;0.17 ;0.30 ;0.46 ;0.64 ;0.84 ;1.06

lem Basamaklar 1. 2. PIC16F84' programlayarak AD558 ile yaptnz devre zerine yerletiriniz. Vk ucuna bir osilaskop balaynz ve ayarlarn yapnz. Vk ucunda aadaki sins dalgasn grnz.

3.

PWM (Pulse Width Modulation) Metodu Kullanmak


PWM (Pulse-Width-Modulation "Pals geniliini ayarlama") metodu PIC16F84'n k ularndan birisinden kare dalga sinyali retme ilemidir. Kare dalgann pals geniliini ayarlama suretiyle elde edilen gerilimin DC voltmetre ile llen deerini (Ortalama deeri) deitirilmi olur. Bundan nceki blmlerde yaptmz ou programlarda portB'nin sadece bir bit'ine bal LED'i flash (Yakpsndrme) yapmtk. Eer LED'i karp yerine bir voltmetre balayacak olsaydk, 2.5 V civarnda bir gerilim okuyacaktk. imdi PIC program aracl ile bu gerilimin nasl deitirilecei hakknda temel elektronik bilgisini verdiimizde yaplacak programn hi de zor olmadn greceksiniz.

PWM Metodu
PWM metodunu anlayabilmek iin eit aralklarla LED yakp sndrme programlarnda elde ettiimiz k erisini inceleyelim.

Yukardaki k erisinde i sresi, LED'in yan sresi, bekleme sresi de snk kalma sresidir. Eer bir periyot ierisindeki bu sreler birbirine eitse k gerilimin ortalama deeri 2.5 V olur.

Bir periyot ierisindeki i sresi ve bekleme sresi oranlar deitirilirse kta llecek gerilimin deeri de deitirilmi olur.

Grld gibi i sresi uzatldnda k geriliminin ortalama deeri 2.5 V tan byk olmaktadr, Eer i sresi % 100 olursa k gerilimi 5 V, i sresi % 0 olursa k gerimi 0 V olur. Bu defa i sresinin bekleme sresinden az olduu duruma rnek verelim.

k gerilimin ortalama deeri bir periyot ierisindeki i sresi ve bekleme sresi oranlaryla doru orantldr. rnein; sresi % 50 ise k gerilimi (5 V) 2.5 V sresi % 25 ise k gerilimi (5 V) 1.25 V sresi % 75 ise k gerilimi (5 V) 3.75 V olur.

ve Bekleme Sresinin Tespit Etmek


RC osilatrle beslenen PIC16F84'n RB0 ucundan 0 -5 V arasnda deien analog gerilim elde etmek istediimizi dnelim. nce k periyodunun i sresini ve bekleme sresini belirleyen GECIKME alt programnn nasl olmas gerektiine karar verelim. GECIKME MOVWF SAYAC DONGU DECFSZ SAYAC, F GOTO DONGU RETURN SAYAC registeri ierisindeki ilk say h'FF' olursa, her defasnda SAYAC'tan "1" karlr. SAYAC'n "0" a gelmesi iin 256 dng gerekir. Bu GECIKME alt programyla k peryodunun % 100'n elde ettiimizi dnrsek, i sresi ve bekleme sresini tesbit etmek iin h'FF' /Desimal 256) saysnn yzdesini almak gerekir. rnein; 2.5 Vluk k iin % 50 i sresi % 50 bekleme sresi gerekir. Bu durumda SAYAC registeri ierisine atayacamz saylar ne olmaldr ? 256 x (% 50) = 128h'80' ( sresi iin) 256 x (% 50) = 128h'80' ( bekleme sresi iin) rnein; 1.25 Vluk k iin %25 i sresi % 75 bekleme sresi 256 x (%25) = 64 h'40' ( dresi iin) 256 x (%75) = 192 h'C0' (Bekleme sresi iin) rnein; 0.5 Vluk k iin % 10 i sresi % 90 bekleme sresi 256 x (% 10) = 25.6 26h'1A' (i sresi iin) 256 x (% 90) = 230.4230h'E6' (bekleme sresi) PROBLEM-33) PortA'nn 0. bit'ine bal bir voltmetrede 2.5 Vluk gerilim reten PIC program. k gerilimin analog deeri (2.5 V) portB'deki dijital sinyalin (5 V) % 50 si olacandan, IS deikenine h'80' BEK deikenine h'80 saylar atanmtr.

;===PROG33.ASM====21/08/2000======== LIST P=16F84 INCLUDE "P16F84.INC" IS EQU h'0D' BEK EQU h0C SAYAC EQU h0E ORG h'00' BASLA BSF STATUS, 5 ; Bankl CLRF TRISB ; PORTB tm ular k BCF STATUS, 5 ; Bank0 CLRF PORTB ; CS ucunu "0" yap MOVLW h'80' ; Wh80 MOVWF IS ; ISW, I sresini ata MOVLW h'80' ; Wh'80" MOVWF BEK ; BEK W, bekleme sresini ata TEKRAR BSF PORTB, 0 ; PORTB'nin 0. biti "1"= 5V MOVF IS, W ; WIS, i sresini al CALL GECIKME BCF PORTB, 0 ; PORTB'nin 0. bit'i "0"= 0 V MOVF BEK, W ; W BEK, bekleme sresini al CALL GECIKME GOTO TEKRAR GECIKME MOVWF SAYAC ; IS ya da BEK ierisindekini SAYAC'a yaz. DONGU DECFSZ SAYAC, F GOTO DONGU RETURN END

lem Basamaklar
1. 2. PIC16F84', PROG33.ASM ile programlaynz. PIC'i deneme kartna yerletiriniz.

3.

4.

Devreye gerilim uygulayarak program altnnz. PortB'nin 0. bit'ine bal LED'in yar parlaklkta yandn grnz. (k 2.5 V olduundan) Breadboard zerinde kurduunuz devre zerinde deneme yapyorsanz, PortB'nin RBO ucuna bir voltmetre balayarak 2.5 V luk gerilimi lnz.

PROGRAM-34) PortA'nn 1. bit'indeki A1 butonuna basnca portB'nin 0.bit'indeki LED'in parlakln arttran, A2 butonuna basnca parlakln azaltan program. (PWM metodu ile D/A eviriciye ikinci bir rnek programdr.)

Bu programda 33. problemdekinden farkl bir yntem kullanlarak i ve bekleme sreleri tespit edilmitir. A1 butonuna baslnca IS deikenin ierisindeki say arttrlr. IS sresince portB'nin 0. bit'i "1" olarak kalr. IS sresi bitince geriye kalan PER sresince de portB'deki 0.bit "0" olarak kalr. A2 butonu IS ierisindeki sayy azaltr. IS sresi bydke LED parlaklar, kldke donuklar. PER sresi sabit olarak "250" alnmtr. stenirse bu sre deitirilebilir. PER sresi uzadka portB'den kan sinyalin frekans der, ksaldnda ise artar. IS sres PER sresinden byk olmamaldr. Aksi halde LED devaml olarak yank kalr.

;===PROG34.ASM====25/08/2000======= LIST P=16F84 INCLUDE "P16F84.INC" IS EQU h'0D" ; sresi deikeni PER EQUh'0C' ;Peryod sresi deikeni ISYED EQU h0E ;IS'i yedekleme deikeni SAYACl EQUh'0F" SAYAC2 EQh'10' CLRF PORTB ;PortB'yi sil BSF STATUS, 5 ;BANKl'e ge CLRF TRISB ;PortB tm ular k MOVLW hFF MOVWF TRISA ;PortA'nn tm ular giri BCF STATS, 5 ;BANK0a ge BASLA MOVLW d25 ;Wd10 MOVWF IS ;IS 8 W MOVWF ISYED ;IS' i yedekle DONGU MOVF ISYED, W ;WISYED MOVWF IS ;ISi yedekten al MOVLW d250 ;Wd100 MOVWF PER ;PERW BSF PORTB, 0 ;PORTB xxxxxxx1 BTFSS PORTA, 1 ;PORTA, 1. bit 1 mi? GOTO M2 ;Hayr, M2'ye git BTFSS PORTA, 2 ;Evet, PORTA. 2. bit 1 mi? GOTO M3 ;Hayr, M3'e git. PWM0 DECFSZ IS, F ;IS=IS-1, IS=0 m? GOTO PWM1 ;Hayr, PWMl'e git BCF PORTB, 0 ;Evet, PORTBxxxxxxx0 PWM1 DECFSZ PER, F ;PER=PER-1, PER=0 m? GOTO PWM0 ;Hayr, PWM0'a git GOTO DONGU ;Evet, DONGU'ye git. M2 CALL GECIKME ;Buton ark snmesi iin bekle MOVF ISYED, W MOVWF IS ;IS'yi yedekten al IMCF IS, F ;IS=IS+1 MOVF IS, W MOVWF ISYED ;IS'yi yedekle GOTO DONGU M3 CALL GECIKME ;Buton ark snmesi iin bekle MOVF ISYED, W MOVWF IS ;IS'yi yedekten al DECF IS,F ;IS=IS-1 MOVF IS, W MOVWF ISYED ;IS'yi yedekle GOTO DONGU GECIKME ;Gecikme alt program MOVLW h0F MOVWF SAYACl Dl MOVLW hFF MOVWF SAYAC2 D2 DECFSZ SAYAC2, F GOTO D2 DECFSZ SAYACl, F GOTO Dl RETURN END

lem Basamaklar 1. PIC'i programlayarak deneme kartnz zerine yerletiriniz. 2. Deneme kartna enerji verince portB'nin 0. bit'indeki LED donuk bir ekilde yanacaktr. nk IS=d'25', PER=d'250' saylar atanmtr. Bu durumda LED, bir periyot sresinin 1/10 inde "1", 9/10 unda "0" olarak kalacaktr. 3. A1 butonuna birka defa basarak IS ierisindeki sayy arttrnz. LED'in parlakl gittike artacaktr. 4. A1 butonuna basmaya devam ettike LED en parlak duruma geldikten sonra tekrar snecektir, Bu, IS ve PER deikenlerinin ierisindeki saylarn eit duruma geldiini gsterir. 5. A2 butonuna basarak bu defa LED'in parlakln azaltnz. 6. PortB'nin 0. bit'ine bir dijital voltmetre balayarak bu utaki gerilimin 0-5V arasnda deitiini grnz.

ANALOG / DJlTAL EVRC


PIC16F84'n sadece dijital verileri ilediini biliyoruz. Bu nedenle analog bir verinin dijital veriye evrilmesi iin yaplacak programlar ok nemlidir. PIC'e analog veri girmek, giri ularndan birisinden gerilim uygulamak demektir. PIC, ierisinde bulunan program vastasyla bunu k ularnda binary veriye evirirse bu da dijital k demektir. Bu ilemi yapan piyasada microchip'in rettii bir ok mikrodenetleyici bulunmaktadr. rnein, PIC16C7X serisi PIC'lerin analog giri iin zel ular ve ilerinde A/D eviriciler bulunmaktadr. Son zamanlarda ok popler olan ve "Flash" bellee sahip olan PIC16F877 mikrodenetleyicisi de yine bu zelliklere sahiptir. Analog sinyal genellikle bir sensr (Is sensr, k sensr, manyetik sensr vb.) vastasyla salanabilir. Biz bu kitapta vereceimiz rneklerde kullanacamz PIC devrelerinde bu i iin voltaj blc potansiyometre kullanacaz. Bir PIC ierisine analog veri girmek iin yaplacak en kolay yntem bir A/D konvertr kullanmaktr. Bylece analog gerilim konvertr entegresinde dijital veriye dntrlr ve PIC girilerine uygulanr. Bu kolay metodu elektronik bilgisine sahip olanlar ok kolaylkla uygulayabileceklerdir. Biz bu yntemi kitapta vermeyeceiz. imdi ilk olarak PIC16F84'n giriine uygulanan bir gerilim seviyesini nasl algladn inceleyelim.

PIC16F84'n Giri Seviyesinin lm


PIC16 mikrodenetleyicilerinin I/O ucuna uygulanan threshold gerilimi vardr Bu gerilimin altndaki gerilimler "0"(low), stndeki gerilimler ise "1"(High) olarak alglanr, Bu gerilim bir potansiyometre ve dijital voltmetre kullanlarak llebilir Giriin nasl ("1" veya "0") alglandn grmek iin de LED kullanlr. Yaplacak ilemi bir rnekle verelim. PROGRAM-35) PIC16F84'n giri seviyesinin llmesine rnek program. Bu program deneyebilmek iin aadaki devreyi breadboard zerine kurmanz gerekmektedir.

;===PROG35.ASM====27/08/2000======= LIST P=16F84 INCLUDE "P16F84.INC" BASLA BSF STATUS, 5 CLRF TRISB MOVLW h'0l' MOVWF TRISA BCF STATUS, 5 CLRF PORTB DONGU BTFSS PORTA, 0 ;PortA, 0. bit 1 mi? GOTO SONDUR ;Hayr, LED'i sndrmeye git. BSF PORTB, 0 ;Evet, LED'i yak. GOTO DONGU SONDUR BCF PORTB, 0 ;LED'i sndr. GOTO DONGU END lem Basamaklar 1. PIC16F84' programlaynz. 2. Bu program denemek iin yukardaki devreyi breadboard zerine kurup gerilim uygulaynz. 3. lk olarak, potansiyometreyi ayarlayarak RAO ucuna uygulanan gerilimi 1V un altna getiriniz. 4. Potansiyometreyi ayarlayarak yava yava gerilimi ykseltiniz. Bir an LED yanmaya balayacaktr. Bu gerilime V,iash gerimi diyelim. Vflash gerilimi PIC'ten PIC e deiebilir. Yaklak olarak llmesi gereken gerilim 15 V civarnda olacaktr.

A/D evrim Metodu Kullanarak Diren lmek


Yukardaki deneyden edindiimiz bilgileri kullanarak PIC16F84'n ucuna bal bir direncin deerini lebiliriz. llen deer portB'ye bal LED'lerde binary olarak okunabilir. Bu yntem, deeri bilinmeyen bir direncin, bir kondansatr Vflash deerine kadar ne kadar srede arj ettiini lme esasna dayanr. lme neticesinin doru olup olmadn anlayabilmek iin, deeri bilinen bir diren veya potansiyometre kullanmakta yarar vardr. TMR0 saycs arj sresini lmek iin kullanlr. lme ilemi yle yaplr: Kondansatr dearj edilir. Bu ilem portA'y k olarak ynlendirdikten sonra RA0 ucuna "0" gnderilerek yaplr. Kondansatrn dearj belirli bir sre alr. Bu sreden sonra RA0 UCL giri olarak ynlendirilir ve bu anda TMR0 altrlr. Program RA0 portunu izler, bu utaki gerilim Vflash gerilimine ulatnda TMR0 sayc registeri okunur. arj sresi direncin deeriyle ters orantldr. Diren bydke arj sresi de byyeceinden TMR0 registeri ierisinde daha byk bir say okunur. Yukardaki yntemle direncin gerek deerini lmek iin ilk olarak deeri bilinen bir direncin ne kadar srede TMR0 sayacn belirli bir sayya ulatrd bulunmaldr. Daha sonra bu diren deerinin TMR0'da gstermesi gereken deer prescaler deeriyle ayarlanarak belirli bir say gstermesi salanr. llecek daha sonraki direnler referans alnan ilk direnle kyaslanarak gerek deeri bulunur.

PROGRAM-36) RAO ucuna bal bir potansiyometrenin direnci deitirildike portB'deki yanan LED'leri binary olarak saydran program. ;===PROG36.ASM====03/09/2000======= LIST P=16F84 INCLUDE "P16F84.INC" ORG h'00' GOTO BASLA ORG h'04" GOTO KESME BASLA BSF STATUS, 5 CLRF TRISB CLRF TRISA BCF STATUS, 5 CLRF PORTB MOVLW b10100000 ;TMR0 registerini kur. MOVWF INTCON ;INTCOM registerine yaz. CLRWDT ;WDT'yi sil. BSF STATUS, 5 ;BANKl MOVLW b11010001;TMR0 se, dahili komut saykl MOVWF OPTION_REG BCF STATUS, 5 ;BANK0 BCF PORTA, 0 ;Kondansatr dearj yap. CLRF TMR0 ;TMR0 balat, dearj balat DESARJ BTFSS TMR0, 7 ;Deaj sresince bekle GOTO DESARJ BSF STATUS, 5 ;BANKl BSF TRISA, 0 ;PORTA, 0. bit giri BCF STATUS, 5 ;BANKO CLRF TMR0 ;TMR0 (arj sresini) balat V_FLASH BTFSS PORTA, 0 ;RA0 giriine bak. 0. bit "1" mi? GOTO V_FLASH ;Hayr, tekrar bala MOVF TMR0, W ;Evet, giri "1" oldu. TMR0 oku MOVWF PORTB ;Kondansatr dolma sresini gster BCF INTCON, 5 ;TMR0 kesmelerini geersiz yap DONGU GOTO DONGU ;lem bitti KESME

BCF INTCON, 5 MOVLW hAA MOVWF PORTB DONGU GOTO END DONGU

;Sonraki TMR0 kesmelerini iptal et ;TMR0 sre dolma durumunu gster

lem Basamaklan 1. PIC16F84' programlaynz. 2. rnek olarak verilen devreyi breadboard zerine kurup, PIC'i yerletiriniz 3. PIC'e enerji verdikten ok ksa bir sre sonra portB'deki LED'lerde binar sayy grnz. 4. Potansiyometreyi tekrar ayarlayp, RESET tuuna basarak tekrar program altrn. Yeni direncin LED'lerde bir ncekinden farkl deer gsterdiini izleyiniz. Buzzer'in altrlmas rnek olarak verdiimiz deneme kartnn A portunun 3. bit'ine bir buzzer baldr. Bu buzzer'e gnderilen palslerin aralklar deitirilmek suretiyle buzzer'den kan sesin ykseklii deitirilebilir. Aadaki program bu ileme rnek bir programdr. PROGRAM-37) A1 butonuna basl tutulunca, portA'nn 3. bit'ine bal ole buzzer'de kesik ve kaln bir ses karr. A2 butonu basl tutulunca ise kesik ve.t ses karr. Kesik seslerin buzzerden kt anda portB'deki LED'ler de yan sner. ;===PROG37.ASM====06/09/2000======= LIST P=16F84 INCLUDE "P16F84.INC" DLYH EQU h'08' ;Gecikme zaman sayac 1 DLYL EQU h'09' ;Gecikme zaman sayac 2 BZCNT EQU h'0C' ;Buzzer almas BASLA MOVLW h'00' MOVWF PORTA ;PortA'y sil MOVWF PORTB ;PortB'yi sil BSF STATUS, 5 ;BANKl MOVLW b'00010111';RA0-RA2 giri, RA3 k MOVWF TRISA ;PORTA'y ynlendir MOVLW b'00000000';RB0~RB7 k MOVWF TRISB ;PORTB'yi ynlendir BCF STATUS, 5 ;BANK0 BSF PORTA, 3 ;RA3=1 MLOOP CLRWDT BTFSC PORTA, 1 ; RA1=0 nu.? GOTO MAINl MOVLW hFF MOVWF PORTB ;Tm LED'leri yak CALL BZCALLL ;BZ Pi MOVLW h'00' MOVWF PORTB ;Tm LEDleri sndr. MAINl BTFSC PORTA, 2 ; RA2=0 m? GOTO MAIN2 MOVLW h'FF' MOVWF PORTB ;TM LED'leri yak CALL BZCALLH ; BZ Pi MOVLW h'00' MOVWF PORTB ;Tm LED'leri sndr MAIN2 CALL DLY50MS CALL DLY50MS CALL DLY50MS CALL DLY50MS CALL DLY50MS CALL DLY50MS GOTO MLOOP ;Zaman geciktirme alt program DLY500U

MOVLW d'02 GOTO DLYP3 DLY50MS MOVLW d255 DLYP3 MOVWF DLYH DLYLP2 MOVLW d33 MOVWF DLYL DLYLPl DECFSZ DLYL, 1 GOTO DLYLPl DECFSZ DLYH, 1 GOTO DLYLP2 RETLW 0 ;Return ;Buzzer call subroutine BZCALL BZCALLH MOVLW d'44' MOVWF BZCNT BCl BCF PORTA, 3 CALL DLY500U BSF PORTA, 3 CALL DLY500U DECF BZCMT, P BNZ BCl RETLW 0 BZCALLL MOVLW 44 MOVWF BZCNT BC2 BCF PORTA, 3 CALL DLY500U CALL DLY500U BSF PORTA, 3 CALL DLY500U CALL DLY500U DECF BZCMT, F BNZ BC2 RETLW 0 END

;CLKx3xTme ;DLY-1

;44 defa ;RA3=0 ;RA3=1

;RA3=0 ;RA3=1

PIC DENEME KARTI Kitabn ierisindeki rnek programlar deneblleceiniz PIC deneme kartnn emas ve aada verilmitir. Bu kart bizim tarafmzda retilmi ve elektronik malzemelerin kolaylkla elde edilebilir olmas en byk avantajdr. isterseniz, internet sitelerinden parasz olarak elde edebileceinlz benzer kart emalar ve bask devre emalarn download edip kendi olanaklarnzla retebilirsiniz.

You might also like