Badałem mikrokontroler 8032
. Wspomina się, że 8032
nie ma wewnętrznej pamięci ROM. Mam kilka pytań.
-
Czy potrzebujemy zewnętrznej pamięci ROM, aby wykonywać programy koniecznie? Czy nie możemy użyć 256-bajtowej wewnętrznej pamięci RAM?
-
Załóżmy, że używam mikrokontrolera 8032 z zewnętrzną pamięcią ROM
2732
, a także za pomocą zatrzasku do przechowywania adresu (niższego rzędu) portu P0. (który może przenosić adres / dane). Teraz po włączeniu EA i podłączeniu PSEN jak 8032 wykonuje program? Co się stanie, jeśli włączę system? (W jaki sposób licznik programu mikrokontrolera 8032 wykonuje polecenia? Z jakiego adresu pamięci zewnętrznej program powinien być czytany?
Mam przeczytaj te podręczniki – Intel 8032H Keil , Atmel 80C32E .
Odpowiedź
Jeśli spojrzysz na typowy obwód 80 (C) 32 poniżej (z tutaj ):
Możesz zobaczyć, że 8032 komunikuje się z zewnętrzną pamięcią EPROM, RAM i EEPROM przez magistrala – 8-bitowe dane i 16-bitowy adres. Ten ostatni jest zatrzaśnięty, a tym samym demultipleksowany z HCT573. Było kilka chipów z wbudowanym zatrzaskiem, zaprojektowanych do użytku z 8031/8032, ale powyższa była bardziej powszechna konfiguracja – wykorzystująca niski -cost standardowe układy pamięci. Jest też trochę ” kleju ” logiki do dekodowania adresów i rodzajów Te odpowiednie sygnały dla pamięci (HCT138 i quad NAND).
Istotne jest, aby logika kleju została zaprojektowana w taki sposób, aby pamięć EPROM znajdowała się pod adresem 0, ponieważ po zresetowaniu wykonanie zawsze zaczyna się od 8032 pobieranie pierwszego bajtu instrukcji z tego adresu. Jest to funkcja sprzętu w 8032 i nie można jej zmienić. Zwykle jest to 3-bajtowa instrukcja LJMP, która przeskakuje na początek programu. Nazywamy to ” RESET VECTOR „. Inne wektory zajmują bajty bezpośrednio nad wektorem resetowania – dla procedury obsługi przerwań zewnętrznych i procedury obsługi przerwań czasowych.
W tamtych czasach pamięć EPROM byłaby programowana (zapisywana) przez oddzielnego programistę poza obwód, a następnie zazwyczaj podłączany do gniazdka. W tamtych czasach nie było programowania w obwodzie. Pamięć RAM i EEPROM mogą być zapisane przez mikro, ale program musiałby zostać załadowany do pamięci EPROM, zanim to było możliwe.
Komentarze
Odpowiedź
Nie, nie można używać wewnętrznej pamięci RAM do przechowywania kodu. Model 8051/8032 wykorzystuje architekturę Harvardu, co oznacza, że ma całkowicie oddzielną przestrzenie pamięci na kod i dane. Instrukcje są pobierane z przestrzeni kodu, ale pamięć RAM znajduje się w przestrzeni danych.
Teraz po włączeniu EA i podłączeniu PSEN jak czy 8032 wykonuje program?
8032 pobiera instrukcje z przestrzeni kodu. Ponieważ EA jest potwierdzone, te pobrania (odczyty pamięci) pojawiają się na zewnętrznej szynie pamięci , z zaznaczonym PSEN
. Gdy PSEN
NIE jest potwierdzane w operacji odczytu pamięci zewnętrznej, jest to odczyt przestrzeni danych.
Co się stanie, jeśli włączę system?
8032 rozpoczyna pobieranie instrukcji z przestrzeni kodowej adresu 0.
W jaki sposób licznik programu mikrokontrolera 8032 wykonuje polecenia?
licznik programu jest po prostu odpowiedzialny za przechowywanie adresu następnej instrukcji do wykonania. Inne części procesora wykonują instrukcje.
Z jakiego adresu pamięci zewnętrznej program powinien być czytany?
Adres 0
Jeśli chcesz używać przerwań w swoim programie, są inne adresy w małej pamięci kodowej, które są dla nich zarezerwowane, więc kod, który masz wykonanie po zresetowaniu ostatecznie będzie musiało „przeskakiwać” między zarezerwowanymi adresami.
Komentarze
- To jest odpowiedź na pierwsze pytanie. Dam mu +1. Czy mógłby Pan rozwinąć drugą część pytania? W tej części nie mogę ' znaleźć żadnej wskazówki.
- Zobacz edycję powyżej.
Odpowiedź
8032, który jest wariantem 8052, nie ma wewnętrznej pamięci ROM do przechowywania programów. Zamiast tego do przechowywania programu należy użyć zewnętrznej pamięci ROM / EPROM / EEPROM.
Dwa porty są używane w celu uzyskania dostępu do pamięci zewnętrznej: Port 0 (linie P0.0-P0.7) emituje niski 8 bity 16-bitowego adresu 64K, a także służą jako 8-bitowa szyna danych do odczytu / zapisu po zatrzaśnięciu adresu przez pamięć zewnętrzną.
P2 (linie P2.0-P2.7 ) są używane do emitowania wysokich 8-bitów 16-bitowego adresu 64K.
Chociaż 8032 ma 256 bajtów wewnętrznej pamięci RAM, można to rozszerzyć, dodając układ RAM do zewnętrznej szyny adresowej również .
Zewnętrzna linia adresu \ $ \ mathsf {\ small \ overline {\ text {EA}}} \ $ jest utrzymywana nisko, aby wskazać, czy następuje dostęp do zewnętrznej pamięci programu, w przeciwnym razie do zewnętrznej Zakładana jest pamięć RAM.
Aby wykonać kod z pamięci zewnętrznej, adres z licznika programu jest wyprowadzany na linie danych portu 0 i portu 2; następnie podczas cyklu odczytu bajt (y) pobierany (e) z ROM podczas wczytywania do portu 0 i wykonywany przez procesor.
Tylko jedna instrukcja jest pobierana naraz.
\ $ \ mathsf {\ small \ overline {\ text {PSEN}}} \ $ to stroboskop używany podczas dostępu do pamięci programu zewnętrznego.
Komentarze
- .: Ale w jaki sposób wykonuje program, który znajduje się w pamięci zewnętrznej? Słuchaj, nie rozumiem, jak komputer sobie radzi, gdy program znajduje się w pamięci zewnętrznej. Mam na myśli to, że w każdym cyklu m / c pobiera pewną liczbę bajtów. Następnie po pobraniu program jest wykonywany natychmiast lub cały program jest pobierany od razu >, jeśli tak jest, gdzie będzie on przechowywany?
- .: Więc początkowo
PC=0000h
. Zaczyna pobierać bajty w każdym cyklu m / c, a następnie wykonuje to? Dlatego w pamięci ROM zawsze powinniśmy wypalać program z adresu0000h
, w przeciwnym razie nie moglibyśmy go poprawnie wykonać. - @learner. Poprawny. Zwykle następuje skok adresu do ” rzeczywistego ” początku kodu.
- .: I da +1 Twojej odpowiedzi. Ale jeśli program jest wykonywany instrukcja po instrukcji, jak będzie zarządzana taka możliwość przekazywania dalej referencji?
L1:JNZ L2 .. L2:....
. - Instrukcja JNZ (oraz inne instrukcje Jump and Branch) ładują adres docelowy Jump do licznika programu, więc procesor pobierze następny instrukcji z tego adresu, a nie instrukcji bezpośrednio po skoku.
glue logic
. Wygląda na to, żeLJMP
przejdzie na początek programu? Ale tutaj program jest w pamięci zewnętrznej. Czy jest używany tego rodzaju instrukcja? Mam na myśli proste instrukcje są pobierane z pamięci zewnętrznej i umieszczane wIR
, dekodowane i wykonywane? Gdzie jest przypadekLJMP
tutaj?