Sissejuhatus programmeerimisse 8051 AT89C2051 -ga (külalisesineja: Arduino): 7 sammu (piltidega)
Sissejuhatus programmeerimisse 8051 AT89C2051 -ga (külalisesineja: Arduino): 7 sammu (piltidega)
Anonim
Sissejuhatus programmeerimisse 8051 AT89C2051 -ga (külalisesineja: Arduino)
Sissejuhatus programmeerimisse 8051 AT89C2051 -ga (külalisesineja: Arduino)

8051 (tuntud ka kui MCS-51) on 80-ndate aastate MCU disain, mis on endiselt populaarne. Kaasaegseid 8051-ga ühilduvaid mikrokontrollereid on saadaval mitmelt müüjalt, igas kujus ja suuruses ning laias valikus välisseadmeid. Selles juhendis vaatame Atmeli AT89C2051 MCU -d.

AT89C2051 on väike (2Kbyte Flash, 128byte RAM), odav (~ 1,40 $ kiibi kohta) mikrokontroller. Omadused:

  • 2.7-6V töö
  • 15 I/O liini
  • 2 taimerit (16 bitti)
  • Sisemised ja välised katkestused
  • UART
  • Kiibil olev analoogvõrdleja
  • Kuni 2 MIPS 24MHz kellaga

Samm: nõuded

Nõuded
Nõuded

Nõuded:

  • Linuxi arvuti (vajalik tarkvara: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • Kiip AT89C2051 (DIP20 pakett)
  • 20-kontaktiline ZIF-pesa
  • Optoelement (eelistatavalt MOSFET-väljund)
  • Arduino prototüüpimise kilp
  • 12V toide
  • 5V toide
  • 16MHz kristallostsillaator
  • 2x 30pF kondensaator
  • 100 nF kondensaator
  • Diood (nt: 1N400X)
  • Takistid (1K, 3K3)
  • Protoboard
  • Džemprid
  • Vasktraat

Kontrollige vajalikku tarkvara:

milline python3

mis teeb mis sdcc mis git

2. samm: programmeerija loomine

Programmeerija ehitamine
Programmeerija ehitamine
Programmeerija ehitamine
Programmeerija ehitamine
Programmeerija ehitamine
Programmeerija ehitamine

See jaotis on lühike, kuna ehitasin oma programmeerimiskilbi mõni aeg tagasi. Lisasin kokkupandud plaadi skemaatika ja pildid. Skeemi PDF -faili leiate hoidlast.

Peate programmeerimisplaadi programmeerima:

1. Kloonige hoidla.

git kloon

2. Avage Arduino IDE fail AT89C2051_programmer/AT89_prog/AT89_prog.ino.

3. Koostage ja laadige üles eskiis Arduino IDE -st.

Samm: programmeerimistarkvara installimine

Programmeerija tarkvara installimine
Programmeerija tarkvara installimine
Programmeerija tarkvara installimine
Programmeerija tarkvara installimine

1. Looge python virtuaalne keskkond.

python3 -m venv venv

. venv/bin/aktiveeri

2. Installige at89overlord. at89overlord on minu kirjutatud kiibi AT89C2051 avatud lähtekoodiga programmeerija. Selle lähtekoodi leiate siit.

pip install at89overlord

3. Kontrollige installimist.

at89overlord -h

4. samm: kiibi programmeerimine

Kiibi programmeerimine
Kiibi programmeerimine
Kiibi programmeerimine
Kiibi programmeerimine
Kiibi programmeerimine
Kiibi programmeerimine
Kiibi programmeerimine
Kiibi programmeerimine

1. Kloonige lihtne vilkumisprojekt.

cd ~

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

2. Koostage rakendus.

tegema

3. Ühendage Arduino arvutiga, ühendage 12V toide, asetage kiip AT89C2051 ZIF -pistikupessa.

4. Leidke Arduino jadaport.

ls /dev /tty*

5. Laadige ehitatud IntelHex -fail kiibile üles. Kui teie Arduino port erineb failist /dev /ttyACM0, peate õige väärtuse edastama käsurea parameetriga -p.

at89overlord -f./hello.ihx

Samm: kokkupanek

Kokkupanek
Kokkupanek
Kokkupanek
Kokkupanek
Kokkupanek
Kokkupanek

Pange skeem kokku vastavalt skeemile. PDF -versiooni leiate hoidlast.

Te peaksite nägema rohelist LED -välku sagedusega umbes 0,5 Hz.

6. samm: koodi selgitus

Koodi selgitus
Koodi selgitus

#kaasake

#kaasake

Alustuseks lisame sdcc -st päise AT89X051. See sisaldab makroid registritega suhtlemiseks justkui muutujateks. Lisame ka stdint.h, mis sisaldab uint8_t ja uint16_t täisarvutüüpide määratlusi.

// Eeldades, et ostsillaator on 16MHz

#define INTERRUPTS_PER_SECOND 5208

Katkestus tekib siis, kui taimer0 ületab. See on konfigureeritud ühe 8 -bitise taimerina, nii et see juhtub iga 2^8 protsessoritsükli järel. Üks protsessoritsükkel võtab 12 taktsüklit ja seega jõuame 16000000/12/2^8 = 5208.33333.

lenduv uint8_t led_state = 0;

lenduv uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Deklareerime juhitud olekukontrolli ja katkestusloenduri muutujad.

tühine Taimer0_ISR (tühine) _interrupt (1) {

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

Iga kord, kui taimer0 ületab, väheneb loendur. Kui see on võrdne nulliga, lähtestatakse ja LED -i olek muutub. See juhtub umbes kord sekundis, mille tulemuseks on ~ 0,5 Hz LED -i vilkumissagedus.

int main () {

TMOD = 0x3; // Taimerirežiim - 8 bitti, eelseadistust pole. sagedus = OSCFREQ/12/2^8 TL0 = 0; // Kustuta loendur TH0 = 0; // Kustuta register TR0 = 1; // Seadista taimer tööle. ET0 = 1; // Määra katkestus. EA = 1; // Määra globaalne katkestus. samas (1) {if (led_state) {P1 = 0xFF; } muu {P1 = 0x00; }}}

Seadistame taimerimooduli ja ootame muudatusi led -oleku juhtmuutuja. TMOD on taimerirežiimi juhtregister. TL0 ja TH0 on Timer0 juhtregistrid. ET0 on taimerijuhtimisregistri (TCON) lubamis-taimer0-bit. TR0 ja EA on bitid katkestamise lubamise registris (IE).

Samm: täiendavad ressursid

  • AT89C2051 andmeleht:
  • Väikese seadme C kompilaator (sdcc):
  • 8051 ressursid:
  • AT89C2051 programmeerijate hoidla:
  • tere-8051 hoidla: