-
21. Data: 2017-02-24 21:00:01
Temat: Re: Programowanie AT89Cxx51
Od: AlexY <a...@i...pl>
Piotr Gałka pisze:
> W dniu 2017-02-24 o 11:28, Zbych pisze:
>> W dniu 24.02.2017 o 11:01, Piotr Gałka pisze:
>>
>>> Nigdy nie używałem C dla żadnego mikrokontrolera. Wyobrażałem sobie, że
>>> C musi być trochę rozszerzane pod dany procesor.
>>> Czyli zakładałem, że w C dla 51-ki powinna być jakaś funkcja
>>> biblioteczna typu setbit() przyjumująca jako parametr jego adres i
>>> potrafiąca przetłumaczyć to na assembler nawet jak nie ma adresowania
>>> przez rejestr.
>>
>> Napiszę najprościej jak potrafię. Numer bitu w setb i clr musi być na
>> sztywno wpisany w rozkaz, nie ma możliwości zrobienia z niego parametru.
>>
> Dzięki. W końcu dotarło do mnie :)
> Jakoś nie zauważyłem, że to wymagałoby dynamicznego dopasowywania kodu
> programu w czasie jego pracy :(
Pamięci programu sam program nie może modyfikować więc też nie tak. Jak
musisz gasić/zapalać różne bity to będziesz musiał skakać w różne
miejsca programu z odpowiednim dla danego bitu poleceniem. Jeszcze
takiej potrzeby nie miałem ale do zrobienia.
--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html
-
22. Data: 2017-02-26 11:32:10
Temat: Re: Programowanie AT89Cxx51
Od: Atlantis <m...@w...pl>
On 23.02.2017 08:38, MKi wrote:
> Model large - obiekty te są alokowane w pamięci XRAM
> (zazwyczaj do 64KB). Dostęp do każdej zmiennej poprzedzany
> jest załadowaniem jej adresu do DPTR.
> Stos też jest w XRAM, co bardzo wydłuża jego obsługę.
ły
Zapytam z czystej ciekawości, bo dzisiaj oczywiście dużo prościej
wykorzystać dowolny, potężny 32bitowy mikrokontroler z dużą ilością ramu
i flasha...
Niemniej jak wyglądała współpraca układów w rodzaju AT89C51 albo AT89C52
z zewnętrzną pamięcią? W przypadku RAM-u jak rozumiem dwa porty robiły
za multipleksowaną szynę adresową/danych, którą łączyło się z układem
pamięci poprzez 74LS573. W ten sposób można było zyskać całkiem sporą
ilość pamięci operacyjnej, ciągle przy dość małej pamięci stałej.
Możliwe było jeszcze dorzucenie jakiegoś EPROM-a i zapisanie w nim hex-a
z programem? Jeśli tak, to jak duże projekty w ten sposób tworzono?
Czy do takiej szyny można było podpiąć równocześnie jakiś wyświetlacz
alfanumeryczny HD44780 albo nawet jakiś kontroler Ethernetu?
-
23. Data: 2017-02-26 13:47:56
Temat: Re: Programowanie AT89Cxx51
Od: AlexY <a...@i...pl>
Atlantis pisze:
[..]
> Niemniej jak wyglądała współpraca układów w rodzaju AT89C51 albo AT89C52
> z zewnętrzną pamięcią? W przypadku RAM-u jak rozumiem dwa porty robiły
> za multipleksowaną szynę adresową/danych, którą łączyło się z układem
> pamięci poprzez 74LS573. W ten sposób można było zyskać całkiem sporą
> ilość pamięci operacyjnej, ciągle przy dość małej pamięci stałej.
> Możliwe było jeszcze dorzucenie jakiegoś EPROM-a i zapisanie w nim hex-a
> z programem? Jeśli tak, to jak duże projekty w ten sposób tworzono?
Szyna adresowa jest 16 bitowa, jak trzeba więcej to konieczne jest
bankowanie pamięci.
> Czy do takiej szyny można było podpiąć równocześnie jakiś wyświetlacz
> alfanumeryczny HD44780 albo nawet jakiś kontroler Ethernetu?
Jeśli HD jest w przestrzeni adresowej to czemu nie, nie może blokować
ani reagować na nie swoje adresy i musi wyrabiać się z timingami, albo
trzeba mu zrobić bufor.
--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html
-
24. Data: 2017-02-26 15:48:02
Temat: Re: Programowanie AT89Cxx51
Od: Dariusz Dorochowicz <_...@w...com>
W dniu 2017-02-26 o 13:47, AlexY pisze:
> Atlantis pisze:
> [..]
>> Niemniej jak wyglądała współpraca układów w rodzaju AT89C51 albo AT89C52
>> z zewnętrzną pamięcią? W przypadku RAM-u jak rozumiem dwa porty robiły
>> za multipleksowaną szynę adresową/danych, którą łączyło się z układem
>> pamięci poprzez 74LS573. W ten sposób można było zyskać całkiem sporą
>> ilość pamięci operacyjnej, ciągle przy dość małej pamięci stałej.
>> Możliwe było jeszcze dorzucenie jakiegoś EPROM-a i zapisanie w nim hex-a
>> z programem? Jeśli tak, to jak duże projekty w ten sposób tworzono?
>
> Szyna adresowa jest 16 bitowa, jak trzeba więcej to konieczne jest
> bankowanie pamięci.
>
>> Czy do takiej szyny można było podpiąć równocześnie jakiś wyświetlacz
>> alfanumeryczny HD44780 albo nawet jakiś kontroler Ethernetu?
>
> Jeśli HD jest w przestrzeni adresowej to czemu nie, nie może blokować
> ani reagować na nie swoje adresy i musi wyrabiać się z timingami, albo
> trzeba mu zrobić bufor.
Przypomnę jeszcze, że w zasadzie można szynę adresową określić jako
17-bitową. Była tam selekcja I/O i pamięci osobnymi liniami, ale
szczegółów to już nie pamiętam. W sumie to była selekcja I/O i pamięci,
ale selekcja pamięci programu też gdzieś tam się pętała, w sumie to już
mnie pamiętam szczegółów.
Pozdrawiam
DD
-
25. Data: 2017-02-26 16:26:24
Temat: Re: Programowanie AT89Cxx51
Od: AlexY <a...@i...pl>
Dariusz Dorochowicz pisze:
[..]
> Przypomnę jeszcze, że w zasadzie można szynę adresową określić jako
> 17-bitową. Była tam selekcja I/O i pamięci osobnymi liniami, ale
> szczegółów to już nie pamiętam. W sumie to była selekcja I/O i pamięci,
> ale selekcja pamięci programu też gdzieś tam się pętała, w sumie to już
> mnie pamiętam szczegółów.
To jest właśnie bankowanie pamięci, nie ma poleceń adresujących 17-bitowo.
--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html
-
26. Data: 2017-02-26 17:17:34
Temat: Re: Programowanie AT89Cxx51
Od: Dariusz Dorochowicz <_...@w...com>
W dniu 2017-02-26 o 16:26, AlexY pisze:
> Dariusz Dorochowicz pisze:
> [..]
>> Przypomnę jeszcze, że w zasadzie można szynę adresową określić jako
>> 17-bitową. Była tam selekcja I/O i pamięci osobnymi liniami, ale
>> szczegółów to już nie pamiętam. W sumie to była selekcja I/O i pamięci,
>> ale selekcja pamięci programu też gdzieś tam się pętała, w sumie to już
>> mnie pamiętam szczegółów.
>
> To jest właśnie bankowanie pamięci, nie ma poleceń adresujących 17-bitowo.
Bankowaniem raczej określa się rozszerzenie standardowej przestrzeni
adresowej, a ja piszę że "w zasadzie" ;)
Pozdrawiam
DD
-
27. Data: 2017-02-26 20:21:21
Temat: Re: Programowanie AT89Cxx51
Od: Atlantis <m...@w...pl>
W dniu 2017-02-26 o 16:26, AlexY pisze:
> To jest właśnie bankowanie pamięci, nie ma poleceń adresujących 17-bitowo.
Czyli rozumiem, że teoretycznie w tych mikrokontrolerach możliwe jest
np. jednoczesne zastosowanie 64kB pamięci RAM i 64kB EPROM? Będą one
widoczne jako dwie osobne przestrzenie adresowe?
Możliwe było uruchamianie programu z zewnętrznego EPROM-a, czy też
pamięci tego rodzaju był wykorzystywane do przechowywania dodatkowych
zasobów, a kod należało upchnąć w tych kilku kB wewnętrznego flasha?
-
28. Data: 2017-02-26 20:43:16
Temat: Re: Programowanie AT89Cxx51
Od: AlexY <a...@i...pl>
Atlantis pisze:
> W dniu 2017-02-26 o 16:26, AlexY pisze:
>
>> To jest właśnie bankowanie pamięci, nie ma poleceń adresujących 17-bitowo.
>
> Czyli rozumiem, że teoretycznie w tych mikrokontrolerach możliwe jest
> np. jednoczesne zastosowanie 64kB pamięci RAM i 64kB EPROM? Będą one
> widoczne jako dwie osobne przestrzenie adresowe?
Nie, przynajmniej jeśli dobrze zrozumiałem PDFa od 89c51/2.
> Możliwe było uruchamianie programu z zewnętrznego EPROM-a, czy też
> pamięci tego rodzaju był wykorzystywane do przechowywania dodatkowych
> zasobów, a kod należało upchnąć w tych kilku kB wewnętrznego flasha?
"External Access Enable. EA must be strapped to GND in
order to enable the device to fetch code from external program
memory locations starting at 0000H up to FFFFH."
Jeśli dobrze zrozumiałem można podpiąć pamięć programu albo danych, nie
widzę mix'u, może jest jakiś kruczek.
--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html
-
29. Data: 2017-02-26 20:50:35
Temat: Re: Programowanie AT89Cxx51
Od: Dariusz Dorochowicz <_...@w...com>
W dniu 2017-02-26 o 20:43, AlexY pisze:
> Atlantis pisze:
>> W dniu 2017-02-26 o 16:26, AlexY pisze:
>>
>>> To jest właśnie bankowanie pamięci, nie ma poleceń adresujących
>>> 17-bitowo.
>>
>> Czyli rozumiem, że teoretycznie w tych mikrokontrolerach możliwe jest
>> np. jednoczesne zastosowanie 64kB pamięci RAM i 64kB EPROM? Będą one
>> widoczne jako dwie osobne przestrzenie adresowe?
>
> Nie, przynajmniej jeśli dobrze zrozumiałem PDFa od 89c51/2.
>
>> Możliwe było uruchamianie programu z zewnętrznego EPROM-a, czy też
>> pamięci tego rodzaju był wykorzystywane do przechowywania dodatkowych
>> zasobów, a kod należało upchnąć w tych kilku kB wewnętrznego flasha?
>
> "External Access Enable. EA must be strapped to GND in
> order to enable the device to fetch code from external program
> memory locations starting at 0000H up to FFFFH."
>
> Jeśli dobrze zrozumiałem można podpiąć pamięć programu albo danych, nie
> widzę mix'u, może jest jakiś kruczek.
Pewnie że jest. EA to tylko wybór pamięci programu, a na PSEN procek
wystawia czy chce dostępu do pamięci programu czy danych. Tyle, że
niekoniecznie da się w ten sposób dostać do całej pamięci, bo zdaje się
że na początku są mapowane rejestry.
Pozdrawiam
DD
-
30. Data: 2017-02-26 21:02:57
Temat: Re: Programowanie AT89Cxx51
Od: Atlantis <m...@w...pl>
W dniu 2017-02-26 o 20:50, Dariusz Dorochowicz pisze:
> Pewnie że jest. EA to tylko wybór pamięci programu, a na PSEN procek
> wystawia czy chce dostępu do pamięci programu czy danych. Tyle, że
> niekoniecznie da się w ten sposób dostać do całej pamięci, bo zdaje się
> że na początku są mapowane rejestry.
Pytam, bo wydaje mi się, że kiedyś widziałem schemat na którym do MCU
jednocześnie podłączony był RAM i EPROM. Jeśli dobrze pamiętam, piny
sterujące były podłączone przez jakąś bramkę. Na 90% jestem pewien, że
to właśnie dotyczyło czegoś w stylu AT89C51/52, jednak mogę się mylić.
Dlatego właśnie pytam. ;)
Innymi słowy:
1) Mogę korzystać albo z wewnętrznej pamięci programu, albo zewnętrznej
- w zależności od sposobu podłączenia pinu EA.
2) Zewnętrzna pamięć RAM ma wspólną przestrzeń adresową z wewnętrzną, a
więc jej pewna ilość na początku (128 bajtów?) będzie niewykorzystana.
Dobrze to rozumiem?
I jeszcze jedno pytanie: jak w tej rodzinie wygląda kwestia korzystania
ze stałych definiowanych w pamięci programu? Istnieje coś takiego, jak
PROGMEM w AVR-ach, czy też jedynym wyjściem jest zwykłe tworzenie kopii
tych stałych w pamięci RAM? Bo chyba nie jest tak dobrze, że wystarczy
zdefiniować zmienną jako "const", jak we współczesnych mikrokontrolerach
32-bitowych?