اطلاعیه

Collapse
No announcement yet.

ارتباط میکرو و کامپیوتر به صورت سریال RS485

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

    #31
    پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485

    سلام
    من فهمیدم که سخت افزارم مشکل نداره و همه چی درسته فقط مشکل از وقفه دریافت USART هست.
    کسی میتونه یکم توضیح بده؟ وقتی با codewizard وقفه دریافت رو تنظیم میکنیم یک سری کد بهمون میده.
    من میخوام وقتی وقفه میاد یک رشته دریافت کنم و با استفاده از اون رشته یه سری کارا انجام بدم. و همه این کارا هم توی همون وقفه انجام بشه و توی برنامه اصلی یه کار دیگه انجام میشه..

    سوال اول:
    برای جی متغیرهارو انجوری تعریف کرده؟
    #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]

    سوال دوم:
    راجع به این قسمت یکم توضیح بدین و اینکه data رو کجا باید بخونم؟
    و اینکه آکولادی که برای تابع وقفه باز شده چرا بسته نشده؟!

    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
    {
    rx_buffer[rx_wr_index++]=data;
    #if RX_BUFFER_SIZE == 256
    // special case for receiver buffer size=256
    if (++rx_counter == 0)
    {
    #else
    if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
    if (++rx_counter == RX_BUFFER_SIZE)
    {
    rx_counter=0;
    #endif
    rx_buffer_overflow=1;
    }
    }
    }

    سوال سوم:
    تابع gerchar کجا کاربرد داره؟ و آیا توی تابع وقفه هست یا نه؟!

    دیدگاه

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