TRISB=%00000001
SYMBOL TUS=PORTB.0
SYMBOL LED=PORTB.1
BASLA:
IF TUS=0 THEN
PAUSE 5000
IF LED=1 THEN
LOW LED
ELSE
HIGH LED
ENDIF
ENDIF
GOTO BASLA
END
Bana bu kodu içinde kullanılan komutlar ile beraber adım adım anlatabirmisiniz :(
TRISB=%00000001 ========> b portundaki bitlerin giriş veya çıkış olduğunu belirtir..
SYMBOL TUS=PORTB.0 =======> portb.0 bitine tus adı verildi
SYMBOL LED=PORTB.1 =======> portb.1 bitine led adı verildi
BASLA: =========> başla adında etiket oluşturulmuş
IF TUS=0 THEN =====> tus "0" ise
PAUSE 5000 =====> 5sn bekle
IF LED=1 THEN =====> led "1" ise
LOW LED =======> led'i söndür
ELSE ======> değilse
HIGH LED ======> led'i yak
ENDIF ====>ıf döngü sonu
ENDIF
GOTO BASLA ====>başla adlı etikete git
END =====> program sonu
Hayrola müslim kardeş assembly den vaz mı geçtin?
ikisi birbirine tamamlayıcı olur diye düşünüyorum bombacı kardeşim. ilgin için sağol asm zor gelmeye başladı ama inan senin kadar bilmek için çok şey verirdim.
BEYAZKUVVET sanada ilgin için çok tşk ediyorum. Hanenede ekliyorum sağol.
ikinci endif nedir peki beyaz kuvvet kardeşim neden arka arkaya iki endif komutu ?
BASLA:
IF TUS=0 THEN
PAUSE 5000
IF LED=1 THEN
LOW LED
ELSE
HIGH LED
ENDIF
ENDIF
GOTO BASLA
END
Hocam şimdi 2. ednıf koymamızın sebebi programda da göründüğü gibi 2 tane if'li şart oluşturmuşsunuz ,mesela atıyorum buton "1" ise led i söndür değilse(else) ledi yak buradakı butun şartların sonlandığını belirtmek için sanırım aynı end gibi burada da endı if'li şartların sonu demek istiyor...yanı kısaca kaç tane ıflı şart oluşturursanız o kadar endıf eklersiniz..
Fakat basit bir örnek verim (burada durum farklı)
'program başlangıç
'not= her.gi bir kodun sonuna, ' işareti koyarak o kodun açıklamasını yapabilirisin ' işaretinden sonra yazılanlar komut olarak algılanmaz..
Örnek:
If buton1=1 then tel1 ' buton=1 ise tel1 adlı etikete git.
' eğer buton=0 ise bir alt satıra geçer :D burada else komutu kullanılmaz program bunu kendi algılar vb. anlar ve algılar...bu da bir endıf kullanılmayan ıflı şart komutuna örnektir hocam...
If buton2=1 then tel2
If buton3=1 then tel3
If buton4=1 then tel4
Goto örnek ' son şarttan sonra bu komuta sıra gelir ve bu komuta programı etiketin başına yönlendirir...
Tel1:
Hıgh led1 ' buton1=1 olmuşsa program buraya gelir ve led1'i "1" yapar.
Goto tel1 'buton1 "1" yapıldıktan sonra led yanar ve program buraya gelir daha sonra yine başa gider ve ledi yakar ... bu böyle pic2in enerji kesilene kadar devam eder.....
,
,
Tel4:
Hıgh led2
Goto tel4
End ' program sonu....
Kolay gelsin...
sağol beyaz kuvvet güzel açıklama ama benim halen anlamadığım bişi var ?
BASLA:
IF TUS=0 THEN
IF LED=1 THEN
LOW LED
ELSE
HIGH LED
ENDIF
ENDIF
GOTO BASLA
Şimdi baştan okuyarak gelelim: tus 0 sa alt komutu çalıştırır 1 se bir alt komutu. 1 varsayalım tus 0 mı hayır 1 ledi söndür. işde kafam burada karışıyor Else komutu bu durumda dedi mi yakacak yoksa ednıf komutuna mı sıçrayacak.
Mesela asm dilinde BTFSS komutu ile IF aynı ama bu ıf de else var bu herdurumda yanı ıf her durumunda dallanma yapar mı yoksa komut sırasınca akar mı ? deli olacağım yaaa ne zor iş offf
BTFSS komutu ile IF-ELSE komutu farklı şeyler müslim, BTFSS de doğruysa bir altı değilse ikinci alttan devam eder. Fakat IF komutunda doğruysa ELSE ye kadar gider ELSE ile ENDIF arasını atlar. Yanlış ise sadece ELSE ile ENDIF arasındaki komutları çalıştırır.
(https://www.teknolojiekibi.com/yeni/proxy.php?request=http%3A%2F%2Fwww.cagataycebi.com%2Fprogramming%2Fc_programming%2Fc_operands%2Fif_else.png&hash=f596743d2505a47d6c58d32e7f5c6be1a330e750)
BTFSS ise böyledir.
(https://www.teknolojiekibi.com/yeni/proxy.php?request=http%3A%2F%2Fwww.edutecbauru.com.br%2Farquivospic%2Fimag%2Fcursopic451.png&hash=c408b52937a540ac3c9fa140ea2136b8c4d244fe)
Çok sağol elbombacı valla çok sağol bu şema ve açıklaman beni aydınlattı çok sağol.
sizleri tanıdığıma inan çok memnunum kendimi şanslı hissediyorum;)
Alıntı yapılan: Müslim yavuz - 08 Ekim 2007, 22:19:44
sağol beyaz kuvvet güzel açıklama ama benim halen anlamadığım bişi var ?
BASLA:
IF TUS=0 THEN
IF LED=1 THEN
LOW LED
ELSE
HIGH LED
ENDIF
ENDIF
GOTO BASLA
Şimdi baştan okuyarak gelelim: tus 0 sa alt komutu çalıştırır 1 se bir alt komutu. 1 varsayalım tus 0 mı hayır 1 ledi söndür. işde kafam burada karışıyor Else komutu bu durumda dedi mi yakacak yoksa ednıf komutuna mı sıçrayacak.
Mesela asm dilinde BTFSS komutu ile IF aynı ama bu ıf de else var bu herdurumda yanı ıf her durumunda dallanma yapar mı yoksa komut sırasınca akar mı ? deli olacağım yaaa ne zor iş offf
hocam şimdi verdiğiniz kod da sunu diyor...
eğer tuş "0" ise ve led"1" ise ledi söndür,eğer tuş 1 ise ve led 1 değilse (else) (tus 0 değilse ve led 1 değilse) led yak...
bu arada devreyi oluşturuken uyuglayacağınız lojik değeride önemlidir..mesela sizin verdiğinz devreye göre devre 2 türlü çizilir.. 1.si pull up dirençleriyle 2. pull down dirençleriyle eğer1. gibi çizersenız picin buton bağlı pinine devamlı +5v gelir ve böylece sizin programa göre pic e bağlı olan led sönük durumdadır,siz ne zaman butona basarsanız devreye -5v yanı lojik 0 gelir ve led yanıp sönmeye başlar taki butondan elinizi çekene kadar...
2.sinde de pull down dirençleriyle çizdiğinizde picin buton bağlı pinine devamlı -5v yanı lojik 0 gelir ve led devamlı yanıp söner takii siz butona basıp +5v yanı lojik 1 verene kadar ve o anda led hangı konmda ise o konum led'e yansır..
devreyi kurdum ve denedim bu durum biraz farklı aslında anlatılmadan da anlanacak bişey bunun için ıf..then ile ilgili basit örnekler yapmalısınız bundan sonra değişik döngüler kurabilirsiniz benıde en çok zorlayan ıf..then olmuştu ama şimdi her programımım içinde var...hocam biraz örnek devre ve program yapıp isiste simule edersenız böylece daha iyi kavramış olurusunuz mantığı.....
micro code sutidio yuklu değilse en kısa zamnada yukleyip ete hocanın derslerden faydalanarak örnek uyuglamalar yapmaya başlayın...böylece işiniz kolaylaşır.....
eğer devre önemlı ise veya bir yerde kullancaksanız ne yapmak istediğinizi açıklayın yardımcı olım...kolay gelsin....
Beyazkuvvet sağol bir devbre yapmaya çalışlmıyorum sadece mantığı kavaramaya çalışıyorum. daha emeklemedim bile ne yürümesi... nerede bende şuan devre yapacak kapasite ...:)
Yardımlarınızdan dolayı tşk ederim ıf ile problemim kalmadı çözdüm sağolun
galiba çözememişim...
TRISA= $FF
TRISB= 0
PORTB= 0
SYMBOL TUS= PORTA.0
SYMBOL LED= PORTB.1
BASLA:
IF TUS = 1 THEN
HIGH LED
ELSE
LOW LED
ENDIF
GOTO BASLA
END
bu kod neden çalışmıyor ? bu kod şunu demiyormu ? = tuş bir ise else ile endif arasındaki low led komutunu çalıştır sonra başa dön.
tus 0 ise hıgh led komutunu çalıştır.else ile endifi arasını atla başa dön ! bu bu dedmek değilmi neden olmuyor anlamadım :(
ENDIF ELSE'nin mi yoksa IF' in mi? yoksa ortak mı kullanıyorlar :) ENDIF'ın altına bir ENDIF daha yaz ;)
Bu dediğine derleyici izin vermiyor bombacı kardeş. iki kere ENDIF yazdırmıyor. ???
ilk mesajında yazmışsın ama?
onda dikkad edersen iki IF komutu var bunda bir tane her halde ondan ?
pardon :-[
müslim kardeş bir de trisa'ya TRISB=%00000001 formatında değer ata belki olur ben basic bilmiyorum seni yavaş yavaş takip ederim ;)
Alıntı yapılan: elbombaci - 09 Ekim 2007, 13:05:52
müslim kardeş bir de trisa'ya TRISB=%00000001 formatında değer ata belki olur ben basic bilmiyorum seni yavaş yavaş takip ederim ;)
Kardeş bu yazıda çelişki var sanki yada benimkafa durdu anlamıyorum.
"trisa'ya TRISB=%00000001 formatında değer ata belki olur "
kardeş trisb yazdığına bakma bu formatı kullan bir de dedim, yabi $ şeklinde değil de % şeklinde... deneme yanılma yöntemleriyle bulacaksın hatanı ben de bilmiyorum
Hex yerine sayıyı binary ver diyon anladım... denedim olmuyor kardeş... artık bulcaz. aslında çok kolkay ufak detayları atlıyoruz. :(
BU DEVREDE ŞUNU YAPMAYA ÇALIŞTIM. TUS ADLI ETİKEN 1 OLUNCA BAŞLA ETİKETİNE DALLAN VE YÜRÜYEN IŞIKLARI ÇALIŞTIR.
aRKADAŞLAR ÇALIŞMAYAN KOD SADECE A:
IF TUS = 1 THEN BASLA
GOTO A
BASLA:
YANİ YÜRÜYEN IŞIK ÇALIŞIYOR AMA BUTONLA DALLANDIRAMIYORUM.:(
TRISB=0
TRISA=%11111111
PORTB=0
SYMBOL TUS = PORTA.0
A:
IF TUS = 1 THEN BASLA
GOTO A
BASLA:
HIGH PORTB.0
PAUSE 50
LOW PORTB.0
PAUSE 50
HIGH PORTB.1
PAUSE 50
LOW PORTB.1
PAUSE 50
HIGH PORTB.2
PAUSE 50
LOW PORTB.2
PAUSE 50
HIGH PORTB.3
PAUSE 50
LOW PORTB.3
PAUSE 50
HIGH PORTB.4
PAUSE 50
LOW PORTB.4
PAUSE 50
HIGH PORTB.5
PAUSE 50
LOW PORTB.5
PAUSE 50
HIGH PORTB.6
PAUSE 50
LOW PORTB.6
PAUSE 50
HIGH PORTB.7
PAUSE 50
LOW PORTB.7
PAUSE 50 'İLERİ SAYDI VE BİTTİ
HIGH PORTB.7 'GERİ SAYMAYA BAŞLADI
PAUSE 50
LOW PORTB.7
PAUSE 50
HIGH PORTB.6
PAUSE 50
LOW PORTB.6
PAUSE 50
HIGH PORTB.5
PAUSE 50
LOW POrTB.5
PAUSE 50
HIGH PORTB.4
PAUSE 50
LOW PORTB.4
PAUSE 50
HIGH PORTB.3
PAUSE 50
LOW PORTB.3
PAUSE 50
HIGH PORTB.2
PAUSE 50
LOW PORTB.2
PAUSE 50
HIGH PORTB.1
PAUSE 50
LOW PORTB.1
PAUSE 50
HIGH PORTB.0
PAUSE 50
LOW PORTB.0
PAUSE 50
GOTO BASLA
END
Alıntı yapılan: Müslim yavuz - 09 Ekim 2007, 12:28:22
galiba çözememişim...
TRISA= $FF
TRISB= 0
PORTB= 0
SYMBOL TUS= PORTA.0
SYMBOL LED= PORTB.1
BASLA:
IF TUS = 1 THEN
HIGH LED
ELSE
LOW LED
ENDIF
GOTO BASLA
END
bu kod neden çalışmıyor ? bu kod şunu demiyormu ? = tuş bir ise else ile endif arasındaki low led komutunu çalıştır sonra başa dön.
tus 0 ise hıgh led komutunu çalıştır.else ile endifi arasını atla başa dön ! bu bu dedmek değilmi neden olmuyor anlamadım :(
hocam burda sunu dıyor eğer buton=1 ise then'den sonrakı komuta git yanı bir alt satıra git ve ledi yak eğer buton=0 ise elseden sonrakı komutu çalıştır yanı else ile endıf arasında kı komutları çalıştır....kolay gelsin...
SYMBOL TUS = PORTA.0
A:
IF TUS = 1 THEN BASLA
GOTO A
BASLA:
HIGH PORTB.0
PAUSE 50
LOW PORTB.0
PAUSE 50
HIGH PORTB.1
PAUSE 50
LOW PORTB.1
PAUSE 50
HIGH PORTB.2
PAUSE 50
LOW PORTB.2
PAUSE 50
HIGH PORTB.3
PAUSE 50
LOW PORTB.3
PAUSE 50
HIGH PORTB.4
PAUSE 50
LOW PORTB.4
PAUSE 50
HIGH PORTB.5
PAUSE 50
LOW PORTB.5
PAUSE 50
HIGH PORTB.6
PAUSE 50
LOW PORTB.6
PAUSE 50
HIGH PORTB.7
PAUSE 50
LOW PORTB.7
PAUSE 50 'İLERİ SAYDI VE BİTTİ
HIGH PORTB.7 'GERİ SAYMAYA BAŞLADI
PAUSE 50
LOW PORTB.7
PAUSE 50
HIGH PORTB.6
PAUSE 50
LOW PORTB.6
PAUSE 50
HIGH PORTB.5
PAUSE 50
LOW POrTB.5
PAUSE 50
HIGH PORTB.4
PAUSE 50
LOW PORTB.4
PAUSE 50
HIGH PORTB.3
PAUSE 50
LOW PORTB.3
PAUSE 50
HIGH PORTB.2
PAUSE 50
LOW PORTB.2
PAUSE 50
HIGH PORTB.1
PAUSE 50
LOW PORTB.1
PAUSE 50
HIGH PORTB.0
PAUSE 50
LOW PORTB.0
PAUSE 50
GOTO BASLA
END
düzenleme böyle olacak sizdeki kod ile karşılaştırın...
kodların başına trıs değerlerini yazmasanızda olur hocam...devre çalışmakta ...bir ayrıntı daha micro code studio'da hangi pic seçili.....kolay gelsin...
16f628 seçili sağol karşılaştırıp hatyı bulup ezberlemeliyim çoksağol.
Alıntı yapılan: Müslim yavuz - 09 Ekim 2007, 18:14:14
16f628 seçili sağol karşılaştırıp hatyı bulup ezberlemeliyim çoksağol.
hocam programı hangi pic' e yazacaksan o kutucuktan o pic'i seçceksin bunu mutlaka biliyorsundur fakat eğer bu ve bu tür basit uyuglamarda 16f628'in bir özelliği var hanı bu usart vb. seri haberleşme özellikleri varya onlar normalde pic tarafından kapalıdır fakat 1 özellik hariç oda coparatör pinleridir devrenın sağlıklı çalışması için programın en basına "CMCON=7" yazarsanız bu özellik kapanmış olur ve program istediğiniz şekilde çalışır....kolay gelsin...
hmm evet porta daki o. birti ve 4. bitini aktif etmek için. kullanılan cmcon komutu o yüzden çalışmıyormuş çünki porta nın o. biti cmcon komtuolmadığından giriş algılamadı...
Çok sağol beyaz kuvvet sağol sen mod olmalısın bence bir tşk daha ekliyorum kardeş. sağol
CMCON KOMUTUNDA BİR YANLIŞLIK VAR GALİBA TANIMIYOR DERLEYİCİ
Alıntı yapılan: Müslim yavuz - 09 Ekim 2007, 22:51:42
CMCON KOMUTUNDA BİR YANLIŞLIK VAR GALİBA TANIMIYOR DERLEYİCİ
hocam bende çalışmakta nasıl bir hata veriyor... CMCON=7 mı yazdınız....
EVET
CMCON=7
SYMBOL TUS = PORTA.0
A:
IF TUS = 1 THEN BASLA
GOTO A
BASLA:
HIGH PORTB.0
PAUSE 50
LOW PORTB.0
PAUSE 50
HIGH PORTB.1
PAUSE 50
LOW PORTB.1
PAUSE 50
HIGH PORTB.2
PAUSE 50
LOW PORTB.2
PAUSE 50
HIGH PORTB.3
PAUSE 50
LOW PORTB.3
PAUSE 50
HIGH PORTB.4
PAUSE 50
LOW PORTB.4
PAUSE 50
HIGH PORTB.5
PAUSE 50
LOW PORTB.5
PAUSE 50
HIGH PORTB.6
PAUSE 50
LOW PORTB.6
PAUSE 50
HIGH PORTB.7
PAUSE 50
LOW PORTB.7
PAUSE 50 'İLERİ SAYDI VE BİTTİ
HIGH PORTB.7 'GERİ SAYMAYA BAŞLADI
PAUSE 50
LOW PORTB.7
PAUSE 50
HIGH PORTB.6
PAUSE 50
LOW PORTB.6
PAUSE 50
HIGH PORTB.5
PAUSE 50
LOW POrTB.5
PAUSE 50
HIGH PORTB.4
PAUSE 50
LOW PORTB.4
PAUSE 50
HIGH PORTB.3
PAUSE 50
LOW PORTB.3
PAUSE 50
HIGH PORTB.2
PAUSE 50
LOW PORTB.2
PAUSE 50
HIGH PORTB.1
PAUSE 50
LOW PORTB.1
PAUSE 50
HIGH PORTB.0
PAUSE 50
LOW PORTB.0
PAUSE 50
GOTO BASLA
END
böyle olduğunda sorun çıkmıyor hocam devreyi dnedim gayet iyi çalışmakta picin doğru seçildiğindne emin olun..ve kodu save as derken fazla uzun isim ile tanımlamayın..kolay gelsin...
ÇOK ÖZÜR DİLERİM... :( pıc yanlış mış... evet bede kurdum ve çalışdı...
sağol evlat...
ama bana hocam deme hak ettiğim bir lakab değil saygın için sağol. senden büyük olduğum için abi yada kardeş kelimesi kullan ayrıca hoca olan sensin farkında isen ben seden öğreniyorum. :D
estaffurullah abi kolay gelsin...takıldığın yerlerde burdan devam edelim...
Alıntı yapılan: Müslim yavuz - 09 Ekim 2007, 12:28:22
galiba çözememişim...
TRISA= $FF
TRISB= 0
PORTB= 0
SYMBOL TUS= PORTA.0
SYMBOL LED= PORTB.1
BASLA:
IF TUS = 1 THEN
HIGH LED
ELSE
LOW LED
ENDIF
GOTO BASLA
END
bu kod neden çalışmıyor ? bu kod şunu demiyormu ? = tuş bir ise else ile endif arasındaki low led komutunu çalıştır sonra başa dön.
tus 0 ise hıgh led komutunu çalıştır.else ile endifi arasını atla başa dön ! bu bu dedmek değilmi neden olmuyor anlamadım :(
selam kardeş.Kullandıgın pıc in datasheetine bak belki A portu ilk etapta giriş çıkış için değilde başka bi amaç için ayarlanmış olabilir.Basic bilmiyorum ama assemly de (pıc16f628,16f84) de A portunu kullanmak için programın başına
movlw d'7'
movwf Cmcon
bu komutları ekleyip daha sonra portun giriş çıkış durumu ayarlıyoduk.Örneğin
MOVLW B'00011001'
MOVWF TRISA
belki c ve basic gibi üst düzey dillerde bu ayarlamaya gerek kalmıyodur tam olarak bilemiyorum.
Sağolasın kardeş ama deneyerek buldum tabi forumda ki arkadaşların faydası ile... 16f628 kullanıyordum onun da a portunda bazı ayaklar dijitaal giriş çıkış değil aksi kod yazılmadığı süree. o kodu yazınca düzeldi.
o kodda "cmcon7"
normalde tüm pinler default olarak dijital i/o dur.Sadace adc ve comparator lerin olduğu pinler başlangıçta farklıdırlar.Bu pinlerde, 16f62x ler için cmcon registerine 7 yükleyerek.16f87x ler için adcon1 registerine 7 yükleyerek dijital i/o moduna geçilir.
kolay gelsin..banada og hocam öğretmişti :D