اطلاعیه

Collapse
No announcement yet.

سوال در مورد تایمرکانتر

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

    سوال در مورد تایمرکانتر

    با سلام درمورد عملکرد برنامه پایین از مهندسین گرامی راهنمایی میخواستم.
    برنامه نور 20 عدد led رو به صورت آبشاری کنترل میکنه(توسط تایمر کانتر)
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 40
    $swstack = 32
    $framesize = 32

    Ddrd = &B11111111
    Ddrb = &B11111111
    Ddrc = &B111111

    Led_01 Alias Portd.0
    Led_02 Alias Portd.1
    Led_03 Alias Portd.2
    Led_04 Alias Portd.3
    Led_05 Alias Portd.4
    Led_06 Alias Portd.5
    Led_07 Alias Portd.6
    Led_08 Alias Portd.7
    Led_09 Alias Portb.0
    Led_10 Alias Portb.1
    Led_11 Alias Portb.2
    Led_12 Alias Portb.3
    Led_13 Alias Portb.4
    Led_14 Alias Portb.5
    Led_15 Alias Portc.0
    Led_16 Alias Portc.1
    Led_17 Alias Portc.2
    Led_18 Alias Portc.3
    Led_19 Alias Portc.4
    Led_20 Alias Portc.5


    Dim Tmrcount As Byte
    Dim Pwm_01 As Byte
    Dim Pwm_02 As Byte
    Dim Pwm_03 As Byte
    Dim Pwm_04 As Byte
    Dim Pwm_05 As Byte
    Dim Pwm_06 As Byte
    Dim Pwm_07 As Byte
    Dim Pwm_08 As Byte
    Dim Pwm_09 As Byte
    Dim Pwm_10 As Byte
    Dim Pwm_11 As Byte
    Dim Pwm_12 As Byte
    Dim Pwm_13 As Byte
    Dim Pwm_14 As Byte
    Dim Pwm_15 As Byte
    Dim Pwm_16 As Byte
    Dim Pwm_17 As Byte
    Dim Pwm_18 As Byte
    Dim Pwm_19 As Byte
    Dim Pwm_20 As Byte
    Dim Glow As Byte
    Dim Glow_count As Byte
    Dim Led_step As Byte
    Dim Flag As Bit
    Dim Ran_time2 As Word




    Glow = 100
    Const Count_max = 63

    Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1
    Compare1a = 1200
    Config Timer2 = Timer , Prescale = 8 , Clear Timer = 1
    Ocr2 = 200
    On Oc1a Isr_timer1
    On Oc2 Isr_timer2
    Enable Oc1a
    Enable Oc2
    Enable Interrupts

    Do
    !nop
    If Flag = 1 Then
    Gosub Next_led
    Flag = 0
    End If
    Loop
    End

    Isr_timer1:
    Set Flag
    Return

    Isr_timer2:
    If Tmrcount = 0 Then
    Tmrcount = Count_max
    Portd = 0
    Portb = 0
    Portc = 0
    Else
    If Pwm_01 = Tmrcount Then Set Led_01
    If Pwm_02 = Tmrcount Then Set Led_02
    If Pwm_03 = Tmrcount Then Set Led_03
    If Pwm_04 = Tmrcount Then Set Led_04
    If Pwm_05 = Tmrcount Then Set Led_05
    If Pwm_06 = Tmrcount Then Set Led_06
    If Pwm_07 = Tmrcount Then Set Led_07
    If Pwm_08 = Tmrcount Then Set Led_08
    If Pwm_09 = Tmrcount Then Set Led_09
    If Pwm_10 = Tmrcount Then Set Led_10
    If Pwm_11 = Tmrcount Then Set Led_11
    If Pwm_12 = Tmrcount Then Set Led_12
    If Pwm_13 = Tmrcount Then Set Led_13
    If Pwm_14 = Tmrcount Then Set Led_14
    If Pwm_15 = Tmrcount Then Set Led_15
    If Pwm_16 = Tmrcount Then Set Led_16
    If Pwm_17 = Tmrcount Then Set Led_17
    If Pwm_18 = Tmrcount Then Set Led_18
    If Pwm_19 = Tmrcount Then Set Led_19
    If Pwm_20 = Tmrcount Then Set Led_20
    Decr Tmrcount
    End If

    If Glow_count = 0 Then
    Glow_count = Glow
    If Pwm_01 > 0 Then Decr Pwm_01
    If Pwm_02 > 0 Then Decr Pwm_02
    If Pwm_03 > 0 Then Decr Pwm_03
    If Pwm_04 > 0 Then Decr Pwm_04
    If Pwm_05 > 0 Then Decr Pwm_05
    If Pwm_06 > 0 Then Decr Pwm_06
    If Pwm_07 > 0 Then Decr Pwm_07
    If Pwm_08 > 0 Then Decr Pwm_08
    If Pwm_09 > 0 Then Decr Pwm_09
    If Pwm_10 > 0 Then Decr Pwm_10
    If Pwm_11 > 0 Then Decr Pwm_11
    If Pwm_12 > 0 Then Decr Pwm_12
    If Pwm_13 > 0 Then Decr Pwm_13
    If Pwm_14 > 0 Then Decr Pwm_14
    If Pwm_15 > 0 Then Decr Pwm_15
    If Pwm_16 > 0 Then Decr Pwm_16
    If Pwm_17 > 0 Then Decr Pwm_17
    If Pwm_18 > 0 Then Decr Pwm_18
    If Pwm_19 > 0 Then Decr Pwm_19
    If Pwm_20 > 0 Then Decr Pwm_20
    Else
    Decr Glow_count
    End If

    Return

    Next_led:
    Select Case Led_step
    Case 1
    Pwm_20 = Count_max
    Case 2
    Pwm_19 = Count_max
    Case 3
    Pwm_18 = Count_max
    Case 4
    Pwm_17 = Count_max
    Case 5
    Pwm_16 = Count_max
    Case 6
    Pwm_15 = Count_max
    Case 7
    Pwm_14 = Count_max
    Case 8
    Pwm_13 = Count_max
    Case 9
    Pwm_12 = Count_max
    Case 10
    Pwm_11 = Count_max
    Case 11
    Pwm_10 = Count_max
    Case 12
    Pwm_09 = Count_max
    Case 13
    Pwm_08 = Count_max
    Case 14
    Pwm_07 = Count_max
    Case 15
    Pwm_06 = Count_max
    Case 16
    Pwm_05 = Count_max
    Case 17
    Pwm_04 = Count_max
    Case 18
    Pwm_03 = Count_max
    Case 19
    Pwm_02 = Count_max
    Case 20
    Pwm_01 = Count_max
    End Select

    Incr Led_step
    If Led_step = 20 Then Glow = 60
    If Led_step > 20 Then

    Ran_time2 = Rnd(1200)
    If Ran_time2 < 600 Then Ran_time2 = 600
    Compare1a = Ran_time2

    Ran_time2 = Rnd(6000)
    If Ran_time2 < 2000 Then Ran_time2 = 2000
    Waitms Ran_time2
    Led_step = 1
    Ocr2 = 200
    Glow = 8
    End If


    Return
    تو هنوز ناپدیدی، ز درون خود چه دیدی. سحری، چو آفتابی، ز درون خود برآئی

    #2
    پاسخ : سوال در مورد تایمرکانتر

    نبودد
    تو هنوز ناپدیدی، ز درون خود چه دیدی. سحری، چو آفتابی، ز درون خود برآئی

    دیدگاه


      #3
      پاسخ : سوال در مورد تایمرکانتر

      شما خودت برنامه نویس بسکام هستی؟
      دستورات رو بدونی راحت می تونی بفهمی چیکار کرده. فکر نکنم قسمت نا مفهومی داشته باشه. در هر صورت می تونید صبر کنید تا اونایی که بسکام کار هستن کمکتون کنن.

      دیدگاه

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