Merhaba
B portunu yukarıdan aşağı doğru binary olarak okumam lazım.Sonra duruma göre misal 10110 ise a0 1 olsun,Birde a portunun durumunu konum değiştirdikçe kaydetmem lazım.Bunu hangi kodlarla yapabilirim?Basit bir dtmf devresi yapmaya çalışıyorum.İf komutu içine b0=1 ve b1=0 ve b2=1 ve b3=1 ve b4=0 bu şekilde yapabilirim diye düşündüm ama B portunu binary olarak okursam direk 10110 olarak şartlandırırsam daha iyi olur diye düşündüm.Pic olarak 16F628A kullanıcam.Cevap yazan herkese şimdiden çok teşekkür ederim.
İlgili portun giriş registerini okursanız byte olarak bütün bir değer elinizde olur.
CCS C'nin kılavuzu (https://www.ccsinfo.com/downloads/ccs_c_manual.pdf)'nu okudunuz mu? input_x() fonksiyonuna bakın.
O kumutla portu oduk.Sonra if şartının içine bu binary sayıyı nasıl yazıcam?
"0b10110"
Örnek:
if (input_B() == 0b01000110)
{
....
...
}
A portunun pinlerinin son durumlarını nasıl kaydederim?
Portu okuduktan sonra,
karşılaştırmadan önce,
okuduğun port değerinin istemediğin bitlerini
"&" yani "AND" işlemi ile sıfırlarsan dahada güzel olur.
if ( (input_a() & 0b00011111) ) == 0b00010110){.......}
B portunu input yazarak tamamen giriş haline getiriyorsunuz.
Bazıları giriş bazıları çıkış ise bu komut tam anlamıyla çalışmaz.
*(0×0a) &0×ff
şeklinde bir ifade yazarsanız 0xff değerini hangi portları okuyacaksınız ona göre değerlendirmek kaydıyla istenilen pinleri tris değerine dokunmadan yapabilirsiniz.
input_state
https://www.ccsinfo.com/forum/viewtopic.php?t=46396 (https://www.ccsinfo.com/forum/viewtopic.php?t=46396)
Burada bir örnek var.
Bende dün " input_state(PIN_X); " komutunu arıyordum,
sanki portu okuyan versiyonuda vardı gibi hatırlamıştım ama yanılmışım sanırım,
input_state sadece bir pini okuyabildiğinden her zaman işe yarayamayabiliyor.
Yine verdiğin linkteki şu örnek ile porttun o anki giriş çıkış ayarını değiştirmeden port değeri okunabiliyor:
#use FAST_IO(B)
i = input_b();
#use STANDARD_IO
Veya şöyle bir yöntemde kullanılabilir:
#byte reg_PortA = GETENV("SFR:PORTA")
veya 18F veya üstü kullanıyorsa:
#byte reg_LatA = GETENV("SFR:LATA")
Diye tanımlayıp, programın içinde:
if ( (reg_PortA & 0b00011111) ) == 0b00010110)
{
.......
}
18F ve üstü için:
if ( (reg_LatA & 0b00011111) ) == 0b00010110)
{
.......
}
merahaba arkadaşlar ben mmc_spi.c dosyasını silmişimde biriniz mmc_spi.c dosyanın ccs c kodunu atabilir mi lütfen
Alıntı yapılan: 30f4011 - 31 Mart 2017, 20:11:20
merahaba arkadaşlar ben mmc_spi.c dosyasını silmişimde biriniz mmc_spi.c dosyanın ccs c kodunu atabilir mi lütfen
https://yadi.sk/d/mg8dvGyl3GXrm3