Memcopy
: 08 paź 2016, 13:19
Witam
Mam pytanie co do kodu poniżej ze strony Bartka. Chciałbym dokonać szybkiego kopiowania pomiedzy tablicami z tym że do sześciu Led(1), Led(2)...
nie wiem jak to dopisać
$regfile = "m32def.dat" $crystal = 8000000 Ddra = &B11111111 : Porta = &B11111111 Ddrb = &B00011111 : PORTB = &B11100000 Ddrc = &B11111111 : Portc = &B00000000 Ddrd = &B11111111 : PORTD = &B00000000 Config TIMER2 = Timer , Prescale = 8 , Compare = Disconnect , Clear Timer = 1 Enable COMPARE2 : On COMPARE2 Int0_isr : COMPARE2 = 124 Enable Interrupts '****************** Zmienne ******************* '*********************************************** Dim Licznik As Byte Dim Led(6) As Byte Dim Leds_pwm As Byte , M As Byte , Speed As Byte , Old_val As Byte D1 Alias Portc.0 : D2 Alias Portc.1 : D3 Alias Portc.2 : D4 Alias Portc.3 : D5 Alias Portc.4 D6 Alias Portc.5 Sw1 Alias PINB.5 Sw2 Alias Pinb.6 Do If Speed = 0 Then If Sw1 = 0 Then If Leds_pwm < 100 Then Incr Leds_pwm End If If Sw2 = 0 Then If Leds_pwm > 0 Then Decr Leds_pwm End If If Old_val <> Leds_pwm Then 'jesli wartość różni się od poprzedniej Old_val = Leds_pwm ' to zapamiętaj tę wartość Speed = 127 - Leds_pwm ' odejmij aktualną wartość PWM od 127 Shift Speed , Left , 1 ' Pomnóż razy dwa M = Memcopy(leds_pwm , Led(1) , 3 , 2 , 4 , 6 , 5)' tak nie działa End If End If Loop '************ Przerwanie timer 0 *************** '*********************************************** Int0_isr: Incr Licznik If Licznik = 100 Then Licznik = 0 If Licznik < Led(1) Then Set D1 Else Reset D1 If Licznik < Led(2) Then Set D2 Else Reset D2 If Licznik < Led(3) Then Set D3 Else Reset D3 If Licznik < Led(4) Then Set D4 Else Reset D4 If Licznik < Led(5) Then Set D5 Else Reset D5 If Licznik < Led(6) Then Set D6 Else Reset D6 If Speed > 0 Then Decr Speed Return
Mam pytanie co do kodu poniżej ze strony Bartka. Chciałbym dokonać szybkiego kopiowania pomiedzy tablicami z tym że do sześciu Led(1), Led(2)...
nie wiem jak to dopisać
$regfile = "m32def.dat" $crystal = 8000000 Ddra = &B11111111 : Porta = &B11111111 Ddrb = &B00011111 : PORTB = &B11100000 Ddrc = &B11111111 : Portc = &B00000000 Ddrd = &B11111111 : PORTD = &B00000000 Config TIMER2 = Timer , Prescale = 8 , Compare = Disconnect , Clear Timer = 1 Enable COMPARE2 : On COMPARE2 Int0_isr : COMPARE2 = 124 Enable Interrupts '****************** Zmienne ******************* '*********************************************** Dim Licznik As Byte Dim Led(6) As Byte Dim Leds_pwm As Byte , M As Byte , Speed As Byte , Old_val As Byte D1 Alias Portc.0 : D2 Alias Portc.1 : D3 Alias Portc.2 : D4 Alias Portc.3 : D5 Alias Portc.4 D6 Alias Portc.5 Sw1 Alias PINB.5 Sw2 Alias Pinb.6 Do If Speed = 0 Then If Sw1 = 0 Then If Leds_pwm < 100 Then Incr Leds_pwm End If If Sw2 = 0 Then If Leds_pwm > 0 Then Decr Leds_pwm End If If Old_val <> Leds_pwm Then 'jesli wartość różni się od poprzedniej Old_val = Leds_pwm ' to zapamiętaj tę wartość Speed = 127 - Leds_pwm ' odejmij aktualną wartość PWM od 127 Shift Speed , Left , 1 ' Pomnóż razy dwa M = Memcopy(leds_pwm , Led(1) , 3 , 2 , 4 , 6 , 5)' tak nie działa End If End If Loop '************ Przerwanie timer 0 *************** '*********************************************** Int0_isr: Incr Licznik If Licznik = 100 Then Licznik = 0 If Licznik < Led(1) Then Set D1 Else Reset D1 If Licznik < Led(2) Then Set D2 Else Reset D2 If Licznik < Led(3) Then Set D3 Else Reset D3 If Licznik < Led(4) Then Set D4 Else Reset D4 If Licznik < Led(5) Then Set D5 Else Reset D5 If Licznik < Led(6) Then Set D6 Else Reset D6 If Speed > 0 Then Decr Speed Return