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!
Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 17 kwie 2012, 14:09

Kod możesz przejrzeć, jest zamieszczony na stronie (tu jest LINK).
Ostatnio zmieniony 11 maja 2012, 5:40 przez mr_x, łącznie zmieniany 1 raz.

lewyboy
-
Posty: 13
Rejestracja: 16 kwie 2012, 19:56
Lokalizacja: Gdańsk

Post autor: lewyboy » 17 kwie 2012, 14:12

No to juz niestety zbyt skomplikowane dla mnie, skoro nie jestem w stanie nawet wykonac napisu. Aż BOL patrzeć :)

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 17 kwie 2012, 14:14

Ja bym zrobił, ale nie znam DSM, a bez tego ciężko. Bo on ma swoje charakterystyczne cechy, o których należy pamiętać podczas pisania programu.

lewyboy
-
Posty: 13
Rejestracja: 16 kwie 2012, 19:56
Lokalizacja: Gdańsk

Post autor: lewyboy » 17 kwie 2012, 14:18

No trudno, jakoś będę musiał sobie poradzić. Chyba że jeszcze ktoś inny będzie w stanie mi pomóc.

lewyboy
-
Posty: 13
Rejestracja: 16 kwie 2012, 19:56
Lokalizacja: Gdańsk

Post autor: lewyboy » 17 kwie 2012, 16:02

Kod: Zaznacz cały

ZNAKB EQU 01111111B
ZNAKO EQU 00111111B
ZNAKL EQU 00111000B
ZERO EQU 00000000B

SEG_ON EQU P1.6
DISPLAY EQU  30H

DISPLAY1 EQU 00100000B
DISPLAY2 EQU 00010000B
DISPLAY3 EQU 00001000B
DISPLAY4 EQU 00000100B
DISPLAY5 EQU 00000010B
DISPLAY6 EQU 00000001B
 



LJMP START
ORG 100H
START:
  MOV  R3, #255
  MOV  R4, #30
  MOV  R5, #30
  MOV  R6, #30




LOOP:   
 MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY1
 MOVX @R0, A
 MOV A, #ZNAKB
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6
 
 MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY2
 MOVX @R0, A
 MOV A, #ZNAKO
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6   

 MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY3
 MOVX @R0, A
 MOV A, #ZNAKL
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6
 

MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY4
 MOVX @R0, A
 MOV A, #zero
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6
 

MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY5
 MOVX @R0, A
 MOV A, #zero
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6


MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY6
 MOVX @R0, A
 MOV A, #zero
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6

DJNZ R3, LOOP









LOOP1:   
 MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY1
 MOVX @R0, A
 MOV A, #ZNAKB
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6
 
 MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY2
 MOVX @R0, A
 MOV A, #ZNAKO
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6   

 MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY3
 MOVX @R0, A
 MOV A, #zero
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6
 

MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY4
 MOVX @R0, A
 MOV A, #ZNAKL
 MOVX @R1, A
 CLR P1.6
 MOV  A, #2
 LCALL DELAY_MS
 SETB P1.6
 

MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY5
 MOVX @R0, A
 MOV A, #zero
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6


MOV R0, #CSDS
 MOV R1, #CSDB
 MOV A, #DISPLAY6
 MOVX @R0, A
 MOV A, #zero
 MOVX @R1, A
 CLR P1.6
 MOV A, #2
 LCALL DELAY_MS
 SETB P1.6

DJNZ R3, LOOP1









LJMP  LOOP
Do tego momentu pomógł mi pan simrowit.
Ktoś wie w jaki sposób możnaby to zoptymalizować ?
To jak narazie przesuwa literkę L o jeden segment w prawo.

keruseykaryu

Post autor: keruseykaryu » 17 kwie 2012, 18:13

Taki ciekawy efekt to by szło zrobić dość prosto. Na początek masz jakiś kąsek RAM i tam masz wpisane

Kod: Zaznacz cały

BOL.....
Kropki oznaczają spacje, kod 0.
Teraz program robi tak. Pierwsze przejście - leci po bajtach od prawej i szuka znaku. Jak znajdzie coś różnego od zera to przed znakiem dodaje spacje. I teaz chwile czeka.
Teraz znowu leci od prawej i znowu szuka znaku. Jak znajdzie to dodaje spacje przed nim, ale leci dalej i szuka kolejnego znaku co by dodać spacje. Jak znajdzie to znowu czeka.
Za każdym takim przejściem dodaje spacje i za każdym razem szuka ilości znaków większej od poprzedniej o jeden. Da to efekt

Kod: Zaznacz cały

BOL.....
BO.L....
B.O..L..
.B..O...
..B...O.
...B....
....B...
.....B..
......B.
.......B
........
Program kończy albo wraca na początek jak są tylko same spacje. I oto masz efekt rozsuwania i odjeżdżania znaków.
Wszystko robisz w buforku RAM, a pętla ciągle go wyświetla. Wot w pieriot.
Szkoda, że DSM nie ma większego displaya.

lewyboy
-
Posty: 13
Rejestracja: 16 kwie 2012, 19:56
Lokalizacja: Gdańsk

Post autor: lewyboy » 17 kwie 2012, 18:23

No dobrze a jak skonstruować do tego listing.

I z tego co rozmawiałem z nauczycielką to ma bardziej iść tak:

Kod: Zaznacz cały

BOL....
BO.L...
BO..L..
BO...L.
BO....L
BO......
B.O.....
B..O....
[..]
B......O
B........
.B......
..B......
[...]
.........B
..........
I to się ma powtórzyć 3 razy.

keruseykaryu

Post autor: keruseykaryu » 17 kwie 2012, 18:35

Drobna modyfikacja algorytmu jaki napisałem wyżej i masz to co chcesz.
lewyboy pisze:No dobrze a jak skonstruować do tego listing.
Mnie nie pytaj bo nie rozwiązuje cudzych zadań dając gotowce. Odrobina własnego myślenia.

lewyboy
-
Posty: 13
Rejestracja: 16 kwie 2012, 19:56
Lokalizacja: Gdańsk

Post autor: lewyboy » 17 kwie 2012, 18:41

Mnie nie pytaj bo nie rozwiązuje cudzych zadań dając gotowce. Odrobina własnego myślenia.
No nic, sam nie dam rady, trudno :P

ODPOWIEDZ