Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: bersis576 - 18 Aralık 2014, 15:11:45

Başlık: Pıc16F877 Sıcaklıkğa Göre Seçim Yapma,Role Açma
Gönderen: bersis576 - 18 Aralık 2014, 15:11:45
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
Başlık: Ynt: Pıc16F877 Sıcaklıkğa Göre Seçim Yapma,Role Açma
Gönderen: vale9 - 19 Aralık 2014, 10:45:56
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


Başlık: Ynt: Pıc16F877 Sıcaklıkğa Göre Seçim Yapma,Role Açma
Gönderen: ete - 19 Aralık 2014, 12:29:21
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
Başlık: Ynt: Pıc16F877 Sıcaklıkğa Göre Seçim Yapma,Role Açma
Gönderen: bersis576 - 22 Aralık 2014, 18:43:12
yardımcı oldunuz,uğraşıp cevap verdiğiniz için teşekkür ederim.