Asembler - to nie prośba o gotowca

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

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);

}

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.

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

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

;Podprogram 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

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

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

juz znalazlem gdzie indziej ale dzieki