Inhoudsopgave:

Inleiding tot 8051 programmeren met AT89C2051 (gastrollen: Arduino): 7 stappen (met afbeeldingen)
Inleiding tot 8051 programmeren met AT89C2051 (gastrollen: Arduino): 7 stappen (met afbeeldingen)

Video: Inleiding tot 8051 programmeren met AT89C2051 (gastrollen: Arduino): 7 stappen (met afbeeldingen)

Video: Inleiding tot 8051 programmeren met AT89C2051 (gastrollen: Arduino): 7 stappen (met afbeeldingen)
Video: Inleiding programmeren - stroomdiagrammen met Flowgorithm 2024, Juli-
Anonim
Inleiding tot 8051-programmering met AT89C2051 (gastrollen: Arduino)
Inleiding tot 8051-programmering met AT89C2051 (gastrollen: Arduino)

De 8051 (ook bekend als MCS-51) is een MCU-ontwerp uit de jaren 80 dat vandaag de dag nog steeds populair is. Moderne 8051-compatibele microcontrollers zijn verkrijgbaar bij meerdere leveranciers, in alle soorten en maten, en met een breed scala aan randapparatuur. In deze instructable zullen we kijken naar de AT89C2051 MCU van Atmel.

AT89C2051 is een kleine (2Kbyte Flash, 128byte RAM), goedkope (~ $1,40 per chip) microcontroller. Kenmerken:

  • 2.7-6V werking
  • 15 I/O-lijnen
  • 2 timers (16 bits)
  • Interne en externe onderbrekingen
  • UART
  • On-chip analoge comparator
  • Tot 2MIPS met een 24MHz klok

Stap 1: Vereisten

Vereisten
Vereisten

Vereisten:

  • Linux-pc (benodigde software: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • AT89C2051-chip (DIP20-pakket)
  • 20-pins ZIF-aansluiting
  • Optocoupler (bij voorkeur MOSFET-uitgang)
  • Arduino prototyping schild
  • 12V voeding
  • 5V voeding
  • 16MHz kristaloscillator
  • 2x 30pF condensator
  • 100nF condensator
  • Diode (bijv: 1N400X)
  • Weerstanden (1K, 3K3)
  • Protobord
  • Truien
  • Koperdraad

Controleer op vereiste software:

welke python3

welke maken welke sdcc welke git

Stap 2: De programmeur bouwen

De programmeur bouwen
De programmeur bouwen
De programmeur bouwen
De programmeur bouwen
De programmeur bouwen
De programmeur bouwen

Dit gedeelte zal kort zijn, aangezien ik enige tijd geleden mijn programmeerschild heb gebouwd. Ik heb het schema en de foto's van het gemonteerde bord bijgevoegd. De PDF van het schema is te vinden in de repository.

U moet het programmeerbord programmeren:

1. Kloon de repository.

git clone

2. Open het bestand AT89C2051_programmer/AT89_prog/AT89_prog.ino in Arduino IDE.

3. Bouw en upload de schets vanuit de Arduino IDE.

Stap 3: Programmeersoftware installeren

Programmeersoftware installeren
Programmeersoftware installeren
Programmeersoftware installeren
Programmeersoftware installeren

1. Maak een virtuele Python-omgeving.

python3 -m venv venv

. venv/bin/activeren

2. Installeer at89overlord. at89overlord is een Open Source-programmeur voor de AT89C2051-chip die door mij is geschreven. De broncode is hier te vinden.

pip install at89overlord

3. Controleer de installatie.

at89overlord -h

Stap 4: Programmeren van de chip

Programmeren van de chip
Programmeren van de chip
Programmeren van de chip
Programmeren van de chip
Programmeren van de chip
Programmeren van de chip
Programmeren van de chip
Programmeren van de chip

1. Kloon een eenvoudig blink-project.

cd ~

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

2. Bouw de applicatie.

maken

3. Sluit Arduino aan op de pc, sluit de 12V-voeding aan, plaats de AT89C2051-chip in de ZIF-socket.

4. Zoek de seriële poort van Arduino.

ls /dev/tty*

5. Upload het ingebouwde IntelHex-bestand naar de chip. Als de poort van uw Arduino verschilt van /dev/ttyACM0, moet u de juiste waarde doorgeven met de -p opdrachtregelparameter.

at89overlord -f./hallo.ihx

Stap 5: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Monteer de schakeling volgens schema. Een pdf-versie is te vinden in de repository.

U zou de groene LED moeten zien knipperen met een frequentie van ongeveer 0,5 Hz.

Stap 6: Code Uitleg

Code Uitleg
Code Uitleg

#erbij betrekken

#erbij betrekken

We beginnen met het opnemen van de AT89X051-header van sdcc. Het bevat macro's voor interactie met registers alsof het variabelen zijn. We nemen ook stdint.h op, die definities bevat van de typen uint8_t en uint16_t integer.

// Ervan uitgaande dat de oscillator 16MHz is

#define INTERRUPTS_PER_SECOND 5208

Een interrupt treedt op wanneer de Timer0 overloopt. Het is geconfigureerd als een enkele 8-bits timer, dus dit gebeurt elke 2^8 processorcycli. Eén processorcyclus duurt 12 klokcycli, en zo komen we uit op 16000000/12/2^8 = 5208.33333.

vluchtig uint8_t led_state = 0;

vluchtig uint16_t timer_counter = INTERRUPTS_PER_SECOND;

We declareren de led-statuscontrole en interrupt-tellervariabelen.

void Timer0_ISR(void) _interrupt (1) {

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

Elke keer dat de Timer0 overloopt, wordt de teller verlaagd. Als het gelijk is aan nul, wordt het gereset en wordt de led-status gewijzigd. Dit gebeurt ongeveer één keer per seconde, wat resulteert in ~0,5 Hz LED-knipperfrequentie.

int hoofd() {

TMOD = 0x3; // Timermodus - 8 bits, geen prescaler. freq = OSCFREQ/12/2^8 TL0 = 0; // Wis teller TH0 = 0; // Wis register TR0 = 1; // Stel de timer in om te lopen. ET0 = 1; // Onderbreking instellen. EA = 1; // Globale onderbreking instellen. while(1) { if (led_state) { P1 = 0xFF; } anders { P1 = 0x00; } } }

We configureren de timermodule en wachten op wijzigingen in de regelvariabele van de led-status. TMOD is het controleregister van de timermodus. TL0 en TH0 zijn Timer0-besturingsregisters. ET0 is de enable-timer0 bit in het timer control register (TCON). TR0 en EA zijn bits in het interrupt enable register (IE).

Stap 7: Aanvullende bronnen

  • AT89C2051 gegevensblad:
  • C-compiler voor klein apparaat (sdcc):
  • 8051 bronnen:
  • AT89C2051 programmeur repository:
  • hallo-8051 repository:

Aanbevolen: