Cuprins:
- Pasul 1: Cerințe
- Pasul 2: Construirea programatorului
- Pasul 3: Instalarea programului software
- Pasul 4: Programarea cipului
- Pasul 5: Asamblare
- Pasul 6: Explicarea codului
- Pasul 7: Resurse suplimentare
Video: Introducere în programarea 8051 cu AT89C2051 (Guest cu rol principal: Arduino): 7 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
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:
- 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
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
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
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
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
#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:
Lampă de birou LED Circadian Friendly (nu este necesară programarea!): 7 pași (cu imagini)
Lampă de birou LED Circadian Friendly (nu este necesară programarea!): Am proiectat această lampă pentru a fi compatibilă cu ritmul circadian. Noaptea, este mai ușor pentru somn, deoarece numai LED-urile colorate calde se pot aprinde. În timpul zilei, vă poate menține treaz, deoarece atât LED-urile alb-rece, cât și cele de culoare caldă se pot aprinde la
Ceas LED cu 555 și 4017 (nu este necesară programarea): 8 pași (cu imagini)
Ceas LED cu 555 și 4017 (nu este necesară programarea): Aici voi introduce un proiect pe care l-am proiectat și l-am realizat acum aproximativ 7 ani. mâinile ceasului analogic
Introducere în programarea Raspberry Pi fără codificare manuală: 3 pași
Introducere în programarea Raspberry Pi fără codificare manuală: Bună, această instrucțiune vă va arăta cum să transformați Raspberry Pi într-un dispozitiv de automatizare complet programabil, compatibil cu limbajul de programare orientat grafic pentru PLC-uri numit Function Block Diagram (parte a standardului IEC 61131-3). Acesta poate fi
Programarea ATTiny85, ATTiny84 și ATMega328P: Arduino Ca ISP: 9 pași (cu imagini)
Programarea ATTiny85, ATTiny84 și ATMega328P: Arduino Ca ISP: Cuvânt înainte Am dezvoltat recent câteva proiecte IoT bazate pe ESP8266 și am descoperit că procesorul de bază se lupta să îndeplinească toate sarcinile de care aveam nevoie pentru a le gestiona, așa că am decis să distribui o parte din activitățile mai puțin importante pentru un alt micr
Programarea Arduino Nano folosind UNO: 4 pași (cu imagini)
Programarea Arduino Nano folosind UNO: Hei băieți, recent tocmai cumpărasem o nouă clonă nano arduino (CH340) de pe eBay pentru proiectul meu mini arduino. După aceea am conectat arduino la computerul meu și am instalat driverele, dar nu funcționam încă, După câteva zile am aflat cum să programez