Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

DSM51 konwersja kodu klawisza na znak z 0-9,a-f

monami555 14 Jul 2009 19:32 1666 4
  • #1
    monami555
    Level 10  
    Witam

    Jestem początkującą w pisaniu w assemblerze i mam do napisania program na DSM51, piszę w Jagodzie.. Mam coś takiego (to ma mi zamienić kod strzałki w prawo z klawiatury matrycowej na wartość określoną w tablicy KEY_CODE):

    
    	LJMP  START
    	ORG   100H
    START:
    	MOV DPTR, #KEY_CODE
    	MOV A, 0BH
    	MOVC A, @A+DPTR
    	LJMP $
    KEY_CODE:
    	DB 30H,31H,32H
    	DB 33H,34H,35H
    	DB 36H,37H,38H
    	DB 39H,40H,41H
    	DB 42H,43H,44H


    Zgodnie z tym co zrozumiałam z książki "Podstawy programowania mikrokontrolera...",
    MOVC A, @A+DPTR
    powinno spowodować zapisanie w A wartości 41H (a może 40H), w każdym razie nie 31, jak to ma miejsce. Jak to się dzieje, że na końcu programu A ma wartość 31, niezależnie od liczb wpisanych w bloku:
    KEY_CODE:
    	DB 30H,31H,32H
    	DB 33H,34H,35H
    	DB 36H,37H,38H
    	DB 39H,40H,41H
    	DB 42H,43H,44H


    Instrukcję
    MOVC A, @A+DPTR
    rozumialam do tej pory tak, że zapisuje ona w rejestrze A wartość spod adresu określonego przez A+DPTR, czyli w tym przypadku 0BH=11 czyli jedenastą liczbę z bloku KEY_CODE.. Jednak wartość ta zawsze wynosi 31, niezależnie od liczb w bloku KEY_CODE.. Czemu? Gdzie robię błąd w rozumowaniu?

    Proszę o jakieś wskazówki bo sama sobie już nie poradzę;/
    M.
  • #2
    User removed account
    Level 1  
  • #3
    monami555
    Level 10  
    ok, dzięki
    nom, chyba to wina symulatora, nagle zaczęło działać dla niektórych wartości A, a dla innych nadal nie działa;/ i weź tu bądź mądry.. trzeba szukać innego symulatora;/
  • #5
    adamwesola
    Level 24  
    W tym miejscu :
       MOV A, 0BH 
    do akumulatora wpisywana jest zawartość komórki pamięci o adresie 0Bh
    a Ty potrzebujesz wpisać wpisać po prostu liczbę 11, więc wpisz :
       MOV A, #0BH 
    i wszystko będzie grało.