اطلاعیه

Collapse
No announcement yet.

وقفه دریافت سریال

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

    وقفه دریافت سریال

    سلام
    من با وقفه سریال میکرو کار میکنم از کدویژن استفاده میکنم برنامش با استفاده از کدویزارد به صورت زیر شده کجا باید برنامه رو نوشت؟
    کد:
    // 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)
      {
      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;
       }
      }
    }
    
    #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_BUFFER_SIZE != 256
    if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #endif
    #asm("cli")
    --rx_counter;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif
    
    // Standard Input/Output functions
    #include <stdio.h>
    
    // Declare your global variables here
    محل قرار گرفتن برنامه پس کجاست؟؟؟؟؟!!!!!

    #2
    پاسخ : وقفه دریافت سریال

    با دروووود

    برنامه محل قرار گرفتن نداره. خود ویزارد یه ارایه به شما داده که می تونی از اون استفاده کنی به اسم rx_buffer .

    نمی خوای شلوغ باشه خودت تابع رو پاک کن و هرطور راحتی بنویس ولی فراموش نشه که با هر رخ دادن وقفه باید مقدار UDR در یک متغیر قرار بگیره!

    موفق باشید
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : وقفه دریافت سریال

      نوشته اصلی توسط سوران آراسته
      با دروووود

      برنامه محل قرار گرفتن نداره. خود ویزارد یه ارایه به شما داده که می تونی از اون استفاده کنی به اسم rx_buffer .

      نمی خوای شلوغ باشه خودت تابع رو پاک کن و هرطور راحتی بنویس ولی فراموش نشه که با هر رخ دادن وقفه باید مقدار UDR در یک متغیر قرار بگیره!

      موفق باشید
      کد:
       lcd_clear();
      lcd_puts(rx_buffer);
      delay_ms(1000);
      این کدو نوشتم جواب نمیده چرا!!!! تو حقه while

      دیدگاه


        #4
        پاسخ : وقفه دریافت سریال

        نوشته اصلی توسط masror_d
        کد:
         lcd_clear();
        lcd_puts(rx_buffer);
        delay_ms(1000);
        این کدو نوشتم جواب نمیده چرا!!!! تو حقه while

        اگه کاراکتر می فرستی تو همون قسمت وقفه و زیر rx_buffer بیا و با دستور lcd_putchar هر داده ای اومد رو نمایش بده و نتیجه رو اعلام کن.

        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : وقفه دریافت سریال

          نوشته اصلی توسط سوران آراسته

          اگه کاراکتر می فرستی تو همون قسمت وقفه و زیر rx_buffer بیا و با دستور lcd_putchar هر داده ای اومد رو نمایش بده و نتیجه رو اعلام کن.
          درست شد فقط یک مشکل اینه یک سری کارکتر اضافی هم رو lcd نشون میده
          دو سه تا کارکتر بی معنا اونا واسه چیه؟

          دیدگاه


            #6
            پاسخ : وقفه دریافت سریال

            نوشته اصلی توسط masror_d
            درست شد فقط یک مشکل اینه یک سری کارکتر اضافی هم رو lcd نشون میده
            دو سه تا کارکتر بی معنا اونا واسه چیه؟
            با دروووود

            بی معنا نیستن احتمالا کاراکترهای اینتر و \n و اینا باشن.
            یه عکس بزار تا ببینم چیه.
            چرا ناراحتی پاتریک!
            + امروز ی بچه دیدم سرچهارراه گل میفروخت
            - از دیدنش ناراحت شدی؟
            + نه
            پس چی ناراحتت کرده
            + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
            ------------------------------------------------------------------------------------------------------
            تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
            ------------------------------------------------------------------------------------------------------
            محصولات

            دیدگاه


              #7
              پاسخ : وقفه دریافت سریال



              اضافه شده در تاریخ :


              کارکتر اول درسته دو کارکتر دیگه چیه؟

              دیدگاه


                #8
                پاسخ : وقفه دریافت سریال

                خودت براش دیتا می فرستی ؟ یا دستگاه دیگه ای یه ؟

                چرا ناراحتی پاتریک!
                + امروز ی بچه دیدم سرچهارراه گل میفروخت
                - از دیدنش ناراحت شدی؟
                + نه
                پس چی ناراحتت کرده
                + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                ------------------------------------------------------------------------------------------------------
                تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                ------------------------------------------------------------------------------------------------------
                محصولات

                دیدگاه


                  #9
                  پاسخ : وقفه دریافت سریال

                  خودم از طرق رابط سریال کدویژن

                  دیدگاه


                    #10
                    پاسخ : وقفه دریافت سریال

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

                    خب شما بیا یه کاری بکن. اول برنامه یه بار اون بافر رو کلا با کاراکتر نال پر کن و بعد دوباره تست کن.
                    چرا ناراحتی پاتریک!
                    + امروز ی بچه دیدم سرچهارراه گل میفروخت
                    - از دیدنش ناراحت شدی؟
                    + نه
                    پس چی ناراحتت کرده
                    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                    ------------------------------------------------------------------------------------------------------
                    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                    ------------------------------------------------------------------------------------------------------
                    محصولات

                    دیدگاه


                      #11
                      پاسخ : وقفه دریافت سریال

                      البته با اجازه جناب اراسته.ایشون استاد ما هستن.
                      ولی منم این مشکل داشتم وقتی از خود rx_buffer استفاده میکردم یا متن پرش داشت یا کاراکتر های اضافی داشت.
                      اومدم وبا تابع strncpy مقدار بافر ورودی رو به یک متغیر دیگه دادم تا مشکل حل شد.

                      دیدگاه


                        #12
                        سلام دوستان

                        من برای ارتباط سریال میخوام از وقفه استفاده کنم.
                        یه سوال دارم؟؟؟؟
                        آیا میشه وقتی وقفه دریافت اجرا شد با دستور زیر
                        scanf ("%s" , str);
                        کد دریافتی رو خوند؟؟

                        اگه میشه این کد رو کجا بزارم؟؟

                        کدویزاد خیلی کد تولید میکنه آیا مثل وقفه های دیگه امکانش هست که در سه سطر برای وقفه سریال نوشت؟ چطوری باید این کار رو بکنم ؟؟

                        با تشکر
                        ممنون

                        کسی نیست کمک کنه!!!!!!!!!!!!!!
                        جدیدترین ویرایش توسط اشکان غفارزاده; ۱۷:۳۳ ۱۳۹۵/۰۵/۲۳.

                        دیدگاه

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