zdravím, sem tu nový tak se omlouvám jestli to tu už někde je nebo to mám špatně umístěné,
Chci se zeptat jestli už někdo řešil převod čísel z hexa do decimálu, já se o to pokouším ale furt na to nemohu přijít, moje představa je že třeba v R20 mam číslo 0xFF a to převedu takže v registru R21 bude 0x02 a v R22 0x55, takto převedené číslo už jde jednoduše zobrazit na LCD nebo 7segmentovce, nebo se to řeší jinak ?? tak jestli tento problém někdo řešil v asembleru ať prosím poradí, v Cčku by to bylo jednoduší ale umím C++ a to jenom programy pro PC. Děkuji za rady
Cisla v tvare 0x02 a 0x55 sa v ziadnom pripade nezobrazia na display o nic jednoduchsie, ako 0xFF. Cislo sa normalne pomocou delenia rozlozi na stovky, desiatky a jednotky. Teda do troch samostatnych bajtov.
Mozno su na to aj nejake asemblerovske instrukcie, ale islo mi o nazorne predvedenie vypoctu.
Potom sa na kazdy bajt postvu prislusne transformacie (napriklad prevod cisla na ASCII, alebo cez transformacnu tabulku pre rozsvietenie jednotlivych segmentov sedemsegmentovky z zavislosti od navrhu plosneo spoja). A tak mozu vzniknut ine tri bajty a az tie sa potom poslu do displaya.
to cos napsal je v céčku, a já umím jenom assembler, kdyby assembler uměl dělit a násobit tak to vůbec neřeším, proto potřebuju nějakej nápad jak to jde udělat jenom základníma operacema jako + - apod. zatím sem to vyřešil tak že prostě tu hodnotu postupně porovnávám s konstantou a podle toho to přeskočí a nastaví do registru, to se mi ale nelíbí protože je to dlouhý a tudíž trvá to delší dobu ten převod
.dseg
Stovky: .byte 1 ; V RAM definovat 1 byte pro stovky
Desitky: .byte 1 ; V RAM definovat 1 byte pro desitky
Jednotky: .byte 1 ; V RAM definovat 1 byte pro jednotky
.cseg
.def Temp=R16 ; Pomocná registrová proměnná
.def Cislo=R17 ; Převáděné číslo
ldi Cislo, 0xFE ; Pro příklad převedeme 0xFE na 254
Prevod:
ldi Temp, 0 ; Vynulovat počítadlo
Hledame_100:
cpi Cislo, 100 ; Je převáděná proměnná menší, než 100 ?
brlo Mame_100 ; Ano = spočítali jsme stovky
subi Cislo, 100 ; Ne = Odečíst 100
inc Temp ; Zvětšit počítadlo
rjmp Hledame_100 ; A znova
Mame_100:
sts Stovky, Temp ; Uložit počítadlo do RAM na pozici Stovky
ldi Temp, 0 ; Vynulovat počítadlo
Hledame_10:
cpi Cislo, 10 ; Je převáděná proměnná menší, než 10 ?
brlo Mame_10 ; Ano = spočítali jsme desítky
subi Cislo, 10 ; Ne = Odečíst 10
inc Temp ; Zvětšit počítadlo
rjmp Hledame_10 ; A znova
Mame_10:
sts Desitky, Temp ; Uložit počítadlo do RAM na pozici Desítky
sts Jednotky, Cislo ; Uložit zbytek do RAM na pozici Jednotky
ret ; Hotovo - návrat