Program dla mikrokontrolera DSM 51

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
kamil23
-
Posty: 9
Rejestracja: 14 lut 2007, 21:04

Program dla mikrokontrolera DSM 51

Post autor: kamil23 » 14 lut 2007, 21:12

Mam napisać program który wyświetla płynący w lewo/prawo tekst, lecz musi on zawierać minimum 40 znaków. Mam taki problem że wyświetla około 20 i kolejne przechodzą do następnej linijki, a ma sobie płynąć caly czas w jednej. Pomóżcie!

zajcew
-
Posty: 12
Rejestracja: 15 lut 2007, 14:42
Lokalizacja: Szczecin

Post autor: zajcew » 15 lut 2007, 15:06

DSM51 - Przypominają mi się stare dobre czasy......
Przypomnij mi jaki tam wyświetlacz siedzi?? 2x16 znaków??

Napisz też trochę więcej szczegółów:
- dokładnie który z kolei znak trafia do następnej linii
- czy korzystasz ze standardowych procedur DSM51 do obslugi LCD??

Jeśli korzystasz z procedur dsm51 to z tego co pamiętam te procedurki automatycznie przenoszą text dłuższy niż 16 znaków do następnej linijki.
w takim wypadku będziesz musiał sam napisać obsługę wyświetlacza, nie całą ale samo wpisywanie danych.


Pozdro

kamil23
-
Posty: 9
Rejestracja: 14 lut 2007, 21:04

Post autor: kamil23 » 15 lut 2007, 18:50

Dzięki zapomoc, wiesz co on wyświetla 37 znaków iprzechodzi do następnej linijki. Ja w sumie to się na tym nie znam, muszę taką pracę zrobić i szukam pomocy. Tyle ile potrafie to zrobiłem, na tym stanąłem i kicha. Jak możesz to pomóż.Korzystam ze standardowych procedór DSM 51

zajcew
-
Posty: 12
Rejestracja: 15 lut 2007, 14:42
Lokalizacja: Szczecin

Post autor: zajcew » 16 lut 2007, 0:06

Zgodnie z dokumentacją układu HD44780 powinno wejść dokładnie 40 znaków w każdej linijce ale jak jest wyświetlach na jakimś zamienniku to może być przez to taki zonk.

Nie pozostaje nic innego jak programowo "zasymulować" przesuwanie tekstu, zwłaszcza że nma sę przewijać minimum 40 znaków.

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

jak chcesz to w wolnej chwili skrobnę algorytm w asm tylko musiałbym znac nazwę procedurki dms51 czekającej ileś tam czasu (szło to jakoś LJMP,DELAY_MS; a w akumulatorze dawało sie ile ms ma czekać)

kamil23
-
Posty: 9
Rejestracja: 14 lut 2007, 21:04

Post autor: kamil23 » 16 lut 2007, 19:41

Jak byś mogł ten algorytm podesłać to bylbym wdzięczny. LJMP, LCALL DELAY_
500Ms to prawidłowa komenda

zajcew
-
Posty: 12
Rejestracja: 15 lut 2007, 14:42
Lokalizacja: Szczecin

Post autor: zajcew » 16 lut 2007, 22:08

oki przypomnij mi jeszcze te gotowe instrukcje do obslugi wyświetlacza i jutro postaram się coś skrobnąć

kamil23
-
Posty: 9
Rejestracja: 14 lut 2007, 21:04

Post autor: kamil23 » 17 lut 2007, 16:05

Z góry dzięki, to ten program który wyświetla wyraz iprzesuwa w lewo, trzeba go jakos zmodyfikowac:

Kod: Zaznacz cały

	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

Proszę stosować znaczniki [code] oraz [/code]. marcing

[ Dodano: 2007-02-20, 10:42 ]
Sorry ze tak poganiam ale masz juz cos? Musze gojuz niedlugo oddac. Mam nadzieje ze dasz rade.

[ Dodano: 2007-02-22, 11:42 ]
No i co dasz rade to zrobic bo mam tylko jeszcze jeden dzien. W sobote muszeto oddac.
Ostatnio zmieniony 17 lut 2007, 20:56 przez kamil23, łącznie zmieniany 1 raz.

ODPOWIEDZ