اطلاعیه

Collapse
No announcement yet.

راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

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

    راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

    سلام دوستان و اساتید بزرگوار.
    خواستم در راه خدا راه اندازی روتاری سوئیچ با کد و سخت افزار و فوت کوزه گری مربوطه! در اختیارتون قرار بدم.خودم تازه انجامش دادم.
    تشکر هم یادتون نره! :rolleyes:

    خب....و اما....
    توضیح روتاری سوئیچ یا ولوم هرزگرد تو این تاپیک هست و استاد گرامی جناب آقای نوربخش توضیح کامل و جامع براش دادن:
    http://www.eca.ir/forum2/index.php?topic=64260.0

    همونطور که جناب نوربخش توضیح فرمودن، بهتره یکی از پایه ها اینتراپتی باشه، و اون یکی پایه ورودی معمولی هم باشه میشه، که اگه اینتراپتی باشه بهتره.
    میکرویی که من دم دست داشتم واسه تست، PIC16F628A بود. کریستال داخلی 4MHz رو استفاده کردم.ریست هم داخلی یا خارجی دلخواه خودتون هست.
    کل کد برنامه رو میذارم واستون(با کامپایلر میکروسی) و بعد توضیح بخشهای مهم برنامه و آخر سر هم نکته ی بسیار مهم و فوت کوزه گری سخت افزاری که در صورت عدم استفاده، روتاری خیلی بد جواب میده یا اصلا جوای نمیده.طوری که خودم داشتم از خیرش میگذشتم!



    کد:
    char i;
    void Interrupt()
    {
     INTCON.GIE=0;
     if (PORTB.b1==1) i=i+10;
     if (PORTB.b1==0) i=i-10;
     INTCON.INTF=0;
     INTCON.GIE=1;
    }
    
    void main() {
    OPTION_REG=0;      // EX-INT=Falling edge
    INTCON=0b10010000;   //EX-INT=ON-other Interrupt=OFF
    PIE1=0;
    PIR1=0;
     TRISB=0;
     PORTB=0;
    TRISB=7;
    
    PWM1_Init(5000);
    PWM1_Start();
    
    i=EEPROM_read(0);
    
    while(1)
     {
     delay_ms(10);
     PWM1_Set_Duty(i);
     if (PORTB.B2==0) EEPROM_write(0,i);
    
     }
    }
    برنامه این کار رو میکنه که اگه روتاری رو به سمت چپ یا راست بچرخونین، مقدار PWM تولیدی رو 10 تا 10 تا زیاد یا کم میکنه و هر وقت هم که کلید وسط روتاری رو فشار بدین،PWM تولیدی رو تو خونه ی صفر از EEPROM میکرو ذخیره میکنه و موقع روشن شدن هم اول میره EEPROM رو میخونه.

    زیربرنامه ی اینتراپت:

    کد:
    void Interrupt()
    {
     INTCON.GIE=0;
     if (PORTB.b1==1) i=i+10;
     if (PORTB.b1==0) i=i-10;
     INTCON.INTF=0;
     INTCON.GIE=1;
    }
    تو عکسی که گذاشتم به جای روتاری از دوتا کلید معمولی استفاده کردم. کار اصلی رو ورودی اینتراپت انجام میده. اینتراپت با لبه ی پایین رونده تحریک میشه.لذا ورودی مشترک روتاری رو به زمین وصل کردم.روتاری وقتی مثلا چپ گرد هست، اول پایه اینتراپت صفر میشه(وقوع وقفه) بعد پایه دیگه ش صفر میشه.تو زیربرنامه ی وقفه اول بیت وقفه ی عمومی رو غیرفعال میکنیم(INTCON.GIE=0 تا احیانا وسط انجام دستورات مربوطه، وقفه ی دیگه ای کار رو خراب نکنه!
    بعد پایه ی دیگه ی روتاری رو چک میکنیم.اگه یک بود، یعنی چپ گرد هست(فرض کردیم) که حدود دهم یا صدم ثانیه بعد چک کردن اینتراپت ، اون یکی پایه هم صفر میشه و این وسط ما فهمیدیم که روتاری داره کدوم طرف میچرخه و برعکسش هم صادق هست.وقتی اینتراپت رخ میده و ورودی بعدی رو چک میکنیم و میبینیم که صفر هست، معلوم میشه که اول اون پایه صفر شده و بعد پایه ی اینتراپت صفر شده که باعث وقوع وقفه شده....امیدوارم توضیحاتم پیچیده نشده باشه! :redface:
    این میشه همین دوخط:
    کد:
    if (PORTB.b1==1) i=i+10;
     if (PORTB.b1==0) i=i-10;
    اون اضافه کردن و کم کردن متغیر هم برای تغییر PWM هست که نهایتا متغیر i رو به PWM تولیدی اختصاص میدیم.
    بعدش میایم و پرچم وقوع وقفه رو پاک میکنیم(همیشه اینکار رو باید انجام بدیم-تو همه ی وقفه ها )
    INTCON.INTF=0;
    و نهایتا وقفه رو فعال میکنیم:
    INTCON.GIE=1;

    بعد تنظیمات رجیسترهای مربوط به وقفه هست که تو main برنامه میاد:

    کد:
    OPTION_REG=0;      // EX-INT=Falling edge
    INTCON=0b10010000;   //EX-INT=ON-other Interrupt=OFF
    PIE1=0;
    PIR1=0;
     TRISB=0;
     PORTB=0;
    TRISB=7;
    دستور TRISB=7 باعث میشه که پایه های B0-B1-B2 ورودی بشن.
    درنتیجه سه تا ورودی داریم.اینتراپت خارجی(B0)-پایه دوم روتاری که باهاش جهت چرخش رو تشخیص میدیم(B1).پایه سوم هم که همون کلید وسط روتاری هست (B2) که با عمودی فشار دادن روتاری ، دوتا کنتاکت رو به هم وصل میکنه و تو اینجا از این کلید برای ذخیره ی PWM تولیدی استفاده کردیم.
    (اصطلاحا بهش میگن جینگول بازی!! :mrgreen: )
    ----------------------------------
    کد:
    PWM1_Init(5000);
    PWM1_Start();
    راه اندازی PWM
    ---------------------------------
    کد:
    i=EEPROM_read(0);
    فکر نکنم توضیحی بخواد!
    --------------------------------
    کد:
    while(1)
     {
     delay_ms(10);
     PWM1_Set_Duty(i);
     if (PORTB.B2==0) EEPROM_write(0,i);
     }
    تاخیر برای گرفتن لرزشهای احتمالی که فکر کنم نباشه هم کار بکنه! بسوزه پدر سخت افزار!
    خط آخر و اون خطی که گفتم توضیح نمیخواد هم برای همون جینگول بازی هست! :mrgreen:
    -------------------------

    و اما فوت کوزه گری : هردوتا پایه ی روتاری که برای تشخیص جهت چرخش هست و یکی به پایه وقفه میکرو وصله و دیگری به پایه ای دلخواه، علاوه بر پول پ بودن، باید با خازن حدود1 میکرو به زمین وصل بشن تا کار دیبانس گیری اصلی توسط اون خازن انجام بشه.بدون اون خازن هرقدر هم تأخیر بذارین و با نرم افزار الکی سر و کله بزنین، همش آب در هاون کوفتن است و بس! که من بسی کوبیدم و مفت بهتون گفتم تا شماها نکوبین! :nerd:
    سوالی بود در خدمت هستم....
    موفق باشین.

    #2
    پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

    چه استقبالی شد از این پروژه!!
    این هم کل فایل ها(سورس+شبیه سازی)
    http://s1.picofile.com/file/7777736234/Rotary.rar.html

    دیدگاه


      #3
      پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

      سلام من اینکارو با زبون بیسیک برای avr انجام دادم ولی هر طرفی که میچرخونم فقط کم میکنه و تغیر هم توش میدم فقط زیاد میکنه
      دیگه گیج شدم
      دعا پشتِ دعا براي آمدنت
      گناه پشــــــتِ گناه براي نيامــدنت
      دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
      کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

      دیدگاه


        #4
        پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

        اگه کد اشکالی نداشته باشه، به خاطر نذاشتن خازن هست.مشابه همین مسئله رو منم داشتم.
        پست اول رو با دقت بخونین.

        دیدگاه


          #5
          پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

          نوشته اصلی توسط شاهرخ
          اگه کد اشکالی نداشته باشه، به خاطر نذاشتن خازن هست.مشابه همین مسئله رو منم داشتم.
          پست اول رو با دقت بخونین.
          ممنون از پاسختون
          نه فکر نکنم چون خازن یک میکرو نداشتم از 104 و 10 میکرو استفاده کردم هر دوتاش جواب داد و لی مشکل اینجاس که من زمانی که شرط میزارم فقط زیاد میشه یا برعکس فقط کم میشه، اونم بادقت خوب و اصلا پرش اضافه ندارم .
          مشکلم دقتش نیست چون فوت کوزه گری شما جواب داد.مشکلم کمو زیاد کردنه که یا فقط کم میکنه یا زیاد. اینم برناممه.
          کد:
          $regfile = "m128def.dat"
          $crystal = 11059200
          $lib "glcdks108.lbx"
          $include "FONT8X8.FONT"
          Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 4 , _
           Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2
          Setfont Font8x8
          Cls
          '----------------------------------------------------------------------------------------- ok
          Dim A As Byte
          '-----------------------------------------------------------------------------------------
          Config Pind.0 = Input
          Config Pind.1 = Input
          '----------------------------------------------------------------------------------------
          Enable Interrupts
          Config Int0 = Falling
          Enable Int0
          On Int0 Rot
          '---------------------------------------------------------------------------------------
          Lcdat 1 , 1 , "mory"
          Waitms 500
          Main:
          Do
          Lcdat 1 , 1 , A ; "  "
          Loop
          End                             'end program
          '---------------------------------------------------------------------------
          Rot:
          If Pind.1 = 0 Then A = A + 1
          If Pind.1 = 1 Then A = A -1
          Return

          اضافه شده در تاریخ :
          انگار که اصلا وقتی میاد توی وقفه شرط هارو چک نمیکنه oo: میخام بدونم که واقعا زمانی که وقفه رخ داد چه زمان بعدش پاییه بعدی صفر میشه , این برنامه رو با 2 تا وقفه هم نوشتم ولی بازم کار نکرد :cry:
          تروخدا اگه کسی با بیسیک AVR بلده کمک کنه.
          دعا پشتِ دعا براي آمدنت
          گناه پشــــــتِ گناه براي نيامــدنت
          دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
          کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

          دیدگاه


            #6
            پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

            فکر کنم برای بررسی شرط دوتا مساوی باید بذارین.(البته من با بسکام خیلی کار نکردم،اما فکر نکنم اصول برنامه نویسی فرقی داشته باشه)
            ضمنا اون تأخیر هم خیلی زیاده.10میلی ثانیه بذاری کافیه،فوووقش50 میلی ثانیه!

            دیدگاه


              #7
              پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

              تاخیر برای خوندن عدد نبوده.برای چیز دیگه ایه . (== )هم تو بسکام نداریم.
              البته با تاخیر های متفاوت هم تست کردم ولی نشد که نشد .
              الان روتری رو بازش کردم خیلی جالب بود
              توش چند تا اهرم مکانیکی بود بدون هیچ قطعه الکترونیکی!!! oo:
              جالب بود ولی خوب چیزی که فکر میکردم نبود.
              دوست من میتونی دقیقا یکبار بگی که بعد از اینکه یه پایه اینتراپتو تشخیص داد چه اتفاقی می افته. چون من بعدش میام پایه دیگر رو وضعیتشو میخونم ولی همیشه بعد اینتراپت وضعیتش صفره ؟؟؟؟!!!
              دعا پشتِ دعا براي آمدنت
              گناه پشــــــتِ گناه براي نيامــدنت
              دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
              کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

              دیدگاه


                #8
                پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

                با سلام خدمت دوستان
                توی بیسکام میتونی از دستور encoder برا راه اندازی روتاری انکودر استفاده کنی
                قبلا کار کردم جواب میده
                مثالش توی هلپ هست
                محک

                دیدگاه


                  #9
                  پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

                  نوشته اصلی توسط mahank
                  با سلام خدمت دوستان
                  توی بیسکام میتونی از دستور encoder برا راه اندازی روتاری انکودر استفاده کنی
                  قبلا کار کردم جواب میده
                  مثالش توی هلپ هست
                  اره ولی وقتی از این دستور استفاده میکنی دیگه تو بدنه اصلی برنامه (ینی همونجایی که این دستورو نوشتی ) نمیتونی کلید بزاری و یا if بزاری ویا ... خیلی مشکل ایجاد میکنه اون دستور.
                  دعا پشتِ دعا براي آمدنت
                  گناه پشــــــتِ گناه براي نيامــدنت
                  دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
                  کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

                  دیدگاه


                    #10
                    پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

                    نوشته اصلی توسط مرتضی ب
                    تاخیر برای خوندن عدد نبوده.برای چیز دیگه ایه . (== )هم تو بسکام نداریم.
                    البته با تاخیر های متفاوت هم تست کردم ولی نشد که نشد .
                    الان روتری رو بازش کردم خیلی جالب بود
                    توش چند تا اهرم مکانیکی بود بدون هیچ قطعه الکترونیکی!!! oo:
                    جالب بود ولی خوب چیزی که فکر میکردم نبود.
                    دوست من میتونی دقیقا یکبار بگی که بعد از اینکه یه پایه اینتراپتو تشخیص داد چه اتفاقی می افته. چون من بعدش میام پایه دیگر رو وضعیتشو میخونم ولی همیشه بعد اینتراپت وضعیتش صفره ؟؟؟؟!!!
                    تو روتاری یه پایه اینتراپتی میشه، اون یکی پایه هم معمولی(فعلا اینجوری فرض میکنیم،چون من اینجوری جواب گرفتم و میکروی مورد استفاده ی من دوتا اینتراپت خارجی نداشت) خب حالا با چرخوندن روتاری چه اتفاقی میفته؟ پایه ی اینتراپت تا زمانی که ولوم رو میچرخونی، دائما پالس های 0 و 5 ولت رو دریافت میکنه و به عبارتی اینتراپت رخ میده.خب وضع اون یکی پایه چه جوریاست؟! اون یکی پایه با یه تاخیر جزئی که به حالت مکانیکی تو ساختار روتاری ایجاد شده؛ مثل اون پایه ی قبلی پالس های 0 و 5 ولت میده.وقتی اینتراپت میاد،(فرض اول) ولوم به چپ میچرخیده، که در این صورت اون یکی پایه صفر بوده و با یه تاخیر جزئی1میشه.پس قبل 1 شدن میکرو تشخیص میده که صفر هست،پس چپ گرد.(فرض دوم) ولوم به راست میچرخیده، که در این صورت اون یکی پایه یک بوده و با یه تاخیر جزئی0میشه،پس قبل0شدن میکرو تشخیص میده که یک هست،پس راست گرد.

                    دیدگاه


                      #11
                      پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

                      ممنون اقا شاهرخ که انقدر خوب جواب میدید .پس درست متوجه شده بودم . کارکردش اگه اینجور که شما میگید باشه , پس یا یه پایه من قطع شده یا روتری من خرابه چون به همون صورت چک کردم و درست نشد.
                      راستی اگه از 2 تا اینتراپت استفاده کنم , و به a و b بدم باید برنامه اینجوری باشه که هر کدوم از اینتراپتها زودتر رخ داد متغییرمو کمو زیاد کنه دیگه , درسته , در این صورت دیگه نباید شرط چک کردن پاییه دیگه رو داشته باشیم. درسته؟
                      دعا پشتِ دعا براي آمدنت
                      گناه پشــــــتِ گناه براي نيامــدنت
                      دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
                      کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

                      دیدگاه


                        #12
                        پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

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

                        دیدگاه


                          #13
                          پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

                          من هرکدوم از 2تا پایه رو به یه اینتراپت جدا وصل کردم وبرای هرکدوم یه زیر برنامه جدا و بعد برای یکیشون متغییر رو زیاد کردم وبرای یکی دیگه متغییر رو کم کردم . ولی جواب نداد . تو avr اگه اولی بره تو اینتراپت و متغیر رو زیاد کنه دومی هم بلا فاصله بعدش میره تو اینتراپت و کمش میکنه !!! پس باید پی کار کرد ؟؟؟
                          من بعد هر اینتراپت یه تاخیر گزاشتم تا وقتی اومد بیرون دیگه اینتراپت دومی کار نکنه ( چون بلافاصله بعدشه دیگه ) ولی ظاهرا کار میکنه و به محض اینکه از وقفه اول بیاد بیرون میره تو وقفه بعدی یک عدد از اون کم میکنه و انگار که هیچ ... البته فکر میکنم انطور باشه چون چیزی نشون نمیده.
                          دعا پشتِ دعا براي آمدنت
                          گناه پشــــــتِ گناه براي نيامــدنت
                          دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
                          کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

                          دیدگاه


                            #14
                            پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

                            خب مشخصه که اینطوری جواب نمیده! شما باید اولویت وقوع وقفه رو تشخیص بدی، بعد جهت چرخش به دست میاد.

                            تو وقفه ی خارجی یک، بعد اینتراپت متغیر i بشه 1
                            تو وقفه ی خارجی دو، بعد اینتراپت متغیر i بررسی میشه،اگه 1 بود یعنی چپ گرد(مثلا)، و اگه صفر بود یعنی راست گرد.سپس متغیر i برابر صفر میشه و زیربرنامه ی وقفه ی 2 تموم میشه.
                            حالا با فرض وقوع وقفه ی 2 : چون i موقع تعریف صفر بوده و تو هیچ کجای برنامه هم 1 نمیشه به جز وقفه ی1 ، اگه صفر باشه که طبیعتا راست گرد.اگه 1 باشه هم مشخصه که وقفه ی 1 قبلا اتفاق افتاده و چپ گرد.

                            سوال: آیا امکان داره که وقفه ی1 اتفاق بیفته،بدون وقوع وقفه ی2؟ جواب: ساختار مکانیکی ولوم هرزگرد مانع وقوع همچین حالتی میشه، مگر اینکه ولوم خراب باشه.

                            فکر کنم الان دیگه بتونین راهش بندازین...

                            دیدگاه


                              #15
                              پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC

                              نوشته اصلی توسط شاهرخ
                              خب مشخصه که اینطوری جواب نمیده! شما باید اولویت وقوع وقفه رو تشخیص بدی، بعد جهت چرخش به دست میاد.

                              تو وقفه ی خارجی یک، بعد اینتراپت متغیر i بشه 1
                              تو وقفه ی خارجی دو، بعد اینتراپت متغیر i بررسی میشه،اگه 1 بود یعنی چپ گرد(مثلا)، و اگه صفر بود یعنی راست گرد.سپس متغیر i برابر صفر میشه و زیربرنامه ی وقفه ی 2 تموم میشه.
                              حالا با فرض وقوع وقفه ی 2 : چون i موقع تعریف صفر بوده و تو هیچ کجای برنامه هم 1 نمیشه به جز وقفه ی1 ، اگه صفر باشه که طبیعتا راست گرد.اگه 1 باشه هم مشخصه که وقفه ی 1 قبلا اتفاق افتاده و چپ گرد.

                              سوال: آیا امکان داره که وقفه ی1 اتفاق بیفته،بدون وقوع وقفه ی2؟ جواب: ساختار مکانیکی ولوم هرزگرد مانع وقوع همچین حالتی میشه، مگر اینکه ولوم خراب باشه.

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

                              اضافه شده در تاریخ :
                              نوشته اصلی توسط شاهرخ

                              سوال: آیا امکان داره که وقفه ی1 اتفاق بیفته،بدون وقوع وقفه ی2؟ جواب: ساختار مکانیکی ولوم هرزگرد مانع وقوع همچین حالتی میشه، مگر اینکه ولوم خراب باشه.
                              پس چرا برای من داره این اتتفاق می افته و با 3 نوع روتری مختلف هم تست کردم ولی باز تو هر جهت که میچرخونم عددم فقط زیاد میشه اینم برنامم.فکر نکنم زیاد چیز پیچیدهای داشته باشه , بیسیک خیلی اسونه.
                              کد:
                              $regfile = "m128def.dat"
                              $crystal = 11059200
                              '-------------------------------------------------
                              $lib "glcdks108.lbx"
                              $include "FONT8X8.FONT"
                              Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 4 , _
                              Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2
                              Setfont Font8x8
                              '--------------------------------------------------
                              Dim A As Bit , B As Byte , C As Byte
                              '--------------------------------------------------
                              Enable Interrupts
                              Config Int0 = Falling
                              Enable Int0
                              On Int0 Leftt
                              Config Int1 = Falling
                              Enable Int1
                              On Int1 Rightt
                              '--------------------------------------------------
                              
                              A = 0
                              B = 0
                              C = 0
                              Cls
                              
                              Do
                              Lcdat 1 , 1 , "number: " ; B ; "   "
                              Loop
                              
                              Rightt:
                              If C = 1 Then
                              B = B - 1
                              C = 0
                              A = 0
                              Else
                              A = 1
                              End If
                              Return
                              
                              Leftt:
                              If A = 1 Then
                              B = B + 1
                              A = 0
                              C = 0
                              Else
                              C = 1
                              End If
                              Return
                              End                             'end program
                              دعا پشتِ دعا براي آمدنت
                              گناه پشــــــتِ گناه براي نيامــدنت
                              دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
                              کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

                              دیدگاه

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