değişkenler ile başım belada

Başlatan bulut_01, 18 Aralık 2012, 17:38:21

bulut_01

iyi aksamlar arkadaslar belkı sorunum çok basit olacak ama uzun zamandır kod yazmaya yazmaya unutmusum 3 tane değişkenim var kısacası sensorüm var asagıdakı kodda girişim 001 oldugunda case 0b00000001 dallanması ıstıyorum ama olmuyor int kesmesini kullanıyorum nerede yanlısım var yardımlarınızı bekliyorum.
özetlersem yapmak istediğim. Giriş (001) oldugunda a2 port hıgh olsun giriş (010) oldugunda a3 hıgh olsun giriş (100) oldugunda a4 hıgh olsun tek değişken kullanarak yapmak istiyorum.

int8 hall=0b00000000;

#int_RB
void RB_kesme()
{
hall=input(pin_a0);
hall=input(pin_a1);
hall=input(pin_b2);

switch (hall)
{
case 0b00000001:
output_high(pin_a2);
break;

case 0b00000010:
output_high(pin_a3); 
break;

case 0b00000100:
output_high(pin_a4);
break;
default:
}
}
YENİLMEZ..

xoom

hall=input(pin_a0);
hall=input(pin_a1);
hall=input(pin_b2);

hall değişkeninin son durumu  burda her zaman b2'nin durumudur.. devre şemanı bilmiyorum ama bir portta dipswitch gibi birşey kullanıyorsan şu şekilde yapmalısın..
hall=output_b(); // Benzer bir kod ile yapmalısın..

bulut_01

benim sormak istediğim olay 3 girişim var hall sensor gelen ben 3 girişi tek değişkene aktarıp orda case satırındakı komutu çalıştırmak istiyorum. 3 farklı değişken girişi tek int8 değişkenine nasıl aktarırım onu yapamadım
YENİLMEZ..

xoom

hall = input_a() & 0b00000011;

a0 ve a1 pinleri dışındakileri maskelemiş olursun..

bulut_01

Alıntı yapılan: xoom - 18 Aralık 2012, 19:03:50
hall = input_a() & 0b00000011;

a0 ve a1 pinleri dışındakileri maskelemiş olursun..
xoom  eyw saolasın ben rb kesmesının ıcınde tek a port değil b portunda b3 okuyorum senın dediğin gibi a ve b port aynı anda okuma yapmıyor son yazdıgım b port işlem yapıyor son yazılı oldugun ıcın ben a ve b port okuyup asagıdakı kodu nasıl calıstırırım yada baska yöntemı var mı böyle birseyin ?

int8 hall;

#int_RB
void RB_kesme()
{
hall = input_a() & 0b00000011;

hall = input_b() & 0b00001000;


switch (hall)
{
case 0b00000001:
output_high(pin_a2);
break;

case 0b00000010:
output_high(pin_a3); 
break;

case 0b00001000:
output_high(pin_a4);
break;
default:
}
}
YENİLMEZ..

justice_for_all

hall=0;
hall = input_a() & 0b00000011;

hall |= input_b() & 0b00001000;


bu sekilde yapmazsan  input_a daki aldigin degerleri kaybetmis olursun.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bulut_01

eyw topragım calısdı dedıgın gıbı yapdım
hall |= input_b() & 0b00001000; bu satırdaki hall sonra gelen  ( | ) simgenin burdaki işlevi nedir burda bu simge ne işe yarar ?
YENİLMEZ..

justice_for_all

gorevi veya islemidir.

a=a | b; veya a|=b bu ikisi ayni isi yapar.

yazdigin kodda veya islemi yapmazsan ilk aldigin degeri kaybedersin.Bu yuzden daha onceki degerin ile yeni degerini veya islemine sokuyoruz.Sonucta iki degerinde korunmus olur.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay