با سلام درمورد عملکرد برنامه پایین از مهندسین گرامی راهنمایی میخواستم.
برنامه نور 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
برنامه نور 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
دیدگاه