Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

ana programa giriş eklemek

Başlatan DİRİLİŞ_MAK, 21 Mart 2014, 23:25:52

DİRİLİŞ_MAK

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?

z

#1
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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

sadogan

#2
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;
}
}


baran123

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

DİRİLİŞ_MAK

#4
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?