H

FOR MANTIK HATASI- YARDIM LÜTFEN

Başlatan hekoay, 10 Haziran 2013, 21:21:24

hekoay

iyi akşamlar herkese. ben rs485 ile veri aktarımı yapıyorum. fakat gelen veriyi diziye atmakta zorluk çektim. hep ilk elemana atıyor gelen verileri. yardım edebilir misiniz??
kodlar şu şekilde, sıkıntının olduğu yeri yorum ile belirttim:

#include "USBdsc.c"
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;

char dat[10];
char dizi[5];
char i,j,k;
char cnt;
//usb yolu değişkenleri tanımlanıyor
unsigned char readbuff[64] absolute 0x500;
unsigned char writebuff[64] absolute 0x540;

sbit  rs485_rxtx_pin  at RC2_bit;
sbit  rs485_rxtx_pin_direction at TRISC2_bit;

// Interrupt routine
void interrupt() {

  RS485Master_Receive(dat);
   //for (k = 0; k <= 4; k++) {
       //hocam bu kısımda gelen veriyi okuyorum.
       if ((dat[4]) && (dat[6]==160)){
          dat[4] = 0;
          j = dat[3];
          for (i = 1; i <= dat[3]; i++) {
              PORTB = dat[i-1];  //burada veriyi portb ye gönderiyor ve aynı zamanda da dizi değişkenine almak istiyorum.
              dizi[i-1]=dat[i-1]; //fakat lcd ile yazdırdığımda dizinin sadece ilk elemanı olarak görüyor.
              Lcd_Init();          //yani hep değeri dizinin ilk elemanına atıyor.
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_Out(1,1,dizi);
          }


       }
    //}

    USB_Interrupt_Proc();

}



void main(){

  ADCON1=0xFF;
  CMCON=7;
  //Lcd_Init();
  //Lcd_Cmd(_LCD_CURSOR_OFF);

  UART1_Init(9600);
  Delay_ms(100);
  TRISB=0;
  PORTB=0;
  TRISD=0;
  RS485Master_Init();
  HID_Enable(&readbuff,&writebuff);
  RCIE_bit = 1;
  TXIE_bit = 0;
  PEIE_bit = 1;
  GIE_bit = 1;

  while (1){

  dat[0] = 0xBB; //komut
  dat[1] = 0x02; //devre no
  dat[2] = 0x01; //sensör no
  dat[4] = 0;
  dat[5] = 0;
  dat[6] = 0;

  RS485Master_Send(dat,3,160);
  delay_ms(1000); //burası da 500 idi

  //Lcd_Out(1,1,dizi);
  for(cnt=0;cnt<64;cnt++)
  writebuff[cnt]=dizi[cnt];
  while(!HID_Write(&writebuff,64));



  }

}

Powered by EzPortal