Arkadaşlar PIC C ve 16F877 kullanarak yaptığım bir programda PIC'in b ve d portlarına sensörler bağlı. Ben void main içine
void main()
{
set_tris_a(0x00); //A portunun tüm pinleri çıkış olarak ayarlanıyor.
set_tris_b(0xff); //B portunun tüm pinleri giriş olarak ayarlanıyor.
set_tris_c(0x00); //C portunun tüm pinleri çıkış olarak ayarlanıyor.
set_tris_d(0xff); //D portunun tüm pinleri giriş olarak ayarlanıyor.
set_tris_e(0x00); //E portunun tüm pinleri çıkış olarak ayarlanıyor.
while(1)
{
switch(port_b)
{
case 0b00000001: dongu1(); break;
case 0b10000000: dongu2(); break;
case 0b00000011: dongu3(); break;
}
}
şeklinde kod yazıyorum herhangi bir hata çıkmıyor. Fakat d portundaki sensörlerden gelen bilgiyi değerlendirmek istediğimde case 0d11000000: git(); break; gibi bir ifade yazdığımda program kabul etmiyor(yeşil olmuyor). Bu port d bilgisini nereye yazmalıyım ki kabul edilsin?
Saka gibisin. 0b1110000 gibi bir ifadede b harfi binary anlamina gelir. B portu demek değil.
sen od111000 yazdiginda da D portu demek istemiyorsun.
switch(port_b) gibi switch(port_d) yazabilirsin.
Evet evet kafa gectin itiraf et.
Alıntı yapılan: DİRİLİŞ_MAK - 21 Mart 2014, 23:25:52
Arkadaşlar PIC C ve 16F877 kullanarak yaptığım bir programda PIC'in b ve d portlarına sensörler bağlı. Ben void main içine
void main()
{
set_tris_a(0x00); //A portunun tüm pinleri çıkış olarak ayarlanıyor.
set_tris_b(0xff); //B portunun tüm pinleri giriş olarak ayarlanıyor.
set_tris_c(0x00); //C portunun tüm pinleri çıkış olarak ayarlanıyor.
set_tris_d(0xff); //D portunun tüm pinleri giriş olarak ayarlanıyor.
set_tris_e(0x00); //E portunun tüm pinleri çıkış olarak ayarlanıyor.
while(1)
{
switch(port_b)
{
case 0b00000001: dongu1(); break;
case 0b10000000: dongu2(); break;
case 0b00000011: dongu3(); break;
}
}
şeklinde kod yazıyorum herhangi bir hata çıkmıyor. Fakat d portundaki sensörlerden gelen bilgiyi değerlendirmek istediğimde case 0d11000000: git(); break; gibi bir ifade yazdığımda program kabul etmiyor(yeşil olmuyor). Bu port d bilgisini nereye yazmalıyım ki kabul edilsin?
0b00000001 burdaki "b" binary sayı demek 0d00000001 gibi yazılım sekli yanlış.
switch(port_b) dediğiniz zamanda derleyici port b nin register adresini alır ve progranımız beklediğiniz şekide yanıt vermez.
switch(input_b())
switch(input_d()) gibi olmalı.
veya hangi portaki veri ile işlem yapacaksanız örnekteki gibi daha anaşılır olur.
main()
{
unsigned int8 veri;
set_tris_a(0x00); //A portunun tüm pinleri çıkış olarak ayarlanıyor.
set_tris_b(0xff); //B portunun tüm pinleri giriş olarak ayarlanıyor.
set_tris_c(0x00); //C portunun tüm pinleri çıkış olarak ayarlanıyor.
set_tris_d(0xff); //D portunun tüm pinleri giriş olarak ayarlanıyor.
set_tris_e(0x00); //E portunun tüm pinleri çıkış olarak ayarlanıyor.
while(1)
{
veri=input_d();
switch(veri)
{
case 0b00000001: dongu1(); break;
case 0b10000000: dongu2(); break;
case 0b00000011: dongu3(); break;
}
}
Arkdaslar dogru demıs sen oyle bır sey yazamassın binary sayı yazılırken once "0b" eklenır sonra 0100 vs yazılır tavsiyem binary-hex dönüşümlerini öğren alsana bir kaç not vereyim.
Örneğin 0b000110
en soldaki 0b yi sil. Sağdan itibarem 4 bit 4 bit ayırılır.
00 0110
0110 6 demek.
00 ise 0000 yani 0
yan yana yaz 06 yani 0x06
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 E
1110 E
1111 F
mesela 0b01011011
0101 1011
5 B
0x5B
http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html (http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html)
Aynı while döngüsü içine birden fazla port tanımlama yapabilir miyim? Ya da nasıl yaparım? Mesela;
while(1)
{
switch(input_d())
{
case 0b10000000: kisa1(); berak;
case 0b00011100: kisa2(); break;
switch(input_b())
{
case 0b00000001: dongu1(); break;
case 0b10000000: dongu2(); break;
case 0b00000011: dongu3(); break;
}
}
}
şeklinde bir tanımlama yaptığımda kodlar çalışmıyor.
Ben PIC'ın b ve d portundan toplam 9 sensörden gelen verileri sensörlerle okuyup ilgili alt programa yönlendirmek istiyorum. while'ın içine b portu yazdım ama d portu eklesemde çalışmıyor. Doğru ekleme nasıl olacak acaba?