8051 i jego RAM

Jan 20, 2007 8 Replies

Analizuję sobie budowę '51 (kolokwium w poniedziałek, ale się nie boję :P), i trafiłem na sprzeczność. Np wikipedia

formatting link
pisze: "128 B pamięci wewnętrznej RAM" Każda rozpiska rejestrów specjalnych kończy się na 0xF0, (0x00-0x7F to banki rejestrów itd)



0x00-0xF0 to jakby nie patrzeć 128B, czyli tyle ile Wikipedia pisze, wszystko się jak na razie zgadza. Jednakże kawałek dalej: "Obszar pamięci o adresach od 0x80 do 0xFF nazywany jest obszarem rejestrów specjalnych" ^^^^ czemu 0xFF? a nie 0xF0? Sprawa jest o tyle dziwna, że w kilku miejscach widziałem też 0xFF - czyżby ktoś na Wiki się walnął, a potem poszło w świat poprzez ctrl-c ctrl-v?

U¿ytkownik "scx" snipped-for-privacy@wu-pe.pe-el> napisa³ w wiadomo¶ci news:19ktse0yz33rw.1ck8skwk0zdst$. snipped-for-privacy@40tude.net...

Troche tu namieszane.

W duzym uproszczeniu obszar 0x00-0x7F czyli 128 bajtow to RAM w tym 4 banki rejestrow po 8 rej. kazdy.

Obszar 0x80-0xFF czyli 128 bajtow to w uogolnieniu obszar rejstrow specjalnych (SFR). ale nie wszystkie sa wykorzystane w klasycznym 8051. Sa tam po prostu dziury i od 0xF1 - 0xFF jest dziura/

W tych dziurach dodawane sa inne rejestry specjalne w roznych, innych, rozszerzonych wersjach 8051.

od 0x00 do 0xf0 to 240 bajtów :-) Oj, ba³bym siê o to kolokwium ;-)

Zawsze w takich momentach "w±tpliwo¶ci" mo¿esz je rozwiaæ siêgaj±c do danych technicznych u ¼ród³a... W tym przypadku bêdzie to producent procesora: Intel. A wiêc wybierasz siê na

formatting link
wstukujesz 8051 w ich wyszukiwarkê i znajdujesz kompletny podrêcznik:
formatting link
Problem rozwi±zany! :-)

A tak w ogóle to zauwa¿, ¿e tabelki rejestrów czêsto drukuje siê tak, ¿e kilka tych rejestrów jest w jednej linii, a wiêc tabelka jest dwuwymiarowa: w jednym rzêdzie masz np. 8 lub 16 rejestrów... Wiêc rzêdy s± numerowane np. 0xf0, 0xf8 i w kolumnach szukasz adresów 0xf0, 0xf1, 0xf2 itp... wiersz koñczy siê np. na 0xff.

Dnia Fri, 19 Jan 2007 23:50:54 -0600, Pszemol napisał(a):

<zawstydzony> Jedyne, co mam na swoje usprawiedliwie, to godzina wysłania posta :)

Powtarzam poprzednią wypowiedź ;)

PS: Andy wszystko ładnie opisał. Teraz zastanawiam się, dlaczego pisze się o 128B pamięci RAM, skoro pamięci wewnętrznej, licząc z SFR mamy 256B? Pamięć RAM != wewnętrzna pamięć ulotna?

No ale RAM'u czyli komorek, w ktorych mozesz przechowywac zmienne ma 128 bajtow (0x00-0x7F).

0x80-0xFF to rejestry specjalne: np. Timery, maski i flagi przerwan, rejestry UART'a, porty wejscia-wyjscia, itp.

Nie mozesz ich uzywac jak zwyklej pamieci RAM bo komorki RAM'u musza pamietac wartosc, ktora sie do nich wpisze a obszar rejestrow specjalnych nie spelnia takiego warunku.

Np. wpiszesz cos do komorki Timera, za chwile odczytasz i bedzie tam inna wartosc jesli Timer jest wlaczony.

Dnia Sat, 20 Jan 2007 12:22:59 +0100, Andy napisał(a):

Jeszcze jedno pytanko:

8051, powyżej 0xF0, nie ma już fizycznej pamięci? (no chyba że zewnętrzną pow 0x0100). Znaczy się projektanci zostawili kawał przestrzeni adresowej "for future use"?

Właśnie - o ile jest włączony :> Tak samo bufor rs-a... Więc na upartego możnaby używać niektórych tych rejestrów jako rejestrów ogólnego użytku.

A fizycznie 8051 ma nie 128B, a 241 bajtów pamięci "RAM": normalne rejestry SFR PC (też pamięć, a co :])

PS od 20 do 2F jest "obszar adresowania bitowego", a powyżej, do 7F, 80 bajtów "do wykorzystania". Cóż to jest to adresowanie bitowe? Rozumiem, że 30-7F, to po prostu pamięć, na której mogę sobie działać, podając adresy (bez)pośrednio.

A tak drążę i teoretyzuję, bo lubię mieć wszystko pod kontrolą i nie traktować rzeczy jako "czarnych skrzynek"

Adresowanie bitowe nale¿y rozumieæ dok³adnie tak jak adresowanie bajtowe, z tym ¿e zamiast bajtu jako najmniejszej adresowalnej jednostki pamiêci masz bit. Czyli mo¿esz dostaæ siê do konkretnego bitu z bajtu.

Za³ózmy ¿e jaka¶ 8-bitowa zmienna okre¶la stan LEDów. W trybie bajtowym, aby zmieniæ jeden bit, musisz

- odczytaæ warto¶æ bajtu

- zamaskowaæ (ustawiæ/skasowaæ) bit

- zapisaæ zmienion± warto¶æ bajtu. W trybie adresowania bitowego mo¿esz ustawiæ lub skasowaæ jeden konkretny bit bez ingerencji w resztê bitów tego bajtu.

Podobna sprawa jest w procesorach 16 i 32 bitowych w dostêpie do pamiêci: 32-bitowa pamiêæ RAM ma linie wyboru bajtu i procesor jest w stanie zmieniæ tylko jeden bajt nie "ruszaj±c" reszty 32-bitowego s³owa.

Dnia Sat, 20 Jan 2007 20:32:16 -0600, Pszemol napisał(a):

heh a w AVRkach jest sbr, sbi, cbr, i cbi i można się dostać prawie wszędzie, gdzie się chce bez większych kombajnacji.

scx napisał(a):

"Prawie wszędzie" - chyba żartujesz. Instrukcjami sbr i cbr możesz zmieniać bity w rejestrach (robią to samo co odpowiednio zapisane operacje OR i AND ze stałą), a przez sbi i cbi zmienisz bit tylko w bardzo ograniczonej przestrzeni SFR (i to nawet nie całej w większych AVRach posiadających dużo peryferiów).

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required