Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
8051 (također poznat kao MCS-51) je MCU dizajn iz 80-ih koji je i danas popularan. Moderni mikrokontroleri kompatibilni s 8051 dostupni su od više prodavača, u svim oblicima i veličinama, sa širokim rasponom perifernih uređaja. U ovom uputstvu gledat ćemo AT89C2051 MCU iz Atmela.
AT89C2051 je mali (2Kbyte Flash, 128byte RAM), jeftin (~ 1,40 USD po čipu) mikrokontroler. Značajke:
- Rad 2,7-6V
- 15 I/O linija
- 2 tajmera (16 bita)
- Unutarnji i vanjski prekidi
- UART
- Analogni usporednik na čipu
- Do 2MIPS sa 24MHz taktom
Korak 1: Zahtjevi
Zahtjevi:
- Linux PC (potreban softver: Arduino IDE, git, make, sdcc)
- Arduino UNO
- AT89C2051 čip (paket DIP20)
- 20-polna ZIF utičnica
- Optokapler (po mogućnosti MOSFET izlaz)
- Arduino prototipni štit
- 12V napajanje
- 5V napajanje
- Kristalni oscilator od 16 MHz
- 2x 30pF kondenzator
- 100nF kondenzator
- Dioda (npr.: 1N400X)
- Otpornici (1K, 3K3)
- Protoboard
- Džemperi
- Bakrene žice
Provjerite potreban softver:
koji python3
koji čine koji sdcc koji git
Korak 2: Izrada programatora
Ovaj odjeljak će biti kratak, jer sam prije nekog vremena izgradio svoj programski štit. Priložio sam shemu i slike sastavljene ploče. PDF sheme može se pronaći u spremištu.
Morat ćete programirati ploču programera:
1. Klonirajte spremište.
git klon
2. Otvorite datoteku AT89C2051_programmer/AT89_prog/AT89_prog.ino u Arduino IDE -u.
3. Napravite i prenesite skicu iz Arduino IDE -a.
Korak 3: Instaliranje softvera za programere
1. Napravite python virtualno okruženje.
python3 -m venv venv
. venv/bin/aktivirati
2. Instalirajte at89overlord. at89overlord je programer otvorenog koda za čip AT89C2051 koji sam napisao. Izvorni kod možete pronaći ovdje.
pip install at89overlord
3. Provjerite instalaciju.
at89overlord -h
Korak 4: Programiranje čipa
1. Klonirajte jednostavan blink projekt.
cd ~
git clone https://github.com/piotrb5e3/hello-8051.git cd hello-8051/
2. Napravite aplikaciju.
napraviti
3. Spojite Arduino na računalo, spojite 12V napajanje, postavite čip AT89C2051 u ZIF utičnicu.
4. Pronađite Arduino serijski port.
ls /dev /tty*
5. Prenesite izgrađenu datoteku IntelHex na čip. Ako se port vašeg Arduina razlikuje od /dev /ttyACM0, morate proslijediti ispravnu vrijednost s parametrom -p naredbenog retka.
at89overlord -f./hello.ihx
Korak 5: Montaža
Sastavite krug prema shemi. PDF verzija može se pronaći u spremištu.
Trebali biste vidjeti zelenu LED bljeskalicu frekvencije oko 0,5Hz.
Korak 6: Objašnjenje koda
#uključi
#uključi
Počinjemo uključivanjem zaglavlja AT89X051 iz sdcc -a. Sadrži makronaredbe za interakciju s registrima kao da su varijable. Uključujemo i stdint.h koji sadrži definicije cjelobrojnih tipova uint8_t i uint16_t.
// Pretpostavimo da je oscilator 16MHz
#define INTERRUPTS_PER_SECOND 5208
Do prekida dolazi kad se Timer0 prelije. Konfiguriran je kao jedan 8 -bitni mjerač vremena, pa se to događa svakih 2^8 ciklusa procesora. Jedan procesorski ciklus traje 12 ciklusa takta, pa dolazimo do 16000000/12/2^8 = 5208.33333.
volatile uint8_t led_state = 0;
volatile uint16_t timer_counter = INTERRUPTS_PER_SECOND;
Deklariramo LED stanje kontrole i prekidač brojača prekida.
void Timer0_ISR (void) _interrupt (1) {
brojač_brojača vremena--; if (brojač_vremena == 0) {led_state =! led_state; brojač_brojača = INTERRUPTS_PER_SECOND; }}
Svaki put kad se Timer0 prelije, brojač se smanjuje. Ako je jednako nuli, resetira se, a LED dioda se mijenja. To se događa otprilike jednom u sekundi, što rezultira frekvencijom treptanja LED -a od 0,5 Hz.
int main () {
TMOD = 0x3; // Timer mode - 8 bita, bez predskalera. učestalost = OSCFREQ/12/2^8 TL0 = 0; // Brisanje brojača TH0 = 0; // Brisanje registra TR0 = 1; // Postavljanje tajmera za pokretanje. ET0 = 1; // Postavi prekid. EA = 1; // Postavljanje globalnog prekida. while (1) {if (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}
Konfiguriramo vremenski modul i čekamo promjene u LED upravljačkoj varijabli stanja. TMOD je registar za upravljanje timer načinom. TL0 i TH0 su upravljački registri Timer0. ET0 je enable-timer0 bit u registru upravljanja timerom (TCON). TR0 i EA su bitovi u registru za omogućavanje prekida (IE).
Korak 7: Dodatni izvori
- Tehnički list AT89C2051:
- Prevodilac malih uređaja C (sdcc):
- 8051 izvori:
- Spremište programera AT89C2051:
- spremište hello-8051: