اطلاعیه

Collapse
No announcement yet.

مقایسه ارایه دریافتی از usart

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

    #61
    پاسخ : مقایسه ارایه دریافتی از usart

    دوست عزیز این کد رو هم که میزنم واسه دو تا led درست کار میکنه اما در صورتی که اول دیتای cmd4رو وارد کنم
    [code=c]int i;

    unsigned char c[4]={0x03,0x42,0x80,0xc1};
    unsigned char data[4];
    unsigned char d[4]={0x03,0x41,0x80,0xc2};
    unsigned char tow[4];


    #int_RDA
    void RDA_isr(void)
    {


    for(i=0;i<4;i++){
    data[i]=getchar(com1);
    if(data[i]==c[i])
    output_high(CMD4);
    else if(data[i]==d[i])
    output_high(CMD5);
    }


    }//END OF INT
    [/code]

    دیدگاه


      #62
      پاسخ : مقایسه ارایه دریافتی از usart

      اینم اشتباه بود :cry:

      دیدگاه


        #63
        پاسخ : مقایسه ارایه دریافتی از usart

        دوست عزیز شما اصلاً پست من رو دیدید؟ oo:

        دیدگاه


          #64
          پاسخ : مقایسه ارایه دریافتی از usart

          نوشته اصلی توسط freedom_truth
          دوست عزیز شما اصلاً پست من رو دیدید؟ oo:

          سلام نه چیزی از شما به دسم نرسیده.

          دیدگاه


            #65
            پاسخ : مقایسه ارایه دریافتی از usart

            آخر صفحه 4 همین تاپیک!
            شما چجوری تاپیک رو نگاه میکنید؟!

            دیدگاه


              #66
              پاسخ : مقایسه ارایه دریافتی از usart

              سلام دوست عزیز من از این کد جواب گرفتم اما فقط برای یک led و اینکه باید اینو به تابع تبدیل کنم فکر میکنم کد که زیاد میشه تو اینتراپت هنگ میکنه
              من الان دو تا ارایه دارم که با هرکدوم که برابر بود ارایه دریافتی led متناظر باید روشن بشه
              [code=c]int i;

              unsigned char c[4]={0x03,0x42,0x80,0xc1};
              char data;
              char data1;
              char data2;
              char data3;

              #int_RDA
              void RDA_isr(void)
              {

              data=getchar(com1);
              if(data==c[0])
              data1=getchar(com1);
              if(data1==c[1])
              data2=getchar(com1);
              if(data2==c[2])
              data3=getchar(com1);
              if(data3==c[3])
              output_high(CMD4);

              }//END OF INT
              [/code]

              الان ارایه ها ان ها هستن
              [code=c] unsigned char c[4]={0x03,0x42,0x80,0xc1};

              unsigned char d[4]={0x03,0x41,0x80,0xc2};
              [/code]

              که اگه ارایه دریافتی با ارایه c برابر بود یه led روشن بشه و اگه با d برابر بود یه led دیگه روشن بشه

              دیدگاه


                #67
                پاسخ : مقایسه ارایه دریافتی از usart

                این نمونه کد هم هست که ازش ج نگرفتم این با تابع نوشته شده وقتی این کد رو میزنم کلا هیچ مقایسه ای یا تاثیری نداره هیچ چیز روشن نمیشه
                [code=c]//global variables
                volatile int i=0;
                volatile char data[4];


                void RDA_isr(void)
                {
                data[i]=getchar(com1);
                i++;
                }


                char compare(char *str1,char *str2, int nbyte)
                {
                int t=0;
                while(nbyte){
                if(str1[t]!=str2[t])
                return 0;
                nbyte--;
                t++;
                }
                return 1;
                }
                int main(void){
                int j;
                //احتمال می دمم مفسر به مقایسه دو رشته غیر هم جنس گیر بده بنابراین رشته های ثابت رو بصورت
                // char
                //تعریف کنید بهتره
                unsigned char c[4]={0x03,0x42,0x80,0xc1};
                unsigned char d[4]={0x03,0x41,0x80,0xc2};
                while(1){
                if(compare(data,c,4)){
                output_high(CMD4);
                data[4]={"\0"};
                }
                if(compare(data,d,4)){
                output_high(CMD5);
                data[4]={"\0"};
                }
                }
                }[/code]

                دیدگاه


                  #68
                  پاسخ : مقایسه ارایه دریافتی از usart

                  اینجوری فایده نداره. جواب سوالهای من رو ندادید. کد قابل کامپایل که من بتونم تست کنم هم نذاشتید.

                  پیشنهاد میکنم فایل EX_SISR.C رو در پوشه مثالها ببینید. برای دریافت داده سریال در یک بافر.

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

                  دیدگاه

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