Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

DSM-51,asembler.

02 Mar 2008 19:04 2547 12
  • Poziom 11  
    Witam,
    mam na zaliczenie z pracowni napisać taki program:
    na wyświetlaczu LCD w Dsm-51 w pierwszej lini ma być moje imie i nazwisko a w lini pod spodem imie i nazwisko kolegi z tym ze ma zawierac polskie znaki.z tym sobie umię poradzić. problem jest w tym ze po naciśnięciu klawisza ENTER na klawiaturze matrycowej imiona i nazwiska mają się zamienić miejscami (gorna linia na miesjce dolnej i na odwrót).mam już coś takiego i dalej nie rusze:


    LJMP START
    ORG 100H
    START:

    MOV R0,#LCDWC
    MOV R1,#LCDRC

    MOV A,#48H
    LCALL WRITE

    INC R0
    MOV DPTR,#LITERA
    MOV R3,#8


    LOOP:

    CLR A
    MOVC A,@A+DPTR
    LCALL WRITE
    INC DPTR
    DJNZ R3,LOOP

    DEC R0

    MOV A,#1
    LCALL WRITE

    MOV A,#0FH
    LCALL WRITE
    ;kursora

    INC R0
    MOV DPTR,#TEXT


    WRITE_TXT:
    CLR A
    MOVC A,@A+DPTR
    JZ TEXT_END
    LCALL WRITE
    INC DPTR
    SJMP WRITE_TXT

    TEXT_END:
    DEC R0
    MOV DPTR,#KEY_COD

    LOOP1:
    LCALL WAIT_KEY
    CJNE A,#0AEH,NO_DOWN
    DOWN:
    MOVX A,@R1
    JB ACC.7,DOWN
    MOVX A,@R1
    CPL ACC.6
    SETB ACC.7
    ACALL WRITE
    SJMP LOOP

    NO_DOWN:
    MOV R2,A
    MOVC A,@A+DPTR

    JZ WRITE_DAT

    ACALL WRITE
    SJMP LOOP1

    WRITE_DAT:
    MOV A,R2
    ADD A,#30H
    INC R0
    ACALL WRITE
    DEC R0
    SJMP LOOP

    ;**************************************
    ;Podprogram wpisu danych lub instrukcji
    ;na wyświetlacz LCD
    ;Zakłada prawidłowe adresy w R0 i R1

    WRITE:
    MOV R2,A
    BUSY:
    MOVX A,@R1
    JB ACC.7,BUSY
    MOV A,R2
    MOVX @R0,A
    RET
    ;**************************************
    ;Tabela przekodowania numeru klawisza
    ;na instrukcję, 0->klawisz jako znak
    KEY_COD:
    DB 30H,31H,32H ;0,1,2
    DB 33H,34H,35H ;3,4,5
    DB 36H,37H,38H ;6,7,8
    DB 39H,3CH,3EH ;9,<,>
    DB 5EH,76H,7FH ;^,v,Esc
    DB 0AEH ;Enter
    ;**************************************
    ;Tabela bajtów definiujących literę 'ś'
    LITERA:
    DB 00000010B
    DB 00000100B
    DB 00001110B
    DB 00010000B
    DB 00001110B
    DB 00000001B
    DB 00011110B
    DB 00000000B

    ;**************************************
    TEXT:
    DB 'Imie i nazwisko '

    DB 'Mi',1,' Uszatek ',0




    Bardzo proszę o pomoc kogoś kto sie na tym zna, można nawet całkiem przerobić to co juz mam, byle było w asemblerze i pod 8051.


    [Temat poprawiłem. Regulamin, punkt 11.1. Mariusz Ch.]
  • Użytkownik obserwowany
    Wrzuć ten kod do Jagody i zobacz jak działa.
  • Poziom 11  
    wiem jak działa.wyświetla sie tak jak trzeba, sa polski znaki ale nie mogę sobie poradzić z tą zamiana po naciśnieciu klawisza ENTER
  • Poziom 10  
    Witam!
    Nie znam dokładnie architektury dsm51 ale problem polega na tym, że dane obu kolesi masz w jednej tabelce i najprosciej byloby zobic druga tabelke np text1 gdzie dane bedziesz mial w odwrotnej kolejnosci. Po napisaniu na matrycy text uc czeka na kawisz enter, a kiedy go otrzyma rbi t samo co na podzatku (bez definiowania polsich znakow) z tym, ze do DPTR wpisyjesz adres text1 - juz
    Pozdro :D
  • Poziom 11  
    Jak zndefiniować ten klawisz "enetr"? Jakiego rozkazu użyć? Może jakiś przykład?
  • Poziom 17  
    sprawdź sobie jaką wartość masz w A po naciśnięciu ENTER a później zrób skok warunkowy
  • Poziom 11  
    Dobra powiem tak, jestem w tym zielony. jeśli ktoś mi pomoże a raczej napisze ten program tak zeby działał na Dsm-51 na podstawie tego co umieściłem na gorze lub całkiem od nowa to ofiaruję połowę punktów jakie posiadam jeśli program bedzie chodził prawidłowo.jestem laikiem w programowaniu i sam nie dam rady.
  • Poziom 11  
    ludzie proszę pomózcie, mam to w poniedzialek oddac gotowe.oddam wszystkie punkty jakie mam za zrobienie tego...

    Moderowany przez _PREDATOR_19:49 11.3.2008:

    Używaj DSM-51,asembler..
    Jesteż na forum od dawna, ostrzeżenie!
    Proszę w swoich wypowiedziach używać polskich znaków diakrytycznych - ą, ę, ś, ł itd.

  • Użytkownik obserwowany
    Kolego naucz się edytować posty, ponadto nie licz na gotowca.
  • Poziom 11  
    a co innego mi pozostało skoro tego nie umie i nie rozumie a muszę to zaliczyć, mam nadzieje że znajdzie się jakaś dobra dusza i mi pomoże. dla zaawansowanego programisty nie będzie to większym problemem.
  • Poziom 16  
    Cz kod, który Kolega przedstawił jest działający, czy kompilacja przebiegła bezbłędnie?
  • Poziom 11  
    tak kompilacja przebiega bezbłędnie, wpisuje na wyświetlacz LCD zadane wyrazy ale nie mogę sobie poradzić z tym ENTER'em i zamianą miejscem po jego wciśnięciu.
  • Poziom 16  
    Nie mogę oczywiście napisać za Kolegę ale może coś podpowiem.
    Klawisz "enter" jest zdefiniowany w tablicy KEY_COD: w ostatniej pozycji "DB 0AEH ;Enter". Najprostszą metodą będzie utworzenie drugiej tablicy TEXT z odwrotnym zapisem i przesłanie jej do LCD.
    Na razie program działa w pętli i cały czas wysyła dane do LCD (o ile się nie mylę), co wcale nie jest konieczne.