Merhabalar ;
Spi Haberleşmesinden 16 bitlik veri geliyor ve bende 16 adet roleyi
Gelen veriye göre açıp kapatacağım bu işi en kolay yönden çözmeye çalişiyorum fakat yapamadım
örnegin
if(gelendata=15645)
(
"aktif olacak roleler"
)
bu şekilde yapmaya kalksam binlerce if yazmam gerekecek
yani 16 bit sayinin karşiliğini 16 roleden görmek ve çikiş almak istiyorum
SpigelenVeri =0B101101011110011
rolelerçikiş = 101101011110011 çikişida bu şekilde aktif olacak
anlatmak istediğimi umarım anlatabilmişimdir
Neden binlerce if yazmanız gereksin ki? 16 tane bit var, tek tek bakın; 0'sa kapatın ilgili röleyi, 1'se açın.
unsigned int16 gelen_data=0;
unsigned int8 role_port1=0, role_port2=0;
gelen_data=spi_data_oku();
role_port1=make8(gelen_data,0);
role_port2=make8(gelen_data,1);
output_b (role_port1);
output_d (role_port2);
Farklı bir yöntem:
#use fast_io(x)
#define DATA pin_x0
#define CLOCK pin_x1
#define LATCH pin_x2
unsigned int8 i=0;
Void HC595_gonder(unsigned int16 veri=0)
{
for(i=0;i<16;i++)
{
if(bit_test(veri,i))
output_high(DATA);
else
output_low(DATA);
output_high(CLOCK);
output_low(CLOCK);
}
output_high(LATCH);
output_low(LATCH);
}
Void main()
{
set_tris_x(0bxxxxx000);
for(;;)
{
Role_cikis(gelen_veri);
}
}
// x: İlgili port
**74hc595 sıcaklık ve kaydırma frekansına bağlı olarak 25MHz'den sonra High-Low arasında algı süresi kadar gecikme koymak gerekebilir.
Teşekkür ederim sayenizde konuyu çözdüm :) ::ok