picin portundaki değişimleri saydırabılmek

Başlatan hkalaycioglu, 31 Mayıs 2006, 22:39:24

hkalaycioglu

16f84 ün herhangı bir portundaki lojik 1 leri sayan bir picbasic programına ihtiyacım var yazmaya uğrastım ama if then else 'leri tam dogru olarak kullanamadım sanırım örneğin portb.7 nci bitinde 3 kez lojik 1 oldugunda portb nin sıfırıncı biti lojik 1 olacak bunun mantığını çözemedım programcılıgım o kadar ıyı degıl yardımlarınız için şimdiden teşekkürler

Klein

basitçe şöyle bir kod işine yarayabilir. Tabi bu en basit haliyle genel mantığı göstermek adına verilmiş bir kod. bunu optimize ederek daha verimli bir hale getirebilirsin. araya sıçrama engellemek için debounce kodları ekleyerek de daha güvenli hale getirebilirsin. Kolay gelsin.

if ( !port) flag=1;

if (port && flag) {
counter++;
flag=0;
}

if(counter==3){
  outport=0;
  counter=0;
}

Ziya

Alıntı yapılan: "hkalaycioglu"... örneğin portb.7 nci bitinde 3 kez lojik 1 oldugunda portb nin sıfırıncı biti lojik 1 olacak ...
Bu kadar bilgi yeterli değil. Biraz daha açmanız gerek. Örneğin sıfırıncı bit dışarıdan mı 1 yapılacak, siz yazılımla mı 1 yapacaksınız? Aynı portun logic 1 lerini sayacaksınız ama hangi pinleri giriş, hangileri çıkış? Herhangi bir portu demişsin, bunu kim belirleyecek?...
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

hkalaycioglu

LOJİK 1 VEYA 0 LAR DIŞARIDAN BAŞKA BİR DEVRE VASITASIYLA VERİLECEK PİC İN İÇİNDE PROGRAMA BİR SAYI VERECEGIZ ORNEGIN 3 PORTA NIN 0 NCI BİTİNDE 3 KEZ LOJİK DEĞİŞİM OLDUĞUNDA LOJİK 1 OLDUGUNDA PORTBNİN 0 NCI BİTİ LOJİK 1 OLACAK SIMDILIK BU KADARINA YARDIMCI OLURSANIZ SEVINIRIM ILGINIZE TESEKKURLER

teketek

Porta'nın 0'ıncı bitini normalde 0 sıfır kabul ederek bu pinin 3 kere lojik 1 olması durumunda (senin deyiminle lojik değişim) portb'nin 0'ı lojik 1 olması istenen program için şöyle bişey önerebilirim.en basit haliyle;
test:
if porta.0=1 then
   sayac=sayac+1
   endif
if sayac=3 then
   portb.0=1
   endif
goto test
Bilgi fark yaratır..

Klein

Alıntı yapılan: "teketek"Porta'nın 0'ıncı bitini normalde 0 sıfır kabul ederek bu pinin 3 kere lojik 1 olması durumunda (senin deyiminle lojik değişim) portb'nin 0'ı lojik 1 olması istenen program için şöyle bişey önerebilirim.en basit haliyle;
test:
if porta.0=1 then
   sayac=sayac+1
   endif
if sayac=3 then
   portb.0=1
   endif
goto test

porta.0 1 olduğu sürece sayaç saymaya devam edecektir.  portun 1 olmasıyla sayıcının 3 olması göz açıp kapama süresinden bile kısa olacaktır. koduna bir de port okundu bayrağı eklersen sanırım iş görür

raltundal

test:
  while
if porta.0=1 then
  sayac=sayac+1
  wend
  endif
if sayac=3 then
  portb.0=1
  endif
goto test