-
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.


do góry
Mniej wypłat 800 plus dla obcokrajowców. Czy to efekt zmian w przepisach?