relay on / of cod problemi

Başlatan yysbd, 17 Şubat 2012, 06:51:27

yysbd

herkeze slm:ben pbp ile bir relay kontrol etmek istedim ve kod larla birşeyler yapmak istedim ama yanlış yaptığım yerler var gibi geliyor .
1:butona basınca röle on olacak birdaha dokununca butona ise of olması lazım dı bende ters oldu basılı kalınca on bırakınca of oluyor.
2:bu röle çıkşlarınıda 4x20 lcd de takip etmek istiyorum yani röle 1 on olunca ekranda yazdırmak.of olunca yani röle açıldı :kapandı misali.
16f877a da ki kodlar içerisindeki yanlışım ve eksik olan yerler varsa bunları düzeltmemde ve öğrenmek açısından yardımcı olursanız sevinirim .devrede de belki hatalarım vardır ama olsun hatasız kul olmaz bende hata yapa yapa öğrenmeye çalışıyorum.sizlerede çalışmalarınızda kolay gelsin forumda emek veren herkeze.http://s2.dosya.tc/server8/s1dUND/yysbdrelay.rar.html

zakbay

#1
If BUTON0=1 Then         ' Anahtar AÇIK ise
	    
       Low RELAY0               ' LED'i söndür                                     
    Else                     ' Değilse
        High RELAY0              ' LED'i yak
        LCDOUT $FE,1,"BIRINCI RELAY "
        LCDOUT $FE,$C0,"ACTI"	
        PAUSE 2000
	EndIf 


Merhaba
şu an makinede pbp kurulu değil fakat şöyle yapabilirsin

butonbasildi as bit 
butonbasildi =0

basla
if buton0=0 then
      if butonbasildi = 0 then     bunu kullanmazsan butona basılı tuttuğun sürece röle ard arda açıp kapanacaktır
         pause 50
           toggle relay0

              if role = 0 then 
                   burada ekrana role acik yazdırırsın
              else
                     burad ekrana role kapali yazdırırsın
              endif
               
           butonbasildi = 1
      endif    
else
     if butonbasildi = 1 then  butonbasildi = 0            
    
endif

goto basla
Tek dostum çalışmak...

yysbd

#2
çok teşekkür ederim yardımın için.açıkçası anlayamadım.lcdout  yokmu tanımlamar var benim yazdığım gibi  değilde o yüzden anlayamadım .kusuruma bakma özürdilerim.benim yazdığım kodlar yanlış tabiki onların en azından bir buton ve rölede nasıl olur bilsem gerisini yazarım yapa bilirsen sağ yoksa canın sağ.birde bu ekranda on * of tan sonra ana ekrandaki yazıya dönmesi lazım işlevi bitince.açtın yazdı..belli bir süre duracak ekranda ana ekrana kapadın aynısını bundada yapacak aötı kapadı sabit kalmayacak yani.ana ekrana dönecek.

tyildizak

@zakbay'ın kodu güzel, biraz uğraşsanız anlayabilirsiniz, orada lcd komutlarını alt rutin olarak yazmanız gerekiyor.

Daha basit şekilde şöyle olur:

BASLA:
        
	IF BUTON0=0 THEN      
        if relay0 = 1 then
            	LOW RELAY0                                                   
                LCDOUT $FE,1," BIRINCI RELAY  "
                LCDOUT $FE,$C0," KAPADI         "
        ELSE
            	HIGH RELAY0                                                   
                LCDOUT $FE,1," BIRINCI RELAY  "
                LCDOUT $FE,$C0," ACTI           "
        endif
        pause 500
    ENDIF                       

	IF BUTON1=0 THEN      
        if relay1 = 1 then
            	LOW RELAY1                                                   
                LCDOUT $FE,1," IKINCI RELAY   "
                LCDOUT $FE,$C0," KAPADI         "
        ELSE
            	HIGH RELAY1                                                   
                LCDOUT $FE,1," IKINCI RELAY   "
                LCDOUT $FE,$C0," ACTI           "
        endif
        pause 500
    ENDIF

.........

..........

         	       		
GOTO BASLA 	             ' BASLA isimli etikete git.

OG

Herhalde her basışta konum değiştirsin istiyor.

'****************************************************************
'*  Name    : PBP.YYSBD                                         *
'*  Author  : [YYSBD]                                           *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 17.02.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : 8 BUTON 8 RÖLE ÇIKIŞ                              *
'*          :                                                   *
'****************************************************************

TRISC=0 			'C portu çıkış olarak ayarlandı
TRISD=0
TRISB=%11111111     'B.0 pini giriş  olarak ayarlandı.
option_reg.7=0
'*****LCD TANIMLAMALARI*****
DEFINE LCD_DREG         PORTD
DEFINE LCD_DBIT         4
DEFINE LCD_RSREG        PORTD
DEFINE LCD_RSBIT        2
DEFINE LCD_EREG         PORTD
DEFINE LCD_EBIT         3
DEFINE LCD_BITS         4
DEFINE LCD_LINES        2


'BUTON TANIMLARI
SYMBOL BUTON0=PORTB.0  ' PortB.0 pinine sembol ismi olarak BUTON adı verildi
SYMBOL BUTON1=PORTB.1         
SYMBOL BUTON2=PORTB.2
SYMBOL BUTON3=PORTB.3
SYMBOL BUTON4=PORTB.4
SYMBOL BUTON5=PORTB.5
SYMBOL BUTON6=PORTB.6
SYMBOL BUTON7=PORTB.7
'RÖLE ÇIKIŞ  TANIMLARI
SYMBOL RELAY0=PORTC.0   ' PortC.0 pinine sembol ismi olarak RELAY adı verildi.      
symbol RELAY1=PORTC.1
SYMBOL RELAY2=PORTC.2
SYMBOL RELAY3=PORTC.3
SYMBOL RELAY4=PORTC.4
SYMBOL RELAY5=PORTC.5
SYMBOL RELAY6=PORTC.6
SYMBOL RELAY7=PORTC.7

x var byte

PORTC = 0

CLEAR  'tüm değişkenler sıfırlandı
LCDOUT $FE,$80,"**HOS GELDIN**"             	
LCDOUT $FE,$C0,"**sude & beste**"
pause 4000
lcdout $FE,1  


BASLA:
        ' RELAY......0
	IF BUTON0 = 0 THEN         ' Anahtar basılı ise
	    TOGGLE RELAY0               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," BIRINCI RELAY  "
        
        if RELAY0 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle

	ENDIF                       
	  
	    ' RELAY......1               	   		           	
	IF BUTON1 = 0 THEN         '  
	    TOGGLE RELAY1               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," IKINCI RELAY   "
        
        if RELAY1 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF  
    		                   
	    ' RELAY......2
	IF BUTON2 = 0 THEN         '  
	    TOGGLE RELAY2               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," UCUNCU RELAY   "
        
        if RELAY2 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF 
     
        ' RELAY......3  
	IF BUTON3 = 0 THEN         '  
	    TOGGLE RELAY3               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1,"DORDUNCU RELAY  "
        
        if RELAY3 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF 
     
        ' RELAY......4               
	IF BUTON4 = 0 THEN         '  
	    TOGGLE RELAY4               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," BESINCI RELAY  "
        
        if RELAY4 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF 
     
        ' RELAY......5    
	IF BUTON5 = 0 THEN         '  
	    TOGGLE RELAY5               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," ALTINCI RELAY  "
        
        if RELAY5 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF   
        ' RELAY......6          
	IF BUTON6 = 0 THEN         '  
	    TOGGLE RELAY6               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," YEDINCI RELAY  "
        
        if RELAY6 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF         
	    ' RELAY......7  
	IF BUTON7 = 0 THEN         '  
	    TOGGLE RELAY7               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," SEKIZINCI RELAY  "
        
        if RELAY7 = 1 then
            gosub acmis
        else
            gosub kapatmis
        endif 

        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF           
         	       		
GOTO BASLA 	             ' BASLA isimli etikete git.
END

'''''''''''

acmis:
    LCDOUT $FE,$C0,"     ACTI       "
return


kapatmis:
    LCDOUT $FE,$C0,"    KAPATTI     "
return


butonbirak:
    for x = 1 to 200
        pause 1
        if PORTB <> 255 then butonbirak '' basılı buton varsa
    next
return
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

yysbd

codu denedim güzel çalıştı. son yazdığım mesajımda butonlar işlemini bitirnce ana ekrana dönmesi lazım yaptı işi açılış ekrarına gitsin bu codun neresine eklemem lazım yardım için çok sağ.

OG

#6
'****************************************************************
'*  Name    : PBP.YYSBD                                         *
'*  Author  : [YYSBD]                                           *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 17.02.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : 8 BUTON 8 RÖLE ÇIKIŞ                              *
'*          :                                                   *
'****************************************************************

TRISC=0 			'C portu çıkış olarak ayarlandı
TRISD=0
TRISB=%11111111     'B.0 pini giriş  olarak ayarlandı.
option_reg.7=0
'*****LCD TANIMLAMALARI*****
DEFINE LCD_DREG         PORTD
DEFINE LCD_DBIT         4
DEFINE LCD_RSREG        PORTD
DEFINE LCD_RSBIT        2
DEFINE LCD_EREG         PORTD
DEFINE LCD_EBIT         3
DEFINE LCD_BITS         4
DEFINE LCD_LINES        2


'BUTON TANIMLARI
SYMBOL BUTON0=PORTB.0  ' PortB.0 pinine sembol ismi olarak BUTON adı verildi
SYMBOL BUTON1=PORTB.1         
SYMBOL BUTON2=PORTB.2
SYMBOL BUTON3=PORTB.3
SYMBOL BUTON4=PORTB.4
SYMBOL BUTON5=PORTB.5
SYMBOL BUTON6=PORTB.6
SYMBOL BUTON7=PORTB.7
'RÖLE ÇIKIŞ  TANIMLARI
SYMBOL RELAY0=PORTC.0   ' PortC.0 pinine sembol ismi olarak RELAY adı verildi.      
symbol RELAY1=PORTC.1
SYMBOL RELAY2=PORTC.2
SYMBOL RELAY3=PORTC.3
SYMBOL RELAY4=PORTC.4
SYMBOL RELAY5=PORTC.5
SYMBOL RELAY6=PORTC.6
SYMBOL RELAY7=PORTC.7

x var byte

PORTC = 0
CLEAR  'tüm değişkenler sıfırlandı

ana_ekran:

LCDOUT $FE,$80,"**  HOS GELDIN**  "             	
LCDOUT $FE,$C0,"**sude & beste** "
'pause 4000
'lcdout $FE,1  


tus_bekle:
    pause 1
if PORTB = 255 then tus_bekle



BASLA:
        ' RELAY......0
	IF BUTON0 = 0 THEN         ' Anahtar basılı ise
	    TOGGLE RELAY0               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," BIRINCI RELAY   "
        
        if RELAY0 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle

	ENDIF                       
	  
	    ' RELAY......1               	   		           	
	IF BUTON1 = 0 THEN         '  
	    TOGGLE RELAY1               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," IKINCI RELAY    "
        
        if RELAY1 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF  
    		                   
	    ' RELAY......2
	IF BUTON2 = 0 THEN         '  
	    TOGGLE RELAY2               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," UCUNCU RELAY    "
        
        if RELAY2 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF 
     
        ' RELAY......3  
	IF BUTON3 = 0 THEN         '  
	    TOGGLE RELAY3               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," DORDUNCU RELAY  "
        
        if RELAY3 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF 
     
        ' RELAY......4               
	IF BUTON4 = 0 THEN         '  
	    TOGGLE RELAY4               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," BESINCI RELAY   "
        
        if RELAY4 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF 
     
        ' RELAY......5    
	IF BUTON5 = 0 THEN         '  
	    TOGGLE RELAY5               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," ALTINCI RELAY   "
        
        if RELAY5 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF   
        ' RELAY......6          
	IF BUTON6 = 0 THEN         '  
	    TOGGLE RELAY6               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," YEDINCI RELAY   "
        
        if RELAY6 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF         
	    ' RELAY......7  
	IF BUTON7 = 0 THEN         '  
	    TOGGLE RELAY7               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," SEKIZINCI RELAY   "
        
        if RELAY7 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
	ENDIF           
         	       		
GOTO BASLA 	             ' BASLA isimli etikete git.
END

'''''''''''

acmis:
    LCDOUT $FE,$C0,"     ACTI       "
goto butonbirak


kapatmis:
    LCDOUT $FE,$C0,"    KAPATTI     "
goto butonbirak


butonbirak:
    for x = 1 to 200
        pause 1
        if PORTB <> 255 then butonbirak '' basılı buton varsa
    next
    
    for x = 1 to 250    ''' tuş durumu gösterme süresi 250 * 8 = 2000 ms
        pause 8
        if PORTB <> 255 then BASLA      ''' Tuşa basılırsa hemen geç
    next
    
  
goto ana_ekran
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Kodların hepsi güzel. Yalnızca bir alternatif olsun diye daha kısa bir kod örneği vereyim dedim.

Ete
TUS var byte
X var byte

PORTC = 0
CLEAR  'tüm değişkenler sıfırlandı

ana_ekran:

LCDOUT $FE,$80,"**  HOS GELDIN**  "             	
LCDOUT $FE,$C0,"**sude & beste** "
'pause 4000
'lcdout $FE,1  


tus_bekle:
    pause 1
if PORTB = 255 then tus_bekle

tus=portb & %11111111
TUS=255-tus
IF TUS>0 then
  tus=ncd tus
  lcdout $fe,$94,dec tus," NO'LU TUS BASILDI"
  portb.0[tus-1]=1- PORTB.0[Tus-1]
  portc.0[tus-1]=1-portc.0[tus-1]
  IF PORTC.0[TUS-1]=1 THEN
     LCDOUT $FE,$D4,DEC TUS," NOLU ROLE CEKTI  "
  ELSE
     LCDOUT $FE,$D4,DEC TUS," NOLU ROLE BIRAKTI"  
  ENDIF    
  while portb<255:wend
  pause 100
endif  
  goto ana_ekran
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yysbd

#8
çok sağ.og nin göndermiş olduğu kodların üzerinde deneme yanılma yapıyordum ete hocam sizden de allah razı olsun sizlerin sayesinde bir şeyler yapmaya gayret ediyorum.ete hocam 16f877a bu og arkadaşın yollamış olduğu kdlara ilave olarak 3 adete e portundan ds18b20 okutmak mümkünmü nasıl olur acaba tekrar ilginiz ve desteğiniz için sağ. ana_ekran:

LCDOUT $FE,$80,"**  HOS GELDIN**  "                
LCDOUT $FE,$C0,"**sude & beste** "
açılışta gelsin belli bir süre dursun ekranda  sonra 3 adet sensörü okusun ekranda yazsın buton işlem yaparsa ne iş yaptıysa yazsın tekrar ds18b20 ye dönsün olurmu  bu  sekilde?yani og nin kodlarına ilave olarak.

ete

yysbd,

Artık bir şeyleri başarma zamanın gelmiş. DS18B20 sensörünü okuma konusunda bir sürü örnek var etrafında.
Bütünyapman gereken şey haberleşme pinini programında tanımlaman. Sonra kodu programına yerleştirip çalıştırman. Bu kadarınıda başarman gerek artık.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yysbd

ete hocam bir el atsan öğrenecem hocam eklermisin  hocam  rica etsem bunun üzerinde oynamalar yaparak daha iyi anlaya biliyorum o yüzden hocam.saygılar.

ete

El atıyorum. Bakalım gerisini getirebilecekmisin. Aslında el atma değil yokuşu da aşırtmış durumdayım sana itmek değil koşmak kalıyor.

Aşağıdaki kodlarda iki bölüm var. Birinci bölümde tanımlamalar var. Bunları programın değişken tanımlamaları kısmına koyman gerek.
Diğer bölümde sıcaklık okuma ve hesaplama alt programı var. Onlarıda programın altraında bir yerlere yerleştirirsin.
Programın ana çalışan kısmında ise;
GOSUB SENSOROKU
Demen sıcaklığı okuman için yeterli olacaktır. Sonra elinde ISI ve ONDA diye iki değişkne olacak. Sıcaklık 23,6 ise ISI=23 ONDA=6 şeklinde dönecektir sana. Bunları artık ekrana istediğin yere yazdırabilirsin.
Sensör PortE.0 pinine bağlı olacaktır. Tanımlama kısmında gözüküyor zaten.

Ete
symbol  Comm_Pin=PortE.0

HAM         VAR	WORD
Float       VAR WORD
SIGN        VAR BYTE 
ISI         VAR BYTE  'sıcaklık tam sayı kısmı
ONDA        VAR BYTE  'sıcaklık ondalık kısım
 
Busy        VAR BIT  
SIGN_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1  
 
 
 

 
SENSOROKU: 

           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini çevir
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
                    

Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"  
       ham=~ham+2
    endif
    float = (HAM*10)/16        ' 
    ISI=FLOAT/10 
    ONDA=FLOAT//10
    RETURN 
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yysbd

ETE hocam sizin dediğiniz gibi birşeyler yapmaya çalışıyorum ekrana ıc ısı yazı geliyor başka işlem yok butonlar iptal devre 3 sensör ekledim çok karıştırdım galiba kör düğüm oldu hocam devre ve kodu bir incelermisiniz ? mümkünse saygılar http://s2.dosya.tc/server8/QVdPQ1/ETE.rar.html

ete

Yükleme yaptığın sitede virisü algılıyor benim koruyucu. O nedenle yükleyemiyorum.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yysbd

'****************************************************************
'*  Name    : PBP.YYSBD                                         *
'*  Author  : [YYSBD]                                           *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 17.02.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : 8 BUTON 8 RÖLE ÇIKIŞ                              *
'*          :                                                   *
'****************************************************************

TRISC=0 			'C portu çıkış olarak ayarlandı
TRISD=0
TRISE=0
TRISB=%11111111     'B.0 pini giriş  olarak ayarlandı.
option_reg.7=0
HAM         VAR	WORD
Float       VAR WORD
SIGN        VAR BYTE 
ISI         VAR BYTE  'sıcaklık tam sayı kısmı
ONDA        VAR BYTE  'sıcaklık ondalık kısım
 
Busy        VAR BIT  
SIGN_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1  
symbol  Comm_Pin=PortE.0    ' One-wire Data-Pin "DQ" PortB.0 da
'*****LCD TANIMLAMALARI*****
DEFINE LCD_DREG         PORTD
DEFINE LCD_DBIT         4
DEFINE LCD_RSREG        PORTD
DEFINE LCD_RSBIT        2
DEFINE LCD_EREG         PORTD
DEFINE LCD_EBIT         3
DEFINE LCD_BITS         4
DEFINE LCD_LINES        4


'BUTON TANIMLARI
SYMBOL BUTON0=PORTB.0  ' PortB.0 pinine sembol ismi olarak BUTON adı verildi
SYMBOL BUTON1=PORTB.1         
SYMBOL BUTON2=PORTB.2
SYMBOL BUTON3=PORTB.3
SYMBOL BUTON4=PORTB.4
SYMBOL BUTON5=PORTB.5
SYMBOL BUTON6=PORTB.6
SYMBOL BUTON7=PORTB.7
'RÖLE ÇIKIŞ  TANIMLARI
SYMBOL RELAY0=PORTC.0   ' PortC.0 pinine sembol ismi olarak RELAY adı verildi.      
symbol RELAY1=PORTC.1
SYMBOL RELAY2=PORTC.2
SYMBOL RELAY3=PORTC.3
SYMBOL RELAY4=PORTC.4
SYMBOL RELAY5=PORTC.5
SYMBOL RELAY6=PORTC.6
SYMBOL RELAY7=PORTC.7

Y var byte

PORTC = 0
CLEAR  'tüm değişkenler sıfırlandı

ana_ekran:
                       
LCDOUT $FE,$80,"ANA EKRAN 1 "             	
LCDOUT $FE,$C0,"ANA EKRAN 2 "
LCDOUT $FE,$94,"ANA EKRAN 3 "             	
LCDOUT $FE,$D4,"ANA EKRAN 4 "
'pause 4000
'lcdout $FE,1 
lcdout $fe,1," IC ISI CONTROL"
      gosub SENSOROKU     'SONSÖR OKU VE SICAKLIĞI EKRANA YAZ
      GOTO BASLA
 SENSOROKU: 

           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini çevir
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
                    

Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"  
       ham=~ham+2
    endif
    float = (HAM*10)/16        ' 
    ISI=FLOAT/10 
    ONDA=FLOAT//10
    RETURN  


tus_bekle:
    pause 1
if PORTB = 255 then tus_bekle


BASLA:
        ' RELAY......0
    IF BUTON0 = 0 THEN         ' Anahtar basılı ise
        TOGGLE RELAY0               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," BIRINCI BUTON  "
       
        if RELAY0 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle

    ENDIF                       
      
        ' RELAY......1               	   		           	
    IF BUTON1 = 0 THEN         '  
        TOGGLE RELAY1               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," IKINCI BUTON    "
        
        if RELAY1 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
    ENDIF  
    		                   
        ' RELAY......2
    IF BUTON2 = 0 THEN         '  
        TOGGLE RELAY2               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," UCUNCU BUTON  "
        
        if RELAY2 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
    ENDIF 
     
        ' RELAY......3  
    IF BUTON3 = 0 THEN         '  
        TOGGLE RELAY3               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," DORDUNCU BUTON "
        
        if RELAY3 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
    ENDIF 
     
        ' RELAY......4               
    IF BUTON4 = 0 THEN         '  
        TOGGLE RELAY4               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," BESINCI BUTON  "
        
        if RELAY4 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
    ENDIF 
     
        ' RELAY......5    
    IF BUTON5 = 0 THEN         '  
        TOGGLE RELAY5               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," ALTINCI BUTON   "
        
        if RELAY5 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
    ENDIF   
        ' RELAY......6          
    IF BUTON6 = 0 THEN         '  
        TOGGLE RELAY6               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," YEDINCI RELAY   "
        
        if RELAY6 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
    ENDIF         
        ' RELAY......7  
    IF BUTON7 = 0 THEN         '  
        TOGGLE RELAY7               ' Rölenin durumunu değiştir                                   

        LCDOUT $FE,1," SEKIZINCI RELAY   "
        
        if RELAY7 = 1 then
            goto acmis
        else
            goto kapatmis
        endif 

'        gosub butonbirak        '' buton bırakmayı bekle
    ENDIF           
         	       		
GOTO BASLA 	             ' BASLA isimli etikete git.
END

'''''''''''

acmis:
    LCDOUT $FE,$C0,"     YANDI       "
goto butonbirak


kapatmis:
    LCDOUT $FE,$C0,"    KAPATTI     "
goto butonbirak


butonbirak:
    for Y = 1 to 200
        pause 1
        if PORTB <> 255 then butonbirak '' basılı buton varsa
    next
    
    for Y = 1 to 250    ''' tuş durumu gösterme süresi 250 * 8 = 2000 ms
        pause 6
        if PORTB <> 255 then BASLA      ''' Tuşa basılırsa hemen geç
    next
    

    
  
goto ana_ekran