اطلاعیه

Collapse
No announcement yet.

پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

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

    #16
    پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

    نوشته اصلی توسط aashkanpasha نمایش پست ها
    نه دوست عزیز.
    مشکل این نیست. سون سگمنت وقتی عدد رو نشون میده (وقتی ارتباط SPIندارم) همه چی اوکیه- و قسنگ ثابت دیده میشه. مشکل تو سون سگمنتها نیست.
    مشکل جای دیگس-
    ببینین عدد از کیپد وارد میشه و بازدن کلید مربع به میکرو دوم ومنتقل میشه و تابع سگمنت اون عدد رو نشون میده- ولی چون تابع سگمنت تو حلقه نیست یه بار نشون میده تموم میشه
    باید بذارم تو یه حلقه .
    اون حلقه باید بگه که تا عدد جدید نیومده همین عدد رو نشون بده. یعنی طرف عدد رو زد مربع رو زد باید عدد رو سگمنت بمونه تا زمانی که عدد بعدی بیاد که معلوم نیست کی بیاد.
    باید دستور تو ارتباط رو عوض کنم:
    کاری کنم که همون عدد رو تو حلقه هی نمایش بده هی نمایش بده تا زمانی که عدد بعدی رو منتق کنه.
    الان مشکل اینه که عدد منتق میشه و نمیدونم تو چه حلقه ای بزارم با چه شرطی. باید کاری کنم که میکرو دوم بگه به میکرو اول عدد اومد کارتو ادامه بعد بعد اون دوباره عدد فرستاد اونو بگیره.
    تونستم برسونم؟
    خوب چیزی که منم گفتم منافاتی با این قضیه نداره! شما باید هربار پرچم داده spi رو چک کنید و اگر داده ای رسید اون رو توی یه متغیر قرار بدید. تایمر هم با توجه به اون متغیر داده رو روی سون سگمنت بذاره. حتی میتونید از وقفه spi استفاده کنید که نیازی به چک گردن پرچم در برنامه اصلی نباشه.

    Sent from my LG-H870S using Tapatalk

    دیدگاه


      #17
      پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

      متاسفانه مشکل اینه که من درمورد تایمر و بحث پرچم اصلا اطلاعاتی ندارم. نمدونم کلا چیه.
      فکر کنم برا همین نمیفهمم چه کدی باید بنویسم.

      نوشته اصلی توسط hossein.m98 نمایش پست ها
      خوب چیزی که منم گفتم منافاتی با این قضیه نداره! شما باید هربار پرچم داده spi رو چک کنید و اگر داده ای رسید اون رو توی یه متغیر قرار بدید. تایمر هم با توجه به اون متغیر داده رو روی سون سگمنت بذاره. حتی میتونید از وقفه spi استفاده کنید که نیازی به چک گردن پرچم در برنامه اصلی نباشه.

      Sent from my LG-H870S using Tapatalk

      دیدگاه


        #18
        پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

        شما وقتی از spi در مد اسلیو استفاده می کنید میکرو منتظر دریافت بایت از مستر میشه بعد دریافت اولین کلاک از مستر دیتا ها بیت به بیت در رجستر spi اسیلو (در هر کلاک مستر) قرار می گیره برنامه شما تازه شروع به اسکن سون سگنمت می کنه و دوباره منتظر دریافت spi میشههمین طور که در تاپیک سون سگمنت و کیپد گفتم برنامه نباید وقفه یا ایستی نداشته باشه در صورت اعداد روی نمایشکر بصورت تاخیری که چشم انسان اونو ببنه میشه یا روی یک رقم می ایسته .راه حل:یا از آیسی MAX7219 استفاده کنن که خودش سون سگمنت راه اندازی می کنه یا اینه از تایمر ها استفاده کن به این صورت که هر 1ms یک رقم نشان بده و وقتی منتظر دریافت spi هست نمایشگر متوقف نمیشه.
        جدیدترین ویرایش توسط MM320; ۲۱:۳۳ ۱۳۹۸/۰۵/۲۰.

        دیدگاه


          #19
          پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

          نوشته اصلی توسط aashkanpasha نمایش پست ها
          متاسفانه مشکل اینه که من درمورد تایمر و بحث پرچم اصلا اطلاعاتی ندارم. نمدونم کلا چیه.
          فکر کنم برا همین نمیفهمم چه کدی باید بنویسم.
          شما قبلا گفتید از اتمل استدیو استفاده می کنید یه کاری بکن بیا کدویژون نصب کن کدویژون ویزارد داره که خوش با توجه تنظیمات کاربر میاد رجیستر ها رو مقدار دهی می کنه شما این مقادیر رو توی اتمل استفاده کن
          جدیدترین ویرایش توسط MM320; ۲۱:۵۷ ۱۳۹۸/۰۵/۲۰.

          دیدگاه


            #20
            پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

            نوشته اصلی توسط MM320 نمایش پست ها
            شما وقتی از spi در مد اسلیو استفاده می کنید میکرو منتظر دریافت بایت از مستر میشه بعد دریافت اولین کلاک از مستر دیتا ها بیت به بیت در رجستر spi اسیلو (در هر کلاک مستر) قرار می گیره برنامه شما تازه شروع به اسکن سون سگنمت می کنه و دوباره منتظر دریافت spi میشههمین طور که در تاپیک سون سگمنت و کیپد گفتم برنامه نباید وقفه یا ایستی نداشته باشه در صورت اعداد روی نمایشکر بصورت تاخیری که چشم انسان اونو ببنه میشه یا روی یک رقم می ایسته .راه حل:یا از آیسی MAX7219 استفاده کنن که خودش سون سگمنت راه اندازی می کنه یا اینه از تایمر ها استفاده کن به این صورت که هر 1ms یک رقم نشان بده و وقتی منتظر دریافت spi هست نمایشگر متوقف نمیشه.
            دوست عزیز مهندس این مشکل رو قبلا زحمت کشیدید گفتید حل کردم. من جای دیگه موندم. من الان تو سمت مستر عدد رو از کیپد میگیرم و پس از زدن کلید مربع اون عدد رو میشکونم با دوتا بایت هشت تایی میفرستم. تا اینجا اوکیه.
            اونور طرف سلیو هم دوتا بایت رو میگیرم و تبدیل به یه عددش مکنم و میفرستم تابع سگمنت و رو سگمنت نمایش میدم. اینا هم اوکیه. هرعدد نیفزنم تو کیپد اینور میبینم.
            تو حلقه هم میندازم قشنگ ثابت میبینم چشمک نمیزنه. فقط نمتونم بگم بهش دوتا بایت رو فرستاد و عددش کرد اونو تو سنمنت هی تو خلقه نشون بده تا تا تا تا اون یکی دوتا باید بیاد. همینش مونده

            دیدگاه


              #21
              پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

              نوشته اصلی توسط aashkanpasha نمایش پست ها
              دوست عزیز مهندس این مشکل رو قبلا زحمت کشیدید گفتید حل کردم. من جای دیگه موندم. من الان تو سمت مستر عدد رو از کیپد میگیرم و پس از زدن کلید مربع اون عدد رو میشکونم با دوتا بایت هشت تایی میفرستم. تا اینجا اوکیه.
              اونور طرف سلیو هم دوتا بایت رو میگیرم و تبدیل به یه عددش مکنم و میفرستم تابع سگمنت و رو سگمنت نمایش میدم. اینا هم اوکیه. هرعدد نیفزنم تو کیپد اینور میبینم.
              تو حلقه هم میندازم قشنگ ثابت میبینم چشمک نمیزنه. فقط نمتونم بگم بهش دوتا بایت رو فرستاد و عددش کرد اونو تو سنمنت هی تو خلقه نشون بده تا تا تا تا اون یکی دوتا باید بیاد. همینش مونده
              خوب برادر من سمت اسلیو بیا یکاری کن حتما دوتا بایت بگیره! کافیه بایت اول رو که گرفت، حتما منتظر بمونه که بایت بعدی رو هم بگیره؛ خارج از این حالت هم داده ای قرار نیست ارسال بشه؛ این مسئله انقدر سادس که توضیحش سخته! شما برو کامل در مورد spi و تایمر و پرچم و هرچی که هست اطلاعات کسب کن، بعد بیا رو پروژه کار کن! ره صد ساله رو که یک شبه نمیشه رفت

              Sent from my LG-H870S using Tapatalk

              دیدگاه


                #22
                پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                نوشته اصلی توسط hossein.m98 نمایش پست ها
                خوب برادر من سمت اسلیو بیا یکاری کن حتما دوتا بایت بگیره! کافیه بایت اول رو که گرفت، حتما منتظر بمونه که بایت بعدی رو هم بگیره؛ خارج از این حالت هم داده ای قرار نیست ارسال بشه؛ این مسئله انقدر سادس که توضیحش سخته! شما برو کامل در مورد spi و تایمر و پرچم و هرچی که هست اطلاعات کسب کن، بعد بیا رو پروژه کار کن! ره صد ساله رو که یک شبه نمیشه رفت

                Sent from my LG-H870S using Tapatalk
                متاسفانه من نمیتونم منظورمو برسونم. حتی خودمم بعدا مخونم جوابمو بهتون میبینم نتونستم منتقل کنم مشکلو. اینایی که میگینو میدونم. مشکل چیز ذیگس کلا

                دیدگاه


                  #23
                  پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                  نوشته اصلی توسط aashkanpasha نمایش پست ها
                  متاسفانه من نمیتونم منظورمو برسونم. حتی خودمم بعدا مخونم جوابمو بهتون میبینم نتونستم منتقل کنم مشکلو. اینایی که میگینو میدونم. مشکل چیز ذیگس کلا
                  همونجوری که قبلا گفتم اگر از وقفه تایمر و حتی وقفه spi درست استفاده کنید، مشکلی بابت چشمک زدن و روشن نشدن سون سگمنت و معطل بودن برنامه نخواهید داشت. این دو مورد رو حتما در موردش مطالعه کنید.

                  Sent from my LG-H870S using Tapatalk

                  دیدگاه


                    #24
                    پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                    نوشته اصلی توسط hossein.m98 نمایش پست ها
                    همونجوری که قبلا گفتم اگر از وقفه تایمر و حتی وقفه spi درست استفاده کنید، مشکلی بابت چشمک زدن و روشن نشدن سون سگمنت و معطل بودن برنامه نخواهید داشت. این دو مورد رو حتما در موردش مطالعه کنید.

                    Sent from my LG-H870S using Tapatalk
                    ممنونم مرسی. که توجه فرموندین

                    دیدگاه


                      #25
                      پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                      اناتناتنلاتانمنم
                      نوشته اصلی توسط aashkanpasha نمایش پست ها
                      ممنونم مرسی. که توجه فرموندین
                      دلیل: ادغام دو پست برای جلوگیری از اسپم

                      سلام روزتون بخیر
                      با زحمتهای ما
                      والا من رفتم وقفه مطالعه کردم و تو برنامم هم اعمال کردم و تازه فهمیدم مشکل کجاست.
                      من یه حلقه بی تهایت while(1) دارم- که توش میام و میگم تا بی نهایت segment(number) رو انجام بده یعنی عدد نامبر رو رو سون سگمنت نشون بده. اونم اینکارو مکنه.
                      فقط تو این حلقه که میام مدام spdr رو میخونم یه اتفاقی میفته. عدد که وارد میشه میره میوفته تو spdr و نمایش میده و چون حلقه بی نهایته میاد دوباره spdr رو میخونه که چون عدد وارد نشده خالیه توش و خالی رو seg,ent میکنه- مشکلم اینه. عدد هر بار که میزنم درست نشون میده- ولی یه بار- و چون حلقه بی نهایته میاد دوباره بالا چون spdr خالی خالی رو نشون میده- segment هم باید بی نهایت باشه. مشکلم اینجای کاره. تونستم برسونم؟

                      while (1)
                      {
                      segment(number);

                      num_h=spi(0x00); //take upper bits
                      number=num_h;
                      number=(number<<8);
                      num_l=spi(0x00); //take lower bits
                      number=(number|num_l); //create number by bits
                      }

                      }



                      حتی اومدم گفتم که وقتی spdr خالی نیست عدد رو بگیره که بازم ج نداد. بفرم زیر:


                      if(SPDR!=NULL){
                      num_h=spi(0x00); //take upper bits
                      number=num_h;
                      number=(number<<8);
                      num_l=spi(0x00); //take lower bits
                      number=(number|num_l); //create number by bits
                      }

                      یعنی مثلا 32 رو میزنم میره تو spdr منتقل میشه و تو سلیو تو حلقه بی نهایت تابع عدد رو نشون میده میره پایین حلقه میاد دوباره تکرار شه چون عدد وارد نشده و spdr خالی شده لذا خالی رو نشون میده- بعد دوباره مثلا 89 رو میزنم اونو میریزه تو spdr نشون میده ولی حلقه ک تکرار میشه دیگه داخل spdr خالیه و خالی رو نشون میده. باید دستوری بدم که وقتی spdr پره اینکارو بکنه که از null! استفاده کردم اونم نشد. یا کاری کنم spdr رو خوند خالی نکنه یا همچین چیزی.

                      نوشته اصلی توسط hossein.m98 نمایش پست ها
                      همونجوری که قبلا گفتم اگر از وقفه تایمر و حتی وقفه spi درست استفاده کنید، مشکلی بابت چشمک زدن و روشن نشدن سون سگمنت و معطل بودن برنامه نخواهید داشت. این دو مورد رو حتما در موردش مطالعه کنید.

                      Sent from my LG-H870S using Tapatalk
                      جدیدترین ویرایش توسط aashkanpasha; ۱۹:۵۰ ۱۳۹۸/۰۵/۲۲.

                      دیدگاه


                        #26
                        پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                        نوشته اصلی توسط aashkanpasha نمایش پست ها
                        اناتناتنلاتانمنم


                        دلیل: ادغام دو پست برای جلوگیری از اسپم

                        سلام روزتون بخیر
                        با زحمتهای ما
                        والا من رفتم وقفه مطالعه کردم و تو برنامم هم اعمال کردم و تازه فهمیدم مشکل کجاست.
                        من یه حلقه بی تهایت while(1) دارم- که توش میام و میگم تا بی نهایت segment(number) رو انجام بده یعنی عدد نامبر رو رو سون سگمنت نشون بده. اونم اینکارو مکنه.
                        فقط تو این حلقه که میام مدام spdr رو میخونم یه اتفاقی میفته. عدد که وارد میشه میره میوفته تو spdr و نمایش میده و چون حلقه بی نهایته میاد دوباره spdr رو میخونه که چون عدد وارد نشده خالیه توش و خالی رو seg,ent میکنه- مشکلم اینه. عدد هر بار که میزنم درست نشون میده- ولی یه بار- و چون حلقه بی نهایته میاد دوباره بالا چون spdr خالی خالی رو نشون میده- segment هم باید بی نهایت باشه. مشکلم اینجای کاره. تونستم برسونم؟

                        while (1)
                        {
                        segment(number);

                        num_h=spi(0x00); //take upper bits
                        number=num_h;
                        number=(number<<8);
                        num_l=spi(0x00); //take lower bits
                        number=(number|num_l); //create number by bits
                        }

                        }



                        حتی اومدم گفتم که وقتی spdr خالی نیست عدد رو بگیره که بازم ج نداد. بفرم زیر:


                        if(SPDR!=NULL){
                        num_h=spi(0x00); //take upper bits
                        number=num_h;
                        number=(number<<8);
                        num_l=spi(0x00); //take lower bits
                        number=(number|num_l); //create number by bits
                        }

                        یعنی مثلا 32 رو میزنم میره تو spdr منتقل میشه و تو سلیو تو حلقه بی نهایت تابع عدد رو نشون میده میره پایین حلقه میاد دوباره تکرار شه چون عدد وارد نشده و spdr خالی شده لذا خالی رو نشون میده- بعد دوباره مثلا 89 رو میزنم اونو میریزه تو spdr نشون میده ولی حلقه ک تکرار میشه دیگه داخل spdr خالیه و خالی رو نشون میده. باید دستوری بدم که وقتی spdr پره اینکارو بکنه که از null! استفاده کردم اونم نشد. یا کاری کنم spdr رو خوند خالی نکنه یا همچین چیزی.
                        شما بیا هر باری که اطلاعات جدید وارد میشه، حالا چه با سرویس وقفه چه با چک کردن پرچم، داده روی SPDR رو بریز روی یه متغیر و به سون سگمنت دستور بده با این متغیر کار کنه. پیشنهادم بازم همون وقفه اس. یعنی توی سرویس وقفه داده SPDR منتقل بشه به متغیر

                        Sent from my LG-H870S using Tapatalk

                        دیدگاه


                          #27
                          پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                          یعنی :

                          while (1)
                          {
                          segment(number);
                          سرویس وقفه رو ایجاد کنم اینجا {
                          num_h=spi(0x00);
                          number=num_h;
                          number=(number<<8);
                          num_l=spi(0x00);
                          number=(number|num_l);
                          }


                          یعنی تو حلقه بی نهایتم تابع سگمنت باشه ، و توش یه وقفه ایجاد کنم وقفه spi و تو آن دستوراتو بنویسم؟
                          نوشته اصلی توسط hossein.m98 نمایش پست ها
                          شما بیا هر باری که اطلاعات جدید وارد میشه، حالا چه با سرویس وقفه چه با چک کردن پرچم، داده روی SPDR رو بریز روی یه متغیر و به سون سگمنت دستور بده با این متغیر کار کنه. پیشنهادم بازم همون وقفه اس. یعنی توی سرویس وقفه داده SPDR منتقل بشه به متغیر

                          Sent from my LG-H870S using Tapatalk
                          جدیدترین ویرایش توسط aashkanpasha; ۲۲:۰۷ ۱۳۹۸/۰۵/۲۲.

                          دیدگاه


                            #28
                            پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                            نوشته اصلی توسط aashkanpasha نمایش پست ها
                            یعنی :

                            while (1)
                            {
                            segment(number);
                            سرویس وقفه رو ایجاد کنم اینجا {
                            num_h=spi(0x00);
                            number=num_h;
                            number=(number<<8);
                            num_l=spi(0x00);
                            number=(number|num_l);
                            }


                            یعنی تو حلقه بی نهایتم تابع سگمنت باشه ، و توش یه وقفه ایجاد کنم وقفه spi و تو آن دستوراتو بنویسم؟
                            اصلا میدونید وقفه چیه ماهیتا؟؟؟ توی تابع وقفه ایجاد کردن معنی نداره!
                            عرض کردم یک متغیر عمومی میسازید مثلا به اسم data (محل تعریفش باید بالاتر از سرویس وقفه باشه که توی سرویس وقفه هم در دسترس باشه). وقفه spi رو هم فعال میکنید. توی وقفه خیلی ساده مینویسید ;data = SPDR. حالا شمایید و DATA و کاری که میخوایید باهاش بکنید. تا زمانی هم که خودتون تغییرش ندید یا داده جدیدی نرسه و وقفه تحریک نشه، مقدارش تغییر نمیکنه. به گمونم گفتید مشکلتون فقط پاک شدن SPDR بود.
                            البته از اونجایی که داده هاتون 16 بیتیه، بهتره توی همون زیر روال وقفه ترفندی بزنید و دوتا داده رو بهم بچسبونید.

                            دیدگاه


                              #29
                              پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                              نوشته اصلی توسط hossein.m98 نمایش پست ها
                              اصلا میدونید وقفه چیه ماهیتا؟؟؟ توی تابع وقفه ایجاد کردن معنی نداره!
                              عرض کردم یک متغیر عمومی میسازید مثلا به اسم data (محل تعریفش باید بالاتر از سرویس وقفه باشه که توی سرویس وقفه هم در دسترس باشه). وقفه spi رو هم فعال میکنید. توی وقفه خیلی ساده مینویسید ;data = SPDR. حالا شمایید و DATA و کاری که میخوایید باهاش بکنید. تا زمانی هم که خودتون تغییرش ندید یا داده جدیدی نرسه و وقفه تحریک نشه، مقدارش تغییر نمیکنه. به گمونم گفتید مشکلتون فقط پاک شدن SPDR بود.
                              البته از اونجایی که داده هاتون 16 بیتیه، بهتره توی همون زیر روال وقفه ترفندی بزنید و دوتا داده رو بهم بچسبونید.
                              بله. من باید قبل تابع int main یه تابع وقفه بسازم. بعد توی int main و قبل while باید وقفه رو فعاب کنم . و توی while هم کار دایم خودمو انجام بدم. با اینکار segment(number) همیشه اجرا میشه و اگر دیتا اومد وقفه ایجاد میشه و میره اون تابع اجرا میشه. درسته؟
                              فارسیش اینه.
                              توی سلیو:


                              interrupt [SPI_STC] void spi_isr(void)
                              {
                              unsigned char data;
                              data=SPDR;
                              // Place your code here


                              }

                              این تعریف تابع وقفس.

                              اینم فعال کردن وقفس قبل whil

                              // Clear the SPI interrupt flag
                              #asm
                              in r30,spsr
                              in r30,spdr
                              #endasm


                              // Global enable interrupts
                              #asm("sei")


                              تو while هم فقط egment(data) میکنم.


                              قبل اون هم توی مستر هم تو سلیو تو کانفیگ رجیسترها بیت وقفه رو ١ مکنم. درسته؟

                              توی مستر دیگه کاری نمکنم. همین.
                              درسته؟

                              اگه دزسته اتمل معادل اینکارا رو باید کدشو بیابم

                              دیدگاه


                                #30
                                پاسخ : پروتکل ارتباطی spi بین دو میکرو برای انتقال محتوایی یک متغیر

                                نوشته اصلی توسط aashkanpasha نمایش پست ها
                                بله. من باید قبل تابع int main یه تابع وقفه بسازم. بعد توی int main و قبل while باید وقفه رو فعاب کنم . و توی while هم کار دایم خودمو انجام بدم. با اینکار segment(number) همیشه اجرا میشه و اگر دیتا اومد وقفه ایجاد میشه و میره اون تابع اجرا میشه. درسته؟
                                فارسیش اینه.
                                توی سلیو:


                                interrupt [SPI_STC] void spi_isr(void)
                                {
                                unsigned char data;
                                data=SPDR;
                                // Place your code here


                                }

                                این تعریف تابع وقفس.

                                اینم فعال کردن وقفس قبل whil

                                // Clear the SPI interrupt flag
                                #asm
                                in r30,spsr
                                in r30,spdr
                                #endasm


                                // Global enable interrupts
                                #asm("sei")


                                تو while هم فقط egment(data) میکنم.


                                قبل اون هم توی مستر هم تو سلیو تو کانفیگ رجیسترها بیت وقفه رو ١ مکنم. درسته؟

                                توی مستر دیگه کاری نمکنم. همین.
                                درسته؟

                                اگه دزسته اتمل معادل اینکارا رو باید کدشو بیابم
                                این قطعه کد برای کدویژنه. توی اتمل استودیو کمی تعریف سرویس وقفه فرق میکنه. برای فعال کردن وقفه واحد spi کافیه بیت SPE (یا SPIE، دقیق یادم نیست) از رجیستر SPCR رو یک کنید و نیازی به اون قطعه کد اسمبلی نیست. ضمنا فعال کردن پاسخ گویی به وقفه هم فراموش نشه؛ برای این کار توی اتمل استودیو باید بنویسید ()sei.
                                در مورد باقی کد هم خوب باید ببینید برنامتون به چه شکله و به همون صورت عمل کنید.

                                Sent from my LG-H870S using Tapatalk

                                دیدگاه

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