Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - mgsm33

Strony: [1]
1
Pomoc / konwersja z liczb hex na bin
« dnia: Grudzień 03, 2013, 16:29:56 »
Witam,
mam program prostego zegara ( pod 8051), w którym dodawanie sekund czy minut polega na komendzie INC. Dane pokazywane są na portach ( P0 sec, P1 min, P2 godz) w formacie binarnym. W zasadzie rozumiem diałanie mechanizmu, natomiast nie ogarniam cześci " konwersja" - z elementami dzielenia przez 100, 10 i zamiany tetrad a akumulatorze.
Kiedy usunąłem część " konwersja" zegar działa, tylko nie liczy od 0 do 9 tylko od 0 do A. Sprawdziłem sobie steep by step w programie Edsim51.
Wstawiam ten kawałek do liczenia + skok "konwersja.  Chodzi mi o wytłumaczenie zasady działania tych bloków. Ucze się asemblera dopiero od 2 tygodni.

Dzieki za wszelką pomoc


petla:
   mov a,r0   ; przepisz rejestr R0 do akumulatora
   lcall konwersja
   mov p0,r5   ; przepisz rejestr R5 do portu P0
   mov a,r1   ; przepisz rejestro R1 do akumulatora
   lcall konwersja
   mov p1,r5   ; przepisz rejestr R5 do portu P1
   mov a,r2   ; przepisz rejestr R2 do akumulatora
   lcall konwersja
   mov p2,r5   ; przepisz rejestr R5 do portu P2
   
   inc r0      ; powiększ warość rejestru R0 o 1


   
   cjne R0,#3cH,nie ; sprawdź czy rejestr R0 ma wartość 60D ( 3CH )
            ;jesli tak
   mov R0,#0h    ; zerujemy rejestr sekund R0
   inc R1       ; powiększ wartość rejestr minut R1 o 1
   mov P0,#0h    ; zerujemy port sekund
   

   cjne R1,#3ch,nie ;sprawdzamy czy rejestr minut R1 ma wartość 60D (3CH)
   inc r2        ; powiększamy rejestr godzin R2  o 1
   mov r1,#0h     ; zerujemy rejestr R1 (minut)
   mov r0,#0h     ; zerujemy rejestr R0 (sekund)
   cjne R2,#18h,nie ; sprawdzamy czy rejestr godzin R2 ma wartość 24D
   mov R0,#0h    ; zerujemy rejestr sekund    
   mov R1,#0h    ;zerujemy rejestr minut
   mov R2,#0h    ;zerujemy rejestr godzin
   

   nie:
      jmp petla   ; jeśli nie, skok do etykiety PETLA   
      ret      ;powrót z procedury
      
   konwersja:

       clr c      ;zerujemy flagę C
                mov b,#100      ;wpisujemy do rejestru B wartość 100D
                div ab      ;dzielimy wartość akumulatora przez 100D
                mov r4,a        ;przepisujemy wartość akumulatora do R4       ;  //save MSB in R0
                clr c      ;zerujemy flagę C
                mov a,b      ; wpisujemy do akumulatora watośc rejestru B
                mov b,#10       ;wpisujemy do rejestru B wartość 10D                           ;/Divide by 10   
                div ab      ;dzielimy wartość akumulatora przez 10
                swap a      ;zamiana połówek adresu (LSB z MSB) w akumulatorze
                mov r5,a   ;przepisz zawartość akumulatora do rejestru R5
                         
                    ; //save the tens place in the Higher nibble
                mov a,b
                orl a,r5   ;suma logiczna A i R5
                mov r5,a        ;przepisz zawartość A do rejestru R5      ;// save the tens place in the Lower nibble
            
                ret      ;powrót z procedury

Strony: [1]