Turinys:

Įvadas į 8051 programavimą naudojant AT89C2051 (svečias: Arduino): 7 žingsniai (su nuotraukomis)
Įvadas į 8051 programavimą naudojant AT89C2051 (svečias: Arduino): 7 žingsniai (su nuotraukomis)

Video: Įvadas į 8051 programavimą naudojant AT89C2051 (svečias: Arduino): 7 žingsniai (su nuotraukomis)

Video: Įvadas į 8051 programavimą naudojant AT89C2051 (svečias: Arduino): 7 žingsniai (su nuotraukomis)
Video: Įvadas į dvasines būtybes 2024, Lapkritis
Anonim
Įvadas į 8051 programavimą naudojant AT89C2051 (Svečias: Arduino)
Įvadas į 8051 programavimą naudojant AT89C2051 (Svečias: Arduino)

8051 (dar žinomas kaip MCS-51) yra 80-ųjų metų MCU dizainas, kuris išlieka populiarus ir šiandien. Šiuolaikinius su 8051 suderinamus mikrovaldiklius galima įsigyti iš įvairių tiekėjų, įvairių formų ir dydžių bei su įvairiais išoriniais įrenginiais. Šioje pamokoje apžvelgsime „Atmel“AT89C2051 MCU.

AT89C2051 yra nedidelis (2KB Flash, 128baitų RAM), pigus (~ 1,40 USD už mikroschemą) mikrovaldiklis.

  • 2.7-6V veikimas
  • 15 I/O linijų
  • 2 laikmačiai (16 bitų)
  • Vidiniai ir išoriniai pertraukimai
  • UART
  • Analoginis palyginimas mikroschemoje
  • Iki 2MIPS su 24MHz laikrodžiu

1 žingsnis: Reikalavimai

Reikalavimai
Reikalavimai

Reikalavimai:

  • „Linux“kompiuteris (reikalinga programinė įranga: „Arduino IDE“, „git“, „make“, sdcc)
  • Arduino UNO
  • AT89C2051 lustas (DIP20 paketas)
  • 20 kontaktų ZIF lizdas
  • Optronas (pageidautina MOSFET išvestis)
  • „Arduino“prototipų skydas
  • 12V maitinimo šaltinis
  • 5V maitinimo šaltinis
  • 16MHz kristalų osciliatorius
  • 2x 30pF kondensatorius
  • 100nF kondensatorius
  • Diodas (pvz., 1N400X)
  • Rezistoriai (1K, 3K3)
  • Protoboard
  • Džemperiai
  • Varinė viela

Patikrinkite reikiamą programinę įrangą:

kuris python3

kurie padaro kuris sdcc kuris git

2 žingsnis: kurkite programuotoją

Programuotojo kūrimas
Programuotojo kūrimas
Programuotojo kūrimas
Programuotojo kūrimas
Programuotojo kūrimas
Programuotojo kūrimas

Šis skyrius bus trumpas, nes prieš kurį laiką sukūriau savo programavimo skydą. Pridedu surinktos plokštės schemą ir nuotraukas. Schemos PDF failą galima rasti saugykloje.

Turėsite užprogramuoti programuotojo lentą:

1. Klonuoti saugyklą.

git klonas

2. Arduino IDE atidarykite failą AT89C2051_programmer/AT89_prog/AT89_prog.ino.

3. Sukurkite ir įkelkite eskizą iš „Arduino IDE“.

3 veiksmas: programuotojo programinės įrangos diegimas

Programuotojo programinės įrangos diegimas
Programuotojo programinės įrangos diegimas
Programuotojo programinės įrangos diegimas
Programuotojo programinės įrangos diegimas

1. Sukurkite python virtualią aplinką.

python3 -m venv venv

. venv/bin/aktyvuoti

2. Įdiekite at89overlord. at89overlord yra mano parašyto AT89C2051 atvirojo kodo programuotojas. Jo šaltinio kodą rasite čia.

pip įdiegti at89overlord

3. Patikrinkite įdiegimą.

at89overlord -h

4 žingsnis: lusto programavimas

Lusto programavimas
Lusto programavimas
Lusto programavimas
Lusto programavimas
Lusto programavimas
Lusto programavimas
Lusto programavimas
Lusto programavimas

1. Klonuoti paprastą mirksėjimo projektą.

cd ~

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

2. Sukurkite programą.

padaryti

3. Prijunkite „Arduino“prie kompiuterio, prijunkite 12 V maitinimo šaltinį, įdėkite lustą AT89C2051 į ZIF lizdą.

4. Raskite „Arduino“nuoseklųjį prievadą.

ls /dev /tty*

5. Įkelkite sukurtą „IntelHex“failą į lustą. Jei jūsų „Arduino“prievadas skiriasi nuo /dev /ttyACM0, turite perduoti teisingą reikšmę naudodami komandinės eilutės parametrą -p.

at89overlord -f./hello.ihx

5 žingsnis: Surinkimas

Surinkimas
Surinkimas
Surinkimas
Surinkimas
Surinkimas
Surinkimas

Surinkite grandinę pagal schemą. PDF versiją galima rasti saugykloje.

Turėtumėte pamatyti žalią LED blykstę, kurios dažnis yra apie 0,5 Hz.

6 žingsnis: kodo paaiškinimas

Kodo paaiškinimas
Kodo paaiškinimas

#įtraukti

#įtraukti

Pradedame įtraukdami s89cc antraštę AT89X051. Jame yra makrokomandų, skirtų sąveikauti su registrais, tarsi jie būtų kintamieji. Taip pat įtraukiame stdint.h, kuriame yra uint8_t ir uint16_t sveikųjų skaičių tipų apibrėžimai.

// Darant prielaidą, kad osciliatorius yra 16MHz

#define INTERRUPTS_PER_SECOND 5208

Nutraukimas įvyksta, kai „Timer0“perpildomas. Jis sukonfigūruotas kaip vienas 8 bitų laikmatis, todėl tai vyksta kas 2^8 procesoriaus ciklus. Vienas procesoriaus ciklas užtrunka 12 laikrodžio ciklų, todėl pasiekiame 16000000/12/2^8 = 5208.33333.

nepastovus uint8_t led_state = 0;

nepastovus uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Mes deklaruojame vedamos būsenos kontrolės ir pertraukimo skaitiklio kintamuosius.

void Timer0_ISR (void) _interrupt (1) {

timer_counter--; if (laikmatis_skaitiklis == 0) {led_state =! led_state; laikmačio_skaitiklis = INTERRUPTS_PER_SECOND; }}

Kiekvieną kartą, kai laikmatis0 perpildomas, skaitiklis mažinamas. Jei jis lygus nuliui, jis iš naujo nustatomas ir pasikeičia lemputės būsena. Tai įvyksta maždaug kartą per sekundę, todėl mirksi ~ 0,5 Hz LED.

int main () {

TMOD = 0x3; // Laikmačio režimas - 8 bitai, nėra prescaler. dažnis = OSCFREQ/12/2^8 TL0 = 0; // Išvalyti skaitiklį TH0 = 0; // Išvalyti registrą TR0 = 1; // Nustatykite paleisti laikmatį. ET0 = 1; // Nustatyti pertraukimą. EA = 1; // Nustatyti visuotinį pertraukimą. nors (1) {if (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}

Mes sukonfigūruojame laikmačio modulį ir laukiame pasikeitusio būsenos valdymo kintamojo. TMOD yra laikmačio režimo valdymo registras. TL0 ir TH0 yra „Timer0“valdymo registrai. ET0 yra įjungimo laikmačio 0 bitas laikmačio valdymo registre (TCON). TR0 ir EA yra pertraukos įgalinimo registro (IE) bitai.

7 žingsnis: papildomi ištekliai

  • AT89C2051 duomenų lapas:
  • Mažo įrenginio C kompiliatorius (sdcc):
  • 8051 šaltiniai:
  • AT89C2051 programuotojų saugykla:
  • sveiki-8051 saugykla:

Rekomenduojamas: