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!
-
scorpio18k
- -
- Posty: 4
- Rejestracja: 26 kwie 2010, 18:16
- Lokalizacja: Kamienna Góra
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".
-
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?
-
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:
jeżeli program ma się wykonać jeden raz;
albo
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)
-
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 $
-
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