string otel ismi tanımlama

Başlatan yasargunaydin, 29 Haziran 2020, 23:03:56

yasargunaydin

Arkadaşlar merhaba;
string tanımlamasını yaptıramadım.
Pic16f877 ile hserout komutu ile otel ismini veri olarak göndermem gerekiyor.20 adet otel ismine mumara verdim .Bir butonla sayı artırarak aşağıdaki gibi göndermek istiyorum.tabi aşağıdaki gibi olmuyor.her harfi  tırnakla ayırmak gerekiyor.oda zor.
if sayı=1 then HSEROUT ["kemerresort",#MA]
if sayı=2 then HSEROUT ["robinson",#MA]
if sayı=3 then HSEROUT ["larabarut",#MA]

ete hocamın
Lookup otel1,["kemerresort"],VAR 
Lookup otel2,["robinson"],VAR
buda derlemede hata verdi.muhtemelen yanlış yapıyorum.hata vermese

if sayı=1 then HSEROUT [otel1,#MA]
if sayı=2 then HSEROUT [otel2,#MA]

kolay olurdu..Nasıl yapabilirim.yardımcı olabilirmisiniz.

ete

#1
Hatanın sebebi VAR kullanıyor olman. Hatırlarsan değişken tanımlarken DEGISKEN VAR BYTE şeklinde tanımlıyoruz ve VAR burada Variable (Türkçesi Değişken) nin kısaltmasıdır ve derleyici açısından özel kelimelere girer. Özel kelimeler yani komut isimleri yada komutların yardımcı kelimelerini programda kendi amacınız için kullanamazsınız hata verir.
Lookup komut formatına bakacak olursak;
LOOKUP Index,[Constant{,Constant...}],Var
Index burada bildiğiniz index değişkeni olarak kullanılacak ve Siz index isminide kullanmayın. Mesela SIRA deyin. SIRA değerine bağlı olarak lookup içinden ilgili eleman alınıp komut sonunda yer alan VAR ki bunada aktarma değişkeni diyebiliriz Siz burda AKTAR kullanın ve alınan eleman AKTAR isimli değişkene yerleştirilir.
Tavsiyem şöyle. Otel isimlerini bir lookup tablosuna yerleştirin. Hepsinin farklı uzunlukta isimleri olabilir. Mümkünse bunları eşit uzunluğa getirin. Ref olarak en uzun ismi alın. Kısa isimli olanlara boşluk ekleyin . Örnek vermek gerekirse;
"Kemerresort"
"Larabarut  "
Şeklinde uygulayın. Bir dizi değişkeni kullanın ve tabloadan alınan bilgileri diziye aktarın.
Yada bütün isimleri kendi uzunlukları ile kullanın ama aktarma döngülerini karekter sayıları kadar kurun.
Şimdi diyelimki elimizde Otel isimli 11 elemanlı bir dizi değişkenimiz olsun (0-10)
Tanımlarken Otel VAR BYTE [11] şeklinde tanımlıyoruz.
Bu diziye bir otel ismi atayacağız,
FOR SIRA=0 to 10
LOOKUP SIRA,["kemerresort"],Otel[SIRA]
NEXT
Şeklinde aktarabiliriz. Ancak bazen döngü içinde direk aktarmaya derleyici müsaade etmeyebilir. BU durumda şöyle yaparız.
FOR SIRA=0 to 10
LOOKUP SIRA,["kemerresort"],AKTAR:Otel[SIRA]=AKTAR
NEXT

Ete

elektro77

Alıntı yapılan: yasargunaydin - 29 Haziran 2020, 23:03:56Arkadaşlar merhaba;
string tanımlamasını yaptıramadım.
Pic16f877 ile hserout komutu ile otel ismini veri olarak göndermem gerekiyor.20 adet otel ismine mumara verdim .Bir butonla sayı artırarak aşağıdaki gibi göndermek istiyorum.tabi aşağıdaki gibi olmuyor.her harfi  tırnakla ayırmak gerekiyor.oda zor.
if sayı=1 then HSEROUT ["kemerresort",#MA]
if sayı=2 then HSEROUT ["robinson",#MA]
if sayı=3 then HSEROUT ["larabarut",#MA]

Sayın yasargunaydin Antalya da mısınız yoksa Antalya ya bir iş mi yapıyorsunuz; Zira ben de Antalya dayım ve saydığınız tüm otellere en az bir kere iş için gitmişimdir. Etepic sitesinde böyle bir mesaj okumak garip duygular yaşattı.Eğer Antalya da iseniz.Tanışmak isterim.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

yasargunaydin

#3
Ete hocam,cevabınız için  çok teşekkür ederim .Derleyici derlemeyi yaptı.
fakat LCD de göremiyorum ve hserout cevap olarak  "k" geliyor

Otel VAR BYTE [11]
SIRA var byte
AKTAR VAR BYTE

BASLA:

FOR SIRA=0 to 10
LOOKUP SIRA,["kemerresort"],AKTAR:Otel[SIRA]=AKTAR
NEXT


    LCDOUT $FE,$80,"CA=",DEC CAR,"NE=",DEC NEV
    LCDOUT $fe,$C0,"..Otel adı=",OTEL

PAUSE 100

goto basla

LCD de o=k  yazıyor


            IF B0=103 THEN         ''103 gelince
     PORTC=%11100000
     PAUSE 100
     ''HSEROUT ["C","A","R",#CAR]
     HSEROUT [otel]
     PAUSE 100
       PORTC=%10000000
        PAUSE 100
       ENDIF

yasargunaydin

Sayın elektro bey,tanışmaktan bende çok memnun olurum.Antalyadayım ve bir çamaşırhanede çalışlıyorum..Denilen  otellerin işlerini,çarşav nevresim yıkama  yapıyoruz.ve çalıştığım fabrikada arge çalışmaları yapıyorum..

ete


LCDOUT $fe,$C0,"..Otel adı=",OTEL  satırını şöyle yaz

LCDOUT $fe,$C0,"..Otel adı=",STR OTEL\11

Ete

yasargunaydin

Hocam teşekkür ederim,çalıştı...fakat herbiri için ayrı for nextt yapmam gerekti.30 adet otel var..artık yapıcaz çaresi yok..

FOR SIRA=0 to 10
LOOKUP SIRA,["kemerresort"],AKTAR:Otel[SIRA]=AKTAR
NEXT

FOR SIRA2=0 to 8
LOOKUP SIRA2,["larabarut"],AKTAR2:Otelb[SIRA2]=AKTAR2
NEXT

 IF SW6=0  THEN
PAUSE 100
While PORTD.6=0 : Wend
say=say+1
ENDIF

IF say=1 then   LCDOUT $fe,$C0,".O=",STR otel\11,dec say
IF say=2 then   LCDOUT $fe,$C0,".O=",STR otelB\9,dec say

KESME:
    GIE=0
    HSERIN 50,ATLA,[B0]
   
    PORTC=%10000000
 
     
      IF B0=76 THEN         
      ''IF B0=103 THEN         
     PORTC=%11100000
     PAUSE 100
     HSEROUT [STR OTEL\11]
     PAUSE 100
       PORTC=%10000000
        PAUSE 100
       ENDIF
       
     
       IF B0=77 THEN     
     PORTC=%11100000
     PAUSE 100
        HSEROUT [STR Otelb\9]
    PAUSE 100
       PORTC=%10000000
        PAUSE 100
       ENDIF   


Powered by EzPortal