اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه پورت سریال

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در برنامه پورت سریال

    سلام.
    من یک برنامه برای ارتباط دو میکرو به صورت سریال نوشتم اما نمی دونم چرا تو محیط پروتئوس جواب نمی ده.فعلا به طور نمونه فقط یک اسم را فرستادم.متن برنامه رو یه نگاه بندازید اگه کم و کاستی داشت بگید.البته مشکل در گیرنده می باشد.
    چیزی که معلومه اینه که مشکل برنامه این است که وارد حلقه if نمی شود.یعنی متغیر receive_complete یک نمی شه.
    ضمنا با توجه به اینکه از کاراکتر ‘\r’ در انتهای ارسال استفاده کردم.ایا دستور if(data==’\r&rsquo که تو وقفه دریافت ازش استفاده کردم درسته؟

    این برنامه فرستنده:

    char esm[10]="ali";
    while (1)
    {
    // Place your code here
    delay_ms(100);
    sprintf(str,"#%s\r",esm);
    puts(str);
    delay_ms(100);

    };
    } //end of main



    اینم برنامه گیرنده:

    #include <mega16.h>

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0x18 ;PORTB
    #endasm
    #include <lcd.h>

    #define RXB8 1
    #define TXB8 0
    #define UPE 2
    #define OVR 3
    #define FE 4
    #define UDRE 5
    #define RXC 7

    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<UPE)
    #define DATA_OVERRUN (1<<OVR)
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)

    // USART Receiver buffer
    #define RX_BUFFER_SIZE 16
    char rx_buffer[RX_BUFFER_SIZE];

    #if RX_BUFFER_SIZE<256
    unsigned char rx_wr_index,rx_rd_index,rx_counter;
    #else
    unsigned int rx_wr_index,rx_rd_index,rx_counter;
    #endif

    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;
    bit receive_complete =0;

    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
    {
    if(data=='#&#039
    {
    rx_buffer[0]=data;
    rx_wr_index=1;
    }
    else if(rx_wr_index>=1 && data!='\r&#039
    {
    rx_buffer[rx_wr_index]=data;
    rx_wr_index++;
    }
    else if(data=='\r&#039
    {
    receive_complete=1;
    }
    else
    {
    rx_wr_index=0;
    }

    if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
    if (++rx_counter == RX_BUFFER_SIZE)
    {
    rx_counter=0;
    rx_buffer_overflow=1;
    };
    }; /* END OF INTERRUPT */
    }

    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter==0);
    data=rx_buffer[rx_rd_index];
    if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #asm("cli&quot
    --rx_counter;
    #asm("sei&quot
    return data;
    }
    #pragma used-
    #endif

    // Standard Input/Output functions
    #include <stdio.h>

    // Declare your global variables here
    void main(void)
    {
    // Declare your local variables here

    char str[30];
    .
    .
    .
    .
    .
    .
    while (1)
    {
    // Place your code here
    if(receive_complete(
    {
    lcd_clear();
    lcd_gotoxy(0,0);
    sprintf(str,"%s",rx_buffer);
    lcd_puts(str);
    receive_complete=0;
    }


    };
    } // end of main.

    کد ها را تو notepad ببینید.

    #2
    پاسخ : مشکل در برنامه پورت سریال

    سلام دوست عزیز
    شما این برنامه رو اول در Terminal کامپایلر چک کنید ببینید درست کاراکتری که میخواید رو ارسال می کنه ؟
    برای این کار هم از یه برنامه ی دو سه خطی استفاده کنید تا از صحت اتصالات و محیط نرم افزاری مطمئن بشید و بعد برید سراغ ادامه ی کار .
    راستی برای نشون دادن کاراکتر ارسالیتون هم می تونید از LCD کاراکتری استفاده استفاده کنید .
    شما الان از چه نمایشگری توی محیط پروتئوس استفاده کردید؟
    دوستان! مدتی کمتر به سایت میام ..

    دیدگاه


      #3
      پاسخ : مشکل در برنامه پورت سریال

      سلام.
      ممنون. گفتم که فرستنده مشکلی نداره.تو پروتئوس با virtual terminak امتحان کردم.
      تو گیرنده هم lcd گذاشتم.
      مشکل از اینه که کاراکتر '\r' را دریافت نمی کنه تا متغیر بیتی recieve complete یک بشه.
      اما نمی دونم چرا این مشکل را داره؟
      اگه ممکنه کمک کنید.

      دیدگاه


        #4
        پاسخ : مشکل در برنامه پورت سریال

        سلام دوستان.
        یعنی کسی نمی دونه که مشکل این برنامه چیه؟
        اگه ممکنه کمک کنید.

        دیدگاه


          #5
          پاسخ : مشکل در برنامه پورت سریال

          سلام.
          آقا من این برنامه را برای پورت سریال نوشتم اما جواب نمی ده.
          لطفا فایلو دانلود کنید و یه نگاه به سورس گیرنده بندازید ببینید مشکلی داره یا نه؟
          فایل پروتئوس هم هست.ممنونم

          http://rapidshare.com/files/132356425/serial.rar.html

          دیدگاه

          لطفا صبر کنید...
          X