Innholdsfortegnelse:

Introduksjon til 8051 -programmering med AT89C2051 (gjestestjerne: Arduino): 7 trinn (med bilder)
Introduksjon til 8051 -programmering med AT89C2051 (gjestestjerne: Arduino): 7 trinn (med bilder)

Video: Introduksjon til 8051 -programmering med AT89C2051 (gjestestjerne: Arduino): 7 trinn (med bilder)

Video: Introduksjon til 8051 -programmering med AT89C2051 (gjestestjerne: Arduino): 7 trinn (med bilder)
Video: Proteus 220V styring 2024, Juli
Anonim
Introduksjon til 8051 -programmering med AT89C2051 (Gjestestjerne: Arduino)
Introduksjon til 8051 -programmering med AT89C2051 (Gjestestjerne: Arduino)

8051 (også kjent som MCS-51) er et MCU-design fra 80-tallet som fortsatt er populært i dag. Moderne 8051-kompatible mikrokontroller er tilgjengelige fra flere leverandører, i alle fasonger og størrelser, og med et bredt utvalg av eksterne enheter. I denne instruksen vil vi se på AT89C2051 MCU fra Atmel.

AT89C2051 er en liten (2Kbyte Flash, 128byte RAM), billig (~ $ 1,40 per brikke) mikrokontroller.

  • 2,7-6V drift
  • 15 I/O -linjer
  • 2 tidtakere (16 bit)
  • Interne og eksterne avbrudd
  • UART
  • On-chip analog komparator
  • Opptil 2 MIPS med en 24 MHz klokke

Trinn 1: Krav

Krav
Krav

Krav:

  • Linux PC (nødvendig programvare: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • AT89C2051 -brikke (DIP20 -pakke)
  • 20-pinners ZIF-kontakt
  • Optokobler (helst MOSFET-utgang)
  • Arduino prototypeskjold
  • 12V strømforsyning
  • 5V strømforsyning
  • 16MHz krystalloscillator
  • 2x 30pF kondensator
  • 100nF kondensator
  • Diode (eks: 1N400X)
  • Motstander (1K, 3K3)
  • Protoboard
  • Gensere
  • Kobbertråd

Se etter nødvendig programvare:

hvilken python3

som lager hvilken sdcc hvilken git

Trinn 2: Bygg programmereren

Å bygge programmereren
Å bygge programmereren
Å bygge programmereren
Å bygge programmereren
Å bygge programmereren
Å bygge programmereren

Denne delen vil være kort, ettersom jeg bygde programmeringsskjoldet mitt for en tid siden. Jeg har lagt ved skjemaet og bildene av det monterte brettet. PDF -en til skjemaet finnes i depotet.

Du må programmere programmererkortet:

1. Klon depotet.

git -klon

2. Åpne filen AT89C2051_programmer/AT89_prog/AT89_prog.ino i Arduino IDE.

3. Bygg og last opp skissen fra Arduino IDE.

Trinn 3: Installere programmeringsprogramvare

Installere programmeringsprogramvare
Installere programmeringsprogramvare
Installere programmeringsprogramvare
Installere programmeringsprogramvare

1. Lag et virtuelt python -miljø.

python3 -m venv venv

. venv/bin/aktivere

2. Installer at89overlord. at89overlord er en åpen kildekode -programmerer for AT89C2051 -brikken skrevet av meg. kildekoden finner du her.

pip installere at89overlord

3. Kontroller installasjonen.

at89overlord -h

Trinn 4: Programmering av brikken

Programmering av brikken
Programmering av brikken
Programmering av brikken
Programmering av brikken
Programmering av brikken
Programmering av brikken
Programmering av brikken
Programmering av brikken

1. Klon et enkelt blinkprosjekt.

cd ~

git-klon https://github.com/piotrb5e3/hello-8051.git cd hello-8051/

2. Bygg programmet.

gjøre

3. Koble Arduino til PC -en, koble 12V -forsyningen, plasser AT89C2051 -brikken i ZIF -kontakten.

4. Finn Arduinos serielle port.

ls /dev /tty*

5. Last opp den innebygde IntelHex -filen til brikken. Hvis Arduino -porten din er forskjellig fra /dev /ttyACM0, må du sende den riktige verdien med kommandolinjeparameteren -p.

at89overlord -f./hello.ihx

Trinn 5: Montering

montering
montering
montering
montering
montering
montering

Monter kretsen i henhold til skjematisk. Du finner en PDF -versjon i depotet.

Du bør se den grønne LED blinke med en frekvens på rundt 0,5 Hz.

Trinn 6: Forklaring av kode

Kode Forklaring
Kode Forklaring

#inkludere

#inkludere

Vi starter med å inkludere AT89X051 -overskriften fra SDCC. Den inneholder makroer for interaksjon med registre som om de var variabler. Vi inkluderer også stdint.h som inneholder definisjoner av uint8_t og uint16_t heltallstyper.

// Antar at oscillatoren er 16MHz

#define INTERRUPTS_PER_SECOND 5208

Et avbrudd oppstår når Timer0 flyter over. Den er konfigurert som en enkelt 8 -biters timer, så dette skjer hver 2.^8 prosessorsyklus. En prosessorsyklus tar 12 klokkesykluser, og dermed kommer vi frem til 16000000/12/2^8 = 5208.33333.

flyktig uint8_t led_state = 0;

flyktig uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Vi erklærer ledet tilstandskontroll og avbryter tellervariabler.

void Timer0_ISR (void) _interrupt (1) {

timer_teller--; hvis (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}

Hver gang Timer0 overløper, reduseres telleren. Hvis den er lik null, tilbakestilles den, og LED -tilstanden endres. Dette skjer omtrent en gang i sekundet, noe som resulterer i ~ 0,5 Hz LED -blinkfrekvens.

int main () {

TMOD = 0x3; // Timer -modus - 8bits, ingen forhåndskalkulator. freq = OSCFREQ/12/2^8 TL0 = 0; // Fjern teller TH0 = 0; // Slett register TR0 = 1; // Still timeren til å kjøre. ET0 = 1; // Sett avbrudd. EA = 1; // Angi global avbrudd. mens (1) {if (led_state) {P1 = 0xFF; } annet {P1 = 0x00; }}}

Vi konfigurerer timermodulen og venter på endringer i led -tilstandskontrollvariabelen. TMOD er timermodus -kontrollregisteret. TL0 og TH0 er Timer0 kontrollregistre. ET0 er aktiverings-timer0-bit i timer-kontrollregisteret (TCON). TR0 og EA er biter i interrupt enable register (IE).

Trinn 7: Ytterligere ressurser

  • AT89C2051 datablad:
  • Liten enhet C -kompilator (sdcc):
  • 8051 ressurser:
  • AT89C2051 programmeringslager:
  • hei-8051 depot:

Anbefalt: