Arkadaşlar aşağıda gördüğünüz şekilde bir ödevim var,yapması gerekenler belli sıcaklık değerlerin bir seçim yapacak ve sıcaklık değişene kadar o seçimde kalıp,seçmde kaldığı süre içindede roleyi açık tutacak,bunları lcd de gösterecek,fakat benim yaptığımda sıcaklık değeri değişse bile seçimi değiştirmiyor,çok karışık oldu,bir yerde hata var ama çözemiyorum,yardım ederseniz sevinirim.Ödevim yarına olduğu için sitey araştıramadım kusura bakmayın,bu alanda yeniyim ilk yaptığım proje bu olacak.
DEFINE LCD_DREG PORTC 'LCD data bacakları PortC de bağlı
DEFINE LCD_DBIT 4 'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG PORTC 'LCD Enable Bacağı PortC de bağlı
DEFINE LCD_EBIT 3 'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG PORTC 'LCD RW Bacağı PortC de bağlı
DEFINE LCD_RWBIT 2 'LCD RW Bacağı 2. bite bağlı
DEFINE LCD_RSREG PORTC 'LCD RS Bacağı PortC de bağlı
DEFINE LCD_RSBIT 1 'LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS 4 'LCD 4 bit olarak bağlı
DEFINE LCD_LINES 4 'LCD 2 sıra olarak çalışıyor
DEFINE OSC 4
ADCON0=%10000000
ADCON1=%0111
TRISA=%001111
TRISC=0
TRISD=%00000111
SICAKLIK Var Word ' Sicaklik Degsikeni
Kalan Var Byte ' Kalan Degiskeni
Derece_say Var Byte ' Her Santigrad icin derece sayimi Degiskeni
DS Var PORTA.4
SYMBOL TUS1=PORTA.0
SYMBOL TUS2=PORTA.1
SYMBOL TUS3=PORTA.2
HIGH TUS1
HIGH TUS2
HIGH TUS3
lcdout $FE,1,"SSA"
LCDOUT $FE,$C0,"2211"
LCDOUT $FE,$94,"ODEV ÇALIŞMASI"
PAUSE 400
DONGU: OWOut DS,1,[$CC, $44]
DONGU1: OWIn DS,4,[Kalan]
If Kalan = 0 Then DONGU1
OWOut DS,1,[$CC, $BE] ' Siackligi oku
OWIn DS,0,[SICAKLIK.LOWBYTE, SICAKLIK.HIGHBYTE, Skip 4, Kalan, Derece_say]
SICAKLIK = (((SICAKLIK >> 1) * 100) - 25) + (((Derece_say - Kalan) * 100) / Derece_say)
Lcdout $FE,$D4,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
Pause 1000 ' Her 250 milisaniyede bir goster
BASLA:
lcdout $FE,1,"1.TAVUK"
LCDOUT $FE,$C0,"2.KAZ"
LCDOUT $FE,$94,"3.BILDIRCIN"
LCDOUT $FE,$D4,"LUTFEN BIRINI SECIN"
PAUSE 10
IF 0<SICAKLIK<80 THEN TUS1=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"TAVUK Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
GOTO DONGU
IF 88<SICAKLIK<160 THEN TUS2=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"BILDIRCIN Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
GOTO DONGU
IF 168<SICAKLIK<240 THEN TUS3=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"KAZ Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
GOTO DONGU
END
IF kullandıktan sonra ENDIF kullanmamışsın, dolayısyla IF satırındaki TUS1=0'dan sonra otomatik ENDIF kabul ediyor. Aşağıda devam eden satırlara if'e bakmadan giriyor. Sonra da GOTO DONGU gördüğü için DONGU'ye gidiyor. Diğer if'li satırlara hiç geçmiyor program. Şu şekilde değiştirmen lazım kodu:
IF 0<SICAKLIK<80 THEN
TUS1=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"TAVUK Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
ENDIF
IF 88<SICAKLIK<160 THEN
TUS2=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"BILDIRCIN Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
ENDIF
IF 168<SICAKLIK<240 THEN
TUS3=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"KAZ Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
ENDIF
GOTO DONGU
END
Bu program aşağıdaki şekilde çalışır.
Sanırım sıcaklığa göre menü seçimi yaptırılıyor.
Sigorta ayarları eksik ama hangi işlemci olduğu çok açık belli olmadığı için eklemedim. Ama eklenmesi gerekir.
Ete
DEFINE OSC 4
DEFINE LCD_DREG PORTC 'LCD data bacakları PortC de bağlı
DEFINE LCD_DBIT 4 'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG PORTC 'LCD Enable Bacağı PortC de bağlı
DEFINE LCD_EBIT 3 'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG PORTC 'LCD RW Bacağı PortC de bağlı
DEFINE LCD_RWBIT 2 'LCD RW Bacağı 2. bite bağlı
DEFINE LCD_RSREG PORTC 'LCD RS Bacağı PortC de bağlı
DEFINE LCD_RSBIT 1 'LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS 4 'LCD 4 bit olarak bağlı
DEFINE LCD_LINES 4 'LCD 2 sıra olarak çalışıyor
ADCON0=%10000000
ADCON1=%00000111
TRISA=%00001111
TRISC=0
TRISD=%00000111
SICAKLIK Var Word ' Sicaklik Degsikeni
Kalan Var Byte ' Kalan Degiskeni
Derece_say Var Byte ' Her Santigrad icin derece sayimi Degiskeni
DS Var PORTA.4
SYMBOL TUS1=PORTA.0
SYMBOL TUS2=PORTA.1
SYMBOL TUS3=PORTA.2
HIGH TUS1
HIGH TUS2
HIGH TUS3
lcdout $FE,1,"SSA"
LCDOUT $FE,$C0,"2211"
LCDOUT $FE,$94,"ODEV ÇALIŞMASI"
PAUSE 400
DONGU: OWOut DS,1,[$CC, $44]
DONGU1: OWIn DS,4,[Kalan]
If Kalan = 0 Then DONGU1
OWOut DS,1,[$CC, $BE] ' Siackligi oku
OWIn DS,0,[SICAKLIK.LOWBYTE, SICAKLIK.HIGHBYTE, Skip 4, Kalan, Derece_say]
SICAKLIK = (((SICAKLIK >> 1) * 100) - 25) + (((Derece_say - Kalan) * 100) / Derece_say)
Lcdout $FE,$D4,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
Pause 1000 ' Her 250 milisaniyede bir goster
BASLA:
lcdout $FE,1,"1.TAVUK"
LCDOUT $FE,$C0,"2.KAZ"
LCDOUT $FE,$94,"3.BILDIRCIN"
LCDOUT $FE,$D4,"LUTFEN BIRINI SECIN"
PAUSE 10
IF SICAKLIK>0 AND SICAKLIK<80 THEN
TUS1=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"TAVUK Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
GOTO DONGU
ENDIF
IF SICAKLIK>88 AND SICAKLIK<160 THEN
TUS2=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"BILDIRCIN Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
GOTO DONGU
ENDIF
IF SICAKLIK >168 AND SICAKLIK<240 THEN
TUS3=0
LCDOUT $FE,1
Lcdout $FE,$C0,0,DEC (SICAKLIK / 100), ".", DEC2 SICAKLIK, " C DERECE"
PAUSE 500
LCDOUT $FE,$94,"KAZ Secildi "
HIGH PORTD.0
HIGH PORTA.3 'role çektirildi
PAUSE 500 '500 ms beklemeı
PAUSE 500
LOW PORTD.0
PAUSE 500
GOTO DONGU
ENDIF
GOTO DONGU
END
yardımcı oldunuz,uğraşıp cevap verdiğiniz için teşekkür ederim.