Programowanie mikrokontrolerów AT89SXX


9.33333
Ocena: None Średnia: 9.3 (3 głosujących)

Artykuł ten powstał aby przedstawić w jak najprostszy sposób metodę programowania mikrokontrolerów AT89SXX i podobnych z rodziny MCS51 wyposażonych w interfejs ISP. Seria mikrokontrolerów AT89S jest następcą bardzo popularnych AT89C, które niestety mogą być programowane tylko za pomocą programatora równoległego. Wiele starszych projektów wykorzystuje mikrokontrolery tej rodziny więc sensowne okazało się przedstawienie tego opisu. Dodatkowo niska cena niektórych AT89S powoduje, że chętnie są stosowane w mniej skomplikowanych projektach zamiast mikrokontrolerów AVR.

Impulsem do napisania tego artykułu stały się coraz częstsze pytania o programowanie mikrokontrolerów do moich starszych projektów w których wykorzystywałem AT89CX051 a także zaprezentowanie przez kolegę DariuszEE ciekawego koreańskiego programu (ToastProg) do obsługi procesorów AT89SXX, AT89SX051 i większości AVR'ów. Programowanie odbywa się poprzez ISP za pomocą bardzo popularnego programatora STK200, a sam program jest banalny w obsłudze. Opis programowania będzie przedstawiony na przykładzie AT89S52 ale podłączenie innych obsługiwanych mikrokontrolerów odbywa się dokładnie w taki sam sposób.

1. Instalacja i konfiguracja programu


Program ToastProg można pobrać ze strony http://www.toastprog.com/ link bezpośredni można znaleźć tutaj Jak już wcześniej wspomniałem program jest koreański ale po zainstalowaniu wszystkie opcje są po angielsku. Zrzuty z instalacji wraz z zaznaczonymi przyciskami które trzeba użyć przedstawione są poniżej:



Po zainstalowaniu okno główne programu będzie wyglądało tak:

2. Programator

Program ToastProg współpracuje z programatorem STK200, którego opis znajduje się tutaj, natomiast schemat połączeń procesora AT89S52 z programatorem znajduje się na rysunku poniżej:

Mikrokontroler do poprawnego działania wymaga rezonatora kwarcowego i dwóch kondensatorów pomocniczych. Procesor jak i programator wymagają zasilania +5V względem masy (GND). Programator (zaznaczony na rysunku czerwoną przerywaną ramką) zasila się poprzez złącze programujące JP. Mając gotowy programator do wykonania pozostaje jeszcze tylko zmontowanie elementów wokół procesora U1 na kawałku płytki uniwersalnej lub w pająku.

W przypadku innego procesora z serii AT89S postępujemy tak samo z tym że prawa część schematu będzie troszkę inna. Zmiana będzie polegała na innych wyprowadzeniach układu programowanego, które musimy znaleźć w karcie katalogowej danego mikrokontrolera (przeważnie jedna z pierwszych stron w karcie). Do procesora mają być dołączone wyprowadzenia MOSI, MISO, SCK(CLK), RST (złącze w programatorze ma takie same nazwy pinów). Ponadto masa programatora musi być połączona z masą procesora, a całość musi być zasilana napięciem 5V.

3. Testowanie komunikacji z procesorem

Na rysunku poniżej widać okno główne programu wraz z zaznaczonymi (za pomocą kolorowych ramek) przyciskami:

Pierwszą i najważniejszą czynnością jest wybór rodziny i typu programowanego procesora (ramka żółta). W tym przypadku jest to AT89S52 z rodziny 8051. Po włączeniu zasilania procesora (i programatora) można wybrać opcję odczytu pamięci programu (ramka zielona, P-pamięć programu, D-pamięć danych EEPROM). Ma to teraz na celu jedynie sprawdzić czy komunikacja z procesorem przebiega prawidłowo. Jeśli istnieje jakikolwiek problem na drodze komputer - mikrokontroler pojawi się następujący komunikat "Device Not Maching (0x2012)" (zrzut poniżej). Trzeba wtedy sprawdzić układ czy zgadza się ze schematem i czy zasilanie jest włączone, a port w biosie ustawiony w tryb ECP.

Gdy wszystko jest w porządku pamięć programu z procesora zostanie odczytana do bufora w programie i pojawi się komunikat:

Jeżeli występuje problem z komunikacją nie należy próbować wgrywać plików *.hex z programem ani nic podobnego bo jest to bez sensu. Poniższe zdjęcie przedstawia realizację schematu w pająku:

4. Co sprawdzić jeśli procesor nie jest wykrywany?

  • Sprawdzamy czy w biosie port równoległy (ang. Parallel Port) jest ustawiony w tryb ECP
  • Czy zasilanie 5V jest poprawnie podłączone i czy taka wartość napięcia jest na pinie zasilającym procesor i na pinie zasilającym bufor w programatorze (pin 20 układu HCT244). Wszystkie pomiary napięć nalezy dokonywać względem masy zaznaczonej na schemacie jako GND.
  • Czy masa GND ma połączenie od portu równoległego (LPT) aż do procesora.
  • Czy wszystkie linie sygnałowe (MOSI, MISO, SCK, RST) są podłączone prawidłowo, zgodnie ze schematem. Czy nie ma zwarć między nimi, oraz zwarć do masy (GND).
  • Czy wszystkie linie sygnałowe (MOSI, MISO, SCK, RST) są podłączone prawidłowo, zgodnie ze schematem. Czy nie ma zwarć między nimi, oraz zwarć do masy (GND).
  • Czy rezonator kwarcowy o częstotliwości obsługiwanej przez procesor jest podłączony i wyposażony w kondensatory (10-22pF) do masy.

5. Pierwszy program i programowanie

Pierwszy program dla mikrokontrolera najłatwiej jest napisać w programie Bascom 8051, którego w wersji demo można pobrać ze strony http://www.mcselec.com/ Link bezpośredni dostępny jest tutaj.

Poniżej przedstawiony został prosty programik sterujący diodą (diodami) na porcie P2 (piny 21-28 układu AT89S52)

$crystal = 5000000 'rezonator kwarcowy [Hz]
$regfile = "8052.dat"
 
Do
 
  P2 = Not P2    'zmiana stanu portu 2 na przeciwny
  Waitms 250     'oczekiwanie 250 ms
 
Loop
End

Program jest banalny a jego jedynym działaniem jest zmiana stanu portu P2 na przeciwny co około 250ms. Dla celów testowych można podłączyć diodę LED z szeregowym rezystorem 330R między +5V a jeden z pinów portu P2. Jeżeli procesor wyposażony jest w inny kwarc niż 5Mhz to należy zmienić pierwszą linijkę w prezentowanym programie. Przedstawiony wyżej program można skompilować, uzyskując plik *.hex potrzebny dla procesora. Gotowy skompilowany plik *.hex można pobrać tutaj.


Ładowanie programu do procesora jest bardzo proste. W pierwszej kolejności należy załadować plik *.hex do bufora w programie (przycisk "Open" z literką "P", czerwona ramka na zrzucie w punkcie 3 tego opisu). W drugiej kolejności należy wcisnąć przycisk "PROG", z literą "P" (niebieska ramka) w celu wgrania programu do procesora. Program powinien od razu rozpocząć swoje działanie, co powinno się objawić miganiem diody.

Gdyby konieczne stało się skasowanie pamięci programu to należy skorzystać z przycisku "Erase", oznaczonego różową ramką.

Przedstawiony fragment programu wraz z gotowym plikiem *.hex to tylko przykład. Dokładnie w taki sam sposób programuje się procesor dowolnym plikiem *.hex, nie jest wtedy do niczego potrzebny program Bascom 8051.




Portret użytkownika Lucas28

Przeróbka na programatora na USB

Witam. Fajny i ciekawy programator ale interesuje mnie przeróbka tego sprzętu na USB. Czy jest to możliwe w ogóle, bo mam kilka procków starej daty i chciałbym je zaprogramować a kupować programator za kilkaset złotych to się nie kalkuluje...Pozdrawiam :-)

Portret użytkownika mirley

Re: STK200

Tutaj masz zwykłego SK200, jeśli zrobisz sobie przejściówkę USB/LPT to powinno Ci zadziałać.... osobiście jeszcze takiej przejściówki nie skonstruowałem.... nie testowałem też przejściówek dostępnych na aukcjach internetowych ale raczej one są do drukarki a nie jako pełne wirtualne porty

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika neklan

wielki dzięki za fajny

wielki dzięki za fajny artykuł, wszystko dobrze działa, mam tylko pytanie czy jeżeli bym chciał pisać w asemblerze to jakie środowisko wybrać, patrzyłem na avrstudio/winavr tylko tam mam niedostępny procesor at89s51,czy warto zainteresować się keila uvision?. Mozesz rzuci okiem jeszcze na ten artykuł http://sid.iglu.cz/blog/?p=240 i powiedziec czy warto sie tym zainteresować w przyszlosci myslalem o programatorze na usb a z tego co wiem wszelkie przejściówki nie działają. Pozdrawiam

Portret użytkownika rafliczek22

Uważam że keil jest chyba

Uważam że keil jest chyba najsensowniejszym rozwiązaniem do 8051, szkoda że płatny, ale ktoś kto wie czym jest chomik nie będzie mieć problemów z znalezieniem...

Portret użytkownika mateuszrjzr

zcy

czyli mogę zaprogramowac uc z linkza pomocą schematu jak na obrazku, czy mam coś zmieniac?
mam ustawic pamięc programu, czy EEPROM?

Portret użytkownika mirley

Re: Programowanie

Musisz mieć procesor w wersji "S" AT89S4051 a nie ten z "C" i wtedy zaprogramujesz w sposób opisany wyżej. W przeciwnym wypadku zrób sobie projekt termometr uniwersalny i skorzystaj z wersji programu pod mikrokontroler attiny2313, który zaprogramujesz w podobny sposób za pomocą STK200 i programu bascom avr

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika mateuszrjzr

acha, musze tylko zmienić

acha, musze tylko zmienić AT89C4051 na AT89S4051 i tyle, nie muszę zmieniać nic innego?

Portret użytkownika mirley

Re: 4051

Nic innego nie trzeba zmieniać

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika mateuszrjzr

sorry za tyle pytań ale

sorry za tyle pytań ale przecież dopiero się uczę.
więc jak się wpisuje program do tego toastprog-a
jak zmienie uc to nie musze z mieniać programu?
przedstawiony tu uc ma więcej wyprowadzeń ale wystarczy że wejde w datasheet i po podłączam odpowiednie piny wg. schematu.

Portret użytkownika mirley

Re Programowanie

Toastprog nie jest kompilatorem a jedynie wgrywa gotowy hex z programem, na samym dole opisu masz napisane jak wgrać hex do procka

Musisz zmienić program jeśli w nim używałeś pinów procka których drugi nie ma. Poza tym powinieneś przekompilować kod pod drugi procesor bo ma przeważnie inne peryferia i nie będzie działać. Albo będzie działać w dziwny sposób

Do procesora mają być dołączone wyprowadzenia MOSI, MISO, SCK(CLK), RST (złącze w programatorze ma takie same nazwy pinów). Ponadto masa programatora musi być połączona z masą procesora, a całość musi być zasilana napięciem 5V. W karcie katalogowej znajdziesz który pin to MOSI a który MISO itd. (zaraz na drugiej stronie z rysunkiem wyprowadzeń)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika mateuszrjzr

byłbym wdzięczny gdyby ktoś

byłbym wdzięczny gdyby ktoś pokazał mi podstawkę programującą pod AT89S2051, ponieważ nie mogę się przekopać przez stertę programów i zbierznych danych.
z góry dziękuję
(najlepiej jakby był to plik do eagla, choć nie musi)

Portret użytkownika witoja8

kopiowanie zawartosci at89s52

Witam super stronka wreszcie ktos to wszystko fajnie i zrozumiale opisal. Mam takie pytanko posiadam uklad at89s52 z gotowym wgranym programem (skaner dyskotekowy) i chciałbym skopiowac ta zawartosc do innego pustego at89s52. Orginał pracowal z kwarcem 15Mhz i tu pytanie czy przy odczycie i potem zapisaniu w nowym atmelu musze uzyc takiego samego kwarcu?

Portret użytkownika mirley

Re: Program 89S52

procesor normalnie odczytujesz za pomocą "Read P" jeśli oczywiście nie zostało ustawione zabezpieczenie przed odczytem pamięci. Jeśli układ źródłowy był np kitem elektronicznym albo fabrycznym urządzeniem to prawie na pewno został zabezpieczony. Jeśli nie jest zabezpieczony i odczytasz pamięć to uzyskasz plik hex w którym i tak nic nie zmienisz. Więc skoro program był tak napisany żeby działać na 15MHz to po zmianie kwarcu rozsypie się np timer i będzie źle liczył czasy.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika witoja8

Dziekuje za odpowiedz aco do

Dziekuje za odpowiedz aco do urzadzenia to jest fabryczne efekt świetlny i zalezy mi na tym programie on steruje praca 3 silników krokowych czyli pewnie jest zabezpieczony to znaczy ze nici z kopiowanie czy tak? i niema mozliwosci jakos zlamac ten kod :-)

Portret użytkownika mirley

Re: At89S52

zabezpieczenia skasują się w momencie skasowania programu więc nic ci po tym. Chyba że został procek tak zabezpieczony że w ogóle wyłączyli interfejs programujący to wtedy tylko programator równoległy

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika dan dan

witam przeczytałem ta stronę

witam przeczytałem ta stronę i mam takie pytanie, sciągnąłem sobie ToastProg usb ale w programie kiedy próbuję zrobić erase chip to pisze mi że nie mam pólaczenia z portem com lub lpt ?? Ale przecież to jest wersja na usb ??

POZDRAWIAM

Portret użytkownika mirley

Re: ToastProg

Na usb nigdy nie próbowałem programować 89S52.... szczerze mówiąc jedyny program którym udało mi się zmusić procesor 89S52 do pracy to właśnie ten program i to we współpracy z programatorem na LPT

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MacGyver

Dzięki bardzo, a mam jeszcze

Dzięki bardzo, a mam jeszcze jedno pytanko jak przekonvertować plik MASM listing do hex ?? Próbowałem w tym bascomie, ale nawet w programie ze stronki miałem błędy kompilacji (np. plik dat not found) Po za tym nigdy nie robiłem nic w bascomie i nie potrafię sie tym obsługiwać. PORATUJCIE proszę KOLEGĘ.

POZDRAWIAM Mac.

Portret użytkownika mirley

Re: MASM

Nie do końca jestem pewnien ale wydaje się jasne że musisz skompilowac kod asemblera do hex jesli chcesz go wgrac do procka tym sposobem co wyżej.. dla AVR jest AVR studio i za pomocą tego programu da się skompilować ASM do hex (przynajmniej tak mi się wydaje). Dla 8051 trzeba będzie poszukać czegos innego, chyba że avrstudio wyjątkowo obsługuje tez te procki. Możesz poszukać narzędzi do asemblera na stronie atmela. Bascom raczej się tu nie przyda

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MacGyver

Mam gotowy kod asemblera

Mam gotowy kod asemblera który muszę wgrać na AT89S52. Może coś co zamienia txt na hex ??

Portret użytkownika mirley

Re: ASEMBLER

Tak jak mówiłem potrzebujesz kompilatora, a raczej jakiegoś interpretera aby zamienił mnemoniki na liczby i zapisał w pliku hex.... poszukaj w sieci bo mam małe doswiadczenie z asemblerem

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MacGyver

Bardzo dziękuję za doradę

Bardzo dziękuję za doradę ;-). Naprawdę dobrze, że dziś istnieją takie strony jak ta.
POZDRAWIAM
Mac.

Portret użytkownika witoja8

kopiowanie zawartosci at89s52

Mam pytanko czy programator mozna podłączyc bezposrednio do układu w którym pracuje at89 bez wyciagania go z plytki gdy przy wlaczeniu zasilania cały program startuje i dane urzadzenie zaczyna pracowac? zgóry dziekuje pozdrawiam

Portret użytkownika mirley

Re: Programowanie

Tak to powinno działać.... bo jak zacznie się programować to jest w resecie i nie będzie układ normalnie działał... przynajmniej tak wydaje się być racjonalnie i w mikrokontrolerach AVR tak jest... co do 89S to jeszcze tego nie testowałem

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika LordBlick

ISP Programmer by Dybkowski

Nie można tu nie wspomnieć, pod tytułem "Cudze chwalicie, swego nie znacie", projektu obsługującego praktycznie dowolnie skonfigurowane linie portu drukarki i programującego zarówno MCS51 jak i AVR :
http://sourceforge.net/projects/ispprogrammer/

Portret użytkownika mirley

Re: Ispprogrammer

Nie napisałem bo nie polecam tego programu.... po prostu pod MS51 nie działa..... nie czyta poprawnie sygnatury itp.... na AVR nie sprawdzałem bo nie podoba mi się jego obsługa...

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika LordBlick

Programowałem 89S53 z

Programowałem 89S53 z komputera mającego LPT w trybie ECP na płycie głównej i złego słowa nie mogę powiedzieć... Być może problemy w Twoim przypadku nastąpiły w wyniku niedopatrzenia w ustawieniach, bo jest tego trochę. Nie działa też na dziwnych przejściówkach na USB.

Portret użytkownika mirley

Re: AT89S...

Normalnie na klasycznym STK200 za pomocą którego programowałem AVR'y..... nieważne w każdym bądź razie prezentuję tylko to co sam uruchomiłem i wiem że działa

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika M

Na powyższym schemacie

Na powyższym schemacie !EA/VPP jest podłączone do UCC, w moim AT89S2051 mam RST/VPP, więc mogę podpiąć RESET do UCC?

Portret użytkownika mirley

Re: Programowanie

Reset ma być podłączony do resetu w programatorze... z tego co widze ten procek nie ma !EA żebyś mial coś dodatkowo zwierać. Do programatora ma być podpięte MISO, MOSI, SCK, RESET i GND. Zasilanie tez musi byc podłączone 5V względem masy (do procka i jak masz programator STK200 to programator tez musi byc zasilany)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika komar91

Witam mam pytanie: jeżeli ten

Witam
mam pytanie: jeżeli ten programator i procek wyprowadzenia miso mosi, itd. to czy można go zaprogramować zwykłym programatorem usb(stk 500)

Portret użytkownika mirley

Re: programator

Próbowałem USBASPEM ale bez rezultatu. W programie jest wybór USB lub LPT do programowania ale musisz sam sprawdzić bo STK500 nie posiadam

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika karol

Czy może ktoś próbował USBASP

Czy może ktoś próbował USBASP zaprogramować tą 89S52 ? Jak się komuś udało to proszę napisać jak to połączyć.
Pozdrawiam Karol

Portret użytkownika Lucas28

Witam :-)

Witam. Na początku pozdrowienia dla autora strony i przepraszam, że daaawno nic nie pisałem, ale życie weryfikuje pewne nasze plany i na wszystko nie mamy nieraz czasu...Do rzeczy...Co do tematu i wątku w którym piszemy, to wszystkim, którzy mają problemy z zaprogramowaniem AT89S/51/52...etc. a chcą go zaprogramować, polecam stronkę http://sid.iglu.cz/blog/?p=240 Jest tam opis zwykłego...Usbasp, ale z wersją oprogramowania, która obsługuje także "staruszki" At89S...Potrzebowałem programatora, żeby właśnie taki układ zaprogramować i z nudów złożyłem (już drugi w moim warsztacie...) Usbasp na płytce "uniwersalnej", ale jako wsad posłużył ten z tej strony, którą podałem - jest też wymieniona kilka postów wyżej, na początku dyskusji w temacie (nie dawać oryginalnego softa ze strony domowej Usbasp, bo nic nie zrobicie - nie zaprogramujecie żadnego AT89S... !!!). Po prostu jest to zwykły Usbasp, ale z softem obsługującym poczciwe AT89S...nic więcej. Przy poprawnym montażu i wgraniu odpowiedniego softa do Atmegi 8, a potem po podłączeniu do programatora naszego "staruszka" wszystko powinno ruszyć od "kopa". Jak wypakujecie pliki, to jest tam także środowisko do obsługi programowania - wszystkie funkcje. Wybieramy Usbasp, łączymy programator i programujemy ile i jak chcemy...Na stronie, którą podałem jest także forum i moje wypowiedzi na temat problemów, które miałem przy programowaniu - uważać na zworkę S_SCK - reszta w forum na podanej stronie. Jakby były jakieś problemy, to uderzać na stronkę tutaj, albo na maila - Pozdrawiam elektronicznie. Łukasz :-)

Portret użytkownika emillo

Toastprog, STK200 i AT89S52

Witam,

Bardzo mi pomógł ten artykuł. Testowałem wiele programatorów równoległych do AT89Cx051 i przeróżne programy je obsługujące, wszystko bez rezultatu. Dopiero zastosowanie się do wskazówek zawartych w tym artykule przyniosło oczekiwane rezultaty. Poza tym programowanie szeregowe jest dużo wygodniejsze - nie trzeba budować osobnego urządzenia, wystarczy posiadany programator ISP STK200, kilka przewodów i płytka stykowa.

Zaproponowany program Toastprog w mojej opinii jest jednym z lepszych które miałem okazję testować. Wielkie dzięki dla Autora za namiar na niego.

Pozdrawiam serdecznie.