Kazalo:

Uvod v programiranje 8051 z AT89C2051 (gost v vlogi: Arduino): 7 korakov (s slikami)
Uvod v programiranje 8051 z AT89C2051 (gost v vlogi: Arduino): 7 korakov (s slikami)

Video: Uvod v programiranje 8051 z AT89C2051 (gost v vlogi: Arduino): 7 korakov (s slikami)

Video: Uvod v programiranje 8051 z AT89C2051 (gost v vlogi: Arduino): 7 korakov (s slikami)
Video: Часы DIY на МК AT89C2051 2024, December
Anonim
Uvod v programiranje 8051 z AT89C2051 (gost v vlogi: Arduino)
Uvod v programiranje 8051 z AT89C2051 (gost v vlogi: Arduino)

8051 (znan tudi kot MCS-51) je zasnova MCU iz 80-ih, ki ostaja priljubljena še danes. Sodobni mikrokrmilniki, združljivi s standardom 8051, so na voljo pri več prodajalcih v vseh oblikah in velikostih ter s široko paleto zunanjih naprav. V tem navodilu bomo gledali na AT89C2051 MCU iz Atmela.

AT89C2051 je majhen (2Kbyte Flash, 128byte RAM), poceni (~ 1,40 USD na čip) mikrokrmilnik.

  • 2.7-6V delovanje
  • 15 V/I linij
  • 2 časovnika (16 -bitni)
  • Notranje in zunanje prekinitve
  • UART
  • Analogni primerjalnik na čipu
  • Do 2MIPS s 24MHz uro

1. korak: Zahteve

Zahteve
Zahteve

Zahteve:

  • Linux PC (potrebna programska oprema: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • Čip AT89C2051 (paket DIP20)
  • 20-polna vtičnica ZIF
  • Optoelement (po možnosti izhod MOSFET)
  • Arduino prototipni ščit
  • 12V napajanje
  • 5V napajanje
  • 16MHz kristalni oscilator
  • 2x 30pF kondenzator
  • 100nF kondenzator
  • Dioda (npr.: 1N400X)
  • Upori (1K, 3K3)
  • Protoboard
  • Skakalci
  • Bakrena žica

Preverite, ali je potrebna programska oprema:

kateri python3

ki naredijo kateri sdcc kateri git

2. korak: Izdelava programerja

Izdelava programerja
Izdelava programerja
Izdelava programerja
Izdelava programerja
Izdelava programerja
Izdelava programerja

Ta razdelek bo kratek, saj sem pred časom zgradil svoj programski ščit. Priložil sem shemo in slike sestavljene plošče. PDF sheme lahko najdete v skladišču.

Programersko ploščo boste morali programirati:

1. Klonirajte skladišče.

git clone

2. Odprite datoteko AT89C2051_programmer/AT89_prog/AT89_prog.ino v Arduino IDE.

3. Ustvarite in naložite skico iz Arduino IDE.

3. korak: Namestitev programske opreme za programerje

Namestitev programske opreme za programerje
Namestitev programske opreme za programerje
Namestitev programske opreme za programerje
Namestitev programske opreme za programerje

1. Ustvarite navidezno okolje python.

python3 -m venv venv

. venv/bin/aktiviraj

2. Namestite at89overlord. at89overlord je odprtokodni programer za čip AT89C2051, ki sem ga napisal jaz. Njegovo izvorno kodo najdete tukaj.

pip install at89overlord

3. Preverite namestitev.

at89overlord -h

4. korak: Programiranje čipa

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

1. Klonirajte preprost utripajoč projekt.

cd ~

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

2. Zgradite aplikacijo.

narediti

3. Priključite Arduino na računalnik, priključite 12V napajanje, postavite čip AT89C2051 v vtičnico ZIF.

4. Poiščite serijska vrata Arduino.

ls /dev /tty*

5. Naložite vgrajeno datoteko IntelHex na čip. Če so vrata vašega Arduina drugačna od /dev /ttyACM0, morate posredovati pravilno vrednost s parametrom ukazne vrstice -p.

at89overlord -f./hello.ihx

5. korak: Montaža

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

Sestavite vezje v skladu s shemo. Različico PDF najdete v skladišču.

Videti bi morali zeleno LED bliskavico s frekvenco okoli 0,5Hz.

6. korak: Pojasnilo kode

Koda Pojasnilo
Koda Pojasnilo

#vključi

#vključi

Začnemo z vključitvijo glave AT89X051 iz sdcc. Vsebuje makre za interakcijo z registri, kot da so spremenljivke. Vključujemo tudi stdint.h, ki vsebuje definicije tipov celih števil uint8_t in uint16_t.

// Ob predpostavki, da je oscilator 16MHz

#define INTERRUPTS_PER_SECOND 5208

Do prekinitve pride, ko se Timer0 preplavi. Konfiguriran je kot en sam 8 -bitni časovnik, zato se to zgodi vsakih 2^8 procesorskih ciklov. En procesorski cikel traja 12 ciklov ure in tako pridemo do 16000000/12/2^8 = 5208.33333.

hlapno uint8_t led_state = 0;

hlapni uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Razglasimo spremenljivke vodilnega stanja in prekinimo števec.

void Timer0_ISR (void) _interrupt (1) {

števec časa-; if (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}

Vsakič, ko se Timer0 prelije, se števec zmanjša. Če je enako nič, se ponastavi in stanje LED se spremeni. To se zgodi približno enkrat na sekundo, zaradi česar utripa LED frekvenca ~ 0,5 Hz.

int main () {

TMOD = 0x3; // Način časovnika - 8 bitov, brez predznaka. freq = OSCFREQ/12/2^8 TL0 = 0; // Počisti števec TH0 = 0; // Počisti register TR0 = 1; // Nastavitev časovnika za zagon. ET0 = 1; // Nastavi prekinitev. EA = 1; // Nastavi globalni prekinitev. while (1) {if (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}

Konfiguriramo časovni modul in čakamo na spremembe v nadzorni spremenljivki stanja stanja. TMOD je nadzorni register časovnega načina. TL0 in TH0 sta krmilna registra Timer0. ET0 je bit enable-timer0 v registru krmiljenja časovnika (TCON). TR0 in EA sta bita v registru za omogočanje prekinitev (IE).

7. korak: Dodatni viri

  • Podatkovni list AT89C2051:
  • Prevajalnik malih naprav C (sdcc):
  • 8051 viri:
  • Skladišče programerjev AT89C2051:
  • skladišče hello-8051:

Priporočena: