اطلاعیه

Collapse
No announcement yet.

دستور دریافت دیتا سریال (کمک)

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

    دستور دریافت دیتا سریال (کمک)

    یک برنامه نوشتم که دیتا رو سریال ارسال میکنه به کامپیوتر حالا میخوام وقتی که یک رشته رو ارسال کردم AVR دیتا رو بفرسته
    مثلا وقتی کلمه SAD رو زدم AVR شروع به ارسال دیتا بکنه
    الان این برنامه ای که من نوشتم وقتی فقط یک حرف رو مثلا S رو میزنم AVR دیتا رو میفرسته

    char input;s
    char data[]="!LPA1,2,8,D,5.00,10.00,15.00,25.00,40.00,50 .00,60.00,100.00,63,9,2,0,0,0,0,0,1.50,12/31/06,1706,AA,MSH,,,,"; s

    input=getchar(); s
    if (input=='S&#039 s
    {
    printf("%s \r\n",data);s

    delay_ms(500); s
    }
    }

    البته s های آخر هر دستور را برای درست نوشتن اینجا گذاشتم

    #2
    پاسخ : دستور دریافت دیتا سریال (کمک)

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

    دیدگاه


      #3
      پاسخ : دستور دریافت دیتا سریال (کمک)

      سلام
      ایمان جان اگه از وقفه استفاده کنی و اطلاعات بافر ورودی (rx_buffer) رو بخونی فکر می کنم راحتتر باشه
      یعنی اگه اول رشته ای که به میکرو ارسال میشه شامل کلمه مورد نظرت بود این کار رو انجام بده
      برای اطلاعات بیشتر مراجعه کن به کتاب ره افروز،صفحه 334،توی اون پروژه پایین صفحه تقریبا همین کاری رو که میخوای انجام داده
      در دیر مغان آمد یارم قدحی در دست
      مست از می می خواران از نرگس مستش مست

      دیدگاه


        #4
        پاسخ : دستور دریافت دیتا سریال (کمک)

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

        دیدگاه


          #5
          پاسخ : دستور دریافت دیتا سریال (کمک)

          از دستور Gets هم استفاده کردم و طول رشته رو میگیره ولی من میخوام دقیقا همون کلمه خاصو وقتی گرفت بفرسته

          دیدگاه


            #6
            پاسخ : دستور دریافت دیتا سریال (کمک)

            سلام
            بقیه برنامه رو بهش اضافه کن

            #include <mega16.h>
            #include <stdlib.h>
            #include <string.h>
            /*.............*/
            char rx_buffer1[16];
            bit ask2num=0,sendfeedback=0;
            // USART Receiver buffer
            #define RX_BUFFER_SIZE 16
            char rx_buffer[RX_BUFFER_SIZE];
            unsigned char rx_wr_index,rx_rd_index,rx_counter;
            // This flag is set on USART Receiver buffer overflow
            bit rx_buffer_overflow;

            // USART Receiver interrupt service routine
            #pragma savereg-
            interrupt [USART_RXC] void uart_rx_isr(void)
            {
            char status,data;
            #asm
            push r26
            push r27
            push r30
            push r31
            in r26,sreg
            push r26
            #endasm
            status=UCSRA;
            data=UDR;
            if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
            {
            if (data=='#&#039 //if carachter "#" is recieved, index rx_wr_index
            { //will point to the first of rx_buffer
            rx_buffer[0]=data;
            rx_wr_index=1;
            }
            else if (rx_wr_index==1 && data=='!&#039
            {
            sendfeedback=1; //Carachter string "#!" is recieved and AVR
            //ahould return feedback in response.
            }
            else if (rx_wr_index>=1 && rx_wr_index<=13)
            {
            rx_buffer[rx_wr_index]=data;
            rx_wr_index++;
            if (rx_wr_index==13)
            {
            ask2num=1; //Carachter string with format "#xxxxx xxxxx"
            //is recieved and should be processed.
            strcpy(rx_buffer1,rx_buffer); //Copy rx_buffer to rx_buffer1
            }else
            ask2num=0;
            }else
            rx_wr_index=0;

            if (++rx_counter == RX_BUFFER_SIZE)
            {
            rx_counter=0;
            rx_buffer_overflow=1;
            };
            };
            #asm
            pop r26
            out sreg,r26
            pop r31
            pop r30
            pop r27
            pop r26
            #endasm
            }
            #pragma savereg+
            /*.............*/
            void main(void)
            {
            // Declare your local variables here
            char i,str[5];
            unsigned int counter=0;
            /*.............*/
            while (1)
            {
            // Place your code here
            if (ask2num==1) //Processing data recieved from PC
            { // and extracting PWM values
            for (i=0;i<=4;i+1)
            {
            str[i]=rx_buffer1[i+1];
            }
            OCR1A=atoi(str);

            for (i=0;i<=4;i+1)
            {
            str[i]=rx_buffer1[i+1];
            }
            OCR1B=atoi(str);
            ask2num=0;
            }
            /////////
            if (sendfeedback==1) //Sending feedback
            {
            printf("#%05u\r",counter);
            sendfeedback=0;
            }
            };
            }
            در دیر مغان آمد یارم قدحی در دست
            مست از می می خواران از نرگس مستش مست

            دیدگاه


              #7
              پاسخ : دستور دریافت دیتا سریال (کمک)

              سلام محمد جان دستت درد نکنه ولی من نفهمیدم اینا چیه ؟؟؟
              فقط اون تعریف متغیر و دستور if رو لازم دارم ..... حالا اینا چین ؟؟

              دیدگاه


                #8
                پاسخ : دستور دریافت دیتا سریال (کمک)

                سلام ایمان جان
                خب این دقیقا اون چیزی نیست که شما میخوای،یکم باید تغییرش بدی یا یه چیزهایی رو حذف کنی
                چندتا کامنت داره که توضیح داده،بازم اگه دقیق بگی که مشکلت چیه شاید بتونم کمکت کنم
                در دیر مغان آمد یارم قدحی در دست
                مست از می می خواران از نرگس مستش مست

                دیدگاه


                  #9
                  پاسخ : دستور دریافت دیتا سریال (کمک)

                  قربونت برم از این دیگه واضحتر بگم که مشکلم چیه ؟؟؟
                  فرض کن میخوام وقتی کلمه SAD رو زدم AVR یک رشته روی سریال بفرسته یا اصلا هر کاره دیگه ای بکنه
                  باید دستوری بنویسم که فقط وقتی دیتا بفرسته که کلمه SAD تایپ شده باشه

                  دیدگاه


                    #10
                    پاسخ : دستور دریافت دیتا سریال (کمک)

                    سلام ایمان جان
                    برات یه برنامه ساده نوشتم،البته اشکال زیاد داره،زیاد وقت نداشتم :rolleyes:
                    امیدوارم کمکت کنه
                    http://www.4shared.com/file/8844335/d7b7dbaf/uart-s.html
                    در دیر مغان آمد یارم قدحی در دست
                    مست از می می خواران از نرگس مستش مست

                    دیدگاه


                      #11
                      پاسخ : دستور دریافت دیتا سریال (کمک)

                      عزیز دلم فایل دانلود نمیشه

                      دیدگاه


                        #12
                        پاسخ : دستور دریافت دیتا سریال (کمک)

                        سلام ایمان جان
                        من الان چکش کردم مشکلی نداشت،یه بار دیگه امتحان کن اگه نشد ایمیلت رو بگو تا برات ایمیل کنم
                        در دیر مغان آمد یارم قدحی در دست
                        مست از می می خواران از نرگس مستش مست

                        دیدگاه


                          #13
                          پاسخ : دستور دریافت دیتا سریال (کمک)

                          سلام
                          خیلی ممنون از اقای یار محمدی
                          ولی برنامه یه اشکال خیلی کوچک داره اونم اینه که
                          اگه عبارت زیر وارد بشه بازم قبول میکنه shgghgahjhjhhd

                          یعنی توالی واسش مهمه

                          دیدگاه


                            #14
                            پاسخ : دستور دریافت دیتا سریال (کمک)

                            سلام
                            ممنون علی آقا از تذکرتون،ایمان جان اگه برنامه رو گرفتی این مشکلهاشو برطرف کن
                            در دیر مغان آمد یارم قدحی در دست
                            مست از می می خواران از نرگس مستش مست

                            دیدگاه


                              #15
                              پاسخ : دستور دریافت دیتا سریال (کمک)

                              محمد جان دستت درد نکنه ولی کار نکرد.
                              اصلا برنامه رو تغییر دادم که فقط با یک حرف کار کنه ولی نکرد .
                              آقا بخوام تو Intrupt Recive بگم اگه A زده شد فلان دیتا رو ارسال کن کجای Intrupt باید برنامه رو بنویسم ؟؟ و چی بنویسم ؟

                              دیدگاه

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