Poprzedni temat «» Następny temat
Pomoc w zadaniu DSM-51
Autor Wiadomość
pomidor666 
Nowy na forum


Dołączył: 16 Cze 2011
Posty: 4
Skąd: łdz
Wysłany: 2011-06-16, 15:40   Pomoc w zadaniu DSM-51

Witam mam dosc powazny problem , nasz Profesor od mikrokontrolerów dał nam po zadaniu w celu zaliczenia semestru.

Otoz nie mam bladego pojecia jak to napisac zeby mialo to rece i nogi a najwazniejsze aby działało. Jesli ktos ma na tyle czasu aby wytlumaczyc to w sposob "łopatologiczny" bede bardzo wdzieczny. POniżej treść zdania

Kod:
Napisz program dokonujacy zmiany pobranej z klawiatury matrycowej liczby dziesiętnej ( 0 - 99d) na liczbę binarną. Na wyswietlaczu należy wyswietlić obydwie liczyby ( np. 99d = 01100011b)

Program nie powinien umozliwiac pobraniie liczb wiekszych od 9.
 
     
keruseykaryu
[Usunięty]

Wysłany: 2011-06-16, 17:38   

pomidor666 napisał/a:
Witam mam dosc powazny problem , nasz Profesor od mikrokontrolerów dał nam po zadaniu w celu zaliczenia semestru.

Otoz nie mam bladego pojecia jak to napisac zeby mialo to rece i nogi a najwazniejsze aby działało.

To coście na lekcjach robili. Grali w statki albo w piłkarzyki... Na szybko przerabiasz lekcje z książki: 4, 6, 8 i 9. Doro.
 
     
pomidor666 
Nowy na forum


Dołączył: 16 Cze 2011
Posty: 4
Skąd: łdz
Wysłany: 2011-06-16, 19:00   

wlasnie o to chodzi ze nie za wiele i na tym polega najwiekszy problem ;/

[ Dodano: 2011-06-17, 09:43 ]
z gory sorry ze post pod postem .
Coś takiego wymyslilem , ale nie mam bladego pojecia zeby zrobic to tak jak jest w tresci zadanka :(

Kod:
LJMP START
ORG 100H

START:


POB_ARG_1: ; pobiera pierwsza cyfre z liczby dwucyfrowej

 LCALL WAIT_KEY ; pobranie pierwszej czesci liczby dwucyfrowej z klawiatury

 MOV R1, A ; zapamietaj w R1
 SUBB A, #10 ; odejmij od pobranej liczby 10. Jesli liczba jest <=9 to C=1
 JNC POB_ARG_1 ; jesli jednak C=0, znaczy liczba >9 to wracaj i pobieraj do skutku




POB_ARG_2: ; pobiera pierwsza cyfre z liczby dwucyfrowej

 LCALL WAIT_KEY ; pobranie drugiej czesci liczby dwucyfrowej z klawiatury

 MOV R2, A ;zapamietaj w R2
 SUBB A, #10 ; odejmij od pobranej liczby 10. Jesli liczba jest <=9 to C=1
 JNC POB_ARG_2 ; jesli jednak C=0, znaczy liczba >9 to wracaj i pobieraj do skutku

 MOV A, R1 ; skopiuj zawartosc R1 do akumulatora
 SWAP A ; zamiana połówek akumulatora
 ADD A, R2 ; dodaj zawarosc R2 do akumulatora

 LCALL WRITE_HEX ; wyswietl na LCD zawartosc akumulatora

 MOV A, # '=' ; wpisanie znaku "=" do akumulatora
 LCALL WRITE_DATA ; wyswietl znak "=" jako daną na LCD




LJMP $
 
     
rezasurmar 



Wiek: 39
Dołączył: 19 Kwi 2009
Posty: 540
Skąd: Tychy
Wysłany: 2011-06-17, 13:49   

Kolejny użytkownik, który rejestruje się tylko po to by mu załatwić zaliczenie przedmiotu.

Jeżeli kolega nie zada konkretnego pytania i nie poda z czym dokładnie ma problem (nie w stylu, zróbcie za mnie). To temat wyląduje w koszu.
 
 
     
pomidor666 
Nowy na forum


Dołączył: 16 Cze 2011
Posty: 4
Skąd: łdz
Wysłany: 2011-06-17, 15:43   

wiec zadaje pytanie ...


Co dalej ? bo moja wiedza z dziedziny asemblera juz sie wyczerpała.

Jesli takowe pytanie nie odpowiada to poproszę o kosz :]
 
     
keruseykaryu
[Usunięty]

Wysłany: 2011-06-17, 17:01   

pomidor666 napisał/a:
wiec zadaje pytanie ... Co dalej ?

Symulacja z pomocą Jagody.
 
     
pomidor666 
Nowy na forum


Dołączył: 16 Cze 2011
Posty: 4
Skąd: łdz
Wysłany: 2011-06-17, 20:43   

coś takiego , jeszcze tylko BIN dopracowac... i chyba bedzie ok . Moze ktos na to zerknac i dać jakies swoje sugestie/uwagi ??
Kod:
BCD      EQU 20H                           ; komórka zawierająca daną w kodzie BCD
BIN      EQU 21H                            ; komórka zawierająca daną w kodzie NB (wynik wykonaniaprogramu)     

       
LJMP START
ORG 100H

START:
   

POB_ARG_1:     ; pobiera pierwsza cyfre z liczby dwucyfrowej
   
    LCALL WAIT_KEY     ; pobranie pierwszej czesci liczby dwucyfrowej z klawiatury
   
    MOV R3, A ; zapamietaj w R1
    SUBB A, #10 ; odejmij od pobranej liczby 10. Jesli liczba jest <=9 to C=1
    JNC POB_ARG_1 ; jesli jednak C=0, znaczy liczba >9 to wracaj i pobieraj do skutku


 

POB_ARG_2:     ; pobiera pierwsza cyfre z liczby dwucyfrowej
   
    LCALL WAIT_KEY ; pobranie drugiej czesci liczby dwucyfrowej z klawiatury
   
    MOV R4, A ;zapamietaj w R2
    SUBB A, #10 ; odejmij od pobranej liczby 10. Jesli liczba jest <=9 to C=1
    JNC POB_ARG_2 ; jesli jednak C=0, znaczy liczba >9 to wracaj i pobieraj do skutku

    MOV A, R3     ; skopiuj zawartosc R1 do akumulatora   
    SWAP A     ; zamiana połówek akumulatora
    ADD A, R4     ; dodaj zawarosc R2 do akumulatora
    MOV R6, A
   LCALL WRITE_HEX    ; wyswietl na LCD zawartosc akumulatora
  MOV A, # 'D'
    LCALL WRITE_DATA
    MOV A, # '='    ; wpisanie znaku "=" do akumulatora
    LCALL WRITE_DATA    ; wyswietl znak "=" jako daną na LCD


        MOV BCD, R6  ; przeniesienie zapamietanej liczby bcd do rejestru r6
                MOV A,BCD       
               MOV R0,#BCD                 ; do R0 adres komórki z daną wejściową
               MOV R1,#BIN                  ; do R1 adres komórki z daną wyjściową
               ACALL BCD DO BIN            ; zamień na postać binarną

               MOV A,BIN
               LCALL WRITE_HEX
    MOV A, #'H'
    LCALL WRITE_DATA
    MOV A, #'E'
    LCALL WRITE_DATA
    MOV A, #'X'
    LCALL WRITE_DATA
               LJMP $
 
BCD DO BIN:
                MOV @R1,#0                ; wyczyść komórkę BIN
                MOV A,@R0                 ; BCD do ACC
                SWAP A                        ; zamień połówki
                ANL A,#0FH                 ; wyzeruj mniej znaczącą cyfrę
                JZ BCD DO BIN1               ; jeśli starsza cyfra jest zerem to skocz dalej
                MOV R2,A                    ;  w R2 ilość powtórzeń                           
                CLR C
BCD DO BIN2:
                MOV A,@R1                ; BIN do ACC
                ADDC A,#10                 
                MOV @R1,A                ; wynik do BIN
                DJNZ R2,BCD DO BIN2    ; dodawaj 10 tyle razy ,ile wynosi starsza cyfra
BCD DO BIN1:
                MOV A,@R0                ;BCD do ACC
                ANL A,#0FH                 ; wyzeruj starszą cyfrę
                ADD A,@R1                  ; dodaj do BIN
                MOV @R1,A                 ; wynik do BIN
                RET
 
     
keruseykaryu
[Usunięty]

Wysłany: 2011-06-17, 21:18   

Program, może i działający, nie będzie spełniał jednego z wymogów zadania:
pomidor666 napisał/a:
Napisz program dokonujacy zmiany pobranej z klawiatury matrycowej liczby dziesiętnej ( 0 - 99d) na liczbę binarną.

Założyłeś, że liczba BCD to liczba dziesiętna, ok, będzie łatwiej, ale wynikiem ma nie być liczba HEX tylko po kolei bity jako BIN. Całe WRITE_HEX możesz sobie wywalić, bo to nie to.
Nie ma w biosie DSM odpowiedniej funkcji, ale łatwo ją napisać: rotować ACC, i drukować na ekranie po kolei co jest w CY. Myślę, że tyle wystarczy i ruszysz głową by to napisać.
 
     
Luminofor 



Dołączył: 27 Lis 2007
Posty: 1144
Skąd: Polska
Wysłany: 2011-06-17, 21:36   

Może to pomoże:
http://www.programuj.com/...ne/sysliczb.php

W skrócie: dzielisz przez 2, spisujesz resztę, zapamiętujesz resztę, dzielisz, spisujesz, zapamiętujesz. Na końcu (jak już iloraz będzie równy 0) to wypisujesz reszty od końca.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,05 sekundy. Zapytań do SQL: 11