asembler 8051

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
scorpio18k
-
Posty: 4
Rejestracja: 26 kwie 2010, 18:16
Lokalizacja: Kamienna Góra

asembler 8051

Post autor: scorpio18k » 26 kwie 2010, 18:20

Co oznacza $ w rozkazie "SJMP $" ?

patrx
-
Posty: 19
Rejestracja: 29 sie 2006, 7:51

Post autor: patrx » 26 kwie 2010, 18:40

Nie spotkałem się z takim zapisem, ale podejrzewam, ze to po prostu etykieta o nazwie $.

ar
-
Posty: 2
Rejestracja: 29 maja 2007, 17:12

Post autor: ar » 26 kwie 2010, 18:52

O ile dobrze pamiętam "własny adres" czyli skok na samego siebie. Program się zapętla na tym rozkazie, powstaje "wieczna pętla".

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 26 kwie 2010, 19:56

Tak jak wyżej pisze kolega, z tym, że nie do końca. Np. uaktywniliśmy jakieś przerwania (np. od timerów) i daliśmy rozkaz SJMP $ czyli w tym momencie oczekuje on na przerwanie.

scorpio18k
-
Posty: 4
Rejestracja: 26 kwie 2010, 18:16
Lokalizacja: Kamienna Góra

Post autor: scorpio18k » 26 kwie 2010, 20:18

Wykładowca powiedział że trzeba dać taki rozkaz przed "end"em (czy tam po) żeby mikroprocesor nie czytał rozkazów które mogły się znaleźć w pamięci przypadkowo?

Myślałem że 8051 czyta program do end a nie do końca pamięci?

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 26 kwie 2010, 20:21

No i w sumie miał rację.
end to nie rozkaz, to dyrektywa.
bez sjmp $ czytałby komórki pamięci spoza programu i interpretował je jako rozkazy (niezdefiniowane zachowanie).

Zazwyczaj jest:

Kod: Zaznacz cały

SJMP $
jeżeli program ma się wykonać jeden raz;

albo

Kod: Zaznacz cały

LJMP START
gdzie START to etykieta początku programu, jeżeli program ma się wykonywać w kółko.

Alberto86
-
Posty: 51
Rejestracja: 09 wrz 2005, 11:43
Lokalizacja: Kęty
Kontakt:

Post autor: Alberto86 » 26 kwie 2010, 21:57

END to też dyrektywa kompilatora. To takie wskazanie mu palcem, że tam jest koniec zbioru wejściowego do kopilacji. Kombinacji SJMP $ używa się do zatrzymania pracy programu. Robi się tak po to, żeby procesor nie wykonywał tego co znajdzie w pamięci ROM po zakończeniu właściwego programu. Zwykle powodowało to "zamazanie" wyników jego działania i zawieszkę uC.

To działa tak samo jak taki kawałek programu:

STOP:
SJMP STOP

Powoduje wykonywanie pustej, nieskończonej pętli.

scorpio18k
-
Posty: 4
Rejestracja: 26 kwie 2010, 18:16
Lokalizacja: Kamienna Góra

Post autor: scorpio18k » 28 kwie 2010, 17:58

Gdzie mogę znaleźć w internecie taki szczegółowy opis asemblera 8051, gdzie by napisali coś o argumencie $ ? (Google nie bardzo pomaga)

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 28 kwie 2010, 17:59

Przecież napisaliśmy na ten temat już chyba wszystko, czego jeszcze nie rozumiesz?

scorpio18k
-
Posty: 4
Rejestracja: 26 kwie 2010, 18:16
Lokalizacja: Kamienna Góra

Post autor: scorpio18k » 28 kwie 2010, 18:28

Przecież napisaliśmy na ten temat już chyba wszystko, czego jeszcze nie rozumiesz?
Generalnie chcę się nauczyć asemblera 8051, tylko szukam czegoś gdzie by pisało między innymi o argumencie $

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 28 kwie 2010, 18:47

Tomasz Starecki "Mikrokontrolery 8051 w praktyce". wyd. BTC

ODPOWIEDZ