Keresés

Új hozzászólás Aktív témák

  • CPT.Pirk

    Jómunkásember

    válasz Jester01 #320 üzenetére

    Köszi, így már szépen keres, és talál is. :R
    Az az egyetlen probléma, hogy a találat mögötti karakterek helyét adja vissza. Próbálkoztam pár dolog DEC -rementálásával, de nem akar stimmelni.

  • CPT.Pirk

    Jómunkásember

    válasz Jester01 #318 üzenetére

    No most kicsit megint kérnék segítséget. Igyekeztem szimulálni, használni változókat hozzá, a fordító szerint nincs errorom, Viszont nem akar kijutni az első XLR-es ciklusból, pedig jónak néz ki a kód. Egyenlőre itt tart a kód: [link]

  • CPT.Pirk

    Jómunkásember

    válasz Jester01 #314 üzenetére

    No, akkor megnézve ezt, ha jól értem ez történik:

    Először:
    @R1 pointer által mutatott memóriahelyen lévő érték bekerül az akkumulátorba, valamint elmentjük a "tű" első és második karakterét.

    Aztán belépve az első ciklusba, először jön egy nulla vizsgálat, aztán ha nem nulla az Akku tartalma (@R0), akkor jön egy kizáró vagy kapcsolat, ami az AKKU és R3 nem egyezése esetén újraindítja a ciklust és közben arrébb teszi R0-át.
    Mikor megvan az első egyezés, akkor az R1 megkapja a "tű" második karakterét, valamint elmenti a "szénakazal" aktuális karakterét R4-be, és jön a ciklus 2.

    A második ciklus először betölti a szénakazal karakterét az akkuba, majd xor relációval megnézi, hogy egyeznek-e, ha nem, akkor kiugrik a mismatch ágra, és a szénakazal aktuális karakterétől kezdi újra keresni a loop2 az egyezéseket.
    Ha nem ugrott ki, akkor jön egy lezáró nulla keresés, majd ha megvan, és mindvégig egyezés volt, akkor visszaadja R0-ban a kazal első egyező karakterét, vagy annak helyét.

    Köszönöm a segítséget. :R

  • CPT.Pirk

    Jómunkásember

    válasz Jester01 #313 üzenetére

    Hol találok 8051 c libraryt? Már pár napja túrom a google-t, de vagy nem értek hozzá, vagy nem tudom miért, de nem találok semmi ilyesmit.

    Az strstr fgv sima C-s implementációját sem találtam meg, mindenhol csak egy példával be van mutatva, hogyan kell használni, aztán csókolom. Amiket találtam, azok meg házi kódok, de mindben van valami hiba, pl. egyéb string függvény hívások, stb.

    Továbbra is az a gondom, hogy sajnos nem tudom magamtól megírni ezt az egyszerű függvényt, folyamatábrát megrajzoltam, működését értem, de hogy pl. egy memóriaterületre mutató pointert hogyan kellene megcsinálni 8051-es Assembly-n, meg léptetni arrébb, stb., na az kínai nekem.

    szerk: csak nem ezt fordítottad le?

    #include <stdio.h>

    const char *mystrstr(const char *haystack, const char *needle)
    {
    if ( !*needle )
    {
    return haystack;
    }
    for ( ; *haystack; ++haystack )
    {
    if ( *haystack == *needle )
    {
    /*
    * Matched starting char -- loop through remaining chars.
    */
    const char *h, *n;
    for ( h = haystack, n = needle; *h && *n; ++h, ++n )
    {
    if ( *h != *n )
    {
    break;
    }
    }
    if ( !*n ) /* matched all of 'needle' to null termination */
    {
    return haystack; /* return the start of the match */
    }
    }
    }
    return 0;
    }

    int main(void)
    {
    const char text[] = "The quick brown fox jumps over the lazy dog.";
    const char word[] = "fox";
    const char *found = mystrstr(text, word);
    if ( found )
    {
    puts(found);
    }
    return 0;
    }

  • CPT.Pirk

    Jómunkásember

    Tudnátok nekem segíteni egy kicsit?

    Egy string kereső programot kellene átalakítani úgy, hogy kompatibilis legyen 8051-es mikrovezérlők utasításkészletével, regisztereivel.

    A kód PC-s verziója így néz ki:

    findnext:
    mov esi,edi ; esi = edi = pointers to somewhere in str1
    mov ecx,[esp + 14h] ; str2

    ;use edi instead of esi to eliminate AGI
    mov al,[edi] ; al is next char from str1

    add esi,1 ; increment pointer into str1

    cmp al,dl
    je first_char_found

    test al,al ; end of str1?
    jz not_found ; yes, and no match has been found

    loop_start:
    mov al,[esi] ; put next char from str1 into al
    add esi,1 ; increment pointer in str1
    in_loop:
    cmp al,dl
    je first_char_found

    test al,al ; end of str1?
    jnz loop_start ; no, go get another char from str1

    not_found:
    pop esi
    pop ebx
    pop edi
    xor eax,eax
    ret

    Ez egyébként elvileg a C-s strstr függvény is egyben. A kód innen származik: [link]

  • CPT.Pirk

    Jómunkásember

    válasz zka67 #306 üzenetére

    Köszi!

    A 2. feladatban az a lényeg, hogy 8 eszközt kell pwm vezérelni (0-127 a lehetséges értékek), miközben a mikrovezérlőknek legfeljebb 6 vezérlésére van lehetőségük, de mégis egy vezérlővel kellene 8 eszközt működtetni. A bemenet pedig egy 8*8 bites számsor.

    Itt igazából az a gond, hogy nem tudjuk, mit kellene csinálni.

  • CPT.Pirk

    Jómunkásember

    Kérnék egy kis segítséget. Az alábbi kódrészlet egy 8 bites, i8051 mikrovezérlőre írt kód, ami 16 darab számot átlagol. Nagy vonalakban annyit csinál, hogy 16 értéket összeadja, majd eltolja 4-el balra, mert ez felel meg a 16-al való osztásnak. Ezt sajnos nem sikerül megértenem, hogy miért.

    változók:
    DSEG

    ORG 22H
    CIKLUS_SZAM: DS 01H
    BCD_DIGIT_SZAM: DS 01H
    RESULT_H: DS 01H
    RESULT_L: DS 01H


    ORG 30H
    ADAT_BUFF: DS 16
    OSSZEG: DS 02
    UJ_ERTEK: DS 08

    átlagoló:

    ATLAGOLAS:
    CLEAR_MEM #OSSZEG,#02
    MOV R0, #ADAT_BUFF
    MOV R1, #OSSZEG + 01
    MOV R2, #10H

    ATL_A:
    CLR C
    MOV A,@R0
    ADDC A,@R1 ;alsó byte
    MOV @R1,A
    DEC R1
    MOV A,@R1
    ADDC A,#0 ;felső bit + túlcsordulás + 0
    MOV @R1,A
    INC R1
    INC R0
    DJNZ R2,ATL_A

    ;---------------------
    MOV R2,#04
    ATL_B:
    MOV R0,#OSSZEG
    CLR C
    MOV A,@R0
    RRC A
    MOV @R0,A
    INC R0
    MOV A,@R0
    RRC A
    MOV @R0,A
    DJNZ R2,ATL_B
    RET

    Ezt leszimuláltuk, működik. Viszont egy kis magyarázat jól jönne.

    Valamint kaptunk egy feladatot, amiben egy 8*8 (7) bites bemenő érték állít be 8 kimenetet adott értékre 0-127 között. Vagyis 1 bitsorozat -> 8 eltérő kimenet.

    Itt valami olyasmit kellene csinálnom, ami szétszedi a bemenő bitsorozatot 8 bites mezőkre, és egy kimeneti változót ennek megfelelően állít be, vagy másolja át az értékeket. Jól gondolkodok?

Új hozzászólás Aktív témák