Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

program zamiany kodu bcd na szesnastkowy

nidzgor
-
-
Posty:2
Rejestracja:16 lut 2004, o 10:39
Lokalizacja:Sierpc
program zamiany kodu bcd na szesnastkowy

Postautor: nidzgor » 20 lut 2004, o 16:38

Tak jak napisałem w temacie szukam takiego programu który by zamieniał bcd na heksadowolnej długości słowa.program ten mam napisać w asemblerze na mk 8051 .Przyjmę wszystkie projekty tylko napiszcie na jaki asembler ma on chodzić.
za pomoc dzia

Awatar użytkownika
gawel
-
-
Posty:683
Rejestracja:24 lis 2003, o 11:19
Lokalizacja:Białystok

Postautor: gawel » 21 lut 2004, o 13:34

Kod BCD zawiera po dwie cyfry w każdym bajcie (liczby są z zakresu 0 .. 9 zapisane na 4 bitach). Kod hex opisuje liczby z zakresu 0..15 zapisane na 4 bitach, więc w pewnym sensie jest tożsamy.
A może ja nie rozumiem zadania?

mw158979
-
-
Posty:48
Rejestracja:28 lis 2003, o 20:09
Lokalizacja:Warszawa

Postautor: mw158979 » 21 lut 2004, o 20:17

Ja tez mam pewne watpliwosci co do zadania, ale calkiem konkretne. Czy naprawde DOWOLNEJ DLUGOSCI slowa program ma przeliczac (czyli np nie mieszczace sie w pamieci RAM)?

prompt
-
-
Posty:116
Rejestracja:30 sty 2004, o 23:25
Lokalizacja:Bydgoszcz

Postautor: prompt » 21 lut 2004, o 22:04

Czepiacie się. Temat jest podany wystarczająco dokładnie. Chodzi o konwersję liczby w BCD na wartość w hex (z wykorzystaniem wszystkich bitów). Czyli np. 548 = 010101001000 - BCD na 1000100100 - HEX. Procedura realizująca konwersję ma mieć charakter ogólny, bez ograniczeń do np. 5 bajtów. Panowie, do dzieła .... :)

nidzgor
-
-
Posty:2
Rejestracja:16 lut 2004, o 10:39
Lokalizacja:Sierpc

Postautor: nidzgor » 23 lut 2004, o 11:56

prompt napisał to o co mi chodziło,jak możecie to dajcie wskazówki gdzie taki program znależć , a jak go macie to przyślijcie na poczte nidzgor1@wp.pl program ten jest mi pilnie potrzebny .nie jestem za dobry z cyfrówki i mk za gotowe rozwiązania z góry dzia
pozdro krzyś :)

Awatar użytkownika
gawel
-
-
Posty:683
Rejestracja:24 lis 2003, o 11:19
Lokalizacja:Białystok

Postautor: gawel » 23 lut 2004, o 12:17

Prompt, możesz mie objaśnić swój algorytm, bo:
548 = 010101001000 - BCD - to kumam (12 bitów - 3 cyfry BCD)
1000100100 - HEX - tego nie kumam (10 bitów?)

mw158979
-
-
Posty:48
Rejestracja:28 lis 2003, o 20:09
Lokalizacja:Warszawa

Postautor: mw158979 » 23 lut 2004, o 19:24

Ano dziesiec bitow z trzema zapalonymi: 512+32+4.

Co do programu, to ja bym zapisywal liczbe (i BCD i binarna - to chyba wlasciwa nazwa) jako ciag kolejnych bajtow w pamieci.

1) Dwa takie ciagi binarne mozna na przyklad zsumowac - tak jak liczylismy slupki w podstawowce.
2) Ciag binarny latwo pomnozyc przez 2 - robimy przesuniecie binarne dla kazdego bajtu, przy czym najstarszy bit kazdego bajtu trzeba(?) oddzielna instrukcja wpisac w najmlodszy bit starszego sasiada:
00000000 11001100 01001001
->
00000001 10011000 10010010
3) Przyda sie tez mnozenie przez 5. Po wykonaniu procedur dla 1 i 2 wystarczy do liczby L dodac 2*2*L (pkt 1 i 2)

Wlasciwy algorytm wygladal by jakos tak:
a) rezerwacja miejsca na liczbe binarna i wypelnienie zerami (mozna wziac tyle samo miejsca ile zajmuje liczba BCD)
b) dla kazdego bajtu liczby BCD w kolejnosci od najstarszego wykonaj kroki c i d:
c) zamien bajt na kod binarny i dodaj do liczby binarnej,
d) pomnoz liczbe binarna przez 100: L=L*2*2*5*5 (krok nalezy pominac przy obrabianiu ostatniego bajtu).

Algorytm przy dobrym zakodowaniu bedzie mial zlozonosc kwadratowa, t.zn. liczba wykonanych instrukcji bedzie proporcjonalna do kwadratu dlugosci liczby wejsciowej.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 38 gości