avatar_Mucit23

"INCLUDE" Komutu

Başlatan Mucit23, 18 Nisan 2013, 16:01:30

Mucit23

Ete Hocam Merhaba

Basic de include komutu ile programa dahil ettiğim .bas dosyasına Alt program gibi kod parçacıkları yazmam mümkünmüdür. Bu gün bir deneme yaptım ama başarısız oldum.

Normalde Symbol veya Var gibi tanımlamalar yapılabiliyor.

Ana programı sadeleştirmek adına birkaç alt programı INCLUDE ile tanımladığım ikinci .bas dosyasına dahil edeyim dedim. Program hatada vermedi ama Programı çalıştırınca işlemci alt programa gidip geri dönemedi. Sürekli Stack Taşması meydana geliyor. İşlemci yoldan çıkıyor.

C deki Yapıyı uydurmaya çalışıyorum. Bu mümkünmüdür?
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Tabiiki mümkündür. Mesela standart bir LCD bağlantın var ise onu bir programa bağlarsın ve yeni programına direk İnclude edebilirsin.
Ne bileyim RTC okuma yaparsın ve bunu diğer programlara include edebilirsin. Burada dikkat edilkecek husus, include programında kullanılan değişkenlerin yeni programda kullanılmaması ve gidip gelme kurallarına dikkat edilmesidir.
Aslında bu avantaj var iken bende nedense bu güne kadar bu özelliği kullandım sayılmaz. Geçenlerde bir kaç program yazdım üst üste o zaman kafama dank etmişti neden böyle yepmıyorum diye. Ama yapacağım.

Ete

Mucit23

Basicde çok uzun programlar yazmıştım(30kb ve üzeri) Gerçekten bir yerden sonra program artık işin içinden çıkışmaz hale geliyor.

Main programı sonradan okunabilirlik açısından bence 1000 satırı geçmemeli. Tüm kütüphaneleri ve kullanıcı kodlarını ana programa yığınca bir alt programı arayıp bulmak bile çok vakit alıyor.

Örneğin Çok dallı budaklı bir menü yapınca yüzlerce satır kod yazmak gerekiyor. Bu kodlar neden ana programı şişirsinki? menu.bas diye bir dosya oluşturup tüm menü kodları bu dosyanın içine atıldıktan sonra programın başına INCLUDE "menu.bas" komutu ile menu.bas dosyası ana programa dahil edilip kullanılabilir.

Aynı şekilde sıkça kullandığımız RTC , Sıcaklık sensörü veya buna benzer diğer enteğrelerin kullanıcı kütüphaneleri buna benzer bir yapı ile sadece programa dahil edilip kullanılabilir.

Bu sayede programlar çok daha okunur hale gelir.

Ben şimdi onun üzerinde çalışıyorum fakat kodları çalıştıramadım. Bu include komutu programın neresinde eklenmeli. Gosub la alt programa gidemedim bir türlü. Veya dönemiyorum  :o
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

karbal656

Şöyle bir tanım işe yarayabilir.

Örnek:
kod parçaları....

gosub Etiket1

.......
.......

Etiket1:
include "dosya.bas"
return

yani etiket içinde include dosyası olursa gosub komutu işe yarar diye düşünüyorum.

kotan04

#4
anladığım kadarıyla bu şekilde

bu kısmı include olarak alabiliriz sanırım her defasında bu tanımlamaları yazmaktansa


''-----------------------------------------------------------------------------------------------------------------------------------
@ __config _HS_OSC  & _PWRTE_ON & _BODEN_ON & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_ON
cmcon=7
DEFINE OSC 10
TRISA=0
TRISB=0
PORTA=0
PORTB=0

''-----------------------------------------------------------------------------------------------------------------------------------


örneğin

üstek, tanımlamaları

include " deneme.bas "   ' bu kısımda port tanımlamaları ve sigorta ayarları mevcut 
include " deneme.pbp "   ' bu kısımda port tanımlamaları ve sigorta ayarları mevcut 

gibi gösterebilir ve programda ilgili kısma yerleştirdiğiniz zaman program sırasıyla komutları işleyecektir






include " deneme.bas "   ' bu kısımda port tanımlamaları ve sigorta ayarları mevcut 

symbol led portb
x var byte
bekle con 200

basla :


led =%11111111
pause bekle
led =%00000000
pause bekle

goto basla



Mucit23

#5
Tam anlayamadım ama çözdüm meseleyi.

include Komutunu programın her yerinde ekliyemiyoruz. Deneme Yanılma sonucu buldum..

Bir örnek Yaptım C de kullandığım Max7219 Kütüphanemi Basicde kullanılacak hale getirip bas dosyası olarak kaydettim. Sonrada bunu programa ekleyerek kullandım.

Hazırlamış Olduğum Max7219 Kütüphanesi

'****************************************************************
'*  Name    : Max7219.BAS                                       *
'*  Author  : [Ferhat YOL]                                      *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17.09.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : Max7219 Kütüphanesidir                            *
'*          :                                                   *
'****************************************************************
SYMBOL CS = PORTC.0
SYMBOL CK = PORTC.3
SYMBOL DT = PORTC.5
;*******************************Variables***************************************
Max_Data     var BYTE
Max_Adr      var byte
Max_Dta      var Byte
Sayac        var byte

Operation_Mode    Con $00    ;Operation_Mode Adresi
DIG7              CON $01    ;7. Dijit Adresi         
DIG6              CON $02    ;6. Dijit Adresi
DIG5              CON $03    ;5. Dijit Adresi
DIG4              CON $04    ;4. Dijit Adresi
DIG3              CON $05    ;3. Dijit Adresi
DIG2              CON $06    ;2. Dijit Adresi
DIG1              CON $07    ;1. Dijit Adresi
DIG0              CON $08    ;0. Dijit Adresi
Decode_Mode       CON $09    ;Decode Mode Adresi
Intensity         con $0A    ;Parlaklık Kontrol Adresi
Scan_Limit        CON $0B    ;Display Seçim Adresi
Shut_Down         CON $0C    ;Shutdown Adresi
Display_Test      Con $0F    ;Display Test Adresi

;****************************Max7219_Settings***********************************
Disp_Number       con $07    ;Sürülecek olan Display Sayısı 0-7 arası değer alır
                             ;Disp_Number=$00 Sadece 1. Dijit Kullanılacak
                             ;Disp_Number=$0F 8 Dijit (0,1,2,3,4,5,6,7)
Brightness        Con $0F    ;Parlaklık Seviyesi
                             ;Brightness=$00 Duty Cycle = 1/32 (Min)
                             ;Brightness=$0F Duty Cycle = 31/32 (Max)
Disp_Mode         Con $FF    ;Sürülecek display modu buradan ayarlanır
                             ;Disp_Mode=$00 Matrix Display(No Decode)
                             ;Disp_Mode=$FF 7 Segment Display
;*****************************MCU Hardware SPi init*****************************
Spi_init:                    ;Spi Donanımı Set ediliyor           
  OUTPUT CS                  ;CS Pini Çıkış Yapıldı
  OUTPUT CK                  ;CLK Pini Çıkış Yapıldı
  OUTPUT DT                  ;Data Pini Çıkış Yapıldı
  SSPSTAT   = $40            ;Spi Master iletişimde Yükselen kenar Seçildi.
  SSPCON    = $00            ;Spi Master Modu Aktif
  SSPCON.5  = 1              ;Spi iletişimi Aktif
RETURN
;*****************************Max7219 init**************************************                                                                                                         
Max7219_init:                ;Max7219 Set Ediliyor     
  Max_Adr=Decode_Mode        ;BCD Decode Adresi seçildi
  max_DTA=Disp_Mode          ;Decode işlemi 8 Dijit içinde yapılacak
  Gosub MAx7219_writedata    ;Max7219'a Gönder
  Max_Adr=Intensity          ;Intensity Adresi Seçildi
  max_DTA=Brightness         ;Parlaklık Max. Değerde.
  Gosub MAx7219_writedata    ;Max7219'a Gönder
  Max_Adr=Scan_Limit         ;Taranacak display sayısını belirlemek için adres
  max_DTA=Disp_Number        ;0-7 arasındaki displayleri tara
  Gosub MAx7219_writedata    ;Max7219'a Gönder
  Max_Adr=Shut_Down          ;Shutdown adres seçildi
  max_DTA=$01                ;Shutdown = 0x01
  Gosub MAx7219_writedata    ;Max7219'a Gönder
  Max_Adr=Operation_Mode     ;No_Op adres Seçildi.
  max_DTA=$FF                ;Normal Operasyon Modu Seçildi
  Gosub MAx7219_writedata    ;Max7219'a Gönder
  Max_Adr=Display_Test       ;Display Test adresi seçildi
  max_DTA=$00                ;Test İşlemi Kapalı
  Gosub MAx7219_writedata    ;Max7219'a Gönder
return
;**********************************SPi Write Byte*******************************
Spi_Write:                   ;1 Byte Data gönderiliyor
  SSPBUF = MAX_DATA          ;Data SSPBUF'a yükleniyor
  jump:IF SSPBUF.0=1 THEN JUMP  ;Bufferin Boşalmasını bekle..
return
;********************************Max7219 Write Word*****************************
Max7219_WriteData:           ;Adres ve Data Bilgisi Gönderilir.     
  cs=1                       ;Max7219 Secildi.
  Max_Data=Max_Adr           ;Adres Bilgisi Ön Buffere alınıyor
  gosub spi_write            ;Bufferdeki Değer Gönderiliyor
  max_Data=MaX_DTA           ;Data Bilgisi Ön Buffere alınıyor.
  GOSUB spi_write            ;Bufferdeki Değer Gönderiliyor
  CS=0                       ;Max7219 Pasif.
return


Kod içerisinde Gerekli bütün açıklamaları yaptım. Parlaklık ayarı gibi ayarların nasıl verileceği anlattım.

'****************************************************************
'*  Name    : Max7219_Display_Test.BAS                          *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17.09.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'---------------------------Device Configuration--------------------------------
DEFINE OSC 4

@ __config  _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF

TRISA=$00
TRISB=$00
TRISC=$00
PORTA=$00
PORTB=$00
PORTC=$00

gosub Spi_init               ;Spi Donanımı Ayarlanıyor
gosub Max7219_init           ;Max7219 Set Ediliyor
goto  Start                  ;Ana Programa git

;*********************************Ek Dosyalar*********************************
INCLUDE "Max7219.bas"

;*********************************Main Program**********************************
Start:

SAYAC=SAYAC+1
PAUSE 200

MAX_DTA=SAYAC DIG 0
Max_Adr=DIG0
Gosub MAx7219_writedata
MAX_DTA=SAYAC DIG 1
Max_Adr=DIG1
Gosub MAx7219_writedata
MAX_DTA=SAYAC DIG 2
Max_Adr=DIG2
Gosub MAx7219_writedata
Goto Start
end



Buda Ana program. Max7219.bas dosyası Burada programa ekleniyor.

Buna Benzer DS1302, DS1307, Ds18B20, gibi enteğrelerin Kütüphanelerin bu şekilde Kütüphane tarzına çevirmeyi düşünüyorum.

Bu Arada unutmadan 16F876 ve seri iletişim için Donanımsal SPI Modülü kullanılmıştır
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal