PİC PROJE ÖRNEKLERİ
  Pic Basic Pro Öğreniyoruz 4
 

Ders-4

Program Oluşturma Genel Kuralları

Bu bölümde bir program yazılırken nelere dikkat etmeliyiz, hangi bilgi nerede verilmeli bunları öğreneceğiz. Ayrıca program oluşturmak için kullanacağımız yazılımlara bir göz atacağız.
Daha sonrada oluşturduğumuz programı derleyip Hex file (Hex Dosyası) haline getirip Pic’e yüklemeyi öğreneceğiz.
 
Basic programları yazılırken bir editör programından yararlanılır. Bu herhangi bir editör programı olabileceği gibi BASIC ler için yaratılmış özel editör programları da olabilir. Tabii ki özel editörlerin görsellik ve program takibi açısından büyük avantajları vardır. Bu nedenle bizde Özel editör programlarından olan Micro Code Studio programını kullanacağız.
 
Program yazma işinde ilk önerimiz programlarınızın başına bir başlık mutlaka yerleştirin.
Bu aynı zamanda program sırasında ilk olarak yazılacak bölümü kapsamaktadır.
Örnek başlık;
 
****************************************************************
'* İsim      : Program Adı.BAS                                          *
'* Yazar   : [İsminiz]                                                        *
'* Not       : Copyright (c) 2004]                                       *
'*               : Tüm Hakları Saklıdır                                    *
'* Tarih     : 21.12.2004                                                   *
'* Sürüm   : 1.0                                                                *
'* Notlar    :                                                                      *
'*                :                                                                      *
'****************************************************************
Hiçbir program ilk yazıldığı hali ile çalışır hale gelmez. Sürekli olarak düzeltmeler yapıldıktan bir müddet sonra program yerine oturur. Bu nedenle her program değişikliğinde sürüm numarasını mutlaka değiştirmeye çalışın. Aksi taktirde programın hangisi olduğu konusunda tereddüde düşersiniz.
 
Bu başlık verildikten sonra , şayet program içinde interrupt (kesme) kullanılacak ise ikinci öncelik sırası olarak kesme tanımlaması yapılmalıdır. Tanımlama şöyle olabilir.
 
ON INTERRUPT GOTO KESME 
 
Şayet kesme kullanılmayacak ise Giriş çıkış pinleri ayarlanmalıdır.
TRISA=0
TRISB=255 gibi
 
Daha sonra kullanılan mikro işlemciye ait Device tanımlamaları ve Config bilgileri verilmelidir.
Burada @ (at) işareti ile başlayan ve aslında ASM (assembly) komutlarının Basic satırlarında kullanılmasına olanak tanıyan bir komuttan yararlanıyoruz. Çünkü bu komutlar ASM komutları olarak verilmektedirler. Örnek kullanım şekli aşağıdaki gibi olacaktır.
 
@ DEVICE pic16F628                              
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_ON
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'XT_OSC - HS_OSC –
 
Yukarıdaki örnekte program için ilk sırada 16F628 mikro işlemcisinin kullanılacağı tanımlanıyor . İkinci sırada Config değerini oluşturmak üzere, Watch Dog Timer On yani açık yapılıyor.
Üçüncü sırada Power on Timer açık olarak ayarlanıyor.
Dördüncü sırada Kod Protek kapalı olarak ayarlanıyor.
Beşinci sırada MCLR pini kullanılacak deniyor. Bu 16F628’in bir özelliği olup MCLR pini gerektiğinde bir INPUT pini olarak kullanılabilmektedir. Burada MCLR ON yani açık olarak ayarlanıp pin’in MCLR fonksiyonu şeklinde kullanılacağını gösteriyor. Şayet bu OFF yapılırsa MCLR pini bir INPUT pini olarak kullanılabilir.
Son satırda ise yine 16F628’e özel bir komut görülüyor. Bu komut 16F628 içinde bulunan dahili osilatör ün kullanılıp dışarıya ayrıca Clock çıkışı yapılmayacağını göstermektedir. Bu komuta yazılabilecek diğer alternatifler satır sonunda XT_OSC veya HS_OSC olarak verilmiştir.
 
Bu işlemler yerine getirildikten sonra yine mikro işlemci tipine bağlı olarak gerekirse bir emir daha verilir. Bazı işlemcilerde Komparatör bazılarında ise Analog-Digital çeviriciler bulunur. Bu sistemler açılışta önseçimli (default) olarak açık çalışırlar. Yani Komparatör ’ü olan bir Pic de aksine bir emir koymaz iseniz Komparatör önseçimli olarak çalışır. Şayet bu Komparatör bacaklarını iptal edip onları normal giriş-çıkış pin lerine dönüştürmez iseniz programınız hatalı çalışacaktır. Bu yüzden programın bu sırasında var ise bu komutlar yer alır.
Komparatör lerin iptali için genelde;
CMCON=7 şeklinde bir komut yazılır.
Analog Digital çeviricilerin iptali için ise;
ADCON1=7 bilgisi verilir.
Verilen değerler pic tipine göre değişiklik arz edebilir. Bu nedenle işlemcilerin Data Sheet’ lerine bakarak doğru bilgiler verilmelidir.
 
Bu bölümden sonra programda LCD kullanılacak ise LCD tanımlamaları yapılır.
Örnek tanımlama bir önceki derste verilmiştir. Görsel olarak unutulmaması için burada yeniden tanımlama yapıyoruz.
 
DEFINE LCD_DREG          PORTB          'LCD data bacakları PortB ye bağlı
DEFINE LCD_DBIT            4                     'LCD data bacakları 4. bit den başlıyor
DEFINE LCD_RSREG       PORTB          'LCD RS Bacağı PortB ye bağlı
DEFINE LCD_RSBIT          1                     'LCD RS bacağı 1. Bite bağlı
DEFINE LCD_EREG          PORTB          'LCD Enable Bacağı PortB ye bağlı
DEFINE LCD_EBIT             3                     'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG     PORTB           ‘LCD RW Bacağı PortB ye bağlı
DEFINE LC_RWBIT            2                     'LCD RW Bacağı 2. bite bağlı
DEFINE LCD_BITS             4                     'LCD 4 bit olarak bağlı
DEFINE LCD_LINES          2                     'LCD 2 sıra yazabiliyor
 
Bu aşamadan sonra sıra, Değişkenlerin tanımlanmasına gelir. Programın bu bölümünde program içinde kullanacağımız değişken isimleri ve tipleri belirlenir. Değişkenler büyüklüklerine göre Bit – Byte ve Word tipinde belirlenebilirler. Gerekirse port pinleri için Symbol tanımlaması kullanılabilir. Dolayısıyla Symbol tanımlaması da değişken tanımlama bölümünde yapılmalıdır.
Örnek vermek gerekir ise
 
SIRA               VAR               BYTE
TOPLAM       VAR               WORD
X                     VAR               BYTE
DOGRU         VAR               BIT
TUS                VAR               PORTB.0
CLK                VAR               PORTA.1
DATA             VAR               PORTA.2
SYMBOL   BUTON=PORTB.7
SYMBOL   LED = PORTB.6
 
Değişken tanımlamaları verildikten sonra, program için gerekli olan ilk değerler ayarlanır. Genelde değişkenler sıfırlanır (sıfıra eşitlenir). Varsa LCD için Türkçe karakterler tanımlanır.
 
SIRA=0
TOPLAM=0
X=0
LOW CLK
 
Artık sıra programın ana bölümüne gelir. Genellikle programlar bir etiket ile başlatılır. Çünkü işlemlerin tekrarlanması amacı ile tekrar bu başlangıç bölümüne geri gelinmesi gerekebilir. Etiket adı olarak genelde BASLA veya START veya ILK veya BIRINCI gibi isimler kullanılır.
 
Şimdi buraya kadar öğrendiklerimizi bir Örnek programla tekrarlayalım.
           
Proje 4a :
 

 
 
Yapacağımız örnekte LCD kullanmayacağız. İşlemci 16F628 olacak. Port a ya bağlı butonlar olacak ve bunlar normalde pinler Pull-up olarak ayarlanacak.
PortB pinlerine ise birer tane LED bağlı olacak. Port a da hangi Buton’a basılırsa PortB de aynı bite karşılık gelen Led yanacak veya yanık ise sönecek. Programımız bu şimdi tüm program yazma kaidelerini uygulayarak programımızı yazalım.
 
'****************************************************************
TrisA=255
Trisb=0
'------------------------------------------------------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON              'Watch Dog Timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on Timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_ON             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
'---------------------------------------------------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'---------------------------------------------------------------------------------------------------------------
SYMBOL TUS0=PORTA.0
SYMBOL TUS1=PORTA.1
SYMBOL TUS2=PORTA.2
SYMBOL TUS3=PORTA.3
SYMBOL TUS4=PORTA.4
 
LED0   VAR    PORTB.0
LED1   VAR    PORTB.1
LED2   VAR    PORTB.2
LED3   VAR    PORTB.3
LED4   VAR    PORTB.4
 
PORTB=0
'------------------------------------------------------------------------------------------------------------------------
 
BASLA: 
        IF TUS0=0 THEN   'Tuşa basılmadığı zaman Tus=1 dir basılınca 0 olur.
           TOGGLE LED0   ' LED'in durumunu değiştir yak veya söndür.
           WHILE TUS0=0 ' hala tuşa basılı tutuluyor ise
           wend          ' bırakılıncaya kadar bekle.
        endIF            ' tuş bırakılınca buraya geç.
        
        IF TUS1=0 THEN TOGGLE LED1
        IF TUS2=0 THEN TOGGLE LED2
        IF TUS3=0 THEN TOGGLE LED3
      
        IF TUS4=0 THEN
           TOGGLE LED4
           WHILE TUS4=0
           WEND
        ENDIF
       
' TUS kullanımı son derece değişik neticeler verir. Yukarıdaki örnekte
' toplam 5 adet Tuş bulunmaktadır. İlk tuş ile sonuncu tuş korumaya alınmıştır.
' korumadan kasıt tuşa bir kere basılınca Toggle komutu icra edilmekte ancak
' tuş bırakılıncaya kadar başka hiç bir işlem yapılmamaktadır.
' Diğer tuşlarda ise koruma yoktur. Toggle komutu yerine getirildikten sonra
' program çok hızlı bir şekilde yeniden aynı tuşa bakmakta ve şayet halen basılı
' ise bir kez daha toggle komutunu icra etmektedir. Tüm tuşları deneyerek aradaki
' farkı görmeye çalışınız. Gerekirse PAUSE 100 süresini daha da kısaltarak farkı görmeye
‘ çalışınız.
         
        PAUSE 100
        GOTO BASLA
END
 
Yukarıdaki programda kullandığımız bazı komutları tekrar açıklayıp değişik kullanım örnekleri vereceğiz.
İlk komutumuz IF yani şart komutu dur. Türkçesi ŞAYET olan bu komutu şarta bağlı bazı durumlar için kullanmaktayız. Programımızda olduğu gibi ;
ŞAYET TUŞ0’a basılmış ise TOGGLE LED0 komutunu icra et. Bunun Basic satırı olarak karşılığı; IF TUS0=0 THEN TOGGLE LED0   idi.
Başka bir örnek , Şayet sayı=200 ise , sayı yı 0 (sıfır) yap şeklinde bir durum için;
IF SAYI=200 THEN SAYI=0 şeklinde bir komut kullanmalıyız.
 
IF komutu birden fazla şartlar içeren bir halka içinde kullanılabilir. Bu durumda komut önce THEN ile satır bitirilip diğer şartlar test edildikten sonra komut sonu ENDIF ile belirlenmelidir.
Örnek;
 
IF SAYI= 200 THEN
    TOPLAM=25
     X=0
ENDIF
 
IF satırı ile ENDIF satırı arasında başka IF lerde bulunabilir. Ama daima kural ilk giren son çıkar prensibine göre uygulama yapılmalıdır. Bunu da bir örnekle açıklamak uygun olacaktır.
 
IF SAYI=200 THEN
   SAYI=0
       IF X=100 THEN
           SAYI=50
            X=0
       ENDIF   ‘bu komut ile ikinci IF komutunu bitiriyoruz.
ENDIF          ‘bu komut ile ilk IF komutunu bitiriyoruz.
 
İkinci kullandığımız komut TOGGLE komutudur. Bit bazında çalışan bir komuttur.
Her hangi bir bit değerini ters çevirmede kullanılır. Bit high ise Low , Low ise High yapar.
Programda Led örneğinde şayet Led yanıyorsa söndürür. Sönük ise yakar.
Bu komut Byte bazında kullanılmaz. Yani    TOGGLE PORTB şeklinde bir ifade kullanamazsınız.
 
Kullandığımız diğer değişik komut WHILE – WEND komutudur.
While in kelime anlamı esnasında demektir. Kısaca bir durum esansında şunu yap şeklinde kullanılır. Örneğin Tuş=0 iken Led yanık olsun demek için;
 
WHILE TUS=0
    HIGH LED             ‘TUS=0 olduğu müddetçe program bu satırı icra eder.
WEND
LOW LED                  ‘TUS=1 olunca program bu satıra atlar ve LED söner.
 
İfadesini kullanmak gerekir. Wend, While komutunun bitiş yerini belirlemek için kullanılır.
Bizim örneğimizde;
WHILE TUS0=0
WEND
Yazarak aslında TUS=0 iken hiçbir iş yapma sürekli tuşa bak anlamında bir komut icra edilir. Zira While – Wend arasına hiçbir komut yazmadık. Dolayısıyla Program Tus=0 mı diye bakar. Tus=0 ise alta geçer burada hiçbir komut yok. Wend’e gelir ve bunu görünce tekrar Tus=0 mı diye bakar.
Bu olay Tus=1 oluncaya kadar devam eder. Yani Tus=0 olduğu müddetçe program WHILE WEND döngüsü içinde bekler.
 
 
İkinci Program örneğimizde LCD Kullanacağız. 
 
 
 Proje 4b:
 
 
 
 
 
 
Bu örneğimizde PortB ye LCD bağlayacağız. PortA.0 ve PortA.1 pinlerine Pull-Up yapılmış iki tuş bağlayacağız. PortA.0 daki tuş Yukarı , PortA.1 deki tuş ise Aşağı tuşu olarak çalışacaktır. Başlangıçta Ekranda Sayı adı altında bir değişken’ verilen sıfır değeri görülecek ve yukarı tuşuna basılınca sayı bir artırılacaktır. Aynı şekilde Aşağı tuşuna basılınca sayımız bir azaltılacaktır.
Sayıların artırılma ve eksiltme durumlarında maksimum ve minimum değerlerinden sonra aldıkları değerleri görerek öğrenmeniz için sayı değişkeni için bir sonlandırma fonksiyonu kullanılmayacaktır. Şimdi Programımıza geçelim.
 
 
''****************************************************************
TrisA=255
Trisb=0
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_ON             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
'-------------------------------------------------------------------
DEFINE LCD_DREG          PORTB          'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT            4                     'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG       PORTB          'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT          1                     'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_RWREG     PORTB
DEFINE LCD_RWBIT         2
DEFINE LCD_EREG          PORTB          'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT             3                     'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS             4                     'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES          2                     'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
OPTION_REG.7=1 'portB deki dahili PULL-UP lar iptal edildi.
'-------------------------------------------------------------------
SYMBOL YUKARI=PORTA.0
SYMBOL ASAGI=PORTA.1
SAYI   VAR   BYTE
'-------------------------------------------------------------------
LOW PORTB.2
SAYI=0
PORTB=0
LCDOUT $FE,1
PAUSE 200
'-------------------------------------------------------------------
BASLA:
      IF YUKARI=0 then SAYI=SAYI+1
      IF ASAGI=0 THEN SAYI=SAYI-1
'      LCDOUT $FE,1,"    SAYI = ",#SAYI
      LCDOUT $FE,2,"    SAYI = ",DEC3 SAYI
      LCDOUT $FE,$C0, " LCD ORNEK PROG."
      PAUSE 100
      GOTO BASLA
     
END    
 
 
Yukarıdaki örnekte LCDOUT $FE,2,”    SAYI = “,DEC3 SAYI    şeklinde bir komut satırı görüyoruz. Ekranda sayı gösterimine örnek olması açısından bu satır bir önceki ile alternatifli olarak koyulmuştur. Burada DEC3 komutu sayı değerinin 3 hane olarak ekrana geleceğini göstermektedir. 3 hane olmayan sayılarda hane sayısını doldurmak için 0 kullanıldığını daha önce söylemiş idik. 
Bir satırın başına koyulan tek tırnak satırın komut olarak icrasını önler. Genellikle açıklama satırları bu şekilde verilir ve derleyici tarafından değerlendirilmezler.
 
Programda önce Yukarı tuşuna basılarak sayı artırılmalı sonra Aşağı tuşuna basılarak sayı azaltılmalıdır. Sayı 0’a ulaştığında azaltmaya devam edilir ise geriye doğru 255’e dönüldüğü ekrandan izlenmelidir. Aynı şekilde 250 den yukarı doğru sayıyı artırırsanız 255’e kadar gelinip 255 den sonra 0 a geçildiği yine ekrandan izlenmelidir.
 
Bundan sonraki örneğimiz 2X16 LCD kullanarak Ekran Mönüsü oluşturma ile ilgili olacaktır.
Genellikle Mönü ler bir den fazla seçenekli işlerde kullanılmaktadır.
 
Şimdi kendimize bir örnek belirleyelim ve bunu program şekline getirelim.
 
Diyelim ki Yine bir ısı kontrol programı yapıyoruz. Program bir evin ortam ısısını kontrol edecek. Kendimiz bir set değeri tayin ediyoruz ve bu işi hem gündüz hem de gece için ayrı yapıyoruz. Gerekçemizde gece oda sıcaklıklarının gündüze göre birkaç derece daha düşük olması.
Şimdi yazacağımız program Ekrana önce bir seçenek getirecek Gündüz veya Gece. Bunlardan birini seçtikten sonra seçtiğimiz şayet Gündüz ise Gündüz Sıcaklığı Set etme bölümüne , seçimimiz şayet Gece ise Gece Sıcaklığı Set etme bölümüne geçecek ve sıcaklık değerini ayarlayıp programdan çıkacağız. Tabii ki normal çalışma modunda ekranda yalnızca ortam sıcaklığını göreceğiz. Şayet seçim tuşuna basarsam mönü ye gireceğim.
 
 
Proje 4c :
 

 
 
A portuna 3 adet tuş bağlı olacak.Pull-Up’lı olarak PortA.0 da Seçim tuşu, PortA.1 de Yukarı tuşu (+) ve PortA.2 de ise Aşağı tuşu (-) yer alacak. Yine PortB de 2x16 LCD bağlı olacak ve işlemcimiz 16F628 olacaktır.
 
 
İşte Programımız ve açıklamaları;
 
'****************************************************************
TrisA=255
Trisb=0
 
'-----------------------------------------------------------------
@ DEVICE pic16F628                                           'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON                        'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON                      'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF           'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_ON                      'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
'-------------------------------------------------------------------
DEFINE LCD_DREG          PORTB          'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT            4                     'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG       PORTB          'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT          1                     'LCD RS bacağı Hangi Bite bağlı ?
define LCD_RWREG          PORTB
define LCD_RWBIT             2
DEFINE LCD_EREG          PORTB          'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT             3                     'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS             4                     'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES          2                     'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------
CMCON=7                            '16F628 de komparatör pinleri iptal hepsi giriş çıkış
OPTION_REG.7=1             'portB deki dahili PULL-UP lar iptal edildi.
'-------------------------------------------------------------------
SYMBOL SEC=PORTA.0
SYMBOL YUKARI=PORTA.1
SYMBOL ASAGI= PORTA.2
ISIGUN   VAR   BYTE                      'gündüz ısı değeri
ISIGECE VAR   BYTE                    ' gece ısı değeri
ISIODA   VAR   BYTE                      'oda sıcaklığı
'-------------------------------------------------------------------
LOW PORTB.2
ISIGUN=22
ISIGECE=18                         'Bunlar default değerler olacak
ISIODA= 21
PORTB=0
LCDOUT $FE,1
PAUSE 200
'-------------------------------------------------------------------
 
BASLA:
      LCDOUT $FE,1," SEC => MENU "                      'Menu ye nasıl girileceği açıklanıyor
 
BIR: 
      LCDOUT $FE,$C0,"ODA SICAKLIGI=",#ISIODA   'ODA sıcaklığını ekrana getiriyoruz.
      PAUSE 150
      IF SEC=0 THEN MENU                                                'Şayet SEC tuşuna basılırsa Menu ye git
      GOTO BIR                                                           'Tekrar başa git.
                                            
 
MENU:
      LCDOUT $FE,1, "GUNDUZ => YUKARI"
IKI: LCDOUT $FE,$C0,"GECE =>ASAGI BAS"
      PAUSE 200
      IF YUKARI=0 THEN GUNDUZ                         'Yukarı tuşuna basılırsa GUNDUZ ’e git.
      IF ASAGI=0 THEN GECE                                'Aşağı basılırsa GECE' ye git.
      IF SEC=0 THEN BASLA                                 'Tekrar SEC tuşuna basılırsa Başla' ya git
      GOTO IKI               
     
GUNDUZ:
      LCDOUT $FE,1, "GUNDUZ SET DEGER"                   
UC:   LCDOUT $FE,$C0,"ISIGUN = ",#ISIGUN              'Gündüz Set sıcaklığı ekranda
      PAUSE 200
      IF YUKARI=0 THEN                                                      'Yukarı tuşuna basılınca
          ISIGUN=ISIGUN+1                                        'Gündüz Set bir artırılıyor
          IF ISIGUN>50 THEN ISIGUN=50                            '50 ye ulaşınca 50 de kalıyor
       ENDIF  
      IF ASAGI =0 THEN                                           'Aşağı tuşuna basılınca
          ISIGUN=ISIGUN-1                                         'Sıcaklık bir eksiltiliyor
          IF ISIGUN=255 THEN ISIGUN=0                 '255 e ulaşınca sıfıra eşitleniyor
      ENDIF
      IF SEC=0 THEN BASLA                             'Sec tuşuna basılınca başa gidiliyor.
      GOTO UC
     
GECE:
      LCDOUT $FE,1, " GECE SET DEGER "                   
DORT: LCDOUT $FE,$C0,"ISIGECE = ",#ISIGECE
      PAUSE 200
      IF YUKARI=0 THEN
          ISIGECE=ISIGECE+1
          IF ISIGECE>50 THEN ISIGECE=50
       ENDIF  
      IF ASAGI =0 THEN
          ISIGECE=ISIGECE-1
          IF ISIGECE=255 THEN ISIGECE=0
      ENDIF
      IF SEC=0 THEN BASLA   
      GOTO DORT
END     
 
Bu programla ilgili ilave bazı açıklamalar yapmak mantığını anlamak açısından yararlı olacaktır.
Görüldüğü üzere 2 satır 16 karakter bir ekran sınırları içinde birkaç kademeli bir menü düzenlenmiştir.
 
Programın baş tarafında yer alan ifadelerin açıklaması daha önce yapılmış idi. Bu nedenle açıklamamıza BAŞLA etiketinden itibaren yapacağız.
 
Başla etiketinden sonra hemen ekrana
LCDOUT $FE,1, " SEC => MENU " komutu ile Mönü ye geçmek için SEC tuşuna basılacağı açıklanıyor. Dikkat edilir ise LCDOUT $FE,1 komutu kullanılarak önce ekran tamamen siliniyor arkasından Menu açıklaması veriliyor. Bu satır yalnızca bir defa icra edileceğinden ekranın tamamen silinmesi doğru olmaktadır. Aksi taktirde bir önceki ekrandan bazı karakterler ekranda kalabilir.
 
Altında BIR: etiketi ile birlikte
LCDOUT $FE,$C0, "ODA SICAKLIGI=",#ISIODA   komutu ile Oda sıcaklığını veriyoruz.
 
Mönü’nün ilk kısmını oluşturan bu bölümde oda sıcaklığı ölçülerek ekrana getiriliyor ve kullanıcı isterse set sıcaklıklarını ayarlamak üzere bir alt mönüye geçebiliyor. Bunun için SEC tuşuna basması yeterli oluyor.
Bu konumda SEC tuşuna basıldığı zaman programda yer alan;
 
IF SEC=0 THEN MENU 
 
Satırı sayesinde program MENU isimli etikete atlıyor. Burada
 
LCDOUT $FE,1, "GUNDUZ => YUKARI"
 
Komutu ile önce ekran siliniyor ve daha sonra Yukarı tuşuna basılırsa Gündüz mönüsüne gidileceği açıklanıyor. Bu satırın altında;
 
LCDOUT $FE,$C0,"GECE =>ASAGI BAS"
Komutu ile Aşağı tuşuna basılırsa da Gece mönüsüne gidileceği açıklanıyor.
Doğal olarak bu satırların altında da hangi tuşa basıldığını kontrol eden bir bölüm yer alıyor.
İşlem gayet basit. Yukarı tuşuna basılırsa GUNDUZ isimli etikete git;
 
IF YUKARI=0 THEN GUNDUZ 
 
Aşağı tuşuna basılırsa GECE isimli etikete git;
 
IF ASAGI=0 THEN GECE
 
Şeklinde komutlar veriliyor. Tabii ki tüm bu işlemler bittikten sonra programın asıl çalışan bölümüne gitmek içinde SEC tuşunu devreye sokuyoruz. SEC tuşuna basılması halinde ise program tekrar en başa atlıyor.
 
BU aşamada yalnızca Gündüz etiketi altında ne yapılıyor açıklamak istiyorum. Zira Gece etiketinde yapılanlar gündüzden çok farklı değil. Birisini anlarsanız diğerini anlamanız zor değil.
 
Gündüz etiketi altında önce Gündüz set değeri ekrana verilip aşağı veya yukarı tuşlarından birisine basmanız bekleniyor. Ya da SEC tuşuna basıp tekrar program başına geçmeniz bekleniyor.
Yukarı tuşuna basmanız halinde Set sıcaklığı bir artırılıyor. Ancak Artırılan sıcaklığın 50 dereceyi geçmesi istenmediğinden şayet geçerseniz sıcaklık yine 50 ye eşitleniyor. Bu bir kısıtlama veya sınırlandırma halidir.
Aynı şekilde Aşağı tuşuna basılması halinde sıcaklığın değer bir eskitiliyor ve sıfır değeri geçilip 255’e ulaşıldığında sıcaklık tekrar sıfıra eşitleniyor. Daha önce görmüş idik. Sayıları birer eskiterek gidersek. Sıfırdan sonra tekrar 255 geliyor idi.
 
Bu kadar örnek verdikten sonra Micro Code Studio (MCS) ile nasıl program derlenip Hex dosyası elde ediliyor birazda ona değinelim.
 
Bildiğiniz gibi Pic gibi mikro işlemciler yazılan programları icra ederler. Bunun için yazılan programların Pic’ kayıt edilmesi (yazılması) gerekir. Basic de yazılan programlar direkt olarak Pic’e yazılamaz. Bas uzantılı olan bu dosyaların önce makine diline çevrilerek Pic ’in anlayacağı biçime dönüştürülmesi gerekmektedir. Derleme denilen bu işlem MCS tarafından PBP derleyicisi kullanılarak yapılmaktadır. Derlendikten sonra Hex formatına dönüştürülen programın daha sonra yine başka bir program ve bir programlayıcı devre yardımı ile Pic’e aktarılması yani yazılması sağlanır. Hem program yazma ve hem de derleme işlemi için Micro Code Studio (MCS) programı kullanılmaktadır.
 
MCS ilk defa kurulurken bazı parametrelerin ayarlanması gerekiyor. Bunların başında PBPro klasörünün MCS ye gösterilmesi gerekmektedir. Bu iş için MCS de View mönüsünden Pic Basic Options alt mönüsü seçilir. Bu mönüde PBP nun yeri programa gösterilir.
Aynı şekilde Programlayıcı nın yeri ve parametreleri de bu seçenekte MCS ye gösterilir.
Bu işlemlerin yapıldığını kabul ederek derlemenin nasıl yapıldığına bakalım.
Programı yazmayı tamamladıktan sonra ekranın üst tarafında bulunan derle tuşuna (bir sayfa ve üzerinde sağa doğru ok olan tuş) tıklanır ise yazmış olduğunuz derlenir ve BAS uzantılı dosyanızın yer aldığı klasör içine aynı isimle ancak Hex uzantılı olarak kayıt edilir.
Dosyanın derlendikten sonra Pic’e yazılması için programlayıcıyı çalıştırmak gerekir. MCS bunu da otomatik yapabilir. Yine ekran üstünde üzerinde aşağı doğru ok bulunan bir entegre resmi göreceksiniz buda derlemeden sonra programlayıcıyı çalıştıran tuş dur. Bu tuşa basılınca önce program derlenir ve ardından program otomatik olarak programlayıcıya (IC-Prog) yüklenerek programlayıcı çalıştırılır. Size yalnızca programla tuşuna basarak Hex dosyasının Pic’e yazdırılması kalır.
 
MCS içinden IC-Prog gibi programlayıcıların otomatik çalıştırılması için bazı parametrelerinde ayarlanması gerekir. Bunların nasıl yapıldığı HEM MCS help mönüsünde hem de programlayıcıların açıklamalarında yer almaktadır. Bu bilgiler kullanılan programa göre değiştiğinden ve hepsini burada açıklamamız mümkün olmadığından yalnızca ön bilgi vermekle yetineceğiz.
 
Pic’e yazma ve Pic den okuma işlemlerinde en çok kullanılan program olan IC-Prog hakkında da biraz bilgi vermek isterim. IC-Prog hem seri porttan hem de paralel porttan çalışan programlayıcılarla uyumlu bir programlayıcıdır. Kullanımı son derece basittir. Gerekli parametreler ayarlanıp donanım seçimi de doğru yapılırsa sorunsuz olarak çalışacaktır.
Programı kullanırken dikkat edilmesi gereken en önemli nokta programlama yaparken veya programlama yaptıktan sonra doğrulama işleminin yaptırılmasıdır. Genelde hata veriyor diye bu işlem iptal edilmektedir. Hatalı yapılan bir işlemi kontrol etmez iseniz hatalı olduğunu nasıl anlayacaksınız. Hata var ise gösterilmesinde fayda vardır. Bu nedenle Seçenekler mönüsünden Programlanıyor alt mönüsünde bulunan kutucukların ikisini de veya en az birini işaretlemekte fayda vardır.
 
 
 
 
  Bugün 13 ziyaretçikişi burdaydı!  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol