Sommario:

Introduzione alla programmazione 8051 con AT89C2051 (Guest Starring: Arduino): 7 passaggi (con immagini)
Introduzione alla programmazione 8051 con AT89C2051 (Guest Starring: Arduino): 7 passaggi (con immagini)

Video: Introduzione alla programmazione 8051 con AT89C2051 (Guest Starring: Arduino): 7 passaggi (con immagini)

Video: Introduzione alla programmazione 8051 con AT89C2051 (Guest Starring: Arduino): 7 passaggi (con immagini)
Video: Введение в программное обеспечение ProgISP 2024, Dicembre
Anonim
Introduzione alla programmazione 8051 con AT89C2051 (Guest Starring: Arduino)
Introduzione alla programmazione 8051 con AT89C2051 (Guest Starring: Arduino)

L'8051 (noto anche come MCS-51) è un design MCU degli anni '80 che rimane popolare oggi. I moderni microcontrollori compatibili con 8051 sono disponibili da più fornitori, in tutte le forme e dimensioni e con un'ampia gamma di periferiche. In questo tutorial esamineremo l'MCU AT89C2051 di Atmel.

AT89C2051 è un microcontrollore piccolo (2Kbyte Flash, 128byte RAM), economico (~$1,40 per chip). Caratteristiche:

  • Funzionamento a 2,7-6 V
  • 15 linee I/O
  • 2 timer (16 bit)
  • Interruzioni interne ed esterne
  • UART
  • Comparatore analogico su chip
  • Fino a 2 MIPS con un clock a 24 MHz

Passaggio 1: requisiti

Requisiti
Requisiti

Requisiti:

  • PC Linux (software richiesto: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • Chip AT89C2051 (pacchetto DIP20)
  • Presa ZIF a 20 pin
  • Fotoaccoppiatore (preferibilmente uscita MOSFET)
  • Scudo di prototipazione Arduino
  • Alimentazione 12V
  • Alimentazione 5V
  • Oscillatore a cristallo da 16 MHz
  • Condensatore 2x 30pF
  • Condensatore da 100nF
  • Diodo (es: 1N400X)
  • Resistori (1K, 3K3)
  • Protoboard
  • ponticelli
  • Filo di rame

Verifica il software richiesto:

quale pitone3

che fanno quale sdcc quale git

Passaggio 2: creazione del programmatore

Costruire il programmatore
Costruire il programmatore
Costruire il programmatore
Costruire il programmatore
Costruire il programmatore
Costruire il programmatore

Questa sezione sarà breve, poiché ho costruito il mio scudo di programmazione qualche tempo fa. Ho allegato lo schema e le immagini della scheda assemblata. Il PDF dello schema si trova nel repository.

Dovrai programmare la scheda del programmatore:

1. Clonare l'archivio.

git clone

2. Aprire il file AT89C2051_programmer/AT89_prog/AT89_prog.ino nell'IDE di Arduino.

3. Costruisci e carica lo schizzo dall'IDE di Arduino.

Passaggio 3: installazione del software di programmazione

Installazione del software di programmazione
Installazione del software di programmazione
Installazione del software di programmazione
Installazione del software di programmazione

1. Creare un ambiente virtuale Python.

python3 -m venv venv

. venv/bin/activate

2. Installa su89overlord. at89overlord è un programmatore Open Source per il chip AT89C2051 scritto da me. Il codice sorgente può essere trovato qui.

pip install at89overlord

3. Verificare l'installazione.

at89overlord -h

Passaggio 4: programmazione del chip

Programmazione del chip
Programmazione del chip
Programmazione del chip
Programmazione del chip
Programmazione del chip
Programmazione del chip
Programmazione del chip
Programmazione del chip

1. Clonare un semplice progetto Blink.

cd ~

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

2. Creare l'applicazione.

fare

3. Collega Arduino al PC, collega l'alimentazione a 12V, posiziona il chip AT89C2051 nella presa ZIF.

4. Individua la porta seriale di Arduino.

ls /dev/tty*

5. Carica il file IntelHex costruito sul chip. Se la porta del tuo Arduino è diversa da /dev/ttyACM0 devi passare il valore corretto con il parametro -p della riga di comando.

at89overlord -f./hello.ihx

Passaggio 5: assemblaggio

Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea

Assemblare il circuito secondo lo schema. Una versione PDF può essere trovata nel repository.

Dovresti vedere il LED verde lampeggiare con una frequenza di circa 0,5Hz.

Passaggio 6: spiegazione del codice

Codice Spiegazione
Codice Spiegazione

#includere

#includere

Iniziamo includendo l'intestazione AT89X051 da sdcc. Contiene macro per interagire con i registri come se fossero variabili. Includiamo anche stdint.h che contiene le definizioni dei tipi interi uint8_t e uint16_t.

// Supponendo che l'oscillatore sia 16MHz

#define INTERRUPTS_PER_SECOND 5208

Si verifica un interrupt quando il Timer0 va in overflow. È configurato come un singolo timer a 8 bit, quindi questo accade ogni 2^8 cicli del processore. Un ciclo del processore richiede 12 cicli di clock e quindi arriviamo a 16000000/12/2^8 = 5208.33333.

volatile uint8_t led_state = 0;

volatile uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Dichiariamo il controllo dello stato del led e le variabili del contatore di interruzione.

void Timer0_ISR(void) _interrupt (1) {

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

Ogni volta che il Timer0 va in overflow il contatore viene decrementato. Se è uguale a zero viene resettato, e cambia lo stato del led. Ciò si verifica circa una volta al secondo, con conseguente frequenza di lampeggio del LED di ~0,5Hz.

int main() {

TMOD = 0x3; // Modalità timer - 8 bit, nessun prescaler. freq = OSCFREQ/12/2^8 TL0 = 0; // Cancella contatore TH0 = 0; // Cancella registro TR0 = 1; // Imposta il timer per l'esecuzione. ET0 = 1; // Imposta l'interruzione. EA = 1; // Imposta l'interrupt globale. while(1) { if (led_state) { P1 = 0xFF; } altrimenti { P1 = 0x00; } } }

Configuriamo il modulo timer e attendiamo i cambiamenti nella variabile di controllo dello stato del led. TMOD è il registro di controllo della modalità timer. TL0 e TH0 sono registri di controllo Timer0. ET0 è il bit di abilitazione del timer0 nel registro di controllo del timer (TCON). TR0 e EA sono bit nel registro di abilitazione degli interrupt (IE).

Passaggio 7: risorse aggiuntive

  • Scheda tecnica AT89C2051:
  • Compilatore C per piccoli dispositivi (sdcc):
  • 8051 risorse:
  • Archivio programmatore AT89C2051:
  • hello-8051 repository:

Consigliato: