pic ile led kontrolü

Başlatan nusi, 14 Mart 2009, 16:28:20

nusi

BİR PROJE İÇİN PİC PROGLAMAYA ÇALIŞIYORUM. PROJE ŞU ŞEKİLDE ÇALIŞACAK: BUTONA 1. BASIŞIMIZDA 3 SN LED YANACAK 2. BASIŞIMIZDA 9 SN ÇALIŞACAK VE BU ŞEKİLDE SÜREKLİ DEVAMEDECEK. PİC İN MCRL AYAĞINI 4.7 K İLE +5V DİREK BAĞLADIM.RESET BUTONU YOK. DEVRE HER İŞLEMİ 2ŞER DEFA YAPIYOR.YANİ YANLIŞ ÇALIŞIYOR BİRER DEFA YAPMASINI İSTİYORUM. KOMUTLARDA RARDIMCI OLURSANIZ SEVİNİRİM. RESETLEMEDEN PROGRAM BAŞA NASIL DÖNER? KOMUTLARI ŞU ŞEKİKDE YAZMAYA ÇALIŞTIM.. HATA VARSA DÜZELTİRSENİZ SEVİNİRİM. TEŞEKKÜRLER...

INPUT PORTB.0
OUTPUT PORTB.1

SYMBOL TUS= PORTB.0 ' PortB.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED= PORTB.1 ' PortA.0 pinine sembol ismi olarak LED adı verildi.
ILK:
GOTO BASLA

BASLA:
IF TUS=1 THEN ' Anahtar kapalı ise 
HIGH LED 
PAUSE 3000 
ELSE ' Değilse
LOW LED ' LED'i söndür
ENDIF
GOTO LOOP
END
LOOP: 
IF TUS=1 THEN ' Anahtar kapalı ise 
HIGH LED 
PAUSE 9000 
ELSE ' Değilse
LOW LED ' LED'i söndür
ENDIF
GOTO BASLA 
END

tyildizak

Derleyicin nedir? programda iki tane end görüyorum, biri ortasında, bu normal mi?

nusi

picbasicpro yazdım picwin800le yüklüyorum... komutlar karışıyor yardımcı olursan çok sevinirim..

nusi

1. end komutunu sildim yine aynı..

Maxim

ayak üstü birşey yaptım yanlış olabilir deneyiniz .


Input PORTB.0 
Output PORTB.1 

Symbol TUS= PORTB.0 ' PortB.0 pinine sembol ismi olarak TUS adı verildi. 
Symbol LED= PORTB.1 ' PortA.0 pinine sembol ismi olarak LED adı verildi. 
Temp VAR Byte  
Temp = 0
Low LED


BASLA: 

If TUS=1 And Temp=0 Then ' Anahtar kapalı ise 
High LED 
PAUSE 3000 
Temp=1
Low LED 
EndIf  
 
If TUS=1 And Temp=1 Then ' Anahtar kapalı ise 
High LED 
PAUSE 9000
Temp=0 
Low LED 
EndIf 

GoTo BASLA

nusi

cok teşekkürler hocam çok sağolun.......

ete

Aslında programda birbirinin aynı olan iki bölüm yazılmış halbuki bu iş tek bölümle halledilebilir. Tek bölümde eksik olacak konu tuşa birincimi yoksa ikinci defamı basıldığı. Bunuda bir bit değişkeni ile kolayca halletmek mümkün. Şöyle

Bak var Bit
.
.
BASLA:
IF TUS=1 THEN ' Anahtar kapalı ise
  HIGH LED
  IF BAK=0 then  PAUSE 3000
  IF BAK=1 then  PAUSE 9000
  BAK=1-BAK
ELSE ' Değilse
  LOW LED ' LED'i söndür
ENDIF
GOTO BASLA
END

Başlangıçta BAK isimli değişken değeri sıfırdır ve tuşa basıldığı zaman uygulanacak bekleme süresi bu yüzden 3000 ms olacaktır. Bu süre uygulandıktan sonra Bak=1-Bak eşitliği bak değerini 1 yapacaktır. İkinci defa tuşa basılırsa bu sefer 9000 ms bekleme uygulanacak ve aynı anda bak değeri tekrar sıfır olacaktır. Bu işlem böylece devam edip gider.

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