Swordfishte yazilmis kodu baska programda derleme

yavrigurd

Üye
Katılım
8 May 2018
Mesajlar
23
Puanları
1
Yaş
44
Merhaba arkadaşlar. Benim sorunum şu ben PIC programlama dersi almadım araştırma projesi için sectigim projeyle ilgili bir Pic kodu buldum. Ancak sorun şu proje açılırken ekranda kocaman ayla yazıyor. Yapan kişi kendi imzasını atmış sanırım. Programın bazı dosyaları var ve swordfishte yazılmış olduğunu çözdüm. Sword fish programınıda satın alamıyorum kredi kartım yok. Ben bu kodları nasıl derlerim başka yolu varmıdır.
Yardımlarınız için şimdiden çok teşekkür ederim
 
picproje yada edaboard a yazın derleyicisi olan hayrına derleyip gönderir.
 
Kod:
Device = 18F252                 //Kullanacağımız mikrodenetleyici seçildi

Clock =20                       //Mikrodenetleyici çalışma frekansı



#option LCD_DATA = PORTC.4          //LCD data hattı 4 bit kullanılacak

#option LCD_RS = PORTB.1            //LCD RS pini tanımlanıyor

#option LCD_EN = PORTB.0            //LCD Enable pini tanımlanıyor       

#option LCD_INIT_DELAY = 100        //LCD açılış bekleme süresi



Dim KIRMIZI_LED As PORTA.5              //Kırmızı LED kontrol pini

Dim YESIL_LED As PORTB.3                //Yeşil LED kontrol pini

Dim MAVI_LED As PORTA.3                 //Mavi LED kontrol pini

Dim SARI_LED As PORTA.2                 //Sarı LED kontrol pini     

Dim BEYAZ_LED As PORTA.1                //Beyaz LED kontrol pini                                     

Dim ASAGI As PORTC.3                    //Aşağı buton kontrol pini               

Dim ALGILA As PORTC.0                   //ALGILA buton kontrol pini

Dim YUKARI As PORTC.2                   //Yukarı buton kontrol pini

Dim ENTER As PORTC.1                    //Enter buton kontrol pini

Dim LDR As PORTA.0                              //LDR PORTA.0 analog pine bağlı

Dim menu_id As Byte                             //Menü seçim okunun konumu saklamak için kullanılır

Dim menu_flag As Boolean                        //Menü ekranının durumunu belirten değişken True->Menü ekranı açık

                                                //                                          False->Menü ekranı kapalı

Dim alt_menu_flag As Boolean                    //Alt menü ekran durumunu belirten değişken True->Alt menü ekranı açık

                                                //                                          False->Alt menü ekranı kapalı

Dim sayac As Byte                               //Renk tanımlama ve ayırt etmede kullanılan döngü değişkeni                                                             

Const renkler(10) As String=("BLUE      ","GREEN     ","YELLOW    ","ORANGE    ","RED       ","PURPLE    ","PINK      ","BROWN     ","BLACK     ","WHITE     ")//,"TANIMSIZ      ")

Dim renk_degerleri(16) As Word     //Sensörden okunan değerlerin her renk için saklandığı değişken                                     

Dim ldr_degerleri(16) As Byte      //LED lerin yanma sırasına göre okunan LDR değerinin saklandığı değişken

Dim kalan(16) As Byte      //LED lerin yanma sırasına göre okunan LDR değerinin saklandığı değişken

Dim tanima As Boolean              //True-> Tanıma başarılı False-> Tanıma başarız

Dim EE_Adres As Byte               //EEPROM adresleri

Dim hassasiyet As Byte             //Okunan değer için +/- hassasiyet

Dim sonuc As Word                  //Okunan LDR değerlerinin matematiksel işlem sonucu saklandığı değişken       

Dim son_8 As Word                  //LDR den okunan ilk 8 LED durumuna göre değişkenler

Dim i As Byte

Dim kaydir As Byte

Dim EEbuffer As Byte

Include "LCD.bas"                  //LCD kütüphanesi ekleniyor       

Include "ADC.bas"                  //ADC kütüphanesi ekleniyor

Include "convert.bas"              //Değişken tipi dönüşümleri için gerekli kütüphane

Include "EEPROM.bas"               //EEPROM kütüphanesi ekleniyor



/////////////////////////////////////////////////////////////////////

//    ADCInput() fonksiyonu AN_0 kanalına bağlı sensör devresinden //

//    analog bilginin okunmasını ve dijitale çevrilerek            //

//    program içerisinde değerlendrilmesini sağlar.                //                                                           

/////////////////////////////////////////////////////////////////////

Function ADCInput() As Word

   result = (ADC.Read(0) + 1)

End Function

/////////////////////////////////////////////////////////////////////

//    RenkOku() fonksiyonu sensör devresinde ki LED'leri çeşitli   //

//    kombinasyonlarda yakarak rengi algılanacak yüzeyden          //

//    yansıyan ışık şiddetini LDR yardımıyla ölçülmesini sağlar.   //

/////////////////////////////////////////////////////////////////////                                                                 

Sub RenkOku()

    kaydir=1

    LCD.WriteAt(1, 1, "COLOUR DETECTING")

    LCD.WriteAt(2, kaydir, ".               ")

    High(KIRMIZI_LED)

    DelayMS(150)

    ldr_degerleri(0)= ADCInput

    Low(KIRMIZI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(YESIL_LED)

    DelayMS(150)

    ldr_degerleri(1)= ADCInput

    Low(YESIL_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(MAVI_LED)

    DelayMS(150)

    ldr_degerleri(2)= ADCInput

    Low(MAVI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(SARI_LED)

    DelayMS(150)

    ldr_degerleri(3)= ADCInput

    Low(SARI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(BEYAZ_LED)

    DelayMS(150)

    ldr_degerleri(4)= ADCInput

    Low(BEYAZ_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(KIRMIZI_LED)

    High(YESIL_LED)

    DelayMS(150)

    ldr_degerleri(5)= ADCInput

    Low(KIRMIZI_LED)

    Low(YESIL_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(YESIL_LED)

    High(MAVI_LED)

    DelayMS(150)

    ldr_degerleri(6)= ADCInput

    Low(YESIL_LED)

    Low(MAVI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(MAVI_LED)

    High(SARI_LED)

    DelayMS(150)

    ldr_degerleri(7)= ADCInput

    Low(MAVI_LED)

    Low(SARI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(SARI_LED)

    High(BEYAZ_LED)

    DelayMS(150)

    ldr_degerleri(8)= ADCInput

    Low(SARI_LED)

    Low(BEYAZ_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(BEYAZ_LED)

    High(KIRMIZI_LED)

    DelayMS(150)

    ldr_degerleri(9)= ADCInput

    Low(BEYAZ_LED)

    Low(KIRMIZI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(KIRMIZI_LED)

    High(MAVI_LED)

    DelayMS(150)

    ldr_degerleri(10)= ADCInput

    Low(KIRMIZI_LED)

    Low(MAVI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(YESIL_LED)

    High(SARI_LED)

    DelayMS(150)

    ldr_degerleri(11)= ADCInput

    Low(YESIL_LED)

    Low(SARI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(MAVI_LED)

    High(BEYAZ_LED)

    DelayMS(150)

    ldr_degerleri(12)= ADCInput

    Low(MAVI_LED)

    Low(BEYAZ_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(SARI_LED)

    High(KIRMIZI_LED)

    DelayMS(150)

    ldr_degerleri(13)= ADCInput

    Low(SARI_LED)

    Low(KIRMIZI_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(BEYAZ_LED)

    High(YESIL_LED)

    DelayMS(150)

    ldr_degerleri(14)= ADCInput

    Low(BEYAZ_LED)

    Low(YESIL_LED)

    DelayMS(150)

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

        

    High(KIRMIZI_LED)

    High(YESIL_LED)

    High(MAVI_LED)

    High(SARI_LED)

    High(BEYAZ_LED)

    DelayMS(150)

    ldr_degerleri(15)= ADCInput

    Low(KIRMIZI_LED)

    Low(YESIL_LED)

    Low(MAVI_LED)

    Low(SARI_LED)

    Low(BEYAZ_LED)

    DelayMS(150)     

    kaydir=kaydir+1

    LCD.WriteAt(2, kaydir, ".")

    sonuc=0                             //Sonuc değişkeni sıfırlanıyor

    son_8=0                             //son_8 değişkeni sıfırlanıyor       

    For i=0 To 15                       //LDR değerleri toplanıyor

        sonuc=sonuc+ldr_degerleri(i)

        If i>7 Then                     //son 8 değer ayrı olarak toplanıyor

           son_8=son_8+ldr_degerleri(i)

        EndIf

    Next

    sonuc=sonuc+son_8*15                 //Tüm LDR değerleri ve son 8 değerinin 15 katı ile toplanıyor sonuc değişkenine aktarılıyor

                                         //son 8 değer sonuca daha çok etki ettiğinden bu şekilde 15 ile çarpılarak kullanıldı

End Sub

/////////////////////////////////////////////////////////////////////

//                                                                 //

//    ANA PROGRAM                                                  //

//                                                                 //                                                           

/////////////////////////////////////////////////////////////////////

TRISA = %00000001        //PORTA giriş/çıkış durumu 1-> Giriş 0-> Çıkış

TRISB = %00010100        //PORTB giriş/çıkış durumu 1-> Giriş 0-> Çıkış

TRISC = %00001111        //PORTC giriş/çıkış durumu 1-> Giriş 0-> Çıkış

ADCON1 = $0E             //Analog girişler dijital olarak ayarlandı,sadece PORTA.0 sensör girişi analog giriş olarak ayarlandı                                                 

ADCON1.7 = 1             //ADC çıkışı sonucu sağa dayalı olarak döndürülecek

Low(KIRMIZI_LED)         //Kırmızı LED pasif

Low(YESIL_LED)           //Yeşil LED pasif

Low(MAVI_LED)            //Mavi LED pasif

Low(SARI_LED)            //Sarı LED pasif

Low(BEYAZ_LED)           //Beyaz LED pasif

Input(ENTER)             //ENTER butonu giriş olarak tanımlandı

Input(ASAGI)             //ASAGI butonu giriş olarak tanımlandı

Input(YUKARI)            //YUKARI butonu giriş olarak tanımlandı

Input(ALGILA)            //ALGILA butonu giriş olarak tanımlandı                   

LCD.Cls                  //LCD ekranı temizle

menu_id=1                //Menü okunun konumunu belirtir

sayac=0                  //Döngü değişkeni sıfırlanıyor

EEbuffer=0



LCD.WriteAt(1, 1, " Talha C.  ")              //LCD birinci satıra "Talha C.   " metni yazılıyor                                 

LCD.WriteAt(2, 1, "                ")              //LCD ikinci satıra "2012528130042   " metni yazılıyor

DelayMS(2500)                           //2500ms bekle

LCD.WriteAt(1, 1, "     COLOUR     ")              //LCD birinci satıra "   SESLi RENK   " metni yazılıyor                                 

LCD.WriteAt(2, 1, "DETECTION SYSTEM")              //LCD ikinci satıra "ALGILAMA SiSTEMi" metni yazılıyor

DelayMS(2500)                           //2500ms bekle

For EE_Adres=1 To 10                       //Renk değerleri EEPROM dan okunuyor       

    EE.Read(EE_Adres,EEbuffer)

    DelayMS(10)

    EE.Read(EE_Adres+30,kalan(sayac))

    renk_degerleri(sayac)=(EEbuffer*255)+kalan(sayac)

    sayac=sayac+1

    DelayMS(10)

Next

EE.Read(100,hassasiyet)                    //Hassasiyet değeri EEPROM dan okunuyor

sayac=0

While true

      LCD.WriteAt(1, 1, "TO DETECT COLOUR")      //LCD birinci satıra "RENK OKUMAK iCiN" metni yazılıyor

      LCD.WriteAt(2, 1, "PRESS THE BUTTON")      //LCD ikinci satıra "BUTONA BASIN... " metni yazılıyor



      DelayMS(100)                               //100ms bekle

      tanima=false                               //Renk tanınamadı                                     

      If  ALGILA=0 Then                          //ALGILA butonuna basıldı mı?

          DelayMS(200)                           //200ms bekle

          If ALGILA=0 Then                       //ALGILA butonu hala basılı mı?

             RenkOku                             //RenkOku fonksiyonuna git

             LCD.WriteAt(1, 1, "DETECTED COLOUR ")            //LCD birinci satıra "ALGILANAN RENK  " metni yazılıyor

             For sayac=0 To 9                                 //Okunan değerle tanımlanmış renk değerleri karşılaştırılacak

                 If sonuc>renk_degerleri(sayac)-hassasiyet And sonuc<renk_degerleri(sayac)+hassasiyet Then          //Okunan LDR değerini tanımlanmış renk değerlerine ait +/- 5 olarak karşılaştır

                    LCD.WriteAt(2, 1, ">",renkler(sayac),"     ")      //LCD ikinci satıra algılanan renk değeri yazılıyor

                    tanima=true                                        //Tanıma işlemi başarılı                                                           

                    While ALGILA=1                                     //ALGILA butonuna basılıncaya kadar döngüye gir                                                           

                    Wend                                               //Döngüde kal

                    Break                                              //Döngüden çık

                 EndIf           

             Next

             If tanima=false Then                              //Renk tanımlama başarız

                LCD.WriteAt(2, 1, ">UNKNOWN   ",DecToStr(sonuc,5))          //LCD birinci satıra ">TANIMSIZ       " metni yazılıyor

                While ALGILA=1                                 //ALGILA butonuna basılıncaya kadar döngüye gir

                Wend                                           //Döngüde kal

             EndIf

          EndIf

      EndIf 

   If ENTER=0 Then               //ENTER butonuna basılmışsa menü ekranını aç

        menu_id=1                //menu_id değeri 1 e eşitlendi

        menu_flag=true           //Menü ekranı açık

        While menu_flag=true     //menu_flag değeri True ise döngüye gir

              Select menu_id     //Memü seçimi için ok işaretinin konumunu belirten kod bloğu                           

              Case 1                                              //menu_id=1 ok işareti KALiBRASYON seçeneği yanında

                   LCD.WriteAt(1,1, "-> CALIBRATION   ")

                   LCD.WriteAt(2,1, "   DEFINE COLOUR ")

              Case 2                                              //menu_id=2 ok işareti RENK TANIMLA seçeneği yanında

                   LCD.WriteAt(1,1, "   CALIBRATION   ")

                   LCD.WriteAt(2,1, "-> DEFINE COLOUR ")

              Case 3                                              //menu_id=3 ok işareti HASSASiYET seçeneği yanında

                   LCD.WriteAt(1,1, "-> SENSITIVITY   ")

                   LCD.WriteAt(2,1, "   EXIT          ")

              Case 4                                              //menu_id=4 ok işareti MENÜDEN ÇIK seçeneği yanında

                   LCD.WriteAt(1,1, "   SENSITIVITY   ")

                   LCD.WriteAt(2,1, "-> EXIT          ")

              End Select

        If ASAGI=0 Then             //ASAGI butonuna basılmışsa menu_id değerini 1 artır ok işareti bir alt satıra geçer

            If menu_id<4 Then       //menu_id değeri 4 dan küçükse

               menu_id=menu_id+1    //1 artır

            Else

               menu_id=0            //menu_id değeri 4 dan büyükse sıfırla

            EndIf

        EndIf

        If YUKARI=0 Then            //YUKARI butonuna basılmışsa menu_id değerini 1 eksilt ok işsareti bir üst satıra geçer

            If menu_id>0 Then       //menu_id değeri 0 dan büyükse

                menu_id=menu_id-1   //1 eksilt

            Else

                menu_id=4           //menu_id değeri 0 dan küçükse 4 değeri ata

            EndIf

        EndIf

        sayac=0

        DelayMS(150)                //100ms bekle

        If ENTER=0 Then             //Menü ekranı açıkken menu butonuna basılırsa seçeneğe ait alt menü ekranı açılır       

           alt_menu_flag=TRUE       //Alt menü ekranı açık

           sayac=0

           sonuc=0

           son_8=0

          

           While alt_menu_flag=true      //alt_menu_flag değeri True ise döngüye gir

                 Select menu_id          //menu_id kullanılarak hangi alt menüye girileceği belirleniyor       

                 Case 1                                    //KALİBRASYON ekranı açık     

                      LCD.WriteAt(1,1, "<-CALIBRATION ->")

                      sonuc = ADCInput

                      LCD.WriteAt(2,1,">", DecToStr(sonuc,3),"            ")

                      DelayMS(50)

                      If ENTER=0 Then                    //Alt menü içerisindeyken ENTER basılırsa                                                                                                               

                            DelayMS(100)                 //100ms bekle

                            If ENTER=0 Then              //ENTER hala basılı mı?

                               alt_menu_flag=false       //Alt menüden çık

                            EndIf

                      EndIf

                 Case 2                                  //RENK TANIMLAMA ekranı açık

                       If ASAGI=0 Then                   //ASAGI butonuna basılmışsa sayac değerini 1 artır

                          If sayac<9 Then                //sayac değeri 15 dan küçükse

                             sayac=sayac+1               //1 artır

                          Else

                              sayac=0                    //sayac değeri 15 den büyükse sıfırla

                          EndIf

                       EndIf

                       If YUKARI=0 Then                  //YUKARI butonuna basılmışsa sayac değerini 1 eksilt

                          If sayac>0 Then                //sayac değeri 0 dan büyükse

                             sayac=sayac-1               //1 eksilt

                          Else

                              sayac=9                   //sayac değeri 0 dan küçükse 15 değeri ata

                          EndIf

                       EndIf

                       LCD.WriteAt(1,1,"<-DEFINE COLOR->")       //LCD birinci satıra yaz

                       LCD.WriteAt(2,1,">",renkler(sayac),DecToStr(renk_degerleri(sayac),5))       //LCD ikinci satırına seçilen rengi yaz

                       DelayMS(150)                              //150 ms bekle

                        If  ALGILA=0 Then                           //ALGILA butonuna basıldı mı?                               

                            DelayMS(100)                         //100 ms bekle

                            If ALGILA=0 Then                        //ALGILA butonuna hala basılı mı?

                               RenkOku                           //RenkOku fonksiyonuna git

                               renk_degerleri(sayac) = sonuc       //Seçilen renge okunan değer atandı                 

                            EndIf

                        EndIf

                        //Renk değerleri EEPROM'a kaydedilmesi

                        //EEPROM 8 bitlik hücrelerden oluşmaktadır, renk_değerleri değişkenimiz 16 bit olduğu için

                        //EEPROM'a kayıt için değişkenin 8 bitlik iki değişkene dönüştürülmesi gerekir

                        //Yüksek değerli ilk byte = renk_degerleri/255

                        //Düşük değerli son byte = renk_dergerleri mod 255

                        //Yukardaki şekilde 16 bitlik değişken 8 bitlik iki değişkene dönüştürülmüş olur

                        //Program açılışında bu işlemler tersinden yapılarak 2 8 bitlik sayıdan 16 bitlik tek bir sayı

                        //hesaplanır ve renk_degerleri değişkenine aktarılır

                        If ENTER=0 Then                            //Alt menü içerisindeyken ENTER butonuna basılırsa                                                                                                               

                            DelayMS(50)                            //50ms bekle

                            If ENTER=0 Then                        //ENTER hala basılı mı?

                            For sayac=0 To 9                       //Tüm renkler için okunan değerlerin EEPROM'a kaydedilmesi

                               EEbuffer=renk_degerleri(sayac)/255  //Elde edilen değer 16bit olduğu için 255'e bölerek 8 bitlik değere dönüştürüldü                         

                               EE.Write(sayac+1,EEbuffer)          //8bitlik renk değeri EEPROM'a kaydediliyor

                               DelayMS(10)                         //10ms bekle

                               kalan(sayac)=renk_degerleri(sayac)Mod 255 //Elde edilen değerin 255e bölümünden kalan hesaplanıyor                           

                               EE.Write(sayac+31,kalan(sayac))           //kalan değeri EEPROM'a kaydediliyor

                               DelayMS(10)                          //10ms bekle

                            Next

                            alt_menu_flag=false            //Alt menüden çık

                            EndIf

                        EndIf                                 

                 Case 3                                     

                       If ASAGI=0 Then                   //ASAGI butonuna basılmışsa hassasiyet değerini 1 artır

                          If hassasiyet<50 Then          //hassasiyet değeri 50 den küçükse

                             hassasiyet=hassasiyet+1     //1 artır

                          Else

                              hassasiyet=0               //hassasiyet değeri 50 den büyükse sıfırla

                          EndIf

                       EndIf

                       If YUKARI=0 Then                  //YUKARI butonuna basılmışsa hassasiyet değerini 1 eksilt

                          If hassasiyet>0 Then           //hassasiyet değeri 0 dan büyükse

                             hassasiyet=hassasiyet-1     //1 eksilt

                          Else

                              hassasiyet=50             //hassasiyet değeri 0 dan küçükse 50 değeri ata

                          EndIf

                       EndIf

                       LCD.WriteAt(1,1,"<-SENSITIVITY ->")       //LCD birinci satıra yaz

                       LCD.WriteAt(2,1,">",DecToStr(hassasiyet,3),"            ")       //LCD ikinci satırına seçilen rengi yaz

                       DelayMS(150)                              //150 ms bekle

                        If ENTER=0 Then                          //Alt menü içerisindeyken ENTER butonuna basılırsa                                                                                                               

                           DelayMS(50)                           //50ms bekle

                            If ENTER=0 Then                      //ENTER hala basılı mı                 

                               EE.Write(100,hassasiyet)          //Hassasiyet değeri EEPROM'a kaydediliyor

                              DelayMS(10)                        //10 ms bekle

                            alt_menu_flag=false                  //Alt menüden çık

                            EndIf

                        EndIf

                 Case 4                                    //MENÜDEN ÇIK seçeneği aktif

                      DelayMS(50)

                      If ENTER=0 Then                      //Alt menü içerisindeyken menu_button'una basılırsa                                                                                                               

                            DelayMS(50)                    //50ms bekle

                            If ENTER=0 Then                //ENTER hala basılı mı

                               alt_menu_flag=false            //Alt menüden çık

                               menu_flag=false                //Menüden çık                                                   

                            EndIf

                      EndIf                                       

                 End Select

                 DelayMS(100)

            Wend

         EndIf

      Wend

    EndIf

Wend

Burda olan varsa hayrına derleyip atarsa çok sevinirim valla bu arada picproje.org da hesap açtım ama giriş yapamıyorum diğer forum yabancı bir site mi linkini atabilirseniz çok iyi olur .
 
Moderatör tarafında düzenlendi:

Forum istatistikleri

Konular
128,184
Mesajlar
915,690
Kullanıcılar
449,956
Son üye
CharmanDear

Yeni konular

Geri
Üst