اطلاعیه

Collapse
No announcement yet.

کتابخانهآ‌ای برای ارتباط AVR با GSM

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

    #16
    پاسخ : کتابخانهآ‌ای برای ارتباط AVR با GSM

    نوشته اصلی توسط lostlord
    ممنون از پاسختون.
    ولی من از وقفه دریافت و ارسال سریال همراه با 256 بایت بافر استفاده کردم. (توی تنظیمات کدویزارد هست)
    کد:
    // USART0 Receiver buffer
    #define RX_BUFFER_SIZE0 128
    char rx_buffer0[RX_BUFFER_SIZE0];
    
    #if RX_BUFFER_SIZE0 <= 256
    unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;
    #else
    unsigned int rx_wr_index0,rx_rd_index0,rx_counter0;
    #endif
    
    // This flag is set on USART0 Receiver buffer overflow
    bit rx_buffer_overflow0;
    
    // USART0 Receiver interrupt service routine
    interrupt [USART0_RXC] void usart0_rx_isr(void)
    {
    char status,data;
    status=UCSR0A;
    data=UDR0;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
      {
      rx_buffer0[rx_wr_index0++]=data;
    #if RX_BUFFER_SIZE0 == 256
      // special case for receiver buffer size=256
      if (++rx_counter0 == 0) rx_buffer_overflow0=1;
    #else
      if (rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
      if (++rx_counter0 == RX_BUFFER_SIZE0)
       {
       rx_counter0=0;
       rx_buffer_overflow0=1;
       }
    #endif
      }
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART0 Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter0==0);
    data=rx_buffer0[rx_rd_index0++];
    #if RX_BUFFER_SIZE0 != 256
    if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
    #endif
    #asm("cli")
    --rx_counter0;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif
    کتابخونه uart رو میشه توی کدویژن بدون تغییر توی اون استفاده کرد؟
    ممنون از توجهتون
    تابع دریافتی که کتابخونه GSM نیاز داره باید زمانی که هیچ بایتی در بافر موجود نباشه 1- رو برگردونه و این اتفاق در تابع getchar که ارائه دادید نمیآ‌افته. احتمالا این تابع در زمان خالی بودن بافر برنامه رو بلاک میکنه:

    کد PHP:
    ...
    char getchar(void)
    {
    char data;
    while (
    rx_counter0==0);
    data=rx_buffer0[rx_rd_index0++];
    ... 



    پس نوع خروجی این تابع رو به int تغییر بدید و کاری کنید تا در زمان خالی بودن بافر عدد 1- رو برگردونه.
    چگونه هوشمندانه بپرسیم

    دیدگاه


      #17
      پاسخ : کتابخانهآ‌ای برای ارتباط AVR با GSM

      با سلام و تشکر از آقای رستمی کسی میتونه این کتابخونه را برای کدویژن تبدیل کنه ممنون

      دیدگاه


        #18
        پاسخ : کتابخانهآ‌ای برای ارتباط AVR با GSM

        جناب رستمی میشه بفرمایید کامپایلر این کتابخونه چیه؟؟

        دیدگاه

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