-
31. Data: 2017-02-26 21:43:38
Temat: Re: Programowanie AT89Cxx51
Od: Zbych <a...@o...pl>
W dniu 26.02.2017 o 21:02, Atlantis pisze:
> Innymi słowy:
> 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?
Źle. Wewnętrzna pamięć RAM i zewnętrzna to dwie oddzielne przestrzenie
adresowe obsługiwane innymi rozkazami. Czasami bardziej wypaśne '51
miały cześć peryferiów zamapowane na zewnętrzny RAM i wtedy faktycznie
cześć XRAMu była niedostępna.
> 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?
A nie przyszło ci do głowy przeczytanie manuala do kompilatora?
http://www.keil.com/support/man/docs/c51/c51_le_cons
t.htm
-
32. Data: 2017-02-26 23:21:17
Temat: Re: Programowanie AT89Cxx51
Od: Dariusz Dorochowicz <_...@w...com>
W dniu 2017-02-26 o 21:02, Atlantis pisze:
> 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. ;)
Spokojnie, to typowa konfiguracja. Wystarczy zapytać guglarkę. Schematów
od zarąbania, wszystkie prawie takie same, no bo co tu można wymyślić?
Ale po co pytasz o ten procek i takie tematy? Chcesz coś na nim zrobić
czy tak z ciekawości? Bo wiesz, to straszna staroć przecież. Jeżeli masz
urządzenie, to konfigurację już masz, a jeżeli nie, to nie ma sensu się
bawić w odkrywanie. Okolice typowej konfiguracji będziesz miał na
prostym atmelku w jednym scalaku i to więcej pamięci programu, za to
mniej RAMu. Ale i z tym da się poradzić - chociażby na XMega128A1 masz
możliwość dołączenia pamięci zewnętrznej, nie tylko statycznej. O
mocniejszych układach nie wspominam.
> 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.
Dokładnie tak. Nie pamiętam tylko czy można zmieniać stan tego pinu w
trakcie pracy.
> 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.
Nie pamiętam, ale Zbych już odpowiedział.
> 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?
Pewnie trzeba zajrzeć do listy rozkazów i znaleźć informację czy jest
instrukcja pobrania danej z pamięci programu - obawiam się że to było
tak dawno...
Pozdrawiam
DD
-
33. Data: 2017-02-27 06:42:28
Temat: Re: Programowanie AT89Cxx51
Od: Atlantis <m...@w...pl>
On 26.02.2017 23:21, Dariusz Dorochowicz wrote:
> Ale po co pytasz o ten procek i takie tematy? Chcesz coś na nim zrobić
> czy tak z ciekawości? Bo wiesz, to straszna staroć przecież. Jeżeli masz
> urządzenie, to konfigurację już masz, a jeżeli nie, to nie ma sensu się
> bawić w odkrywanie. Okolice typowej konfiguracji będziesz miał na
W tej chwili nie planuję niczego budować na tym układzie. Pytam z
czystej ciekawości, albo że tak powiem - z powodu zainteresowania
historią. :) To znaczy nie wykluczam, że może kiedyś, z czystej
ciekawości spróbuję sobie coś takiego uruchomić, na podobnej zasadzie,
jak ludzie budujący własne retro komputery na Z80, jednak w tej chwili
są to rozważania czysto teoretyczne.
Gotową konfigurację już mam, ale jest prosty układ bez zewnętrznej
pamięci. Próbuję w tej chwili napisać na niego własny kod przy pomocy
sdcc i głównie dlatego temat mnie zainteresował. :)
> prostym atmelku w jednym scalaku i to więcej pamięci programu, za to
> mniej RAMu. Ale i z tym da się poradzić - chociażby na XMega128A1 masz
> możliwość dołączenia pamięci zewnętrznej, nie tylko statycznej. O
> mocniejszych układach nie wspominam.
Tak, wiem - to jasne. W 32bitowych MCU pamięć nie jest problemem. Jak
już mówiłem - tu chodzi o ciekawość, a nie pragmatyczną potrzebę
obejścia problemów z zasobami.
-
34. Data: 2017-02-27 09:49:53
Temat: Re: Programowanie AT89Cxx51
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Atlantis" napisał w wiadomości grup
dyskusyjnych:o8v9rj$l28$...@n...icm.edu.pl...
>> 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?
8051 mial wyprowadzona magistrale (ktora wymagala pinow portow, wiec
ograniczala mozliwosci) i mozliwosc podpiecia dodatkowych 64KB
zewnetrznego RAM na oraz 64 zewnetrznej pamieci programu.
Program mogl byc tylko w pamieci programu.
Oprocz tego mozna sobie bylo zorganizowac dodatkowe bankowanie, i
teoretycznie miec nieograniczona ilosc danych.
i to samo bylo w AT89C51 i C52. Tylko tam majac wygodny wewnetrzny
flash razej nie uzywalo zewnetrznego programu.
Ale juz np taki 2051 Atmela majac mniej nozek tej magistrali nie
przewidywal.
Ogolnie - szkoda czasu. Dostep do tych pamieci to byl koszmar, albo
masz zastosowanie na maly 8-bit uC, albo uzyj lepszego procka.
Intel mial nastepce, z rozszerzona architektura ... ale tez szkoda
czasu.
J.
-
35. Data: 2017-02-27 09:59:42
Temat: Re: Programowanie AT89Cxx51
Od: "J.F." <j...@p...onet.pl>
Użytkownik "AlexY" napisał w wiadomości grup
dyskusyjnych:o8vb11$3le$...@d...me...
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.
Tak.
Jak 51 czytal rozkaz, to wystawial adres i aktywowal linie PSEN-.
To samo bylo, jak odczytywal dane z pamieci programu rozkazem MOVC.
Jesli czytal dane z pamieci zewnetrznej (XRAM), to aktywowal linie RD-
(P3.7).
Przy zapisie aktywowal linie WR- (P3.6).
>> 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.
To sie tyczy programu. Moze pobierac z wewnetrznego flash, albo caly
program z zewnetrznej pamieci.
Co do adresow - bodajze kompilator Keil mial wskazniki 3 bajtowe,
gdzie najstarsze bity wskazywaly rodzaj pamieci.
Ale to czysto softwarowo robota.
J.
-
36. Data: 2017-02-27 10:19:55
Temat: Re: Programowanie AT89Cxx51
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Atlantis" napisał w wiadomości grup
dyskusyjnych:o8vc9i$k08$...@n...icm.edu.pl...
W dniu 2017-02-26 o 20:50, Dariusz Dorochowicz pisze:
>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?
Nie, to dwie osobne pamieci.
Wiekszosc rozkazow operuje na wewnetrznej, a tylko movx na ze
>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?
Jesli chodzi o C ... to koszmar.
uC moze pobrac dane z pamieci programu rozkazem movc ... ale skad ma
wiedziec ktorego rozkazu uzyc ?
Pamieci mamy 3, rozkazy 3 rozne.
Jak sobie dobrze rodzielisz i zaprogramujesz, to swietnie, gorzej jak
chcesz
printf ("blad nr %d: %s", errnr, errmsg)
i skad ten biedny kompilator ma wiedziec, czego uzyc ?
O Keilu pisalem, AVR ma akurat podobny problem.
J.
-
37. Data: 2017-02-27 10:48:27
Temat: Re: Programowanie AT89Cxx51
Od: Piotr Gałka <p...@c...pl>
W dniu 2017-02-26 o 20:21, 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?
> 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?
>
Pierwsze 51-ki nie miały wewnętrznej pamięci programu - czyli...
P.G.
-
38. Data: 2017-02-27 11:29:29
Temat: Re: Programowanie AT89Cxx51
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Piotr Gałka" napisał w wiadomości grup
dyskusyjnych:o90sld$lhb$...@n...chmurka.net...
>> 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?
>
>Pierwsze 51-ki nie miały wewnętrznej pamięci programu - czyli...
Czekaj Piotrze, bo o ile pamietam ...
-8051 miala 4 czy 8kB wewnetrznego programu "programowanego maska",
czyli trzeba bylo u Intela zamowic z konkretna zawartoscia,
-byla wersja 8031 (a moze 8035?) , ktora wewnetrzego ROM wcale nie
miala,
-byla tez wersja 8751, Eprom z okienkiem do kasowania ... ale chyba
nigdy nie widzialem, a w katalogach jakies niebotyczne ceny
-w kraju czesto uzywano 8051 z jakis resztek produkcyjnych, z
zewnetrznym epromem, po wylaczeniu wewnetrznego ROM, ewentualnie
klonow na podobnej zasadzie.
Dosc popularne byly klony siemensa, ktore mialy wiecej nozek, wiec nie
ograniczaly funkcjonalnosci.
Podobnie bylo u Motoroli i innych - wersja Eprom to jakis meteor, niby
byla, a malo kto widzial.
I dopiero Atmel wprowadzil jakas rewolucje cenowa, wczesniej Microchip
w PIC, wczesniej byly rozne pomysly jak np ten Dallas z bateryjka.
J.
-
39. Data: 2017-02-27 13:11:24
Temat: Re: Programowanie AT89Cxx51
Od: Piotr Gałka <p...@c...pl>
W dniu 2017-02-27 o 06:42, Atlantis pisze:
> On 26.02.2017 23:21, Dariusz Dorochowicz wrote:
>
>> Ale po co pytasz o ten procek i takie tematy? Chcesz coś na nim zrobić
>> czy tak z ciekawości? Bo wiesz, to straszna staroć przecież. Jeżeli masz
>> urządzenie, to konfigurację już masz, a jeżeli nie, to nie ma sensu się
>> bawić w odkrywanie. Okolice typowej konfiguracji będziesz miał na
>
> W tej chwili nie planuję niczego budować na tym układzie. Pytam z
> czystej ciekawości, albo że tak powiem - z powodu zainteresowania
> historią. :) To znaczy nie wykluczam, że może kiedyś, z czystej
> ciekawości spróbuję sobie coś takiego uruchomić, na podobnej zasadzie,
> jak ludzie budujący własne retro komputery na Z80, jednak w tej chwili
> są to rozważania czysto teoretyczne.
> Gotową konfigurację już mam, ale jest prosty układ bez zewnętrznej
> pamięci. Próbuję w tej chwili napisać na niego własny kod przy pomocy
> sdcc i głównie dlatego temat mnie zainteresował. :)
>
Wpiszę swoje 3 grosze - może Ci się przyda (nie ja pisałem program -
mogę coś mieszać).
W DSM-51 (projekt z 1993r) w momencie włączenia zasilania:
- 32k EPROM z programem był widoczny dwa razy (w obu połowach pamięci
programu),
- 32k RAMu było chyba widoczne tylko w dolnej połowie pamięci danych
(niektóre adresy górnej połowy były użyte do sterowania sprzętu).
Pod kontrolą tego programu z EPROMu edytowało się ręcznie (wbudowany
assembler - z menu wybierało się mnemonik, a potem z menu kolejne jego
parametry - taki wymóg czasów, gdy w szkołach pracowania
mikrokontrolerów nie miała komputerów) program, który był umieszczany W
RAMie. Była też (dla posiadających PC) możliwość wgrania do RAMu
programu przez RS232.
Uruchomienie programu polegało na zastąpieniu w dolnej połowie pamięci
programu EPROMu przez RAM i reset procesora. W ten sposób wektory
przerwań też pochodziły z programu załadowanego do RAMu.
W uruchamianym w RAMie programie można było korzystać z iluś tam
procedur zawartych w EPROMie (widocznym teraz w górnej połowie pamięci
programu).
Urządzenie miało dwa resety. Reset programu użytkownika robił reset
procesora z pozostawieniem RAMu w dolnej połowie pamięci programu, a
pełny reset przywracał wszystko do stanu jak po włączeniu zasilania.
Watchdog generował reset nie modyfikując przestrzeni adresowych -
zadziałanie watchdoga w programie użytkownika resetowało program
użytkownika, a nie cały system.
Poza przekazaniem pełnej władzy programowi w RAMie była też możliwość
puszczania go krokowo. Rezydujący u góry program w EPROMie wkładał
odpowiednio skoki do siebie do RAMu i wypuszczał od odpowiedniego
miejsca (i stanu stosu) program w RAMie i łapał gdy doszedł do tego skoku.
P.G.
-
40. Data: 2017-02-27 13:49:29
Temat: Re: Programowanie AT89Cxx51
Od: Piotr Gałka <p...@c...pl>
W dniu 2017-02-27 o 11:29, J.F. pisze:
> Użytkownik "Piotr Gałka" napisał w wiadomości grup
> dyskusyjnych:o90sld$lhb$...@n...chmurka.net...
>>> 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?
>>
>> Pierwsze 51-ki nie miały wewnętrznej pamięci programu - czyli...
>
> Czekaj Piotrze, bo o ile pamietam ...
> -8051 miala 4 czy 8kB wewnetrznego programu "programowanego maska",
> czyli trzeba bylo u Intela zamowic z konkretna zawartoscia,
> -byla wersja 8031 (a moze 8035?) , ktora wewnetrzego ROM wcale nie miala,
> -byla tez wersja 8751, Eprom z okienkiem do kasowania ... ale chyba
> nigdy nie widzialem, a w katalogach jakies niebotyczne ceny
> -w kraju czesto uzywano 8051 z jakis resztek produkcyjnych, z
> zewnetrznym epromem, po wylaczeniu wewnetrznego ROM, ewentualnie klonow
> na podobnej zasadzie.
Lepiej to pamiętasz niż ja. Wydawało mi się, że 8051 było bez pamięci
programu, bo była ona (z mojego punktu widzenia) bezużyteczna, ale
faktycznie to chyba 8031.
W 88 wymyśliłem nazwę MicroMade i zmotywowani tym "Micro" już w Piccolo
użyliśmy 8748 (wersja z EPROMem - cena 1 sztuki tyle ile moja miesięczna
pensja asystenta na PG).
Kilka lat późniaj w Picco-GAL używaliśmy 8751.
W tego typu urządzeniach, gdzie trzeba było mieś dużo linii we/wy
podłączenie zewnętrznej pamięci programu zrobiło by z urządzenia wersję
wybitnie nie pasujące do naszej nazwy. Zamiast jednego scalaka byłoby
chyba ze 6 (trzeba by czymś zastąpić nogi zajęte przez podłączenie
pamięci z programem).
> I dopiero Atmel wprowadzil jakas rewolucje cenowa, wczesniej Microchip w
> PIC, wczesniej byly rozne pomysly jak np ten Dallas z bateryjka.
>
O ile pamiętam to pierwsze wielokrotnie programowane procesory jakie
używaliśmy to były jakieś ZILOG. Kilka lat później pojawiły się Atmele.
P.G.