SETB a zewnetrzny RAM

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
Merki_1988
Użytkownik
Posty: 147
Rejestracja: 18 paź 2008, 17:53
Lokalizacja: Żywiec

SETB a zewnetrzny RAM

Post autor: Merki_1988 » 28 paź 2010, 19:58

Witam mam pewne pytanko odnosnie 8051, pytalem o to na elektrodzie ale tam nie dano mi jednoznacznej odpowiedzi:

Witam, mam w sumie taki problem, że ciężko mi go rozkminic teoretycznie

Otóż mam zewnętrzną pamięć RAM, rozumiem że do przesyłania tam informacji słuzy polecenie MOVX. Ale co z takimi poleceniami jak SETB (np. potrzebne aby ustawić bit portu-wszak rejestr za to odpowiedzialny umieszczony jest w RAM) lub INC? Czy jeśli mam zewnetrzną pamięć (i jej uzywam) mogę ich używać normalnie czy też wogóle musze z nich zrezygnować?

uC to 89C52

Awatar użytkownika
radzio
Użytkownik
Posty: 573
Rejestracja: 07 gru 2004, 23:06
Lokalizacja: Sosnowiec
Kontakt:

Post autor: radzio » 28 paź 2010, 20:21

Jeśli udzielone tam odpowiedzi nie są "jednoznaczne" to moża ta będzie :
MUSISZ Z NICH ZREZYGNOWAĆ.

Poczytaj o dostępnych trybach adresowania wspomnianych instrukcji - może to rozwieje Twoje wątpiwości.

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

Post autor: Luminofor » 28 paź 2010, 21:00

Musisz z nich zrezygnować, bo są oddzielne rozkazy do operacji na pamieci wbudowanej i zewnętrznej, ale to samo zrobisz za pomocą rozkazu MOVX i lokalnych operacji, tzn. ja bym to zrobił tak:
1) kopiuję MOVX-em komórkę zewnętrznej pamięci na której chcę wykonywać operacje np. do akumulatora czy R0
2) wykonuję operacje na tym Acc/R0 w lokalnym RAM-ie
3) zmodyfikowane lokalnie rejestry wysyłam MOVX-em do pamięci zewnętrznej.

Metoda ma tą zaletę, że w kroku 2 możesz stosować rozkazy odnoszące się do pamięci wewnętrznej.

Merki_1988
Użytkownik
Posty: 147
Rejestracja: 18 paź 2008, 17:53
Lokalizacja: Żywiec

Post autor: Merki_1988 » 29 paź 2010, 8:31

Ok dziekuje za rozwianie mych wątpliwości ;) lutownik pomysle nad zastosowaniem tego sposobu, pewnie go wykorzystam ;) Dzieki jeszcze raz Panowie!

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

Post autor: Luminofor » 29 paź 2010, 13:17

Merki_1988 pisze: lutownik
Jaki lutownik?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 29 paź 2010, 17:02

A ile masz tej pamięci, bo jak 2KB do 8KB to jest na to sposób. wtedy możesz używać RAMu i pewnej części portu, dokładnie jego górnej połówki P2.4 do P2.7, czy jak tam w 51, miało to oznaczenia. A możliwe jest to dzięki stronicowemu trybowi dostępu.

Merki_1988
Użytkownik
Posty: 147
Rejestracja: 18 paź 2008, 17:53
Lokalizacja: Żywiec

Post autor: Merki_1988 » 30 paź 2010, 18:11

Tfu luminofor oczywiscie ze luminofor ;p

Pamięci RAM wewnętrznej będzie 256 bajtów - nie wiem czy mi to starczy, nigdy nie programowałem i nie potrafie przewidzieć ile RAM będzie wymagane ;) dlatego korzystam z zewnetrznej RAM :) to o czym mówisz kayron oczywiście jest do zrobienia ale nie potrzeba mi się babrać w takie coś i tylko robić sobie pod górke ;) zreszta trochę to bezsensu w moim przypadku gdyż sposób stronicowania stosuje sie po to, aby móc wykorzystać chociaż część pinów z P2 do sterowania czegoś-od swojej aplikacji tego nie wymagam.

Przy okazji-czy instrukcje MOVX można wykorzystać aby od razu skopiować zewn RAM do jakiegos rejestru roboczego (innego niz akumulator)? czy też musze najpierw do acc i dopiero z niego do innego rejestru?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 30 paź 2010, 20:28

stronicowania stosuje sie po to, aby móc wykorzystać chociaż część pinów z P2 do sterowania czegoś
Paradoksalnie właśnie nie do tego wymyślono stronicowanie. Stronicowanie wymyślono po to aby można szybciej operować 8 bitowym procesorem na pamięci i po to aby jej zaoszczędzić bo instrukcje oparte na stronicowaniu zajmują mniej w pamięci. Oczywiście adresowanie bezpośrednie, bo adresowanie pośrednie 16 bitowe i tak używa rejestru indeksowgo (lub jednego z 2 jeżeli dana 51, takowe ma).
Co do twojego pytania o RAM w 51' To jeżeli masz go 256B to pierwsze 32B zajmują ci 4 zestawy rejestrów uniwersalnych (po 8 każdy), potem masz stos który najczęściej w kompilatorze tez jest ograniczony do 32B (potem wywala error, ale to jest akurat programowalne), czyli zostaje 64B dla siebie plus 128B w górnej połówce czyli 196B, a to sporo wbrew pozorom. Tyle już wystarcza do obsługi wyświetlacza graficznego z N3310 w trybie tekstowym.

Merki_1988
Użytkownik
Posty: 147
Rejestracja: 18 paź 2008, 17:53
Lokalizacja: Żywiec

Post autor: Merki_1988 » 31 paź 2010, 23:10

Hmm w sumie używam zaledwie kilku rejestrów z banku nr 1 i nie licząc stosu ani SFR nic wiecej. Też mi się wydaje, że wewnętrzny RAM by starczył ale jednak wolałem się zabezpieczyć ;) no i zawsze to się trochę więcej człowiek nauczy jak ma więcej do zrobienia niz iść na łatwizne. A w moim przypadku (sterownik do swiatełek choinkowych) moge sobie chyba pozwolić na pewną rozrzutność cykli zegarowych i kodu programu.

Jeszcze jedno-czy moge uważać rozmiar pliku w notatniku jako teoretyczne zajmowane miejsce programu w pamięci EEPROM?

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

Post autor: Luminofor » 31 paź 2010, 23:13

Jeszcze jedno-czy moge uważać rozmiar pliku w notatniku jako teoretyczne zajmowane miejsce programu w pamięci EEPROM?
Nie, znajdź sobie w odpowiednich tablicach ile bajtów zajmują poszczególne rozkazy.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 01 lis 2010, 10:53

A w moim przypadku (sterownik do swiatełek choinkowych) moge sobie chyba pozwolić na pewną rozrzutność cykli zegarowych i kodu programu.
Chłopie do tego ci wystarczą same rejestry uniwersalne i 1kB Flash. Twoje pytanie sugerowało jakąś poważniejszą aplikacje a nie coś co uciągnie 89C1051 (nie produkowany już tak na marginesie) taktowany 1MHz.

ODPOWIEDZ