
Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:03

8051 (znany również jako MCS-51) to konstrukcja MCU z lat 80-tych, która pozostaje popularna do dziś. Nowoczesne mikrokontrolery zgodne ze standardem 8051 są dostępne u wielu dostawców, we wszystkich kształtach i rozmiarach oraz z szeroką gamą urządzeń peryferyjnych. W tej instrukcji przyjrzymy się MCU AT89C2051 firmy Atmel.
AT89C2051 to mały (2 KB Flash, 128 bajtów RAM), tani (~ 1,40 USD za chip) mikrokontroler. Cechy:
- Praca 2,7-6 V
- 15 linii we/wy
- 2 timery (16 bitów)
- Przerwania wewnętrzne i zewnętrzne
- UART
- Komparator analogowy na chipie
- Do 2 MIPS z zegarem 24 MHz
Krok 1: Wymagania

Wymagania:
- Linux PC (wymagane oprogramowanie: Arduino IDE, git, make, sdcc)
- Arduino UNO
- Układ AT89C2051 (pakiet DIP20)
- 20-pinowe gniazdo ZIF
- Transoptor (najlepiej wyjście MOSFET)
- Tarcza do prototypowania Arduino
- Zasilanie 12V
- Zasilanie 5V
- Oscylator kwarcowy 16 MHz
- 2x kondensator 30pF
- Kondensator 100nF
- Dioda (np. 1N400X)
- Rezystory (1K, 3K3)
- Płyta prototypowa
- Zworki
- Kabel miedziany
Sprawdź wymagane oprogramowanie:
który pyton3
które tworzą które sdcc które git
Krok 2: Budowanie programisty



Ta sekcja będzie krótka, ponieważ jakiś czas temu zbudowałem swoją tarczę programistyczną. Załączam schemat i zdjęcia zmontowanej płytki. PDF schematu można znaleźć w repozytorium.
Będziesz musiał zaprogramować płytkę programatora:
1. Sklonuj repozytorium.
git klon
2. Otwórz plik AT89C2051_programmer/AT89_prog/AT89_prog.ino w Arduino IDE.
3. Zbuduj i prześlij szkic z Arduino IDE.
Krok 3: Instalowanie oprogramowania programatora


1. Utwórz wirtualne środowisko Pythona.
python3 -m venv venv
. venv/bin/aktywuj
2. Zainstaluj at89overlord. at89overlord to napisany przeze mnie programator Open Source dla układu AT89C2051. Jego kod źródłowy można znaleźć tutaj.
pip install at89overlord
3. Sprawdź instalację.
at89overlord -h
Krok 4: Programowanie chipa




1. Sklonuj prosty projekt migania.
cd ~
klon git https://github.com/piotrb5e3/hello-8051.git cd hello-8051/
2. Zbuduj aplikację.
robić
3. Podłącz Arduino do komputera, podłącz zasilanie 12V, umieść układ AT89C2051 w gnieździe ZIF.
4. Zlokalizuj port szeregowy Arduino.
ls /dev/tty*
5. Prześlij wbudowany plik IntelHex do chipa. Jeśli port twojego Arduino jest inny niż /dev/ttyACM0, musisz przekazać poprawną wartość za pomocą parametru wiersza poleceń -p.
at89overlord -f./hello.ihx
Krok 5: Montaż



Zmontuj obwód zgodnie ze schematem. Wersję PDF można znaleźć w repozytorium.
Powinieneś zobaczyć migającą zieloną diodę LED z częstotliwością około 0,5 Hz.
Krok 6: Wyjaśnienie kodu

#włączać
#włączać
Zaczynamy od dołączenia nagłówka AT89X051 z sdcc. Zawiera makra do interakcji z rejestrami tak, jakby były zmiennymi. Dołączamy również stdint.h, który zawiera definicje typów całkowitych uint8_t i uint16_t.
// Zakładając, że oscylator to 16 MHz
#define INTERRUPTS_PER_SECOND 5208
Przerwanie występuje, gdy Timer0 się przepełni. Jest skonfigurowany jako pojedynczy zegar 8-bitowy, więc dzieje się to co 2^8 cykli procesora. Jeden cykl procesora zajmuje 12 cykli zegara, a zatem dochodzimy do 16000000/12/2^8 = 5208.3333.
nietrwały uint8_t led_state = 0;
volatile uint16_t timer_counter = INTERRUPTS_PER_SECOND;
Deklarujemy zmienne kontroli stanu diody i licznika przerwań.
void Timer0_ISR(void) _interrupt (1) {
licznik_czasu--; if(timer_counter == 0) { led_state = !led_state; licznik_czasu = PRZERWANIA_PER_SEKUNDĘ; } }
Za każdym razem, gdy Timer0 się przepełni, licznik jest zmniejszany. Jeśli jest równy zero, jest resetowany, a stan diody zmienia się. Dzieje się to mniej więcej raz na sekundę, co skutkuje częstotliwością migania diody LED ~ 0,5 Hz.
int main() {
TMOD = 0x3; // Tryb timera - 8 bitów, bez preskalera. częst = OSCFREQ/12/2^8 TL0 = 0; // Wyczyść licznik TH0 = 0; // Wyczyść rejestr TR0 = 1; // Ustaw zegar do uruchomienia. ET0 = 1; // Ustaw przerwanie. EA = 1; // Ustaw globalne przerwanie. while(1) { if (led_state) { P1 = 0xFF; } inaczej { P1 = 0x00; } } }
Konfigurujemy moduł timera i czekamy na zmiany w zmiennej kontroli stanu diody. TMOD to rejestr kontrolny trybu timera. TL0 i TH0 są rejestrami sterującymi Timera0. ET0 to bit enable-timer0 w rejestrze sterującym timera (TCON). TR0 i EA to bity w rejestrze umożliwiającym przerwanie (IE).
Krok 7: Dodatkowe zasoby
- Arkusz danych AT89C2051:
- Kompilator języka C dla małych urządzeń (sdcc):
- Zasoby 8051:
- Repozytorium programistów AT89C2051:
- repozytorium hello-8051:
Zalecana:
Głośnik płyty głównej PCB: 5 kroków (ze zdjęciami)

Płyta główna PCB Głośnik: Uma caixa de som praticamente vinda do lixo eletrônico.Custo zero!Espero que gostem:DSe eu ganhar algum dos principais premios eu pretendo levar na Universidade i Disponibilizar dla nauczycieli akademickich
Wisiorek w kształcie serca płyty głównej: 10 kroków

Wisiorek z sercem płyty głównej: Jeśli lubisz rozbierać rzeczy (zwłaszcza komputery) tak samo jak ja, na pewno będziesz mieć płytę główną lub dwie, więc oto projekt, który zmieni je w naprawdę ładną biżuterię. W czasie tego postu byłem na Instructables
Wprowadzenie do programowania Raspberry Pi bez ręcznego kodowania: 3 kroki

Wprowadzenie do programowania Raspberry Pi bez ręcznego kodowania: Cześć, ta instrukcja pokaże Ci, jak zamienić Raspberry Pi w w pełni programowalne urządzenie automatyki kompatybilne z graficznie zorientowanym językiem programowania dla sterowników PLC o nazwie Function Block Diagram (część standardu IEC 61131-3). To może być
Uzyskanie LoRa (SX1278/XL1278-SMT) działającego przez SPI na module płyty głównej WeMos D1 ESP-12F ESP8277 z OLED: 7 kroków

Uzyskanie LoRa (SX1278/XL1278-SMT) działającego przez SPI na module płyty głównej WeMos D1 ESP-12F ESP8277 z OLED: Rozpracowanie tego zajęło mi tydzień – wydaje się, że nikt inny przede mną tego nie wymyślił – więc mam nadzieję, że to cię uratuje jakiś czas! Niezgrabnie nazwany „Moduł płyty głównej WeMos D1 ESP-12F ESP8266 z ekranem OLED o przekątnej 0,96 cala” to tablica rozwojowa za 11 USD, która
Interesujące wskazówki dotyczące programowania dla projektanta - kontrola procesu programowania - instrukcja pętli: 8 kroków

Interesujące wskazówki dotyczące programowania dla projektanta - sterowanie procesem programu - instrukcja pętli: sterowanie procesem programu - instrukcja pętli W tym rozdziale poznasz ważną i potężną instrukcję dotyczącą punktu wiedzy - pętli. Przed przeczytaniem tego rozdziału, jeśli chcesz narysować 10 000 okręgów w programie, możesz zrobić tylko z ter