garip neden acaba??

Başlatan net65, 23 Aralık 2005, 19:18:10

net65

asagıdaki kodu  yukledim fakat calısmasını istedigim gibi calısmıyor..
amacım tek tusla acıp kapama tusu ama olmadım sadece 2 tus calısıyor.(porta1)

@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
TRISA=1 'A portu çıkış olarak ayarlandı
TRISB=%00000000 'B.0 pini giriş diğerleri çıkış olarak ayarlandı.
SYMBOL TUS= PORTa.0 ' PortB.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED= PORTb.0 ' PortA.0 pinine sembol ismi olarak LED adı verildi.
SYMBOL TUS1= PORTa.1 ' PortB.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED1= PORTb.1 ' PortA.0 pinine sembol ismi olarak LED adı verildi.
SYMBOL TUS2= PORTa.2 ' PortB.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED2= PORTb.2 ' PortA.0 pinine sembol ismi olarak LED adı verildi.
symbol yetki=porta.5
BASLA:
pause 100
IF TUS=1 and yetki=1 THEN ' Anahtar kapalı ise
HIGH LED ' LED'i yak
ELSE ' Değilse
LOW LED ' LED'i söndür
ENDIF ' IF sorgulaması sonu
GOTO BASLA ' BASLA isimli etikete git.
IF TUS1=1 and yetki=1 THEN ' Anahtar kapalı ise
HIGH LED1 ' LED1'i yak
ELSE ' Değilse
LOW LED1 ' LED1'i söndür
ENDIF ' IF sorgulaması sonu
GOTO BASLA ' BASLA isimli etikete git.
IF TUS2=1 and yetki=1 THEN ' Anahtar kapalı ise
HIGH LED2 ' LED2'i yak
ELSE ' Değilse
LOW LED2 ' LED2'i söndür
ENDIF ' IF sorgulaması sonu
GOTO BASLA ' BASLA isimli etikete git.
END

DumrulBey

Merhaba,

Anımsadığım kadarıyla bu iş için bir komut vardı ama hatırlayamadım. Eminim PIC Basic programcıları bunu yazacaktır. Yani her tuşa basılışta bir öncekinin tersi duruma getirme. O yüzden bu şekilde uğraşmayaya gerek olmadığı gibi sözü geçen komut sorunsuz çalışacaktır. Üstelik daha az uğraştırır. Ama komut neydi yahu...:)

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

ete

@ Dumrulbey ;komutun adı   TOGGLE TUS veya TOGGLE PORTA.1  gibi.

@Net65,

Programında bazı hatalar var,
Öncelikle TrisA=1 deyince yalnızca Porta.0'ı giriş yaparsın. Tamamını giriş yapmak için komutu ya TRISA=%11111111  yada TRISA=255 demen gerekir.

Aslında yan tarafta verdiğin açıklamalar doğru ise programın çok yeri yanlış. İstersen önce bir açıklamaları düzelt. Sonra tuş girişlerini kontrol ettiğin yerlere PAUSE 100 ekle ki program hemen aynı yere tekrar gelmesin.
Hemen başa bir pause 100 koymuşsun ama bence onu kaldır ve if TUS=1 satırlarının hemen altına PAUSE 100 ilave et. Yani tuşa basılmış ise 100 ms beklesin.

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

Veli B.

Bırakmada çalışan, pull-up tuş rutini:

IF UP=0 THEN 
_UP: IF UP=0 THEN _UP 
     TUS=TUS+1
     ENDIF
     
IF DN=0 THEN 
_DN: IF DN=0 THEN _DN
        TUS=TUS-1
     ENDIF

forsa1975

628 a portunda  analog komparatör olduğu için öncelikle comcon 7 yapılarak ve osilatörü internal yapıp mclr de iptal edilirse porta tamamen digital i/o olur. Bunlar yapıldıktan sonra bu kodda hatalı olan her if sonunda program başa yönlendiriliyordu.  

'@ DEVICE INTRC_OSC_NOCLKOUT, MCLR_OFF.
CMCON=%00000111     'porta digital oldu

TRISA=%11111111 'A portu giriş olarak ayarlandı 
TRISB=%00000000 'B  çıkış olarak ayarlandı. 
TUS var PORTA.0 ' PortB.0 pinine sembol ismi olarak TUS adı verildi. 
LED var PORTB.0 ' PortA.0 pinine sembol ismi olarak LED adı verildi. 
TUS1 var PORTA.1 ' PortB.0 pinine sembol ismi olarak TUS adı verildi. 
LED1 var PORTB.1 ' PortA.0 pinine sembol ismi olarak LED adı verildi. 
TUS2 var PORTA.2 ' PortB.0 pinine sembol ismi olarak TUS adı verildi. 
LED2 var PORTB.2 ' PortA.0 pinine sembol ismi olarak LED adı verildi. 
yetki var PORTA.5 
portb=0 'başlamadan önce portu sıfırla

BASLA: 
pause 100 
IF TUS=1 and yetki=1 THEN ' Anahtar kapalı ise 
HIGH LED ' LED'i yak 
GOTO BASLA
ELSE ' Değilse 
LOW LED ' LED'i söndür 
ENDIF ' IF sorgulaması sonu 

IF TUS1=1 and yetki=1 THEN ' Anahtar kapalı ise 
HIGH LED1 ' LED1'i yak 
GOTO BASLA
ELSE ' Değilse 
LOW LED1 ' LED1'i söndür 
ENDIF ' IF sorgulaması sonu 

IF TUS2=1 and yetki=1 THEN ' Anahtar kapalı ise 
HIGH LED2 ' LED2'i yak 
GOTO BASLA
ELSE ' Değilse 
LOW LED2 ' LED2'i söndür 
ENDIF ' IF sorgulaması sonu 
GOTO BASLA ' BASLA isimli etikete git. 
END