Hirdetés

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

  • 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