اطلاعیه

Collapse
No announcement yet.

راهنمایی در نوشتن یه برنامه ساده

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

    راهنمایی در نوشتن یه برنامه ساده

    سلام و عرض ارادت خدمت مهندسین.

    بنده اطلاعات کمی راجع به زبان برنامه نویسی بسکام دارم (درحال یادگیری هستم) با کمک شما یه راهنمایی واسه یه برنامه ساده میخوام.

    شما دوشستی مثلا PD.0 و PD.1 (البته فرقی نداره) به عنوان ورودی و PC.0 و PC.1 هم به عنوان خروجی و متغیر A هم به عنوان مثلا Byte.

    اول کار من میام Aرو مقدارشو رو صفر میکنم یعنی A=0

    سپس میام با استفاده از PD.0 یه واحد به A اضافه میکنم. یعنی incr A
    وشستی PD.1 رو به عنوان کم کردن A قرار میدم یعنی decr A

    حالا میام یه شرط ساده میذارم و میگم اگر مثلا A از 10 بیشتر شد PC.0 رو 5ثانیه روشن کن و سپس خاموش شه.
    if A>10 then
    set portc.0
    wait 5
    reset portc.0
    endif

    و در ادامه میگم اگر A کوچتر از 5 شد PC.1 رو 5ثانیه روشن کن سپس خاموش کن.

    if A<5 then
    set portc.1
    wait 5
    reset portc.1
    endif

    تا اینجا در برنامه مشکلی نیست.

    مشکل از اینجاست که وقتی A>10 میشه PC.0همینطور پشت سر هم روشن و خاموش میشه در صورتی که یکبار میخوام روشن و خاموش بشه و اگر دوباره A کوچکتر از 10 شده خروجی غیر فعال و اگر دوباره افزایش پیدا کرد فقط یک بار روشن و خاموش بشه. اگر از راه DO و LOOP استفاده نکنم این پروسه فقط یکبار صورت میگیره. درصورتی که من دائما میخوام استفاده کنم دوستان هرچی بلدن لطفا به صورت برنامه نویسی قرار بدن. متشکرم
    I WORK HARDLY AND I HAVE BIG DREAMS

    #2
    پاسخ : راهنمایی در نوشتن یه برنامه ساده

    سلام دوست عزیز...اگه میشه برنامه رو به صورت کامل بزار تا ببینیم
    سوزدو افروزدو نابود شود هر که بخندد به شب تار کسی
    بی گمان دست به آغوش نگارش ببرند هرکسی بوسه ستاند ز لب یار کسی

    دیدگاه


      #3
      پاسخ : راهنمایی در نوشتن یه برنامه ساده

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

      $regfile = "m8def.dat"
      $crystal = 1000000
      Config Portd = Input
      Config Portc = Output

      Dim A As Byte

      A = 0

      Do

      If Pind.0 = 1 Then Incr A

      If Pind.1 = 1 Then Decr A

      If A > 10 Then
      Set Portc.0
      Wait 5
      Reset Portc.0
      End If

      Loop
      End
      I WORK HARDLY AND I HAVE BIG DREAMS

      دیدگاه


        #4
        پاسخ : راهنمایی در نوشتن یه برنامه ساده

        با سلام

        دوست عزیز دقت کن ایت طبیعی هست که اینطوری بشه


        A = 0 -------------------------اینجا به متغییر aمقدار دادی خب .

        Do

        If Pind.0 = 1 Then Incr A ---------------> اینجا اگر این پین رو یک بکنی aافزایش پیدا میکنه ووقتی به 11 رسید شر ط اجرا میشه .دقت :شرط میگه 5 ثانیه روشن بعد خاموش اون شرط شما اجرا میشه ولی بعد 5 ثانیه برنامه چیکار میکنه؟؟؟؟ چون تو حلقه قرار داره برمیگرده وچون بازم متغیره شما عددش بزرگتر از 10 هست بازم شرط اجرا میشه
        واین طوری چرخه ادامه پیدا مینه وشما شاهد این چشمک زدن هستید .شما باید کاری بکنید بعد 5 ثانیه از حلقه بیاد بیرون
        موفق باشید


        If Pind.1 = 1 Then Decr A

        If A > 10 Then
        Set Portc.0
        Wait 5
        Reset Portc.0
        End If

        Loop
        معلوليت محدوديت نيست

        آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

        دیدگاه


          #5
          پاسخ : راهنمایی در نوشتن یه برنامه ساده

          نوشته اصلی توسط mahdi210
          با سلام

          دوست عزیز دقت کن ایت طبیعی هست که اینطوری بشه


          A = 0 -------------------------اینجا به متغییر aمقدار دادی خب .

          Do

          If Pind.0 = 1 Then Incr A ---------------> اینجا اگر این پین رو یک بکنی aافزایش پیدا میکنه ووقتی به 11 رسید شر ط اجرا میشه .دقت :شرط میگه 5 ثانیه روشن بعد خاموش اون شرط شما اجرا میشه ولی بعد 5 ثانیه برنامه چیکار میکنه؟؟؟؟ چون تو حلقه قرار داره برمیگرده وچون بازم متغیره شما عددش بزرگتر از 10 هست بازم شرط اجرا میشه
          واین طوری چرخه ادامه پیدا مینه وشما شاهد این چشمک زدن هستید .شما باید کاری بکنید بعد 5 ثانیه از حلقه بیاد بیرون
          موفق باشید


          If Pind.1 = 1 Then Decr A

          If A > 10 Then
          Set Portc.0
          Wait 5
          Reset Portc.0
          End If

          Loop
          منم میدونم قضیه اینه بنظرتون از دستور Loop until A>10 استفاده کنم
          I WORK HARDLY AND I HAVE BIG DREAMS

          دیدگاه


            #6
            پاسخ : راهنمایی در نوشتن یه برنامه ساده

            میتوانید یه حلقه جدا بزارید بره شر ط شما رو اجرا بکنه برگرده تو حلقه اصلی
            مثال :
            barname:

            Do
            If A > 10 Then
            goto barname2
            end if
            If Pind.0 = 1 Then Incr A

            If Pind.1 = 1 Then Decr A

            loop
            barname2:
            do
            Set Portc.0
            Wait 5
            Reset Portc.0
            goto barname1
            End If
            معلوليت محدوديت نيست

            آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

            دیدگاه


              #7
              پاسخ : راهنمایی در نوشتن یه برنامه ساده

              نوشته اصلی توسط mahdi210
              میتوانید یه حلقه جدا بزارید بره شر ط شما رو اجرا بکنه برگرده تو حلقه اصلی
              مثال :
              barname:

              Do
              If A > 10 Then
              goto barname2
              end if
              If Pind.0 = 1 Then Incr A

              If Pind.1 = 1 Then Decr A

              loop
              barname2:
              do
              Set Portc.0
              Wait 5
              Reset Portc.0
              goto barname1
              End If
              تشکر از راهنماییتون مهندس جان
              I WORK HARDLY AND I HAVE BIG DREAMS

              دیدگاه


                #8
                پاسخ : راهنمایی در نوشتن یه برنامه ساده

                barname:

                Do
                If A > 10 Then
                goto barname2
                end if
                If Pind.0 = 1 Then Incr A

                If Pind.1 = 1 Then Decr A

                loop
                barname2:
                do
                Set Portc.0
                Wait 5
                Reset Portc.0
                goto barname1<-----------------------<<<
                End If

                در عمل فکر کنم اونی که می خواهید باز م نشه .چون بازم متغیر شما عدد 10 رو داره بازم شروع میکنه به پرش تو حلقه دوم وبازم چشمک زدن ادامه داره

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

                آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

                دیدگاه


                  #9
                  پاسخ : راهنمایی در نوشتن یه برنامه ساده

                  نوشته اصلی توسط mahdi210
                  barname:

                  Do
                  If A > 10 Then
                  goto barname2
                  end if
                  If Pind.0 = 1 Then Incr A

                  If Pind.1 = 1 Then Decr A

                  loop
                  barname2:
                  do
                  Set Portc.0
                  Wait 5
                  Reset Portc.0
                  goto barname1<-----------------------<<<
                  End If

                  در عمل فکر کنم اونی که می خواهید باز م نشه .چون بازم متغیر شما عدد 10 رو داره بازم شروع میکنه به پرش تو حلقه دوم وبازم چشمک زدن ادامه داره

                  حالا باید کاری بکنی که با یه تریگر از حلقه دوم خارج بشه یعنی وقتی اون پین d.0 رو که میخوای ست بکنی بفهمه داره یه تغیراتی صورت میگیره از حلقه خاج میشه وبه برنامه اصلی میره وبرنامه رو چک میکنه
                  خدایی همه راهو انتخاب کرد ولی بازم چشمک میزنه!!
                  I WORK HARDLY AND I HAVE BIG DREAMS

                  دیدگاه


                    #10
                    پاسخ : راهنمایی در نوشتن یه برنامه ساده

                    دوستان کسی نیست کمک کنه؟؟
                    I WORK HARDLY AND I HAVE BIG DREAMS

                    دیدگاه


                      #11
                      پاسخ : راهنمایی در نوشتن یه برنامه ساده

                      نوشته اصلی توسط meysamjet

                      $regfile = "m8def.dat"
                      $crystal = 1000000
                      Config Portd = Input
                      Config Portc = Output

                      Dim A As Byte

                      A = 0

                      Do

                      If Pind.0 = 1 Then Incr A

                      If Pind.1 = 1 Then Decr A

                      If A > 10 Then
                      Set Portc.0
                      Wait 5
                      Reset Portc.0
                      End If

                      Loop
                      End
                      در این برنامه وقتی مثلا پورت d.0 یک میشه یعنی کلید مربوط به افزایش فشرده میشه برنامه به صورت پشت سرهم و با سرعت زیاد مقدار a رو افزایش میده بنابراین همه چی به هم میریزه

                      حالا شما برای رفع این مشکل باید از دستور debounce استفاده کنید
                      مثلا
                      کد:
                      config debounce = 150
                      debounce pind.0,1,increment,sub
                      .
                      .
                      .
                      
                      increment:
                      incr a
                      return
                      من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                      آلبرت اینشتین
                      منبع: http://fa.wikiquote.org

                      دیدگاه


                        #12
                        پاسخ : راهنمایی در نوشتن یه برنامه ساده

                        Do
                        If A > 10 Then
                        goto barname2
                        end if
                        If A < 5 Then
                        goto barname2
                        end if
                        If Pind.0 = 1 Then
                        waitms 50 ------------------------------>به این خاطر هست که وقتی پین رو یک میکنی تا aافزایش با سرعت زیاد 10 بیستا افزایش نده خودت میتونی اون زمان مناسب رو با آزمایش خطا بدست بیاری
                        incr a
                        endif
                        If Pind.1 = 1 Then
                        waitms50
                        decr a
                        endif
                        loop
                        barname2:
                        do
                        If Pind.0 = 1 Then ---------------->این به این خاطر هست که چون توی یه حلقه دیگه هستیم دستور incrکه با یک کردن پین در حلقه بالادادیم چون اینجا کار نمیکرد از کار نیوفته وبا یک کردن پین هم aافزایش بده وهم بره به محل اصلی یعنی حلقه اول وشروع به تست شرط بکنه
                        incr a
                        goto barname1
                        end if
                        If Pind.1 = 1 Then
                        decr a
                        goto barname1
                        endif
                        if a<5 then
                        set port c.1
                        wait 5
                        resetportc.1
                        goto barname1
                        end if
                        Set Portc.0
                        Wait 5
                        Reset Portc.0
                        goto barname1
                        End If

                        تو این سیستمم پرتیوس وبسکام ندارم ولی به نظر مشکلی نمیاد خودتون یه تستی بکنید

                        یادم رفت یه چیزی بگم منم مبتدی هستم وچیز هایی که یاد گرفتم با کمک دوستان eca هست .جا داره از همشون تشکر کنم.
                        معلوليت محدوديت نيست

                        آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

                        دیدگاه


                          #13
                          پاسخ : راهنمایی در نوشتن یه برنامه ساده

                          نوشته اصلی توسط mahdi210
                          Do
                          If A > 10 Then
                          goto barname2
                          end if
                          If A < 5 Then
                          goto barname2
                          end if
                          If Pind.0 = 1 Then
                          waitms 50 ------------------------------>به این خاطر هست که وقتی پین رو یک میکنی تا aافزایش با سرعت زیاد 10 بیستا افزایش نده خودت میتونی اون زمان مناسب رو با آزمایش خطا بدست بیاری
                          incr a
                          endif
                          If Pind.1 = 1 Then
                          waitms50
                          decr a
                          endif
                          loop
                          barname2:
                          do
                          If Pind.0 = 1 Then ---------------->این به این خاطر هست که چون توی یه حلقه دیگه هستیم دستور incrکه با یک کردن پین در حلقه بالادادیم چون اینجا کار نمیکرد از کار نیوفته وبا یک کردن پین هم aافزایش بده وهم بره به محل اصلی یعنی حلقه اول وشروع به تست شرط بکنه
                          incr a
                          goto barname1
                          end if
                          If Pind.1 = 1 Then
                          decr a
                          goto barname1
                          endif
                          if a<5 then
                          set port c.1
                          wait 5
                          resetportc.1
                          goto barname1
                          end if
                          Set Portc.0
                          Wait 5
                          Reset Portc.0
                          goto barname1
                          End If

                          تو این سیستمم پرتیوس وبسکام ندارم ولی به نظر مشکلی نمیاد خودتون یه تستی بکنید

                          یادم رفت یه چیزی بگم منم مبتدی هستم وچیز هایی که یاد گرفتم با کمک دوستان eca هست .جا داره از همشون تشکر کنم.
                          ببین دوست عزیز این مشکل من نیست. من با دستور debounce کامل مسلطم. اینم یه برنامه واسه تسته. نخواستم پیچیدش کنم. مشکل من تکرار و چشمک زدن LED زمانی که A>10 میشه هست. من میخوام یک بار چشمک بزنه همین. البته بابت پاسختون هم ممنونم
                          I WORK HARDLY AND I HAVE BIG DREAMS

                          دیدگاه


                            #14
                            پاسخ : راهنمایی در نوشتن یه برنامه ساده

                            سلام.شما ها چرا اینقدر موضوع را پیچیده می کنید؟
                            از while و wend استفاده کنید خیلی راحت تر و آسان تر نیز هست!
                            هرچی می فهمم می فهمم که خیلی نفهمم!

                            دیدگاه


                              #15
                              پاسخ : راهنمایی در نوشتن یه برنامه ساده

                              نوشته اصلی توسط E.E.A
                              سلام.شما ها چرا اینقدر موضوع را پیچیده می کنید؟
                              از while و wend استفاده کنید خیلی راحت تر و آسان تر نیز هست!
                              سلام میتونید یه نمونه برنامه بذارید و توضیح کوچیک بدید؟؟
                              البته به غیر از مثال های بسکام
                              I WORK HARDLY AND I HAVE BIG DREAMS

                              دیدگاه

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