اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

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

    مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

    سلام برنامه زیر فقط یکبار درست اجرا میشه دفعه دوم قاطی میکنه عملا هم بستم توی کدها یا کانفیگ ها مشکلی هست ؟
    توضیح: ورودی برنامه درست کار میکنه یعنی با تحریک c.0 برنامه شروع به کارمیکنه که و بعد از زمان مورد نظر که با تایمر 0 درست میشه استپ میکنه تا اینجا int0 , int1 هم درست کار میکنه اما دفعه دوم که پایه c.0 تحریک میشه دیگه نه تایمر 0 کارمیکنه نه int0 و int1 کار میکنه مدار رو هم عملا بستم .
    کد:
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    
    Config Timer0 = Timer , Prescale = 256
    
    Config Int0 = Low Level
    Config Int1 = Low Level
    
    Config Portb = Output
    Config Portc = Input
    
    Dim A As Byte , B As Byte , C As Word , D As Byte , E As Byte
    Dim Ee As Eram Byte
    
    Enable Interrupts
    Enable Int0
    On Int0 Tup
    
    Enable Interrupts
    Enable Int1
    On Int1 Tdown
    
    Enable Interrupts
    Enable Timer0
    Enable Ovf0
    
    On Timer0 Show
    
    A = Ee
    
    Config Debounce = 30
    
    Do
    
    W:
    
    Portb = &B00000000
    Debounce Pinc.0 , 1 , Y
    
    Goto W
    
    Y:
    
    Start Timer0
    
    Z:
    
    Portb = &B00000000
    Waitms A
    
    Portb = &B00000001
    Waitms A
    
    Portb = &B00000011
    Waitms A
    
    Portb = &B00000111
    Waitms A
    
    Portb = &B00001111
    Waitms A
    
    Portb = &B00001110
    Waitms A
    
    Portb = &B00001100
    Waitms A
    
    Portb = &B00001000
    Waitms A
    
    Goto Z
    
    Goto Y
    
    
    
    Loop
    
    End
    
    Tup:
    If A < 255 Then
    A = A + 5
    Ee = A
    waitms 50
    End If
    
    Return
    
    Tdown:
    If A > 10 Then
    A = A - 5
    Ee = A
    waitms 50
    End If
    
    Return
    
    Show:
    Incr C
    If C = 550 Then
    C = 0
    Stop Timer0
    Timer0 = 0
    Goto W
    End If
    
    Return

    #2
    پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

    بعد اینکه برنامت یه بار اجرا میشه مقدار متغیر هات دوباره صفر نمیشه ! اینو چک کن
    امير مسعود مقدم

    دیدگاه


      #3
      پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

      نوشته اصلی توسط masoud.moghaddam21
      بعد اینکه برنامت یه بار اجرا میشه مقدار متغیر هات دوباره صفر نمیشه ! اینو چک کن
      سلام کدوم متغیر ؟ c رو که برای ذخیره تعداد سر ریز هست صفر میکنم .

      دیدگاه


        #4
        پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

        نوشته اصلی توسط faramarz521
        سلام کدوم متغیر ؟ c رو که برای ذخیره تعداد سر ریز هست صفر میکنم .
        ee , a چطور ؟؟؟
        امير مسعود مقدم

        دیدگاه


          #5
          پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

          سلام
          این برنامه کلا مشکل داره ،شما اصول برنامه نویسی رو اجرا نکردید
          شما زیربرنامه yرو return نکردید
          شما کجا متغیر a رو مقدار دادید وبردید تو حافظه که دارین از حافظه فراخونیش می کنید(البته این مشکل نیست به هر حال یه عددی مثل 255 بهتون میده)
          بهتره در مورد برنامتون توضیح بیشتری بدید تا دوستان برنامه رو اصلاح کنند

          دیدگاه


            #6
            پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

            برنامه رو اصلاح کردم ببینید کار میکنه یا خیر ؟؟؟
            کد:
             $regfile = "m8def.dat"
            
            $crystal = 8000000
            
            Config Timer0 = Timer , Prescale = 256
            
            Config Int0 = Low Level
            Config Int1 = Low Level
            
            Config Portb = Output
            Config Portc.1 = Input
            
            Dim A As Byte , B As Byte , C As Word , D As Byte , E As Byte
            Dim Ee As Eram Byte
            Dim Pro As Byte
            Pro = 1
            
            Enable Interrupts
            Enable Int0
            On Int0 Tup
            Enable Int1
            On Int1 Tdown
            
            Enable Timer0
            On Timer0 Show
            A = Ee
            
            Config Debounce = 30
            
            Do
             While Pro = 1
            
            Portb = &B00000000
            Debounce Pinc.0 , 1 , Y
            
            Wend
            
            
            
            While Pro = 2
            
            Portb = &B00000000
            Waitms A
            
            Portb = &B00000001
            Waitms A
            
            Portb = &B00000011
            Waitms A
            
            Portb = &B00000111
            Waitms A
            
            Portb = &B00001111
            Waitms A
            
            Portb = &B00001110
            Waitms A
            
            Portb = &B00001100
            Waitms A
            
            Portb = &B00001000
            Waitms A
            Debounce Pinc.0 , 1 , Exit1
            
            Wend
            
            
            
            
            
            Loop
            
            End
            
            Tup:
            If A < 255 Then
            A = A + 5
            Ee = A
            waitms 50
            End If
            
            Return
            
            Tdown:
            If A > 10 Then
            A = A - 5
            Ee = A
            waitms 50
            End If
            
            Return
            
            Show:
            Incr C
            If C = 550 Then
            C = 0
            Stop Timer0
            Timer0 = 0
            Pro = 2
            End If
            
            Return
              Y:
            
            Start Timer0
            Return
            Exit1:'برای خارج شدن از حلقه ی دوم به اوله
            Pro = 1
            return

            دیدگاه


              #7
              پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

              ممنون دوستان توضیح برنامه اینطوره :
              وقتی به پایه c.0 یه پالس اعمال میشه برنامه میره و پورت b رو به همون ترتیبی که نوشتم تغییر میده حدود 25 ثانیه این کارو میکنه و برمیگرده پورت b رو 0 میکنه و منتظر میمونه تا دویاره c.0 تحریک بشه .
              int0 و int1 هم سرعت اجرای برنامه ( سرعت تغییر پورت b ) رو کم و زیاد میکنه ( که مقدار یا سرعتی که کاربر تنظیم میکنه باید تو حافظه دائمی ذخیره بشه ) .

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

              دیدگاه


                #8
                پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

                سلام
                من کامل نخوندم ، اما گرفتم موضوع چیه!!!
                اگر میکرو تا چند مرحله بره ، و کارهایی رو اجرا کنه و بعد lock بشه ، 2امکان وجود داره

                1-شما توی برنامتون "چاله" ایجاد کردید ، یعنی به نقطه ای میرسه ، دیگه نمیتونه به برنامه اصلی برگرده ، اما چون با وقفه کار میکنید این احتمال داره که میکرو هنگ میکنه و به سخت افزار مرتبط میشه ،
                راهکار ها :
                1-خازن الکترولیت حتما برای میکرو قرار بدید
                2-میکرو را عوض کنید
                3-فرکانس میکرو رو کاهش بدید
                4-هر موقع که وقفه می خواد ایجاد بشه ، با دستور waitms تاخیر بدید

                2-احتمال داره سخت افزار باشه و در بالا توضخ داده شد

                دیدگاه


                  #9
                  پاسخ : مشکل در برنامه بسکام (فقط یکبار درست اجرا میشود)

                  نوشته اصلی توسط faramarz521
                  ممنون دوستان توضیح برنامه اینطوره :
                  وقتی به پایه c.0 یه پالس اعمال میشه برنامه میره و پورت b رو به همون ترتیبی که نوشتم تغییر میده حدود 25 ثانیه این کارو میکنه و برمیگرده پورت b رو 0 میکنه و منتظر میمونه تا دویاره c.0 تحریک بشه .
                  int0 و int1 هم سرعت اجرای برنامه ( سرعت تغییر پورت b ) رو کم و زیاد میکنه ( که مقدار یا سرعتی که کاربر تنظیم میکنه باید تو حافظه دائمی ذخیره بشه ) .

                  ممنون آقای قاسمی نیا از وقتی که گذاشتید و برنامه ای که نوشتید اما دقیقا اون چیزی که من میخواستم نشد با توضیحاتی که دادم اگه برنامه رو اصلاح کنید خیلی ممنون میشم .
                  سلام
                  برنامه رو تغییر دادم ببینید خوبه یا نه...
                  کد:
                  $regfile = "m8def.dat"
                  
                  $crystal = 8000000
                  
                  Config Timer1 = Timer , Prescale = 1024
                  
                  Config Int0 = Rising
                  Config Int1 = Rising
                  
                  Config Portb = Output
                  Config Pinc.0 = Input
                  
                  Dim A As Byte , B As Byte , C As Word , D As Byte , E As Byte
                  Dim Ee As Eram Byte
                  Dim Pro As Byte
                  Pro = 1
                  
                  Enable Interrupts
                  Enable Int0
                  On Int0 Tup
                  Enable Int1
                  On Int1 Tdown
                  
                  Enable Timer1
                  On Timer1 Show
                  A = Ee
                  
                  Config Debounce = 30
                  
                  Do
                  
                   While Pro = 1
                  
                  
                  Debounce Pinc.0 , 1 , Y , Sub
                  
                  Wend
                  
                  
                  
                  While Pro = 2
                  
                  Rotate Portb , Right
                  
                  Waitms A
                  Wend
                  
                  
                  
                  
                  
                  Loop
                  
                  End
                  
                  Tup:
                  If A < 255 Then
                  A = A + 10
                  Ee = A
                  Waitms 10
                  End If
                  
                  Return
                  
                  Tdown:
                  If A > 10 Then
                  A = A - 5
                  Ee = A
                  Waitms 10
                  End If
                  
                  Return
                  
                  Show:
                  Incr C
                  If C = 3 Then
                  C = 0
                  Stop Timer1
                  Timer1 = 0
                  Pro = 1
                  Portb = 0
                  End If
                  
                  Return
                    Y:
                  
                  Start Timer1
                  Pro = 2
                  Portb = 240
                  
                  Return

                  دیدگاه

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