Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Część bascoma w asemblerze.

Dawid 88 17 Mar 2014 18:04 1533 7
  • #1 17 Mar 2014 18:04
    Dawid 88
    Poziom 14  

    Chciałbym was prosić o małą pomoc. Mam króciutki kod w bascomie polegający na zamianie stringa 3 znakowego na jeden bajt ( wartość po przeliczeniu nie przekracza 255)

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Problem w tym że ten kawałek kodu powtarza się dużo razy a czasu jest nie wiele. Połączenie dużej ilości powtórzeń i dużej ilości cykli zegara na samą funkcję Mid bardzo mi przeszkadza. Według symulatora bascoma ten jeden fragment chodzi 126 cykli zegara. Chciałbym spróbować napisać to w asemblerze ale niestety mam zerowe doświadczenie we wkładaniu wstawek asm.
    Z tego co się zdążyłem pobawić to w asemblerze zrobiłem samo przeliczenie
    B = B * 100 i 10
    A = A + B
    zostawiając w bascomie funkcję Mid i symulator zszedł do 109 cykli zegara. niestety tu się zaciąłem i nie wiem jak się zabrać za funkcję Mid.

    0 7
  • #4 19 Mar 2014 10:10
    BlueDraco
    Specjalista - Mikrokontrolery

    Zacznij zatem od porzucenia Bascoma i przesiadki na C, skoro zależy Ci na wydajności. Przy okazji możesz wziąć procesor tańszy od AVR i z 10 razy szybszy, np. jakiegoś Cortexa.

    0
  • #5 19 Mar 2014 12:11
    Mundi1970
    Poziom 24  

    Bez asemblera 59 - 64 cykli, łańcuch może mieć wartość od "000" do "255":

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #6 24 Mar 2014 11:04
    30402
    Użytkownik usunął konto  
  • #7 12 Maj 2014 17:42
    maciek 222
    Poziom 10  

    Witam mam podobny problem i nijak nie mogę sobie poradzić LED z WS2812B
    pierwsza dioda w taśmie się zapala (wszystkie kolory, i PWM jest oki) a następne nie chcą niestety może mi ktoś pomoże :( - dzięki

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    $regfile = "m328pdef.DAT"
    $crystal = 16000000
    Config Portd.1 = Output
    Pind.1 = 0

    Dim A As Word

    Dim Green As Byte , Red As Byte , Blue As Byte


    Red = 100
    Green = 200
    Blue = 10




    Do

    Gosub Rgb0
    Wait 1

    Loop



    'Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Rgb0:
    Loadadr Green , X 'załaduj adres zmiennej GREEN do rejestru X

    'niestety to też mi nie działa
    $asm
    ; .dseg
    ; Rsbufor : .byte 16 ; Rezerwuje 16 Bajtów Dla Rsbufor


    ;ustawić portD na 1 i w zależności od BRCS C=1 tzn bit=1 1=800ns 0=400ns
    ;-----""------ na 0 ------""----- od BRCS C=0 tzn bit=0 0=400ns 1=800ns
    ;Ldi R17,(X) ; Kolor 1 Cykl

    Ldi r16,30 ;ilosc diod LDI laduj do r16
    ;ldi r17,255 ;kolor
    INC R16
    LDI R18,3

    ;Loop6:
    ; ldi ZL,low (Ledy*2) ;adres tabeli w pamięci programu
    ;ldi ZH,high (Ledy*2) ; niestety taki zapis nie mi kompiluje Bascom


    Ldi R17,5 ; Kolor 1 Cykl
    Loop6:
    Ldi r19,8 ;ilosc bitow 1 CYKL
    push r17

    ; 12,8=800 13 CYKLI 810ns
    ; 6,4=400 6 CYKLI 375ns
    ;150ns Tolerancja 2,4 Cykle
    Loop4:

    SBI portd,1 ; USTAWIA 1 NA PORCIE D 2 CYKLE
    add r17,r17 ; 1 CYKL
    NOP ; 1 CYKL
    NOP ; 1 CYKL
    brcs jeden ; jesli 1bit to C=1 jesli 0 to C=0 2 CYKLE lub 1
    ; SBIS PIND, 3 ' jak bit ustawiony to omiń skok
    cbi PORTd,1 ; USTAW 0 NA PORCIE 2 CYKLE

    Jeden:

    nop
    nop
    nop
    nop
    NOP
    DEC R19 ; 1 CYKL


    cbi PORTd,1 ; ZERUJ NA PORCIE D 2 CYKLE

    NOP
    NOP
    BRNE Loop4 ; 2 Cykle
    DEC R18
    pop r17
    add r17,r17
    BRNE LOOP6

    NOP


    rjmp LOOP8 ; 2 CYKLE


    '---------------------------------------------------------------------------------
    '---------------------------------------------------------------------------------

    Loop8:

    $end Asm

    Return
    End

    Ledy:
    Data 10 , 20 , 30
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #8 14 Maj 2014 17:06
    maciek 222
    Poziom 10  

    Witam, może jednak ktoś rzuci okiem - niestety jestem początkujący :(. Dzięki.

    0