Asembler - to nie prośba o gotowca


(Ymejl) #1

Witam mam do napisania program, który będzie wyświetlał płynący tekst w ten sposób, że pojwia się napis znak po znaku, a następnie przesuwa się on w lewo o jedno miejsce wyświetlacza w taki oto sposób:

______NAPIS

_____NAPIS

___NAPIS

i tak w pętli bez końca. Nie wiem jaki rozkaz sprawi, że napis będzie się przesuwał bo resztę dam radę zrobić

mikroprocesor intel8051 asembler DSM-51


(GL1zdA) #2

Ja bym w pamięci przechowywal ____________________________NAPIS i tylko przesuwał wskaźnik do tego co ma wyświetlać. A zeby było bez końca to można go przesuwać modulo.

___________________________ NAPIS

^ ^

00h FFh

W C by to tak wyglądało:

char* adres = 0xFF;

int offset = 0;

while(TRUE)

    adres-=(offset++%=0xFF);

    wyswietl(adres);

}

(Ryan) #3

A gdzie się ma ten napis pojawić? Alfanumeryczne wyświetlacze LCD mają bufor większy niż wydoczny obszar. Za pomocą odpowiedniego komunikatu można ramkę przesuwać co sprawi wrażenie scrollowanego tekstu.


(Frankoxp) #4

może coś takiego, powinno działać

LJMP START

ORG 100H

START:

MOV R0,#LCDWC ;adres wpisu instrukcji

MOV R1,#LCDRC ;adres odczytu stanu

MOV A,#1 ;kasuj dane wyświetlacza

LCALL WRITE

MOV A,#0FH ;włącz wyświetlacz,kursor

LCALL WRITE ;i mruganie kursora

INC R0 ;adres wpisu danych

MOV DPTR,#TEXT ;adres tekstu

WRITE_TXT:

CLR A ;pobranie kolejnego

MOVC A,@A+DPTR ;znaku tekstu

JZ TEXT_END ;bajt=0 - koniec tekstu

ACALL WRITE ;wpisanie na wyświetlacz

INC DPTR ;modyfikacja adresu

;pobrania kolejnego znaku

SJMP WRITE_TXT ;pobierz kolejny znak

TEXT_END:

DEC R0 ;adres wpisu instrukcji

LOOP: ;pętla animacji

MOV A,#4

LCALL DELAY_100MS ;co 0.4 sek

MOV A,#18H ;obrót danych w lewo

LCALL WRITE ;na wyświetlaczu LCD

SJMP LOOP

;**************************************

:stuck_out_tongue_winking_eye:odprogram wpisu danych lub instrukcji

;na wyświetlacz LCD

;Zakłada prawidłowe adresy w R0 i R1

WRITE:

MOV R2,A ;przechowanie danych

BUSY:

MOVX A,@R1 ;odczytanie stanu

JB ACC.7,BUSY ;oczekiwanie na BUSY=0

MOV A,R2 ;odtworzenie danych

MOVX @R0,A ;wysłanie danych

RET

;**************************************

TEXT:

DB '"MicroMade" Systemy',0


(Ymejl) #5

o kurczątko...

wszystko fajnie tylko, że instrukcje powinny być pod asembler dsm51ass :frowning: te niestety nie działają na zestawie którym dysponuję. Aby uściślić przekaże treść zadania jakie mam rozwiązać...

1 Na wyświetlaczu LCD ma być wyświetlany jakiś napis np" DZIEN DOBRY "

2 Napis przesuwa się w lewo o jedno pole znakowe, przy czym z lewej strony znikają przesuwane litery a z prawej pojawiają się nowe

3 Okres opóźnienia należy eksperymentalnie dobrać tak aby wrażenie płynności przesuwania było jak największe.

4 Program działa w pętli bez końca

Jedynym czego potrzebuję jest instrukcja, która odpowiedzialna jest za przesuwanie znaków w lewo


(Frankoxp) #6

ja programuje ATMELKI, może sie trochę różnić, przez SPI I PROGRAMATOR.

Zrób tak:

-trzymaj cały tekst w pamięci ram począwszy od adresu zapisanego w którymś rejestrze lub akumulatorze

a-zapisz do wyświetlacza 16 znaków

b-odczekaj jakiś czs np. 500ms

c-inkrementuj adres

d-sprawdź czy adres po zwiększeniu jest mniejszy oprzynajmniej 16 od adresu ostatniego znaku

e-jeśli tak skok do a

f-jeśli nie ustaw adres na pzoczątek i skocz do a

napisz do mnie na e-meil to ci prześle jakieś helpy.

tylko napisz kto i co chcesz


(Ymejl) #7

juz znalazlem gdzie indziej ale dzieki