logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zamienić 8-bitowy BIN na BCD na procesorze AVR?

Tom01 03 Cze 2003 21:53 4124 6
REKLAMA
  • #1 236864
    Tom01
    Poziom 2  
    Posty: 2
    Jestem początkujący w mikroprockach - potrzebuje proceduje zamiany BIN [moze byc 8bit] na BCD dla procesora AVR.
  • REKLAMA
  • #2 237196
    myrcin
    Poziom 16  
    Posty: 325
    Pomógł: 2
    Ocena: 29
    Witam!
    Jeżeli to ma być w asm to musisz stworzyć tablice w pamięci z kodami BCD w kolejności 0,1,2,..,9. Natępnie ładujesz do rejestru adres pierwszego elementu tej tablicy,czyli adres zera, i odczytujesz kod bcd z tego adresu powiększony o liczbę której bcd chcesz uzyskać. W avrach jest trochę dziwna organizacja pamięci i adresy trzeba mnożyć przez 2, niezapomnij o tym. Procedurkę dla przykładu w asm mam w domu (działam z pracy). Jak chcesz to jutro ją wrzucę - napisz. Pzd
  • REKLAMA
  • #3 238575
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Troche to skompilkowane. Zależy na jakiego procka, bo nie wszystkie AVR mają dzielenie, w tych co mają dzielisz liczbę przez 100 i masz setki, potem reszte przez 10 i 10, no i reszta stanowi jedności np:

    135 / 100 = 1 i r35
    35 / 10 = 3 i r5
    czyli BCD będzie trzy tetrady 1 3 i 5;-). Jak nie ma w prou dzielenia to napisz to w C, kompilator sam przekombinuje, jak koniecznie chcesz asm to skorzystaj z tablicy jak podaje myrcin.
  • REKLAMA
  • #4 255990
    marchewa101
    Poziom 17  
    Posty: 301
    Pomógł: 2
    Ocena: 8
    myrcin -> jak bedziesz kiedys w domu to moglbys mi podeslac ta procedurke z uzyciem tablicy
  • #5 258023
    sadam
    Poziom 11  
    Posty: 6
    Niebardzo rozumiem o co chodzi ale jeśli dobrze zrozumiałem to dobra bedzie chyba korekcja dziesiętna
  • #6 260491
    marchewa101
    Poziom 17  
    Posty: 301
    Pomógł: 2
    Ocena: 8
    Mi konkretnie chodzi o programik z uzyciem tablic w ASM na AVR
  • REKLAMA
  • #7 260595
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    co wy konie jesteście czy co bo kombinujecie jak niewiem

    założenia :

    brak instrukcji dzielenia ( bo jesli by było to dzielimy przez 10 i w wyniku mamy 1 cyfrę a w reszcie drugą cyfre , nic prostrzego ;) )

    Nie korzystamy z pamięci bo np 1200 nie ma takiej instrukcji ;/

    .........ldi r18,liczba bin do zaminy
    .........clr r16
    next1:
    .........subi r18,100.........; odejmijmy 100
    .........brcs ujemna100
    .........inc r16..............; setki +1
    .........sjmp next1

    ujemna100:
    ..........subi r18,156............; -> +100 = -(-100) -> 156
    ;) poprostu niema instrukcji addi r17,100 jeżeli nie można dodać do odejmijmy ujemną ;)

    .........clr r17
    next2:
    .........subi r18,10.........; odejmijmy 10
    .........brcs ujemna10
    .........inc r17..............; dziesiatki +1
    .........sjmp next2
    ujemna10:
    ..........subi r18,246............; -> +10 = -(-10) -> 246 ;)


    jako że avr jest szybki to wykona się szybko to zrobił więcej niż chciałeś bo masz bin3bcd i tak w r16 masz setki w r17 dzesiątki a r18 jednostki

    jakieś pytania ?


    ( napiszcie co o tym sądziecie nie jestem zwolennikiem pisania tak napiechotę ale nieraz najprostrze roziązania są najskuteczniejsze ) :)

    p.S kropki sa tylko po to bo skrypy na stronie je usuwa i było by nieczytelnie

    niech ktoś sprawdzi ile zajmuje procedurka z tablica a ile ta

Podsumowanie tematu

✨ Dyskusja dotyczy procedury zamiany 8-bitowej liczby binarnej (BIN) na kod BCD na procesorze AVR. Propozycje rozwiązań obejmują dwie główne metody: wykorzystanie tablicy w pamięci z wartościami BCD dla cyfr 0-9 oraz algorytm dzielenia liczby przez 100 i 10 w celu wyodrębnienia setek, dziesiątek i jedności. W przypadku procesorów AVR bez instrukcji dzielenia sugerowane jest implementowanie dzielenia przez odejmowanie wielokrotne (pętla odejmująca 100 i 10), co pozwala uzyskać poszczególne cyfry BCD. Wskazano również, że kompilator C może automatycznie wygenerować odpowiedni kod, jeśli nie jest wymagana implementacja w asemblerze. Przykładowy kod ASM z użyciem tablicy oraz alternatywne podejście z odejmowaniem zostały omówione, podkreślając specyfikę organizacji pamięci AVR i konieczność uwzględnienia mnożenia adresów przez 2.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA