Rotary Encoder Puls okuma ve RS232 ile haberleşme

Başlatan ibrahim___, 05 Eylül 2013, 19:07:41

ibrahim___

// En sağlıklı Encoder Pulse'nı okumak için bir hayli yol denedim.En sonunda aşağıdaki kodlarda karar kıldım.
// Umarım bu kodlar ilgilenen arkadaşların işine yarar.Ayrıca RS232 ile C# arasındaki (anlık) bağlantıyı da isteyen
// arkadaşlarla paylaşabilirim.İyi çalışmalar.


// Rotary Encoder Pulse Sayimi (Rotary 360 Pulslık)
// Rb4-7 kesmesi
// RS232 Bigisayar Haberleşmesi


unsigned short eski_portbrb7,eski_portbrb6;

int sayac,e_sayac;

char txt[8];

unsigned short i;



void interrupt()
{

    if (INTCON.RBIF)
    {

        if (PORTB.RB7!=eski_portbrb7)
        {
            if (PORTB.RB6==eski_portbrb7)
            {
                sayac--; if (sayac< 0)sayac+=360;
            }
            else
            {
                sayac++; if (sayac>360)sayac-=360;
            }

            eski_portbrb7=PORTB.RB7;
            eski_portbrb6=PORTB.RB6;
           
        }

        INTCON.RBIF = 0;    //RB4-7 KESMESİ İÇİN BAĞRAĞI SIFIRLA
    }

}


void kurulum()
{
    TRISD=0b00000000;
    PORTD=0;

    TRISB=0b11000000;  //PORT B RB4-7 İÇİN (SADECE 6-7)
    PORTB=0;

    INTCON.GIE=1;     //TUM KESMELER AKTİF
    INTCON.RBIE=1;    //RB4-7 KESMESİ AKTİF

    sayac=0;
    e_sayac=0;

    UART1_Init(115200); //BAUD
   
    Delay_ms(250);

}


void main()
{

     kurulum();
     
     UART1_Write_Text("...");

    do{
                  if (UART1_Data_Ready())//RS232 DEN BILGI GELDI ISE
                  {
                          i = UART1_Read();
                          if(i==65) PORTD.RD1=1; //RS232 den 'A' geldi ise
                          if(i==66) PORTD.RD1=0; //RS232 den 'B' geldi ise
                  }

                  if(sayac==1)
                  PORTD.RD0=1;
                  else
                  PORTD.RD0=0;


                  if(e_sayac!=sayac)
                  {
                    IntToStr(sayac,txt);
                    UART1_Write_Text(txt); //RS232 ILE GONDER
                    e_sayac=sayac;
                  }
       
      }while(1);
     

}