Sadržaj:

Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino): 7 koraka (sa slikama)
Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino): 7 koraka (sa slikama)

Video: Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino): 7 koraka (sa slikama)

Video: Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino): 7 koraka (sa slikama)
Video: Часы DIY на МК AT89C2051 2024, Srpanj
Anonim
Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino)
Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino)

8051 (također poznat kao MCS-51) je MCU dizajn iz 80-ih koji je i danas popularan. Moderni mikrokontroleri kompatibilni s 8051 dostupni su od više prodavača, u svim oblicima i veličinama, sa širokim rasponom perifernih uređaja. U ovom uputstvu gledat ćemo AT89C2051 MCU iz Atmela.

AT89C2051 je mali (2Kbyte Flash, 128byte RAM), jeftin (~ 1,40 USD po čipu) mikrokontroler. Značajke:

  • Rad 2,7-6V
  • 15 I/O linija
  • 2 tajmera (16 bita)
  • Unutarnji i vanjski prekidi
  • UART
  • Analogni usporednik na čipu
  • Do 2MIPS sa 24MHz taktom

Korak 1: Zahtjevi

Zahtjevi
Zahtjevi

Zahtjevi:

  • Linux PC (potreban softver: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • AT89C2051 čip (paket DIP20)
  • 20-polna ZIF utičnica
  • Optokapler (po mogućnosti MOSFET izlaz)
  • Arduino prototipni štit
  • 12V napajanje
  • 5V napajanje
  • Kristalni oscilator od 16 MHz
  • 2x 30pF kondenzator
  • 100nF kondenzator
  • Dioda (npr.: 1N400X)
  • Otpornici (1K, 3K3)
  • Protoboard
  • Džemperi
  • Bakrene žice

Provjerite potreban softver:

koji python3

koji čine koji sdcc koji git

Korak 2: Izrada programatora

Izrada programatora
Izrada programatora
Izrada programatora
Izrada programatora
Izrada programatora
Izrada programatora

Ovaj odjeljak će biti kratak, jer sam prije nekog vremena izgradio svoj programski štit. Priložio sam shemu i slike sastavljene ploče. PDF sheme može se pronaći u spremištu.

Morat ćete programirati ploču programera:

1. Klonirajte spremište.

git klon

2. Otvorite datoteku AT89C2051_programmer/AT89_prog/AT89_prog.ino u Arduino IDE -u.

3. Napravite i prenesite skicu iz Arduino IDE -a.

Korak 3: Instaliranje softvera za programere

Instaliranje programa za programiranje
Instaliranje programa za programiranje
Instaliranje programa za programiranje
Instaliranje programa za programiranje

1. Napravite python virtualno okruženje.

python3 -m venv venv

. venv/bin/aktivirati

2. Instalirajte at89overlord. at89overlord je programer otvorenog koda za čip AT89C2051 koji sam napisao. Izvorni kod možete pronaći ovdje.

pip install at89overlord

3. Provjerite instalaciju.

at89overlord -h

Korak 4: Programiranje čipa

Programiranje čipa
Programiranje čipa
Programiranje čipa
Programiranje čipa
Programiranje čipa
Programiranje čipa
Programiranje čipa
Programiranje čipa

1. Klonirajte jednostavan blink projekt.

cd ~

git clone https://github.com/piotrb5e3/hello-8051.git cd hello-8051/

2. Napravite aplikaciju.

napraviti

3. Spojite Arduino na računalo, spojite 12V napajanje, postavite čip AT89C2051 u ZIF utičnicu.

4. Pronađite Arduino serijski port.

ls /dev /tty*

5. Prenesite izgrađenu datoteku IntelHex na čip. Ako se port vašeg Arduina razlikuje od /dev /ttyACM0, morate proslijediti ispravnu vrijednost s parametrom -p naredbenog retka.

at89overlord -f./hello.ihx

Korak 5: Montaža

Skupština
Skupština
Skupština
Skupština
Skupština
Skupština

Sastavite krug prema shemi. PDF verzija može se pronaći u spremištu.

Trebali biste vidjeti zelenu LED bljeskalicu frekvencije oko 0,5Hz.

Korak 6: Objašnjenje koda

Objašnjenje koda
Objašnjenje koda

#uključi

#uključi

Počinjemo uključivanjem zaglavlja AT89X051 iz sdcc -a. Sadrži makronaredbe za interakciju s registrima kao da su varijable. Uključujemo i stdint.h koji sadrži definicije cjelobrojnih tipova uint8_t i uint16_t.

// Pretpostavimo da je oscilator 16MHz

#define INTERRUPTS_PER_SECOND 5208

Do prekida dolazi kad se Timer0 prelije. Konfiguriran je kao jedan 8 -bitni mjerač vremena, pa se to događa svakih 2^8 ciklusa procesora. Jedan procesorski ciklus traje 12 ciklusa takta, pa dolazimo do 16000000/12/2^8 = 5208.33333.

volatile uint8_t led_state = 0;

volatile uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Deklariramo LED stanje kontrole i prekidač brojača prekida.

void Timer0_ISR (void) _interrupt (1) {

brojač_brojača vremena--; if (brojač_vremena == 0) {led_state =! led_state; brojač_brojača = INTERRUPTS_PER_SECOND; }}

Svaki put kad se Timer0 prelije, brojač se smanjuje. Ako je jednako nuli, resetira se, a LED dioda se mijenja. To se događa otprilike jednom u sekundi, što rezultira frekvencijom treptanja LED -a od 0,5 Hz.

int main () {

TMOD = 0x3; // Timer mode - 8 bita, bez predskalera. učestalost = OSCFREQ/12/2^8 TL0 = 0; // Brisanje brojača TH0 = 0; // Brisanje registra TR0 = 1; // Postavljanje tajmera za pokretanje. ET0 = 1; // Postavi prekid. EA = 1; // Postavljanje globalnog prekida. while (1) {if (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}

Konfiguriramo vremenski modul i čekamo promjene u LED upravljačkoj varijabli stanja. TMOD je registar za upravljanje timer načinom. TL0 i TH0 su upravljački registri Timer0. ET0 je enable-timer0 bit u registru upravljanja timerom (TCON). TR0 i EA su bitovi u registru za omogućavanje prekida (IE).

Korak 7: Dodatni izvori

  • Tehnički list AT89C2051:
  • Prevodilac malih uređaja C (sdcc):
  • 8051 izvori:
  • Spremište programera AT89C2051:
  • spremište hello-8051:

Preporučeni: