Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

dsm-51 i problem z automatem do kawy

spot_123 03 Lis 2009 19:59 1785 10
  • #1 03 Lis 2009 19:59
    spot_123
    Poziom 8  

    Chodzi mi o to ze pisze program automatu do kawy na specjalizacji i zaciąłem sie w momencie gdzie wpisuje do rejestru liczbe napojow a pozniej musze po nacisnieciu klawisza 0d 1-8 na klawiaturze musze zrealizowac zmniejszanie wartosci odpowiedniego rejestru.

    Potrzebuje szybkiej odpowiedzi



    to jest poczatek mojego programu wypisujacy na wyswietlaczu nazwy napojow

    LJMP START
    ORG 100H

    START:

    LCALL LCD_CLR
    MOV DPTR,#TEXT1
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT2
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT3
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT4
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT5
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT6
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT7
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT8
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT9
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT10
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LCALL LCD_CLR
    MOV DPTR,#TEXT11
    LCALL WRITE_TEXT
    MOV A,#30
    LCALL DELAY_100MS

    LJMP START
    ;**************************************
    TEXT1:
    DB 'DZIEN DOBRY',0
    ;**************************************
    TEXT2:
    DB '1 - HERBATA',0
    ;**************************************
    TEXT3:
    DB '2 - HERBATA Z CUKREM',0
    ;**************************************
    TEXT4:
    DB '3 - HERBATA Z CYTRYNA',0
    ;**************************************
    TEXT5:
    DB '4 - HERBATA Z CUKREM I CYTRYNA',0
    ;**************************************
    TEXT6:
    DB '5 - KAWA',0
    ;**************************************
    TEXT7:
    DB '6 - KAWA Z CUKREM',0
    ;**************************************
    TEXT8:
    DB '7 - KAWA Z MLEKIEM',0
    ;**************************************
    TEXT9:
    DB '8 - KAWA Z MLEKIEM I CUKREM',0
    ;**************************************
    TEXT10:
    DB '9 - GORACA CZEKOLADA',0
    ;**************************************
    TEXT11:
    DB '0 - WODA',0

  • #2 05 Lis 2009 08:27
    romsik
    Poziom 14  

    Mało precyzyjne pytanie. Który klawisz ma zmniejszać który rejestr?
    Podprogram WAIT_KEY zwraca Ci numer klawisza bodajże w kodzie 1 z 8.
    Sprecyzuj pytanie i powodzenia :)
    rs

  • #3 05 Lis 2009 20:08
    spot_123
    Poziom 8  

    dzieki za odpowiedz
    chodzi o to zeby kazdy klawisz zmienial wartosc w innym rejestrze
    czyli nacisniecie klawisza 1 zmienilo wartosc w rejestrze R0 itd

    Dodano po 2 [minuty]:

    fajnie by bylo jakbys napisal jak to zrobic

  • #4 06 Lis 2009 18:16
    romsik
    Poziom 14  

    proste:
    LCALL WAIT_KEY
    CJNE A,#1,DALEJ
    DEC R0
    DALEJ:
    CJNE A,#2,DALEJ2
    DEC R1 itd itd

  • #5 06 Lis 2009 19:51
    spot_123
    Poziom 8  

    no sory ale nie o to mi chodzilo
    chodzilo mi jak zrealizowac aby naciskajac klawisz na klawiaturze matrycowej spowodowac wyslanie tej liczby do akumlatora i zmniejszenie wartosci w odpowiednim rejestrze np:naciskajac '1' na klawiaturze spowodowac wyslanie tej wartosci do akumulatora i zmniejszenie wartosci rejestru R0 o 1 itd...

  • #6 07 Lis 2009 14:20
    romsik
    Poziom 14  

    no sorry ale chyba nie wiesz o co Ci chodziło.
    po pierwsze po co każdy klawisz ma zmniejszać inny rejestr?
    po drugie czy wiesz jak działa podprogram WAIT_KEY?
    po trzecie po co kod klawisza chcesz wpisywać do akumulatora?
    po czwarte mój kod robi dokładnie to co napisałeś za wyjątkiem wpisywania nr klawisza do akumulatora.
    pozdrawiam
    rs

  • #7 09 Lis 2009 20:44
    spot_123
    Poziom 8  

    czy mi sie wydaje ale to ty nie wiesz o co chodzi
    potrzebuje zmniejszac odpowiednie wartosci rejestrow bo jakbys zobaczyl co tam napisalem na poczatku to chodzi mi ze do kazdego rejestru wysylam liczbe 10 i po nacisnieciu odpowiedniego klawisza zmniejszam wartosc w rejestrze odpowiednim aby po dojsciu do zera wyswietlic napis 'napoju zabraklo'.nie zamiescilem czesci kodu gdzie przypisuje napoje do rejestrow poniewaz nie chce aby koledzy sciagali.

    Dodano po 1 [minuty]:

    no dobra nie obrazajmy sie nawzajem ,ale mysle ze teraz wyrazilem sie jasno.prosze o odpowiedz
    Pozdrawiam

    Dodano po 1 [minuty]:

    a wiem tez do czego sluzy podprogram wait_key

  • #8 10 Lis 2009 06:13
    tprzemko
    Poziom 22  

    Witam
    Jak wiesz już do czego służy podprogram wait_key to teraz popatrz na rozkaz assemblera cjne (kolega romsik chyba Ci to już napisał)
    Pozdrawiam

  • #9 10 Lis 2009 10:14
    Dr.Vee
    VIP Zasłużony dla elektroda

    spot_123: do takich celów stosuje się tablice i adresowanie poprzez offset a nie rejestry.
    Ale zawsze możesz zmienić bank i użyć rejestrów R0-R7 z banku 0 jako
    tablicy, a tymczasowo pracować na banku 1:

    Code:

    ; Założenie - aktywny jest bank 0, bank 1 jest nieuzywany.
    setb RS0                ; aktywuj bank 1
    ; TODO: ustaw R0 i użyj jako mapowania 1-8 -> adres 0-7
    ; TODO: Sprawdź, czy @R0 nie jest zerem
    dec  @R0                ; zmniejsz licznik napoju
    clr  RS0                ; wróć do banku 0


    Jak poprawisz linie TODO, to będziesz miał elegancki sposób obsługi napojów.
    Tak samo zresztą można zrobić z wypisywaniem ich na wyświetlacz - tylko że
    adresowanie przez @A+DPTR do pobierania napisów z pamięci programu :)

    Pozdrawiam,
    Dr.Vee

  • #10 10 Lis 2009 19:28
    spot_123
    Poziom 8  

    dzieki ale mam jeszcze pytanie czy ten program zadziala dla rejestrow z banku 2?
    bo wlasnie te rejestry uzywam do napojow
    wiem ze mozna stostwac tablice ale tak nam kazal nauczyciel z tymi rejestrami. I jeszcze pytanie co znaczy TODO?

    Dodano po 2 [minuty]:

    moglbys tez bardziej wytlumaczyc jak to ma dzialac ?
    i mam pytanie jak bedzie zliczane nacisniecie dopowiedniego klawisza?

  • #11 10 Lis 2009 20:08
    Dr.Vee
    VIP Zasłużony dla elektroda

    TODO = musisz to sobie sam napisać - dawanie gotowców jest mało edukacyjne :)

    Jeśli "napoje" przechowujesz w rejestrach z banku 2 (RS1:RS0 = 10), to musisz ustawić R0 jako #16 + nr klawisza. Oczywiście wcześniej trzeba się przełączyć na inny bank niż 2 żeby mieć zestaw "świeżych" rejestrów.

    Pozdrawiam,
    Dr.Vee

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME