Farklı çıkışları tek değişkenle kontrol etmek ? (bit tanımlama)

Başlatan zakbay, 06 Şubat 2012, 12:02:59

zakbay

Merhaba

Hitech C de bir değişkenimiz olsun

bu değişken bitlerinide ayrı çıkışlara yönlendirmek istiyorum bunu nasıl yapabilirim?

unsigned char a;
cikis1     a.4
cikis2     a.5
cikis3     a.6
cikis4     a.0
cikis5     a.1
cikis6     a.3
cikis7     a.2
cikis8     a.7


program içinde a değişkenine yüklediğim değerin doğrudan ilgili çıkışlarda görünmesini istiyorum

aşağıda buna benzer bir konu açılmış ve çözülmüş

https://www.picproje.org/index.php/topic,25146.msg178831.html#msg178831




Tek dostum çalışmak...

JKramer


zakbay

hocam sagolun çalıştı
fakat çalışma süresi 4mhz de 181 us de tamamlanıyor bunu düşürmenin bir yolu varmı

#define cikisver(x) \
RB3 = x & 1; 		\
RB4 = (x >> 1) & 1;  \
RB5 = (x >> 2) & 1;  \
RB6 = (x >> 3) & 1;  \
RB7 = (x >> 4) & 1;  \
RA0 = (x >> 5) & 1;  \
RA1 = (x >> 6) & 1;  


a++;
cikisver(a);

Tek dostum çalışmak...

justice_for_all

#bit RA0 = 5.0
#bit RA1 = 5.1
#bit RA4 = 5.4
#bit RB2 = 6.2
#bit RB5 = 6.5
#bit RB7 = 6.7
#bit RC0 = 7.0
#bit RC5 = 7.5 

typedef struct __port
{

   int1 RA0:1;
   int1 RA1:1;
   int1 RA4:1;
   int1 RB2:1;
   int1 RB5:1;
   int1 RB7:1;
   int1 RC0:1;
   int1 RC5:1;

}_port;
typedef union _deger_ata
{
   _port pins;
   unsigned int8 _byte;
}deger_ata;

deger_ata deger1;


burda deger1 in _byte degiskenine yazdıgın veriyi cıkıslarda gormen lazım bi dene gerçı ccs ile yazdım değiştirmen gerekebilir
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

JKramer

Alıntı yapılan: zakbay - 06 Şubat 2012, 12:35:38
hocam sagolun çalıştı
fakat çalışma süresi 4mhz de 181 us de tamamlanıyor bunu düşürmenin bir yolu varmı
x yerine değişken yazdığımızda doğal olarak fazla kod üretiyor. Derleyicinin lite sürümü biraz kötü, olmazsa optimizasyon ayarlarına bir bakın isterseniz.

zakbay

@jkramer
Hocam mplab altında optimization nasıl ayarlanıyor bilmiyorum onun için deneyemedim

@justice_for_all
Hocam  kodu
typedef struct __port
{
	unsigned RB3:1;
	unsigned RB4:1;
	unsigned RB5:1;
	unsigned RB6:1;
	unsigned RB7:1;
	unsigned RA0:1;
	unsigned RA1:1;
	unsigned RA2:1;
}_port;

typedef union _deger_ata
{
   _port pins;
   unsigned char _byte;
}deger_ata;

deger_ata deger1;


bu şekilde yazıp derlediiğimde derliyor fakat main altında deger1 degişkenini değiştirmek istediğimde

type conflict
illegal conversion between types


uyarısı alıyorum
daha önce typedef hiç kullanmadım onun için mantığını bilmiyorum. Yani sorunu çözemedim. 
Tek dostum çalışmak...

JKramer

deger1._byte=0xFF

gibi atama yapabilirsiniz.

Hi-Tech kullanmadığım için ben de ayarlarını bilmiyorum.