Spisu treści:

Wprowadzenie do programowania 8051 z AT89C2051 (gość w roli głównej: Arduino): 7 kroków (ze zdjęciami)
Wprowadzenie do programowania 8051 z AT89C2051 (gość w roli głównej: Arduino): 7 kroków (ze zdjęciami)

Wideo: Wprowadzenie do programowania 8051 z AT89C2051 (gość w roli głównej: Arduino): 7 kroków (ze zdjęciami)

Wideo: Wprowadzenie do programowania 8051 z AT89C2051 (gość w roli głównej: Arduino): 7 kroków (ze zdjęciami)
Wideo: Programuję prehistoryczny MCU (8051) - programowanie śmieci 5# 2024, Listopad
Anonim
Wprowadzenie do programowania 8051 z AT89C2051 (gość w roli głównej: Arduino)
Wprowadzenie do programowania 8051 z AT89C2051 (gość w roli głównej: Arduino)

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

Budowanie programisty
Budowanie programisty
Budowanie programisty
Budowanie programisty
Budowanie programisty
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

Instalowanie oprogramowania programatora
Instalowanie oprogramowania programatora
Instalowanie oprogramowania programatora
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

Programowanie chipa
Programowanie chipa
Programowanie chipa
Programowanie chipa
Programowanie chipa
Programowanie chipa
Programowanie chipa
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ż

montaż
montaż
montaż
montaż
montaż
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

Kod Wyjaśnienie
Kod Wyjaśnienie

#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: