Cuprins:

Introducere în programarea 8051 cu AT89C2051 (Guest cu rol principal: Arduino): 7 pași (cu imagini)
Introducere în programarea 8051 cu AT89C2051 (Guest cu rol principal: Arduino): 7 pași (cu imagini)

Video: Introducere în programarea 8051 cu AT89C2051 (Guest cu rol principal: Arduino): 7 pași (cu imagini)

Video: Introducere în programarea 8051 cu AT89C2051 (Guest cu rol principal: Arduino): 7 pași (cu imagini)
Video: Programarea microcontrolerului 8051 si simularea cu edsim51di - Accesare memorie si control pini 2024, Iulie
Anonim
Introducere în programarea 8051 cu AT89C2051 (Guest cu rol principal: Arduino)
Introducere în programarea 8051 cu AT89C2051 (Guest cu rol principal: Arduino)

8051 (cunoscut și sub numele de MCS-51) este un design MCU din anii 80, care rămâne popular astăzi. Microcontrolerele moderne compatibile 8051 sunt disponibile de la mai mulți furnizori, în toate formele și dimensiunile și cu o gamă largă de periferice. În acest instructable ne vom uita la AT89C2051 MCU de la Atmel.

AT89C2051 este un microcontroler mic (2Kbyte Flash, 128byte RAM), ieftin (~ 1,40 $ per cip).

  • Funcționare 2.7-6V
  • 15 linii I / O
  • 2 temporizatoare (16 biți)
  • Întreruperi interne și externe
  • UART
  • Comparator analog on-chip
  • Până la 2MIPS cu un ceas de 24MHz

Pasul 1: Cerințe

Cerințe
Cerințe

Cerințe:

  • PC Linux (software necesar: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • Cip AT89C2051 (pachet DIP20)
  • Priză ZIF cu 20 de pini
  • Optocuplator (de preferință ieșire MOSFET)
  • Scut de prototipare Arduino
  • Alimentare 12V
  • Alimentare 5V
  • Oscilator de cristal de 16 MHz
  • Condensator 2x 30pF
  • Condensator 100nF
  • Diodă (ex: 1N400X)
  • Rezistoare (1K, 3K3)
  • Protoboard
  • Jumpers
  • Sârmă de cupru

Verificați dacă există software-ul necesar:

care python3

care fac care sdcc care git

Pasul 2: Construirea programatorului

Construirea programatorului
Construirea programatorului
Construirea programatorului
Construirea programatorului
Construirea programatorului
Construirea programatorului

Această secțiune va fi scurtă, deoarece mi-am construit scutul de programare cu ceva timp în urmă. Am atașat schema și imaginile plăcii asamblate. PDF-ul schemei poate fi găsit în depozit.

Va trebui să programați placa de programare:

1. Clonați depozitul.

git clone

2. Deschideți fișierul AT89C2051_programmer / AT89_prog / AT89_prog.ino în Arduino IDE.

3. Construiți și încărcați schița din IDE Arduino.

Pasul 3: Instalarea programului software

Instalarea software-ului programator
Instalarea software-ului programator
Instalarea software-ului programator
Instalarea software-ului programator

1. Creați un mediu virtual python.

python3 -m venv venv

. venv / bin / activate

2. Instalați at89overlord. at89overlord este un programator Open Source pentru cipul AT89C2051 scris de mine. Codul său sursă poate fi găsit aici.

pip instalează la89overlord

3. Verificați instalarea.

at89overlord -h

Pasul 4: Programarea cipului

Programarea cipului
Programarea cipului
Programarea cipului
Programarea cipului
Programarea cipului
Programarea cipului
Programarea cipului
Programarea cipului

1. Clonați un proiect simplu de clipire.

cd ~

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

2. Construiți aplicația.

face

3. Conectați Arduino la computer, conectați sursa de 12V, așezați cipul AT89C2051 în soclul ZIF.

4. Găsiți portul serial Arduino.

ls / dev / tty *

5. Încărcați fișierul IntelHex încorporat pe cip. Dacă portul Arduino este diferit de / dev / ttyACM0, trebuie să treceți valoarea corectă cu parametrul liniei de comandă -p.

at89overlord -f./hello.ihx

Pasul 5: Asamblare

Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare

Asamblați circuitul conform schemei. O versiune PDF poate fi găsită în depozit.

Ar trebui să vedeți blițul LED verde cu o frecvență de aproximativ 0,5Hz.

Pasul 6: Explicarea codului

Explicarea codului
Explicarea codului

#include

#include

Începem prin a include antetul AT89X051 de la sdcc. Conține macrocomenzi pentru interacțiunea cu registre ca și cum ar fi variabile. De asemenea, includem stdint.h care conține definiții ale tipurilor întregi uint8_t și uint16_t.

// Presupunând că oscilatorul este de 16 MHz

#define INTERRUPTS_PER_SECOND 5208

O întrerupere apare atunci când Timer0 se revarsă. Este configurat ca un singur temporizator de 8 biți, astfel încât acest lucru se întâmplă la fiecare 2 ^ 8 cicluri de procesor. Un ciclu de procesor durează 12 cicluri de ceas și astfel ajungem la 16000000/12/2 ^ 8 = 5208.33333.

volatil uint8_t led_state = 0;

volatil uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Declarăm variabilele de control al stării led și întrerupem contorul.

void Timer0_ISR (void) _interrupt (1) {

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

De fiecare dată când Timer0 se revarsă, contorul este scăzut. Dacă este egal cu zero, se resetează, iar starea ledului este schimbată. Acest lucru se întâmplă aproximativ o dată pe secundă, rezultând o frecvență intermitentă a LED-ului de 0,5Hz.

int main () {

TMOD = 0x3; // Mod temporizator - 8 biți, fără prescaler. freq = OSCFREQ / 12/2 ^ 8 TL0 = 0; // Goliți contorul TH0 = 0; // Șterge registrul TR0 = 1; // Setați temporizatorul să ruleze. ET0 = 1; // Setează întreruperea. EA = 1; // Setați întreruperea globală. while (1) {if (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}

Configurăm modulul temporizator și așteptăm modificările variabilei de control al stării LED. TMOD este registrul de control al modului temporizator. TL0 și TH0 sunt registre de control Timer0. ET0 este bitul de activare-timer0 din registrul de control al temporizatorului (TCON). TR0 și EA sunt biți în registrul de activare a întreruperii (IE).

Pasul 7: Resurse suplimentare

  • Foaie de date AT89C2051:
  • Compilator dispozitiv mic C (sdcc):
  • 8051 resurse:
  • Depozit de programare AT89C2051:
  • hello-8051 depozit:

Recomandat: