اطلاعیه

Collapse
No announcement yet.

بیسیک کارا بیان داخل

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

    بیسیک کارا بیان داخل

    سلام به دوستان عزیز و بیسیک کارهای حرفه ای .ما یک برنامه داریم که با خوردن وقفه تایمر صفر میره به زیر برنامه show , و کارهای خواسته شده رو انجام می ده حالا دوستان چطور می تونم با فشار کلید در این برنامه به زیر برنامه eca پرش بشه و در انجا این کارو انجام بده ( البته با در نظر نگرفتن زیر برنامه show )و دوباره با فشار همان کلید به زیر برنامه اصلی یعنی show پرش بشه شکل برنامه به این صورته خواهش می کنم سریع پاسخ بدید
    $regfile = "M8def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Portb = Output

    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5

    Config Timer0 = Timer , Prescale = 256
    Enable Interrupts

    Enable Timer0

    On Timer0 Show

    Config Timer1 = Timer , Prescale = 8

    Stop Timer1
    Portb.1 = 0
    Dim A As Word

    Do
    Cls
    Locate 1 , 5
    Lcd A
    Loop
    End

    Show:
    Start Timer1
    A = 0
    Do
    A = A + 1
    Loop Until A = 190
    Stop Timer1
    Start Timer0
    Return
    End


    Eca:
    Start Timer1
    A = 0
    Do
    Incr A
    Loop Until A = 100
    Stop Timer1
    Start Timer0
    Return
    End

    #2
    پاسخ : بیسیک کارا بیان داخل

    خوب عزیز حلقه اصلی برنامه شما ظاهرا اینه :
    من فعلا کاری به Label ها ندارم.
    Do
    Cls
    Locate 1 , 5
    Lcd A
    Loop
    End

    شما پینی رو هنوز به عنوان کلید انتخاب نکردید. پایه ای که باید به عنوان ورودی و PIN تعریف شود. سپس مثلا PIND.1 رو انتخاب کردین که با زمین شدن فعال می شود. (PIND.1=0)

    یک متغیر کوچک به اسم مثلا flag از نوع بایت هم تعریف می کنید و مقدار اولیه صفر بهش بدین.

    این کدها رو اضافه کنید

    اینجوری می نویسین:

    if PIND.1=0 and flag=0 then
    waitms 200
    gosub eca
    end if

    خوب الان برنامه به برچسب ECA پرش می کند. ولی شما می خواهید که با فشار دادن مجدد به برچسب show برود. پس باید اخر روتین eca بالای return بنویسید flag =1 و یک شریط دیگه در بدنه اصلی بنویسید یا از else استفاده کنید. من یک شرط دیگه نوشتم.

    if PIND.1=0 and flag=1 then
    waitms 200
    gusub show
    end if

    و حتما حدس زدین که اگر بخواهیم به شرایط اول برگردیم باید در این روتین show بالای return بنویسیم flag=0 تا اگر این بار دوباره کلید رو فشار دادیم دومرتبه برنامه روتین eca اجرا شود.

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

    دیدگاه


      #3
      پاسخ : بیسیک کارا بیان داخل

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

      $regfile = "M8def.dat"
      $crystal = 8000000
      Config Lcd = 16 * 2
      Config Portb = Output
      config pinc.3=input
      dim flag as byte
      flag=0
      Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5

      Config Timer0 = Timer , Prescale = 256
      Enable Interrupts

      Enable Timer0

      On Timer0 Show

      Config Timer1 = Timer , Prescale = 8

      Stop Timer1
      Portb.1 = 0
      Dim A As Word

      Do
      Cls
      Locate 1 , 5
      Lcd A
      Loop
      End

      Show:
      Start Timer1
      A = 0
      Do
      A = A + 1
      Loop Until A = 190
      Stop Timer1
      Start Timer0
      Flag = 0
      If Pinc.3 = 0 And Flag = 0 Then
      waitms 200
      gosub eca
      end if
      Return
      End


      Eca:
      Start Timer1
      A = 0
      Do
      Incr A
      Loop Until A = 100
      Stop Timer1
      Start Timer0
      Flag = 0
      If Pinc.3 = 0 And Flag = 0 Then
      waitms 200
      gosub eca
      end if
      Return

      دیدگاه


        #4
        پاسخ : بیسیک کارا بیان داخل

        عزیز من، اون کدها رو باید در روتین اصلی برنامه do loop بنویسید که باید وضعیت فشار داده شدن کلید تست بشه و شما رفتین در روتین ها نوشتین :cry:.

        با عجله پیش نرین.

        در ضمن در روتین ها ننویسید که به روتین دیگه پرش کنه. مگه شما نمی خواهید فقط با فشرده شدن کلید، این روتینها اجرا بشن.

        من اصلا به عملکرد روتین ها کاری نداشتم و نگاه نکردم چی نوشتین. فعلا هدف اولتون رو قطعی کنید.

        دیدگاه


          #5
          پاسخ : بیسیک کارا بیان داخل

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

          دیدگاه


            #6
            پاسخ : بیسیک کارا بیان داخل

            سلام
            شما میخواین که در زیر برنامه شو بازدن کلید به ecaآ‌بره و برگرده به شو بعد برگرده به برنامه اصلی یا در برنامه اصلی بازدن کلید به eca بره
            اگر بیشتر در مورد برنامه توضیح بدین که چیکار میخاین بکنین بهتر میشه کمک کرد مثلا اینکه در برنامه شما در زیربرنامه ecaآ‌ فقطشمارش میشه و نمایش داده نمیشه اصلا کامل و دقیق با تمام جزئیات بگین میخواین چیکار کنین من خودم برنامه کاملو براتون میذارم
            مثلا میخواین فقط با زدن کلید به eca بره و با زدن دوباره اون به شو برگرده یا بدون زدن کلید هم به شو برگرده میشه بیشتر توضیح بدین
            { خلاف قوانین - پاک شد }

            دیدگاه


              #7
              پاسخ : بیسیک کارا بیان داخل

              اگه اشتباه نکنم شما میخواین که با زدن کلید شو رو اجرا نکنه و بره ecaآ‌و برگرده به برنامه اصلی درسته گفتین به ecaآ‌بره بدون در نظر گرفتن شو کامل با جزئیات بگین و قراره که اگر به eca رفت و به شو برگشت شمارش رو از ادامه شروع کنه یا اصلا شو رو اجرا نکنه یا شو رو از اولش شروع کنه
              { خلاف قوانین - پاک شد }

              دیدگاه


                #8
                پاسخ : بیسیک کارا بیان داخل

                برنامه قاطی پاتی شده. یک کپی ازش بردار و یک جای دیگه هارد نگه دار.

                بعدش بیا در همین برنامه محتوی روالها رو پاک کن و توش یک چیز ساده بنویس جوری که کار هر روال رو ببینی. مثلا بنویسی که مثلا روال eca یک مقدار به یک پورت اضافه کنه و اون یکی روال یکی از مقدار پورت کم کنه. اینجوری کار هر کدوم رو میبینی. بعد که کارش رو مطمئن شدی این کدهای ساده رو از روالها پاک کن و در هر روال کد اصلی رو بنویس.

                دیدگاه


                  #9
                  پاسخ : بیسیک کارا بیان داخل

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

                  دیدگاه


                    #10
                    پاسخ : بیسیک کارا بیان داخل

                    سلام به دوستان عزیز ممنون از توجه شما روال برنامه :کار اصلی این برنامه ایجاد 3 پالس با زمان تناوب متفاوت در پایه های portb1 و port d.6,7 است که با تایمر 1 ساخته میشن و درون حلقه do , loop که یک برنامه برای ایجاد بارگراف در السیدی بوسیله adc میکرو است حالا من اومدم برای اینکه میکرو بره و برنامه پالس ها رو اجرا کنه از یک وقفه که تایمر صفر میخوره استفاده کردم (نمی دونم راه دیگه ای برای این کار هست یا نه ) حالا برنامه پالسها رو میخوام یکی دیگه با زمانهای تناوب دیگه که همان زیر برنامه eca است ایجاد کنم برنامه که اول اجرا میشه باید بره به زیر برنامهshow و کارش رو انجام بده حالا میخوام وقتی یک بار کلید رو فشار می دیم برنامه بره به قسمت eca و با همان تایمر1 این قسمت اجرا شه و مطمعنا وقتی این قسمت اجرا میشه نباید قسمت show اجرا شه و با فشار کلید دوم دوباره برگرده به همان قسمت show امیدوارم خوب توضیح داده باشم با تشکر از شما دوستان عزیز

                    دیدگاه


                      #11
                      پاسخ : بیسیک کارا بیان داخل

                      نوشته اصلی توسط tahmine67
                      سلام به دوستان عزیز ممنون از توجه شما روال برنامه :کار اصلی این برنامه ایجاد 3 پالس با زمان تناوب متفاوت در پایه های portb1 و port d.6,7 است که با تایمر 1 ساخته میشن و درون حلقه do , loop که یک برنامه برای ایجاد بارگراف در السیدی بوسیله adc میکرو است حالا من اومدم برای اینکه میکرو بره و برنامه پالس ها رو اجرا کنه از یک وقفه که تایمر صفر میخوره استفاده کردم (نمی دونم راه دیگه ای برای این کار هست یا نه ) حالا برنامه پالسها رو میخوام یکی دیگه با زمانهای تناوب دیگه که همان زیر برنامه eca است ایجاد کنم برنامه که اول اجرا میشه باید بره به زیر برنامهshow و کارش رو انجام بده حالا میخوام وقتی یک بار کلید رو فشار می دیم برنامه بره به قسمت eca و با همان تایمر1 این قسمت اجرا شه و مطمعنا وقتی این قسمت اجرا میشه نباید قسمت show اجرا شه و با فشار کلید دوم دوباره برگرده به همان قسمت show امیدوارم خوب توضیح داده باشم با تشکر از شما دوستان عزیز
                      خوب 2 پالس بای دباشه با زمان تناوب متفاوت چون اسم 2 پایه رو ذکر کردین. آیا فرکانسهای پالس خروجی از هر پایه ثابته یا متغیره؟ فعلا مسئله پالسها رو حل کنیم بعدش بارگراف می رسیم.

                      دیدگاه


                        #12
                        پاسخ : بیسیک کارا بیان داخل

                        نه 2 پالس نگفتم 3 پالس از 3 پین میکرو پین b1 , d.6 , d7 , این 3 پالس خارج میشه و فقط زمان تناوب متفاوته و فرکانس ثابته

                        دیدگاه


                          #13
                          پاسخ : بیسیک کارا بیان داخل

                          نوشته اصلی توسط tahmine67
                          نه 2 پالس نگفتم 3 پالس از 3 پین میکرو پین b1 , d.6 , d7 , این 3 پالس خارج میشه و فقط زمان تناوب متفاوته و فرکانس ثابته
                          منظورتون Duty Cycle هستش؟

                          دوره تناوب یا زمان تناوب فرق کنه خوب فرکانس هم عوض می شه.

                          دیدگاه


                            #14
                            پاسخ : بیسیک کارا بیان داخل

                            حسام جان مشکل من این پالسها نیست مشکل همونی که توضیح دادم واسه اون چکار باید کرد؟

                            دیدگاه


                              #15
                              پاسخ : بیسیک کارا بیان داخل

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

                              دیدگاه

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