Haberler:

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

Ana Menü

dmx512 sorun ne?

Başlatan 3adam, 07 Ekim 2011, 22:37:08

3adam

hitech c de yazmaya çalıştığım kodu çalıştıramadım. Bi fikri olan varmı acaba

#include <htc.h>
#include <pic.h>
#define rout RD0
#define gout RD1
#define bout RD2
#define wout RD3
#define kanal 4
#define dmxbreak 1
#define dmxidle 0
__CONFIG ( HS&WDTDIS&BORDIS&LVPDIS); //konfigrasyon ayarları yapıldı

unsigned char rdt,gdt,bdt,wdt;
unsigned char dmxstate = dmxidle;
unsigned int dmx_data_counter = 0;
unsigned char dmxbuffer [kanal] = {0,0,0,0};
unsigned int dmxadres=1;

static void interrupt
kesme (void)
{      unsigned int sayici;
      unsigned char rxtemp;
      if(TMR0IF)
      {   
                       
                         rdt=dmxbuffer [0];
                         gdt=dmxbuffer [1];
                         bdt=dmxbuffer [2];
                         wdt=dmxbuffer [3];
         if (sayici==255 )
         {
            rout=gout=bout=wout=1;
            sayici=0;
         }

         if (sayici>=rdt )
            {rout=0;}
         if (sayici>=gdt)
            {gout=0;}
         if (sayici>=bdt)
            {bout=0;}
         if (sayici>=wdt)
            {wout=0;}
         
         sayici = sayici+1;         
      TMR0=217;
      TMR0IF=0;
      RB3=0;         
      }
   
   if (RCIF==1)
   {
      RB3=1;
                RCIF=0;
      if (OERR==1)
      {
         OERR=0;
         SPEN=0;
         dmxstate = dmxidle;
         SPEN=1;   
      }
      else if (FERR==1)
      {
         SPEN=0;
         dmx_data_counter=0;
         dmxstate=dmxbreak;
         SPEN=1;   
      }
   
      else if (dmxstate==dmxbreak)
      {
         rxtemp=RCREG;
         if (dmx_data_counter>=dmxadres)
         {
            dmxbuffer [dmx_data_counter-dmxadres]=rxtemp;
         }
         if (dmx_data_counter==(dmxadres+(kanal-1)))
         {
         dmxstate=dmxidle;
         }
         dmx_data_counter++;         
      }
   }
      
}//void

void pic_hazirla (void)
{
//**************** mcu giriş çıkış ayarları***************
      
      ADCON1=0X07;   //ANALOG GIRISLER DIJITAL YAPILDI
      TRISA=0X0F;      //PORTA ILK DORT PORTU GIRIS YAPILDI
      TRISB=0x00;    //PORTB PORTLARI ÇIKIŞ YAPILDI
      TRISC=0b10000000;      //PORTC PORTLARI ÇIKIŞ YAPILDI
      TRISD=0X00;      //PORTD PORTLARI ÇIKIŞ YAPILDI
      PORTB=0x00;      //PORTB PORTLARI SIFIRLANDI
      //PORTC=0x00;      //PORTC PORTLARI SIFIRLADI
      PORTD=0X00;      //PORTD PORTLARI SIFIRLANDI
      TMR0=0;
      T0CS=0; //    harici sinyal kaynağı
      T0SE=0; // timer0 dğşen kenar kesme
      PSA=0;   //frekans bölücü seçimi 0=timer0 1=wdt
      PS2=0;   //
      PS1=0;  //  1:2 BÖLÜCÜ ORANI SEÇİLİ
      PS0=0;   //
      T0IF=0;
      T0IE=1;      //TIMER0 KESMESİ AKTİF EDİLDİ
      GIE=1;
      
      SPBRG=0X04;
      BRGH=1;
      
      SYNC=0;
      PIE1=0;
      RCIE=1;
      RX9=0;
   
      

      CREN=1;
      SPEN=1;
      PEIE=1;
//********************************************************
      return;
}
void main(void) // Ana fonksiyon alanı
{   
   pic_hazirla ();
   for(;;)
   {
                 
         
   }
}