Assembler i AT89C2051

Oct 11, 2003 3 Replies

Witam!



Zacz±³em uczyæ siê assemblera na '51 i wszystko jest dobrze oprócz pewnej rzeczy. Nie mogê wypisaæ na LCD liczby 16 bitowej. Jak to zrobiæ? Z procedur± wy¶wietlaj±c± liczbê 8 bitow± sobie jako¶ poradzi³em. Nie chodzi mi tu o wypisanie liczby po jednej cyfrze jako ascii. Chcê umie¶ciæ tak± liczbê np. w dptr (da siê?) a potem j± wy¶wietliæ. Mog³y by byæ te¿ inne dwa rejestry 8 bitowe, tylko jak do nich wpisaæ liczbê 16 bitow±? I na koniec jeszcze jeden problem - jak wykonywaæ operacje arytmetyczne na dwóch 16 bitowych liczbach? Ma kto¶ jakie¶ do¶wiadczenia w tym temacie? Mog± byæ to gotowe procedury ale w miarê mo¿liwo¶ci z wyja¶nieniem, bo ja chcê to zrozumieæ a nie spisaæ.



AK



Liczba 16bit to jest liczba max 5-o cyfrowa, czyli trzeba rozbic j± na 5 cyfr i ka¿d± cyfrê wy¶wietlac oddzielnie. Mo¿na to zrobiæ zarówno instrukcj± div jak i odejmowaniem. Pó¼niej trzeba tylko dodaæ do naszej "cyfry" pewn± liczbê aby przekszta³ciæ cyfrê w kod ASCII cyfry.

U¿ytkownik "Marcin Osiniak" <marc__kropka_ snipped-for-privacy@wp.pl napisa³:

W³a¶nie taki manewr to ja zrobi³em w procedurze wy¶wietlaj±cej liczbê 8 bitow±. Problem w tym, ¿e ¿eby wykorzystaæ instrukcjê div to muszê liczbê 16 bitow± zapisaæ do akumulatora. Niestety akumulator jest 8 bitowy... Trzeba by to zrobiæ w dwóch turach tzn. najpierw wpisaæ pierwsze 8 bitów a potem drugie. Tylko ¿e po rozdzieleniu to ka¿dy z tych dwóch bajtów bêdzie mia³ inn± liczbê ni¿ wtedy, gdy s± czytane razem. Np. liczba 30000 to bêdzie starszy bajt 1110101 oraz m³odszy 00110000. Wpisuj±c je kolejno do akumulatora i wy¶wietlaj±c dostanê 117 i 48. I tu mam problem.

formatting link
dzielenie 16 bitowe

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required