Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
8051 (poznat i kao MCS-51) je MCU dizajn iz 80-ih koji je i dalje 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 ćemo pogledati AT89C2051 MCU iz Atmela.
AT89C2051 je mali (2Kbyte Flash, 128byte RAM), jeftin (~ 1,40 USD po čipu) mikrokontroler.
- Rad 2.7-6V
- 15 I/O linija
- 2 tajmera (16 bita)
- Unutrašnji i vanjski prekidi
- UART
- Analogni komparator 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 prave 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 programatora za programiranje
1. Kreirajte 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 projekat.
cd ~
git clone https://github.com/piotrb5e3/hello-8051.git cd hello-8051/
2. Napravite aplikaciju.
napraviti
3. Spojite Arduino na PC, spojite napajanje od 12 V, postavite čip AT89C2051 u ZIF utičnicu.
4. Pronađite Arduino serijski port.
ls /dev /tty*
5. Otpremite izgrađenu IntelHex datoteku na čip. Ako se port vašeg Arduina razlikuje od /dev /ttyACM0, morate proslijediti ispravnu vrijednost s parametrom -p naredbene linije.
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 zeleni LED bljesak s frekvencijom od oko 0,5Hz.
Korak 6: Objašnjenje koda
#include
#include
Počinjemo uključivanjem zaglavlja AT89X051 iz sdcc. Sadrži makroe 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 kada 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;
Proglašavamo LED stanje kontrole i promenljive brojača prekida.
void Timer0_ISR (void) _interrupt (1) {
timer_counter--; if (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}
Svaki put kada se Timer0 prelije, brojač se smanjuje. Ako je jednako nuli, resetira se i LED stanje se mijenja. To se događa otprilike jednom u sekundi, što rezultira ~ 0,5Hz frekvencijom LED treperenja.
int main () {
TMOD = 0x3; // Timer mode - 8 bita, bez predskalera. učestalost = OSCFREQ/12/2^8 TL0 = 0; // Poništi brojač 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 timer modul i čekamo promjene u LED varijabli kontrole stanja. TMOD je registar načina rada timera. TL0 i TH0 su upravljački registri Timer0. ET0 je bit-enableer-timer0 u registru upravljača timera (TCON). TR0 i EA su bitovi u registru za omogućavanje prekida (IE).
Korak 7: Dodatni resursi
- Tehnički list AT89C2051:
- Kompajler za mali uređaj C (sdcc):
- 8051 izvori:
- Spremište programera AT89C2051:
- spremište hello-8051: