kümes kontrol devresi

Başlatan exsenim, 13 Nisan 2020, 15:15:44

exsenim

iki katlı civciv kafesinin sıcaklık ve fanını kontrol etmek istiyorum devreyi bu şekilde kurdum yazılımını yapacagım eksiklikleri nelerdir.



exsenim

#1
buraya kadar doğru mu acaba

DEFINE OSC 4
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

TRISA=%111111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 4 
DEFINE LCD_RSREG PORTB 
DEFINE LCD_RSBIT 2 
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 3 
DEFINE LCD_BITS 4 
DEFINE LCD_LINES 4
ADCON1 = 7

kod verirken koda tag kullanınız. Mesaj ekranında sağdan sola doğru 3. cü kutu da ortadaki buton.

ete

Cesaretine hayranım doğrusu. Yazdıklarının doğruluğundan şüphe edip doğruluk teyidi arıyorsan bu işi nasıl bitireceksin merak ediyorum doğrusu.
Belliki simulasyon kullanıyorsun. SOnunda ölüm yok ya yaz programı çalıştır aksayan yerleri tespit edip düzelterek sonuna gelmeye çalış. Takıldığın yerde şurada takıldım de yardım edelim. İşin başında bu yaklaşım pek hoş olmadı. Daha cesaretli olmalısın.

Çok lazım ise yazdıklarında hata yok ama bu kadarcık yerde hata olsa ne olacak ki önemli olan gerisi zaten. Devam et. Takıldığın yerde soru sor.

Ete

exsenim

dersleri okuya okuya buralara kadar yaptım yanlış yaptığım yerler var mı hocam
DEFINE OSC 4

TRISA=%111111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 4 
DEFINE LCD_RSREG PORTB 
DEFINE LCD_RSBIT 2 
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 3 
DEFINE LCD_BITS 4 
DEFINE LCD_LINES 4
ADCON1 = 7      

        LCDOUT $FE,$40,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti dataları    
        LCDOUT $FE,$48,$04,$0e,$0e,$0e,$1f,$04,$04,$0
        LCDOUT $FE,$50,10,0,17,17,17,17,14,0 'LCD 2. KARAKTER HAFIZASI Ü HARFİ
        LCDOUT $FE,$58,16,8,4,2,4,8,16,0    'LCD 3. KARAKTER HAFIZASI YON İŞARETİ    
    
'-----------------------------SENSOR TANIMLAMA----------------------------------
    
    mesgul      var  byte    'ısı okuma bittimi
    hesaplanan  var  byte  'sıcaklık
    okunan      var  word    'ds1820 gonderdiği word degerindeki ısı bilgisi
    isaret      var  byte
    isaret_biti var  okunan.bit11
    sensor      var  byte 'sensor = 255 se sensör yoktur
    ondalik    var  byte
    symbol SENSOR1  = PORTB.0 '1. SENSOR okuma bacağı
    SYMBOL SENSOR2 = PORTB.1  '2. SENSOR okuma bacağı
    ROLE1 VAR PORTC.1 'Role1 ÜST ısıtıcı 
    ROLE2 VAR PORTC.1 'Role2 ÜST FAN
    ROLE3 VAR PORTC.1 'Role3 ALT ISITICI
    ROLE4 VAR PORTC.1 'Role4 ALT FAN
    MENU    VAR    PORTA.0
    YUKARI  VAR    PORTA.1
    ASAGI  VAR    PORTA.2
    SYMBOL BUZER=PORTE.0  
    PAUSE 300 
    SYC VAR BYTE
    AYAR VAR BYTE
    lcdout $FE,1 
    PAUSE 100  ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre
    lcdout $FE,1 

        LCDOUT $FE,$81, "Uzman  Poultry"            
        lcdout $FE,$C1,"Civciv Buyutme"
        PAUSE 1000
        LCDOUT $FE,1
        

basla:

    gosub USTSENSOR
    lcdout $fe,1
    lcdout $FE,$80,2,"="
    lcdout isaret,dec hesaplanan,",",dec1 ondalik
    gosub ALTSENSOR
    lcdout $fe, $c0,"A="
    lcdout isaret,dec hesaplanan,",",dec1 ondalik    
    IF MENU=1 THEN  GOTO AYAR_MENUSU
    pause 1000
goto basla



'-----------------------------SENSOR OKUMALARI----------------------------------

USTSENSOR:
    OWOUT SENSOR1,1,[$CC, $44]    'isi olçme emri
    bekle:
    pause 5
    OWIN SENSOR1,0,[MESGUL]      'okuma bittimi ?
    if mesgul=1 then goto bekle  
    
    OWOUT SENSOR1,1,[$CC, $BE]    'bilgi okuma emri
    OWIN SENSOR1,0,[OKUNAN.LOWBYTE,OKUNAN.HIGHBYTE,skip 4,sensor]  'ds1820 bilgi okunuyor
    
    IF ISARET_BITI=1 THEN                          'okunan bilgi word tipinde bir bilgi 
                isaret="-"  'bu verinin 11. biti isaret bitidir ( + / - )
                HESAPLANAN=(65535-OKUNAN+1)/16 'isaret biti 1 ise ( - ) , sıfır ise ( + )  
              ELSE    'hesaplanan isaret bitine gore islem değişikliklerine uğrayarak bulunur 
                isaret=" "
                HESAPLANAN=OKUNAN/16
    ENDIF
    
    'yard1 = OKUNAN.LOWBYTE & %00001111
    ondalik= OKUNAN.3 *50 + OKUNAN.2 *25 + OKUNAN.1 *12 + OKUNAN.0 *6 
return

ALTSENSOR:
    OWOUT SENSOR2,1,[$CC, $44]    'isi olçme emri
    bekle1:
    pause 5
    OWIN SENSOR2,0,[MESGUL]      'okuma bittimi ?
    if mesgul=1 then goto bekle  
    
    OWOUT SENSOR2,1,[$CC, $BE]    'bilgi okuma emri
    OWIN SENSOR2,0,[OKUNAN.LOWBYTE,OKUNAN.HIGHBYTE,skip 4,sensor]  'ds1820 bilgi okunuyor
    
    IF ISARET_BITI=1 THEN                          'okunan bilgi word tipinde bir bilgi 
                isaret="-"  'bu verinin 11. biti isaret bitidir ( + / - )
                HESAPLANAN=(65535-OKUNAN+1)/16 'isaret biti 1 ise ( - ) , sıfır ise ( + )  
        ELSE    'hesaplanan isaret bitine gore islem değişikliklerine uğrayarak bulunur 
                isaret=" "
                HESAPLANAN=OKUNAN/16
    ENDIF
    
    'yard1 = OKUNAN.LOWBYTE & %00001111
    ondalik= OKUNAN.3 *50 + OKUNAN.2 *25 + OKUNAN.1 *12 + OKUNAN.0 *6 
return


'---------------------------------AYAR MENÜSÜ-----------------------------------

  AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN 
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=5 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=4
ENDIF
GOSUB DURUM
GOTO AYARLAR


DURUM:

SELECT CASE SYC
CASE 0
LCDOUT $FE,$81," UST ISITICI  "
lcdout $FE,$C1,"    AYARI    "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP 
GOTO USTAYAR
ENDIF
CASE 1
lcdout $fe,$82,"ALT ISITICI    "
LCDOUT $FE,$C1,"    AYARI          "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP 
GOTO ALTAYAR
ENDIF
CASE 2
LCDOUT $FE,$81,"  UST FAN    "
LCDOUT $FE,$C1,"    AYARI    "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP
GOTO FAN1_AYAR
ENDIF
CASE 3
LCDOUT $FE,$80,"    ALT FAN    "
LCDOUT $FE,$C1,"    AYARI      "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP
GOTO FAN2_AYAR
ENDIF

CASE 4
lcdout $fe,$81,"MENUDEN CIKIS"
IF MENU=1 THEN AYARLANDI
END SELECT
RETURN
 AYARLANDI:
          IF MENU=1 then AYARLANDI
      lcdout $fe,1
      lcdout $fe,$81,"  AYARLAR"
      LCDOUT $FE,$C1," KAYDEDiLDi.." 
      GOSUB BIPBIP
      AYAR=1
      SYC=0
      PAUSE 800
        
        GOSUB TEMIZLE
        goto basla      
TEMIZLE:
        lcdout $fe,1
 RETURN        
 ''''''''''''''''''''''''''''''''''''''''        
 USTAYAR:
 ALTAYAR:
 FAN1_AYAR:
 FAN2_AYAR:



        
 BIP:
    HIGH buzer  
 pause 50
    LOW buzer  
  RETURN
BIPBIP:
    HIGH buzer  
    PAUSE 50
      LOW buzer 
    PAUSE 100
    HIGH BUZER
    PAUSE 50
      LOW BUZER 
RETURN     

ete

Yanlıştan ziyade kusur var diyelim. Bunu söylerkende programları öyle noktasına virgülüne kadar dikkatli inceleme imkanım yok. Her şeyden önce sıkıcı bir iş. Bu nedenle ana bölümlere ve algoritmaya bakmak benim için daha uygun oluyor.
DS18B20 sıcaklık sensörü sıcaklık okumasını yaklaşık 750 ms de tamamlayan bir sensördür.
Sende 2 adet sensör var ve kullanığın mantık şöyle.
Birinci sensöre okuma emrini verip ardından sensörün okumayı tamamlayıp tamamlamadığına bakıyorsun. Bu işi de her 5ms de bir sensörün meşgulden kurtulup kurtulmadığına bakarak yapıyorsun. Sonuçta bu işi yapmak için 750 ms geçiyor ve sonunda sensör meşgulden çıkıyor ve birinci sensör sıcaklığını okuyup ısı hesabını yapıyorsun.
Ardından ikinci sensör içinde aynı işi yapıp 750 ms sonra geri dönüyorsun. Sonuçta iki sensörü okuman yaklaşıkbir buçuk saniye (1500 ms) sürüyor. Bukadar gecikme yetmezmiş gibi bir de 1 sn (1000 ms) lik gecikme ekliyorsun ve bir okuma çevrimin 2,5 saniye komut gecikmeleri ile birlikte 3 sn de bir sensörleri okuman tamamlanıyor.
Bu işi öyle yapacağına,
1. sensöre okuma emrini versen ve orada beklemeden geri dönsen. Ardından 2. ci sensöre okuma emrini versen ve orada beklemeden geri dönsen. Araya 800 ms lik bir gecikme koysan ve ardından gidip iki sıcaklığıda okusan daha iyi olmazmı? Böylece iki sensörü en fazla 800 ms içinde okumuş olacaksın. İşinin hassasiyeti artmış olacak.
Bu işi yapmanın yolu şöyle;
1. sensöre okuma emrini verip dönme; Bunun için GOSUB USTSENSOR diyeceksin ama üst sensör kısmını emri verip dönecek şekilde aşağıdaki biçimde düzenleyeceksin.
 OWOUT SENSOR1,1,[$CC, $44]
 RETURN 
2. sensörede aynı şekilde emri verip dönecek şekilde düzenleme yapacaksın.
Pause 800 deyip beklemeyi koyacak ve ardından üst sensördeki okunmuş bilgiyi artık direk okumak gerekir bekleme yapmaya gerek olmadığı için ;
 bekle:
    pause 5
    OWIN SENSOR1,0,[MESGUL]      'okuma bittimi ?
    if mesgul=1 then goto bekle  
satırlarını sileceksin. BEKLE yerine USTSENSOR_AL etiket adını ekleyip altında
    OWOUT SENSOR1,1,[$CC, $BE]    'bilgi okuma emri
    OWIN SENSOR1,0,[OKUNAN.LOWBYTE,OKUNAN.HIGHBYTE,skip 4,sensor]  'ds1820 bilgi okunuyor
    
    IF ISARET_BITI=1 THEN                          'okunan bilgi word tipinde bir bilgi 
                isaret="-"  'bu verinin 11. biti isaret bitidir ( + / - )
                HESAPLANAN=(65535-OKUNAN+1)/16 'isaret biti 1 ise ( - ) , sıfır ise ( + )  
              ELSE    'hesaplanan isaret bitine gore islem değişikliklerine uğrayarak bulunur 
                isaret=" "
                HESAPLANAN=OKUNAN/16
    ENDIF
    
    'yard1 = OKUNAN.LOWBYTE & %00001111
    ondalik= OKUNAN.3 *50 + OKUNAN.2 *25 + OKUNAN.1 *12 + OKUNAN.0 *6 
return
satırları olacak şekilde yeniden düzenleyip GOSUB USTSENSOR_OKU dedinmi okunmuş bilgileri alıp döneceksin. Aynı işi diğer sensör içinde yaparsan programın daha stabil ve kısa sürede çalışmış olacaktır.
lcdout $FE,1  komut satırı ilk defa verildiğinde LCD yi başlatma işini gerekleştirip karekterleri sıfırlar. Bunu verdikten sonra tekrar vermeninde bir anlamı yok. Zaten vermişsin sonrasında ekrana bir şey yazdırmamışsın ikinciyi vermek gereksiz. İlk açılışta bu komutu verdikten sonra en azından 150-200 ms lik bir gecikme koyulması gerekir. Bu süre içinde LCD nin kendi işlemcileri registerleri yerli yerine koyar ve LCD yi çalışacak hale getirir. Sen 100 ms koymuşsun bu az gelir onu 200 yap.
Başkada söylenecek bir şey göremedim.

Ete


exsenim

hocam dediğiniz böyle bişey sanırım yapmaya calıştım program da çalıştı.

basla:

    gosub USTSENSOR
    gosub ALTSENSOR
    PAUSE 800
    GOSUB USTSENSOR_AL
    GOSUB ALTSENSOR_AL
    lcdout $FE,$80,2,"="
    lcdout isaret,dec hesaplanan,",",dec1 ondalik
    lcdout $fe, $c0,"A="
    lcdout isaret,dec hesaplanan,",",dec1 ondalik    
    IF MENU=1 THEN  GOTO AYAR_MENUSU
    pause 1000
goto basla



'-----------------------------SENSOR OKUMALARI----------------------------------

USTSENSOR:
    OWOUT SENSOR1,1,[$CC, $44]    'isi olçme emri
    RETURN
    
    USTSENSOR_AL:
    
    OWOUT SENSOR1,1,[$CC, $BE]    'bilgi okuma emri
    OWIN SENSOR1,0,[OKUNAN.LOWBYTE,OKUNAN.HIGHBYTE,skip 4,sensor]  'ds1820 bilgi okunuyor
    
    IF ISARET_BITI=1 THEN                          'okunan bilgi word tipinde bir bilgi 
                isaret="-"  'bu verinin 11. biti isaret bitidir ( + / - )
                HESAPLANAN=(65535-OKUNAN+1)/16 'isaret biti 1 ise ( - ) , sıfır ise ( + )  
              ELSE    'hesaplanan isaret bitine gore islem değişikliklerine uğrayarak bulunur 
                isaret=" "
                HESAPLANAN=OKUNAN/16
    ENDIF
    
    'yard1 = OKUNAN.LOWBYTE & %00001111
    ondalik= OKUNAN.3 *50 + OKUNAN.2 *25 + OKUNAN.1 *12 + OKUNAN.0 *6 
return

ALTSENSOR:
    OWOUT SENSOR2,1,[$CC, $44]    'isi olçme emri
    RETURN
    
    ALTSENSOR_AL:
    
    OWOUT SENSOR2,1,[$CC, $BE]    'bilgi okuma emri
    OWIN SENSOR2,0,[OKUNAN.LOWBYTE,OKUNAN.HIGHBYTE,skip 4,sensor]  'ds1820 bilgi okunuyor
    
    IF ISARET_BITI=1 THEN                          'okunan bilgi word tipinde bir bilgi 
                isaret="-"  'bu verinin 11. biti isaret bitidir ( + / - )
                HESAPLANAN=(65535-OKUNAN+1)/16 'isaret biti 1 ise ( - ) , sıfır ise ( + )  
              ELSE    'hesaplanan isaret bitine gore islem değişikliklerine uğrayarak bulunur 
                isaret=" "
                HESAPLANAN=OKUNAN/16
    ENDIF
    
    'yard1 = OKUNAN.LOWBYTE & %00001111
    ondalik= OKUNAN.3 *50 + OKUNAN.2 *25 + OKUNAN.1 *12 + OKUNAN.0 *6 
return

ete

Evet doğru yapmışsın.
Aslında ekrana bilgileri verdikten sonra 1000 ms lik gecikmede orada gereksiz.
Çünki zaten yukarıda 800 ms bekleme yapıyorsun. Bu süre zarfında önceki okunan bilgiler ekranda kalacak zaten. Onuda kaldır bence tam olsun.

Ete

exsenim

Hocam sayenizde ogreniyorum senaryo yazma isi sayesinde bazi seyler yerine oturuyor
Kafama takilan sicakligi ayarlamak onu da yazip atayim ayarlar menusunden set degerini ayar yapmak icin

exsenim

ısı set ayarlar kısmını yaptım hocam ama ondalıklı gösteremiyorum sorun nedir

  AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN 
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=5 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=4
ENDIF
GOSUB DURUM
GOTO AYARLAR


DURUM:

SELECT CASE SYC
CASE 0
LCDOUT $FE,$81," UST ISITICI   "
lcdout $FE,$C1,"    AYARI     "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP 
GOTO USTAYAR
ENDIF
CASE 1
lcdout $fe,$82,"ALT ISITICI    "
LCDOUT $FE,$C1,"    AYARI          "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP 
GOTO ALTAYAR
ENDIF
CASE 2
LCDOUT $FE,$81,"   UST FAN    "
LCDOUT $FE,$C1,"    AYARI     "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP
GOTO FAN1_AYAR
ENDIF
CASE 3
LCDOUT $FE,$80,"    ALT FAN    "
LCDOUT $FE,$C1,"    AYARI      "
IF MENU=1 then 
WHILE MENU=1:WEND
GOSUB BIP
GOTO FAN2_AYAR
ENDIF

CASE 4
lcdout $fe,$81,"MENUDEN CIKIS"
IF MENU=1 THEN AYARLANDI
END SELECT
RETURN
 AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
       lcdout $fe,$81,"  AYARLAR"
       LCDOUT $FE,$C1," KAYDEDiLDi.." 
       GOSUB BIPBIP
       AYAR=1
       SYC=0
       PAUSE 800
        
        GOSUB TEMIZLE
        goto basla       
TEMIZLE:
        lcdout $fe,1
 RETURN        
 ''''''''''''''''''''''''''''''''''''''''         
 USTAYAR:
 
 LCDOUT $FE,1,"  UST SET AYARI"
 LCDOUT $FE,$C1,"SET=",#SET1
 PAUSE 200
 IF YUKARI=1 THEN
 SET1=SET1+1
 IF SET1>40 THEN SET1=40
 ENDIF
 IF ASAGI=1 THEN
 SET1=SET1-1
 IF SET1=255 THEN SET1=0
 ENDIF
 IF MENU=1 THEN DURUM
 GOTO USTAYAR
 ALTAYAR:
 LCDOUT $FE,1,"  ALT SET AYARI"
 LCDOUT $FE,$C1,"SET=",#SET1
 PAUSE 200
 IF YUKARI=1 THEN
 SET2=SET2+1
 IF SET2>40 THEN SET2=40
 ENDIF
 IF ASAGI=1 THEN
 SET2=SET2-1
 IF SET2=255 THEN SET2=0
 ENDIF
 IF MENU=1 THEN DURUM
 GOTO ALTAYAR
 

ete

Kodlara bakarsan gösteremiyor değil göstermiyorsun!!!!!.
Ondalık nasıl gösterilir açıklayayım.
Set değeri 10 ile çarpılmış halini kullanacaksın daima. Yada ondalık kısmını ayrı tam kısmını ayrı değişkenlerde tutacaksın.
Önce birinci alternatife bakalım.
Set değerin 10,0 dereceden başladığını varsayarsak bunun değişkene yerleşmiş hali 100 şeklinde olacaktır.
Değer artırırken 100, 101 102 103 şeklinde ondalık kısım artacak oda sonuçta birler hanesini artırmış olacaktır. Diyelimki elimizde 268 sayısı var. Bu set değer aslında 26,8 dereceyi gösteriyor. Ekrana verirken;
dec SETDEGER/10,",",dec1 SETDEGER//10 şeklinde yazdırırsan olacaktır.

İkinci alternatif biraz daha zahmetli.
Set SET_TAM ve SET_ONDA isimli iki değişkenimiz olsun.
Başlangıç değerimiz 10,0 olacak ise SET_TAM=10 , SET_ONDA=0 olarak başlayacaksın.
Değer artırırken,
SET_ONDA=SET_ONDA+1
IF SET_ONDA=10 then
  SET_ONDA=0:SET_TAM=SET_TAM+1
ENDIF
şeklinde yapman gerekir. Ekrana yazdırırken ise
DEC SET_TAM,",",DEC1 SET_ONDA şeklinde yazdırırsın olur biter.

Ete



exsenim

hocam bu şekilde çalıştı teşekkür ederim ama bu ayarı hafızada tutacak dimi pic enerji kesilip yeniden başlayınca ayarlanan set değeri aynı kalması için ne yapmam lazım
USTAYAR:
 
 LCDOUT $FE,1,"  UST SET AYARI"
 lcdout $FE,$C0," SET=",DEC SET1,",",DEC1 SETONDA1
      PAUSE 300
 IF YUKARI=1 THEN SETONDA1=SETONDA1+1
 IF SETONDA1=10 then
 SETONDA1=0:SET1=SET1+1
 ENDIF
 IF ASAGI=1 THEN SETONDA1=SETONDA1-1
 IF SETONDA1=255 then
 SETONDA1=9:SET1=SET1-1
 ENDIF
 IF MENU=1 THEN AYAR_MENUSU
         GOTO USTAYAR

ikinci soru ise bu komutu basla etiketi altına koyunca benim ondalıklı ayarladığım set degerine göre röleyi on off yapacak mı
if SET1<okunan1-0 then   
          HIGH Role1
        ENDIF
        if okunan1+0<SET1+0 then          
         LOW ROLE1               
       Endif

ete

Bunu sorman yanlış bence. Hafıza işleri için değerleri dahili eproma kayıt ediyoruz. İlk programı çalıştırdığımız da da önce o önceden kayıt edilmiş değerleri okuyoruz ve default değer olarak kullanıyoruz.

Aşağıda bir kayıt örneği ardından ilk çalıştırmada okuma örneği veriyorum.

Kayıt için,
WRITE 10,SET:pause 10
Bu örnek Byte cinsinden bir kayıt yapacak isen geçerli . Değişkenin word tipinde ise,
WRITE 10,SET.BYTE1,SET.BYTE0:PAUSE 10
şekilde yapılabilir.

Program açılırken ise uyguladığımız şekil şöyle;
READ 10,SET
IF SET=255 THEN SET=20  'şayet daha önce kayıt yapılmamış ise default değer olan 20 yi veriyoruz.
Değişken Word tipinde ise;
READ 10,SET.BYTE1,SET.BYTE0
IF SET=65535 then SET=200
Default değerleri rastgele verdim sen doğrusunu verirsin.

Ete

Powered by EzPortal