Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
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:
- 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
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
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
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
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
#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: