8051 Assembler- problem

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
doncorleone
-
Posty: 1
Rejestracja: 30 mar 2010, 17:58
Lokalizacja: tychy

8051 Assembler- problem

Post autor: doncorleone » 30 mar 2010, 18:01

Dzień dobry.
Otóż wiążę się z takim problemem :

Kod: Zaznacz cały

;	Symulator MCS_51
  .org	0 



      mov    DPTR,#TAB
      mov    P1,#0x00h
      mov    P3,#0x00h
stop:
      mov    A,P3
      add    A,P1
      movc   A,@A+DPTR
      mov    P0,A


	

 
   sjmp	stop		

TAB:
 .DB	10000100b,10011111b,10100010b,10001010b,10011001b,11001000b,11000000b,10011110b,10000000b,10011000b,00010000b,00000000b,01100100b,00000100b,01100000b,01110000b
   

	.END

Program wyświetla na wyświetlaczu cyfry 0,1,2,3
Jest ok :)
Chciałem zrobic tak:

żeby program sumował wprowadzone na wejsciu p1 i p3 liczby
i je wyświetlał ale tu uwaga na dwuch wyśwuetlaczach, czyli

jesli bym dodał 9 i 5
5+9
to na pierwszym wyświetlaczu by było 1 a na drugim 4

Jestem w kropce bo dopiero co od niedawna zaczynam a juz takie trudności ... :/

Bardzo prosze :)

Raziel
-
Posty: 15
Rejestracja: 14 gru 2005, 18:52
Lokalizacja: Poznań

Post autor: Raziel » 20 cze 2010, 13:11

Podłączę się pod ten wątek, bo też mam pytanie odnośnie Bascoma i asemblera, a nie ma sensu chyba tworzyć przy każdej okazji podobnych tematów.

Ostatnio - po kilku latach przerwy - postanowiłem trochę odświeżyć sobie pamięć odnośnie techniki mikroprocesorowej i wyciągnąłem z szafy komputerek edukacyjny AVT-2250 (nawiasem mówiąc rewelacyjny sprzęcik :smile: ).

Asembler '51 znam bardzo dobrze, w sumie nieźle znam też BASCOM, ale akurat nie łączyłem raczej jednego z drugim. Jak jednak wspomniałem wyżej odświeżam sobie wiedzę i pobawiłem się kilkoma swoimi starymi programami z BASCOMa próbując przerobić je tak, aby mogły wystartować w komputerku. Nie zawsze jest to łatwe i czasem trzeba właśnie zrezygnować z pewnej automatyki BASCOMa i jego procedur na rzecz wstawek asemblerowych i zdziwiłem się bardzo widząc, że BASCOM chyba nie rozpoznaje mnemonika z poniższego przykładu:

Kod: Zaznacz cały

$asm
         anl tmod,#&B00001111
         orl tmod,#&B00010000
         mov &H72,#&Hc0
$end Asm
Konkretnie chodzi o rozkaz mov. Chcę po prostu wpisać konkretną wartość bezpośrednio do komórki pamięci o adresie &H72. Tak wpisany mnemonik powoduje błąd kompilatora Error 124: Illegal asm-command

Dopiero poniższe obejście daje oczekiwany rezultat (a przynajmniej kompilator przechodzi bez błędu).

Kod: Zaznacz cały

$asm
         anl tmod,#&B00001111
         orl tmod,#&B00010000
         mov R0,#&H72
         mov @R0,#&Hc0
$end Asm
Co najlepsze, przykłady zawarte w helpie też nie podają jasno jak wpisać wartość bezpośrednio do komórki pamięci. Wszystkie są przez rejestry, albo akumulator. Trochę to jest bez sensu.

Czy ja coś robię źle? Dysponuję BASCOMem w wersji demo 2.0.14.0 (ograniczenie kodu do 4kB).

chavos
-
Posty: 3
Rejestracja: 22 cze 2010, 22:34
Lokalizacja: Poznań

Post autor: chavos » 22 cze 2010, 22:37

@doncorleone

na Twój problem jest łatwy sposób - modulo 10

czyli jeżeli masz jak wyżej wspomniałeś 14 to po podzieleniu przez 10 będziesz miał 1 i resztę 4 :)
chyba już wiesz jak to wykorzystać :)

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 12 wrz 2010, 11:16

Witam!

@Raziel:
Nie znam się na tym kompilatorze, ale widzę dwa rozwiązania:
1) może tak: equ intvec, 72h ; czy jak tam się w nim pisze
...
mov intvec,#&Hc0
2) albo tak: .db 75h 72h,c0h czy też jak tam się to zapisuje, a jest to... tzw. ręczniakowa wersja instrukcji mov direct, immed - 75 di im (w hex oczywiście)

PZDR
GrzesiekG

ODPOWIEDZ