Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
8051 (även känd som MCS-51) är en MCU-design från 80-talet som fortfarande är populär idag. Moderna 8051-kompatibla mikrokontroller finns tillgängliga från flera leverantörer, i alla former och storlekar, och med ett brett utbud av kringutrustning. I denna instruerbara tittar vi på AT89C2051 MCU från Atmel.
AT89C2051 är en liten (2Kbyte Flash, 128byte RAM), billig (~ $ 1,40 per chip) mikrokontroller.
- 2,7-6V drift
- 15 I/O -linjer
- 2 timers (16 bitar)
- Interna och externa avbrott
- UART
- On-chip analog komparator
- Upp till 2 MIPS med en 24 MHz klocka
Steg 1: Krav
Krav:
- Linux -dator (obligatorisk programvara: Arduino IDE, git, make, sdcc)
- Arduino UNO
- AT89C2051 -chip (DIP20 -paket)
- 20-stifts ZIF-uttag
- Optokopplare (helst MOSFET-utgång)
- Arduino prototypsköld
- 12V strömförsörjning
- 5V strömförsörjning
- 16MHz kristalloscillator
- 2x 30pF kondensator
- 100nF kondensator
- Diod (ex: 1N400X)
- Motstånd (1K, 3K3)
- Protoboard
- Tröjor
- Koppartråd
Sök efter nödvändig programvara:
vilken python3
som gör vilken sdcc vilken git
Steg 2: Bygga programmeraren
Det här avsnittet blir kort, eftersom jag byggde min programmeringssköld för en tid sedan. Jag har bifogat schemat och bilderna på det monterade kortet. PDF -filen för schemat finns i förvaret.
Du måste programmera programmeringskortet:
1. Klona förvaret.
git -klon
2. Öppna filen AT89C2051_programmer/AT89_prog/AT89_prog.ino i Arduino IDE.
3. Skapa och ladda upp skissen från Arduino IDE.
Steg 3: Installera programmerarprogramvara
1. Skapa en virtuell python -miljö.
python3 -m venv venv
. venv/bin/aktivera
2. Installera at89overlord. at89overlord är en Open Source -programmerare för AT89C2051 -chipet skrivet av mig, källkoden hittar du här.
pip installera at89overlord
3. Verifiera installationen.
at89overlord -h
Steg 4: Programmering av chippet
1. Klona ett enkelt blinkprojekt.
cd ~
git-klon https://github.com/piotrb5e3/hello-8051.git cd hello-8051/
2. Skapa programmet.
göra
3. Anslut Arduino till datorn, anslut 12V -matningen, placera AT89C2051 -chipet i ZIF -uttaget.
4. Leta reda på Arduinos serieport.
ls /dev /tty*
5. Ladda upp den inbyggda IntelHex -filen till chipet. Om din Arduinos port skiljer sig från /dev /ttyACM0 måste du skicka rätt värde med kommandoradsparametern -p.
at89overlord -f./hello.ihx
Steg 5: Montering
Montera kretsen enligt schemat. En PDF -version finns i förvaret.
Du bör se den gröna lysdioden blinka med en frekvens på cirka 0,5 Hz.
Steg 6: Förklaring av kod
#omfatta
#omfatta
Vi börjar med att inkludera AT89X051 -rubriken från SDCC. Den innehåller makron för att interagera med register som om de vore variabler. Vi inkluderar också stdint.h som innehåller definitioner av uint8_t och uint16_t heltalstyper.
// Antar oscillatorn är 16MHz
#define INTERRUPTS_PER_SECOND 5208
Ett avbrott inträffar när timern0 flyter över. Den är konfigurerad som en enda 8 -bitars timer, så detta händer var 2^8 processorcykler. En processorcykel tar 12 klockcykler, och därmed kommer vi fram till 16000000/12/2^8 = 5208.33333.
flyktig uint8_t led_state = 0;
flyktig uint16_t timer_counter = INTERRUPTS_PER_SECOND;
Vi deklarerar ledda tillståndskontrollen och avbryter motvariabler.
void Timer0_ISR (void) _interrupt (1) {
timer_counter--; if (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}
Varje gång timern0 rinner över minskar räknaren. Om det är lika med noll återställs det och LED -tillståndet ändras. Detta sker ungefär en gång per sekund, vilket resulterar i ~ 0,5 Hz LED blinkande frekvens.
int main () {
TMOD = 0x3; // Timer -läge - 8 bitar, ingen förkalkning. freq = OSCFREQ/12/2^8 TL0 = 0; // Rensa räknaren TH0 = 0; // Rensa register TR0 = 1; // Ställ in timern för att köra. ET0 = 1; // Ställ in avbrott. EA = 1; // Ställ in globalt avbrott. medan (1) {if (led_state) {P1 = 0xFF; } annat {P1 = 0x00; }}}
Vi konfigurerar timermodulen och väntar på ändringar i ledstatusstyrvariabeln. TMOD är timerregistreringsregistret. TL0 och TH0 är Timer0 -kontrollregister. ET0 är aktiverings-timer0-biten i timerkontrollregistret (TCON). TR0 och EA är bitar i avbrottsaktiveringsregistret (IE).
Steg 7: Ytterligare resurser
- AT89C2051 datablad:
- Liten enhet C -kompilator (sdcc):
- 8051 resurser:
- AT89C2051 programmerarförvar:
- hej-8051-förvaret: