Witam, mamy w szkole na mikroporcesorach zaprogramować w ASM miernik częstotliwości na DSM51. Częstotliwość jest podawana do isolated I/O. Zaprogramowałem już coś w szkole i coś ten program mierzył, bo wyświetlał liczby HEX na LCDku i zmieniały się one wraz ze zmianą częstotliwości. Wykładowca mówił, że to działa źle - ja nie wiem. Chciałbym zrobić jednak aby to co wyświetla na LCDku pokazywało się w formie liczby dziesiętnej. Jak zrobić taką konwersję (hex->dec)? Np. mam w rejestrze wartość A8 - jakbym to robił na papierze to bym pisał 8*16^0 + 10*16^1 =
168. Ale jak rodzielić A8 na dwie części do dwóch rejestrów? Jest w EPROMIe DSMa podprogram zamieniający HEX na BCD - może ktoś wie jak z tego potem przejść na DEC? Byłbym wdzięczny za jakiś gotowy kod :-)Poniżej kod częstotliwościomierza. Jak ktoś widzi w nim jakiś błąd albo ma lepszy już gotowy to proszę o przysłanie mi go :>
LJMP START ORG 1BH LJMP PRZERWA ORG 100H START: LCALL LCD_INIT ;inicjalizacja lcd LCALL LCD_CLR ;czyszczenie lcd SETB EA ; ustawienie SETB ET1 ; przerwań MOV TMOD,#00011100B ;ustawienie liczników t1 i t2 MOV TH1,#78 ;Timer 0 na 50ms MOV TL1,#0 SETB TR0 ;start Timera TR0 SETB TR1 ;start Timera TR1 WYSW: MOV A,R5 ;czestotliwość do A LCALL WRITE_HEX ; wyswietlenie MOV A,#10 ; na LCALL DELAY_100MS ; 1 sekundę LCALL LCD_CLR ;czyszczenie lcd LJMP WYSW PRZERWA: MOV R5,TL0 ;zliczona czestotliwość do R5 MOV TL0,#0 ;zerowania TL0 KONIEC: RETI