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ę

jak wyswietlic na LCD zawartos rejestru

JacekR
-
-
Posty:52
Rejestracja:2 kwie 2004, o 18:43
Lokalizacja:PL
jak wyswietlic na LCD zawartos rejestru

Postautor: JacekR » 11 kwie 2004, o 20:13

witam
Hmm jak wyswietlic zawartosc jakiegos rejestru na lcd chdzi mi o program w asm.
Wiem jak pojedyncze znaki ale np w r19 mam ff
jak wyrzuce to na lcd to nie mam ff tylko znak o tym kodzie.
Wiem ze w bascomie sie to da zrobic bo to robilem
ale nie moge sobie dac rady z tym w asm
Prosze o porade i wskazowki

Rasel
-
-
Posty:19
Rejestracja:23 lut 2004, o 23:57

Postautor: Rasel » 12 kwie 2004, o 01:15

Na przykład tak:

Zawartość rejestru jest 8-bitowa, więc operację trzeba wykonać na dwie raty: najpierw starszy nibel (bity 7...4), później młodszy (bity 3...0).

1. Starszy nibel rejestru (4 najstarsze bity) przesuwasz na pozycje 4 młodszych bitów (starsze muszą zostać wyzerowane).
2. Jeżeli otrzymana wartość jest mniejsza od 10 dec (dziesiętnie) (= 0A hex), to dodajesz do niej kod ASCII cyfry "0" - jest to liczba 48 dec i przechodzisz do punktu 4.
3. Jeżeli otrzymana wartość była większa lub równa 10 dec to dodajesz do niej kod ASCII litery "A" - jest to liczba 65 dec.
4. Wyświetlasz na wyświetlaczu otrzymany znak ASCII - jest to pierwsza cyfra liczby hex.
5. Z młodszym niblem robisz podobnie, tzn. najpierw zerujesz 4 najstarsze bity rejestru a następnie powtarzasz kroki 2 ... 4, ale tym razem wyświetlana jest druga cyfra hex.

Albo tak:
Zamiast sprawdzać czy liczby są mniejsze lub większe od 10 dec (punkty 2 i 3) możesz zrobić 16 pozycyjną tablicę zawierającą kody ASCII kolejnych cyfr kodu Hex (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) i wartość nibla traktować jako indeks tej tablicy. Reszta bez zmian.


Życzę miłej zabawy!

JacekR
-
-
Posty:52
Rejestracja:2 kwie 2004, o 18:43
Lokalizacja:PL

Postautor: JacekR » 12 kwie 2004, o 09:25

Dzieki za rade :) dziala

;pokaz 1 polbajt
push temp1
swap temp1 andi temp1, 0b00001111
rcall wyswietl
pop temp1
;pokaz 2 polbajt
andi temp1, 0b00001111
rcall wyswietl

wyswietl:
cpi temp1,$00
brne a1
ldi temp1,'0'
rcall lcd_data
ret
a1:
cpi temp1,$01
brne a2
ldi temp1,'1'
rcall lcd_data
ret
itd....

p.s.
mozesz podpowiedziec jak sie robi tablice ??
nigdy tego nie robilem i z checia bym sprobowal i sie nauczyl

Rasel
-
-
Posty:19
Rejestracja:23 lut 2004, o 23:57

Postautor: Rasel » 12 kwie 2004, o 12:01

W moim asemblerze można tak:

NAZWA_TABLICY: DB '0','1','2','3','4','5','6','7'
DB '8','9','A','B','C','D','E','F'


Niestety nie umiem wstawić tabulatora, ani zmienić czcionki na COURIER w związku z czym kolumna nie jest wyrównana :( . Przepraszam

JacekR
-
-
Posty:52
Rejestracja:2 kwie 2004, o 18:43
Lokalizacja:PL

Postautor: JacekR » 12 kwie 2004, o 12:03

OK rozumiem ale jak sie pobiera z DB ?

Rasel
-
-
Posty:19
Rejestracja:23 lut 2004, o 23:57

Postautor: Rasel » 12 kwie 2004, o 12:23

Niestety, nie znam Twojego asemblera i nie wiem nawet jaki to typ mikroprocesora, ale generalnie wygląda to tak:

MOV REJESTR_INDEKSOWY,NAZWA_TABLICY ;do rejestru indeksowego ładujemy adres początku tablicy w pamięci ROM (rejestr indeksowy musi być zapewne 16-bitowy).

ADD REJESTR_INDEKSOWY,KOD_CYFRY ;do zawartości rejestru indeksowego dodajemy kod cyfry którą chcemy wyświetlić (wartości z zakresu 0....F hex). Teraz zawartość rejestru indeksowego jest adresem komórki w pamięci ROM, w której to komórce jest kod ASCII znaku do wyświetlenia. W wielu mikroprocesorach zamiast dodawania można użyć odpowiedniego trybu adresowania.

MOV A,(REJESTR_INDEKSOWY) ;do rej. A wczytujemy zawartość komórki pamięci ROM wskazywanej przez rejestr indeksowy (czyli w rej.A mamy kod ASCII cyfry do wyświetlenia na wyświetlaczu LCD).

JacekR
-
-
Posty:52
Rejestracja:2 kwie 2004, o 18:43
Lokalizacja:PL

Postautor: JacekR » 12 kwie 2004, o 12:25

uzywam AVR ATMEL dzieki za podpowiedz pozniej wyprubuje jak to dziala.

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

Postautor: gawel » 13 kwie 2004, o 08:46

.def acc = r16
.def param = r17
Conv : ;
push param ;
ldz HexConv<<1 ;
swap param ;
andi param,0x0F ;
clr acc ;
add zl,param ;
adc zh,acc ;
lpm xh,z ;
pop param ;
ldz HexConv<<1 ;
andi param,0x0F ;
clr acc ;
add zl,param ;
adc zh,acc ;
lpm xl,z ;
ret ;
HexConv : .db "0123456789ABCDEF"

Wejście: rejestr param (r17).
wyjście: rejestr xh:xl

Guru
-
-
Posty:250
Rejestracja:30 cze 2003, o 13:26
Lokalizacja:Kraków

Postautor: Guru » 14 kwie 2004, o 12:37

Jeżeli możesz przymknąć oko że
A będzie wyświetlane jako ":"
B => ";"
C => "<"
D => "="
E => ">"
F => "?"
cyfry bez zmian to kod pod 8051 wygląda tak
mov a, R0
anl a, #0F0h
swap a
add a, #30h ;tutaj musisz dodać liczbę taką aby 0 w akumulatorze odpowiadało znakowi "0" na wyświetlaczu dla HD 44780
call wyslij_na_lcd
mov a, R0
anl a, #0Fh
add a, #30h
call wyslij_na_lcd

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

Re: jak wyswietlic na LCD zawartos rejestru

Postautor: gawel » 15 kwie 2004, o 09:21

witam
....jak pojedyncze znaki ale np w r19 mam ff
jak wyrzuce .....
Guru, z tego wynika, że to ma być na AVR.

Wróć do „AVR/AVR32”

Kto jest online

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