logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AT89C52 – adresowanie i wykorzystanie 256B RAM, dostęp do górnej pamięci

drslawek1 15 Lis 2006 12:47 2236 12
REKLAMA
  • #1 3226891
    drslawek1
    Poziom 11  
    Posty: 11
    Ocena: 8
    Mam pytanie zwiazane z pamiecia ram w procesorach at89c51/52
    (dodam ze albo nie umiem szukac albo nie ma podobnego postu)

    chodzi mi oto że wg.dokumentacji 89c51 ma 128b pamieci i tu moja niewiedza jak to jest 128 b dolnej pamieci i 128 pamieci rejestrów pecjalnych
    czyli 256? ,zakładam ze w tej dolnej moge przechowywac dowolne dane np.z obliczen (poza kom powiazanymi z bankami r0-r7)

    a w 89c52 ma byc 256b .chcialbym sie dowiedziec jak to sie ma do wykorzystania tej pamieci,czyli pod jakimi adresami moge sobie przechowywac rozne potrzebne dane.czy zeby wykozystac dodatkowe 128b
    89c52 trzeba ustawic jakis bit?
  • REKLAMA
  • #2 3227082
    markosik20
    Poziom 33  
    Posty: 2263
    Pomógł: 208
    Ocena: 147
    od adresu 0x00 do adresu 0x7F jest RAM z bankiem rejestrów i obszarem adresowanym bitowo. Dostęp bezpośredni np: MOV 030h,#020h.
    Od adresu 0x80 do 0xFF to obszar rejestrów specjalnych. Dodatkowy RAM to adres 0x80 do 0xFF ale adresowany pośrednio np: mov R0,#030h i dalej dostep do pamięci mov @R0,#030h. Pierwsze 128B to pamięć typu DATA, drugi do IDATA i tam przeważnie umieszcza sie stos.
  • REKLAMA
  • #3 3227089
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Do "górnych" bajtów RAM-u , masz dostęp przez adresowanie pośrednie rejestrami R0 i R1. Np. chcesz odczytać/zapisać komórkę o adresie A0H.
    
    mov r0,#A0H   ;wpisanie adresu do rejestru R0
    mov a,@r0     ;przesłanie zawartości komórki o adresie A0H do akumulatora
    mov @r0,a     ;przesłanie zawartości akumulatora do komórki o adresie A0H 
    

    Natomiast używając adresowania bezpośredniego ...
    
    mov a,A0H    ;odczyt P2
    mov A0H,a    ;zapis P2
    

    ... odczytujesz/zapisujesz port P2 , a dokładnie rzecz ujmując , odczytujesz stan końcówek portu P2 , a zapisujesz do rejestru portu P2.

    To tyle.

    Piotrek
  • REKLAMA
  • #4 3227906
    drslawek1
    Poziom 11  
    Posty: 11
    Ocena: 8
    Dziękuje za odpowiedzi
    podsumowując jeśli dobrze zrozumiałem to :

    w 89c51 mam do dyspozycji pamiec dolnego obszaru i to jest to 128b (bez banków r0-r7)
    natomiast w 89c52 jest tez górny obszar tylko z adresowaniem posrednim.
    i to jest to dodatkowe 128b. czyli 256b czy tak?
  • REKLAMA
  • #5 3228015
    markosik20
    Poziom 33  
    Posty: 2263
    Pomógł: 208
    Ocena: 147
    Niestety w tej dolnej 128B są zawarte 4 banki rejestrów (R0-R7). Górna pamięć RAM to też 128B ale inaczej adresowana . W sumie 256B (razem z bankami w 89c52). :)
  • #6 3228653
    Fajfer2
    Poziom 20  
    Posty: 507
    Pomógł: 18
    Ocena: 14
    Tak 256 bajtów , ale... stos też musi gdzieś się pomieścić, + rejestry
    R0-R7 . Czyli co najmniej kilka bajtów się "zmarnuje" na stos i
    ew. zmienne statyczne.
  • #7 3235570
    drslawek1
    Poziom 11  
    Posty: 11
    Ocena: 8
    Wielkie dzieki za odpowiedzi:D
  • #8 3238404
    Fajfer2
    Poziom 20  
    Posty: 507
    Pomógł: 18
    Ocena: 14
    Przepraszam za zamieszanie - AT89c51 ma tylko 128b RAM
    AT89c52 256b RAM (to jest więcej od AT89c51 właśnie o ten obszar
    adresowany pośrednio)
  • #9 3238961
    drslawek1
    Poziom 11  
    Posty: 11
    Ocena: 8
    mam jeszcze jedno pytanie czy jesli zdeklaruje dane np

    dana1 equ 50h
    dana2 equ 50h

    i jesli do danej1 wpisze liczbe np.10 czyli

    mov dana1,#10

    a do danej2 wpisze np.liczbe 5 ale tak:

    mov r0,#dana2
    mov @r0,#5

    to czy wpis bedzie w dwóch roznych obszarach pamieci?
    (przynajmniej ja to tak rozumiem)
  • #10 3239240
    markosik20
    Poziom 33  
    Posty: 2263
    Pomógł: 208
    Ocena: 147
    Nie, gdyż trafią do tej samej komórki pod adresem 50h.
    Dolne 128B to adresy od 0h do 7Fh, górna to adresy od 80h do FFh. Dolną pamięć adresujesz bespośrednio lub przez
    
    mov R0,#50
    mov @R0,20
    górna tylko przez
  • #11 3239848
    drslawek1
    Poziom 11  
    Posty: 11
    Ocena: 8
    ok tak jest w układach 89c51,i np 89c2050
    ale wg danych katalogowych w 89c52
    ma byc 256+SFR bajtów a nie 128+SFR

    ja to rozumiem tak ze te 128 bajtów w 89c51 (poza bankami moge w dowolny sposób wykozystać
    natomiast w 89c52 moge wykozystac 256 (takze poza bankami i zakładam ze rejestry specjalne są w tym samym obszarze SFR = 80h-0f0h)

    wiec gdzie jest to dodatkowe 128b i jak je sie wykozystuje.?

    Po prostu muszę przechować wiele danych na raz i brakuje mi tej pamięci
    RAM. [/b]
  • #12 3240059
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    drslawek1 napisał:
    ...wiec gdzie jest to dodatkowe 128b ...

    Jest tam gdzie być powinno , czyli w tej samej przestrzeni co SFR (80h-FFh).
    Różnice pomiędzy dostępem do SFR(80h-FFh) a RAM(80h-FFh) , opisano tu już kilkakrotnie.

    Piotrek
  • #13 3240229
    drslawek1
    Poziom 11  
    Posty: 11
    Ocena: 8
    sorki za zamieszanie ale chyba zrozumialem

    jesli zrobie tak

    dana1 equ 90h (czyli deklaracja danej tymczasowej)
    i
    mov p1,#11111111b (Bo p1 to wlasnie adres 90h SFR)
    i
    mov r0,#dana1 ;przepisanie adresu danej1
    mov @r0,#00000000b ;wpisanie 0 do danej1

    to na p1 bedzie 11111111b
    a w komórce dana1 00000000b

    Mam nadzieje ze tak wlasnie bedzie i to wlasnie dotyczy pamieci
    o "tych samych" adresach jak pisał wyzej zumek

    A tego wlasnie nie mozna zrobic w 89c51 i to jest jedna z roznic pomiedzy tymi układami.
    ps.jesli znowu cos pochrzaniłem to mnie rabnijcie pozdro.
    :|:|:|

Podsumowanie tematu

LABEL_AI_GENERATED
Procesory AT89C51 i AT89C52 różnią się pod względem dostępnej pamięci RAM. AT89C51 posiada 128 bajtów pamięci RAM, która obejmuje cztery banki rejestrów (R0-R7) oraz dolny obszar pamięci adresowany bezpośrednio (adresy 0x00–0x7F). Górna pamięć (adresy 0x80–0xFF) to obszar rejestrów specjalnych (SFR), do którego dostęp jest możliwy tylko przez adresowanie pośrednie rejestrami R0 i R1. W AT89C52 dostępne jest 256 bajtów RAM, czyli dodatkowe 128 bajtów ponad standardowe 128 bajtów AT89C51, które również znajdują się w przestrzeni adresowej 0x80–0xFF, współdzielonej z SFR. Dodatkowa pamięć w AT89C52 jest adresowana pośrednio i umożliwia przechowywanie większej ilości danych tymczasowych, co jest istotne przy większych wymaganiach pamięciowych. Przykładowo, dane zadeklarowane pod tym samym adresem w dolnej pamięci i w obszarze SFR są różne i mogą być niezależnie modyfikowane, co jest cechą charakterystyczną AT89C52. Stos i zmienne statyczne również zajmują część tej pamięci. W praktyce, aby wykorzystać górną pamięć RAM w AT89C52, należy stosować adresowanie pośrednie przez rejestry R0 lub R1, natomiast dolna pamięć jest dostępna zarówno przez adresowanie bezpośrednie, jak i pośrednie. Nie jest konieczne ustawianie dodatkowych bitów do aktywacji górnej pamięci RAM w AT89C52, gdyż jest ona domyślnie dostępna w przestrzeni adresowej SFR.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA