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, Novembar
Anonim
Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino)
Uvod u programiranje 8051 s AT89C2051 (Gostujuća uloga: Arduino)

8051 (poznat i kao MCS-51) je MCU dizajn iz 80-ih koji je i dalje 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 ćemo pogledati AT89C2051 MCU iz Atmela.

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

  • Rad 2.7-6V
  • 15 I/O linija
  • 2 tajmera (16 bita)
  • Unutrašnji i vanjski prekidi
  • UART
  • Analogni komparator na čipu
  • Do 2MIPS sa 24MHz taktom

Korak 1: Zahtjevi

Zahtevi
Zahtevi

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 prave koji sdcc koji git

Korak 2: Izrada programatora

Izrada programatora
Izrada programatora
Izgradnja programera
Izgradnja programera
Izgradnja programera
Izgradnja programera

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 programatora za programiranje

Instaliranje programatora programa
Instaliranje programatora programa
Instaliranje programatora programa
Instaliranje programatora programa

1. Kreirajte 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 projekat.

cd ~

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

2. Napravite aplikaciju.

napraviti

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

4. Pronađite Arduino serijski port.

ls /dev /tty*

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

at89overlord -f./hello.ihx

Korak 5: Montaža

Montaža
Montaža
Montaža
Montaža
Montaža
Montaža

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

Trebali biste vidjeti zeleni LED bljesak s frekvencijom od oko 0,5Hz.

Korak 6: Objašnjenje koda

Šifra Objašnjenje
Šifra Objašnjenje

#include

#include

Počinjemo uključivanjem zaglavlja AT89X051 iz sdcc. Sadrži makroe 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 kada 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;

Proglašavamo LED stanje kontrole i promenljive brojača prekida.

void Timer0_ISR (void) _interrupt (1) {

timer_counter--; if (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}

Svaki put kada se Timer0 prelije, brojač se smanjuje. Ako je jednako nuli, resetira se i LED stanje se mijenja. To se događa otprilike jednom u sekundi, što rezultira ~ 0,5Hz frekvencijom LED treperenja.

int main () {

TMOD = 0x3; // Timer mode - 8 bita, bez predskalera. učestalost = OSCFREQ/12/2^8 TL0 = 0; // Poništi brojač 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 timer modul i čekamo promjene u LED varijabli kontrole stanja. TMOD je registar načina rada timera. TL0 i TH0 su upravljački registri Timer0. ET0 je bit-enableer-timer0 u registru upravljača timera (TCON). TR0 i EA su bitovi u registru za omogućavanje prekida (IE).

Korak 7: Dodatni resursi

  • Tehnički list AT89C2051:
  • Kompajler za mali uređaj C (sdcc):
  • 8051 izvori:
  • Spremište programera AT89C2051:
  • spremište hello-8051:

Preporučuje se: