Indholdsfortegnelse:

Introduktion til 8051 -programmering med AT89C2051 (gæstespil: Arduino): 7 trin (med billeder)
Introduktion til 8051 -programmering med AT89C2051 (gæstespil: Arduino): 7 trin (med billeder)

Video: Introduktion til 8051 -programmering med AT89C2051 (gæstespil: Arduino): 7 trin (med billeder)

Video: Introduktion til 8051 -programmering med AT89C2051 (gæstespil: Arduino): 7 trin (med billeder)
Video: How to program 8051 using Arduino! | AT89S51, AT89S52, and P89V51RD2 2024, Juli
Anonim
Introduktion til 8051 -programmering med AT89C2051 (gæstespil: Arduino)
Introduktion til 8051 -programmering med AT89C2051 (gæstespil: Arduino)

8051 (også kendt som MCS-51) er et MCU-design fra 80'erne, der stadig er populært i dag. Moderne 8051-kompatible mikrokontroller fås fra flere leverandører i alle former og størrelser og med en lang række eksterne enheder. I denne instruktive vil vi se på AT89C2051 MCU fra Atmel.

AT89C2051 er en lille (2Kbyte Flash, 128byte RAM), billig (~ $ 1,40 pr. Chip) mikrokontroller.

  • 2,7-6V drift
  • 15 I/O -linjer
  • 2 timere (16 bit)
  • Interne og eksterne afbrydelser
  • UART
  • On-chip analog komparator
  • Op til 2MIPS med et 24MHz ur

Trin 1: Krav

Krav
Krav

Krav:

  • Linux PC (påkrævet software: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • AT89C2051 -chip (DIP20 -pakke)
  • 20-benet ZIF-stik
  • Optokobler (helst MOSFET-output)
  • Arduino prototypeskjold
  • 12V strømforsyning
  • 5V strømforsyning
  • 16MHz krystaloscillator
  • 2x 30pF kondensator
  • 100nF kondensator
  • Diode (eks: 1N400X)
  • Modstande (1K, 3K3)
  • Protoboard
  • Jumpere
  • Kobbertråd

Kontroller den nødvendige software:

hvilken python3

som laver hvilken sdcc hvilken git

Trin 2: Opbygning af programmereren

Bygger programmereren
Bygger programmereren
Bygger programmereren
Bygger programmereren
Bygger programmereren
Bygger programmereren

Dette afsnit vil være kort, da jeg byggede mit programmeringsskjold for nogen tid siden. Jeg har vedhæftet skematikken og billederne af det samlede bord. PDF'en af skematikken kan findes i depotet.

Du bliver nødt til at programmere programmeringsbrættet:

1. Klon depotet.

git -klon

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

3. Byg og upload skitsen fra Arduino IDE.

Trin 3: Installation af programmeringssoftware

Installation af programmeringssoftware
Installation af programmeringssoftware
Installation af programmeringssoftware
Installation af programmeringssoftware

1. Opret et virtuelt python -miljø.

python3 -m venv venv

. venv/bin/aktivere

2. Installer at89overlord. at89overlord er en Open Source -programmør til AT89C2051 -chippen skrevet af mig. Dens kildekode findes her.

pip install at89overlord

3. Kontroller installationen.

at89overlord -h

Trin 4: Programmering af chippen

Programmering af chippen
Programmering af chippen
Programmering af chippen
Programmering af chippen
Programmering af chippen
Programmering af chippen
Programmering af chippen
Programmering af chippen

1. Klon et simpelt blink -projekt.

cd ~

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

2. Byg applikationen.

lave

3. Tilslut Arduino til pc'en, tilslut 12V -forsyningen, placer AT89C2051 -chippen i ZIF -stikket.

4. Find Arduinos serielle port.

ls /dev /tty*

5. Upload den byggede IntelHex -fil til chippen. Hvis din Arduinos port er forskellig fra /dev /ttyACM0, skal du sende den korrekte værdi med kommandolinjeparameteren -p.

at89overlord -f./hello.ihx

Trin 5: Montering

montage
montage
montage
montage
montage
montage

Saml kredsløbet i henhold til skematisk. En PDF -version kan findes i depotet.

Du skal se den grønne LED blinke med en frekvens på omkring 0,5 Hz.

Trin 6: Forklaring af kode

Kode Forklaring
Kode Forklaring

#omfatte

#omfatte

Vi starter med at inkludere AT89X051 header fra sdcc. Den indeholder makroer til interaktion med registre, som var de variabler. Vi inkluderer også stdint.h, som indeholder definitioner af uint8_t og uint16_t heltalstyper.

// Forudsat at oscillatoren er 16MHz

#define INTERRUPTS_PER_SECOND 5208

Et afbrydelse opstår, når timeren 0 flyder over. Det er konfigureret som en enkelt 8bit timer, så dette sker hver 2.^8 processor cyklus. Én processorcyklus tager 12 urcykler, og dermed når vi frem til 16000000/12/2^8 = 5208.33333.

flygtig uint8_t led_state = 0;

flygtig uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Vi erklærer led -tilstandskontrollen og afbryder tællervariabler.

void Timer0_ISR (void) _interrupt (1) {

timer_tæller--; hvis (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}

Hver gang timeren 0 flyder over, reduceres tælleren. Hvis det er lig med nul, nulstilles det, og LED -tilstanden ændres. Dette sker cirka en gang i sekundet, hvilket resulterer i ~ 0,5 Hz LED -blinkfrekvens.

int main () {

TMOD = 0x3; // Timer -tilstand - 8 bit, ingen forkalkning. freq = OSCFREQ/12/2^8 TL0 = 0; // Fjern tæller TH0 = 0; // Ryd register TR0 = 1; // Indstil timeren til at køre. ET0 = 1; // Indstil afbrydelse. EA = 1; // Indstil global afbrydelse. mens (1) {if (led_state) {P1 = 0xFF; } andet {P1 = 0x00; }}}

Vi konfigurerer timermodulet og afventer ændringer i LED -tilstandskontrollvariablen. TMOD er timerregistreringsregistret. TL0 og TH0 er Timer0 kontrolregistre. ET0 er aktiverings-timer0-bit i timerstyringsregistret (TCON). TR0 og EA er bits i interrupt enable register (IE).

Trin 7: Yderligere ressourcer

  • AT89C2051 datablad:
  • Lille enhed C -kompilator (sdcc):
  • 8051 ressourcer:
  • AT89C2051 programmeringslager:
  • hello-8051 repository:

Anbefalede: