Taula de continguts:

Introducció a la programació 8051 amb AT89C2051 (convidat destacat: Arduino): 7 passos (amb imatges)
Introducció a la programació 8051 amb AT89C2051 (convidat destacat: Arduino): 7 passos (amb imatges)

Vídeo: Introducció a la programació 8051 amb AT89C2051 (convidat destacat: Arduino): 7 passos (amb imatges)

Vídeo: Introducció a la programació 8051 amb AT89C2051 (convidat destacat: Arduino): 7 passos (amb imatges)
Vídeo: Accounting application 2024, Juliol
Anonim
Introducció a la programació 8051 amb AT89C2051 (convidat destacat: Arduino)
Introducció a la programació 8051 amb AT89C2051 (convidat destacat: Arduino)

El 8051 (també conegut com MCS-51) és un disseny MCU dels anys 80 que continua sent popular avui en dia. Els microcontroladors moderns compatibles amb 8051 estan disponibles a diversos proveïdors, en totes les formes i mides, i amb una àmplia gamma de perifèrics. En aquest instructiu veurem l’AT89C2051 MCU d’Atmel.

AT89C2051 és un microcontrolador petit (2Kbyte Flash, 128byte RAM), econòmic (~ 1,40 $ per xip).

  • Funcionament de 2,7-6V
  • 15 línies d'E / S
  • 2 temporitzadors (16 bits)
  • Interrupcions internes i externes
  • UART
  • Comparador analògic amb xip
  • Fins a 2 MIPS amb un rellotge de 24 MHz

Pas 1: requisits

Requisits
Requisits

Requisits:

  • PC Linux (programari requerit: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • Xip AT89C2051 (paquet DIP20)
  • Endoll ZIF de 20 pins
  • Optocoplador (preferiblement sortida MOSFET)
  • Escut de prototipatge Arduino
  • Alimentació de 12V
  • Alimentació de 5V
  • Oscil·lador de cristall de 16 MHz
  • Condensador de 2x 30pF
  • Condensador 100nF
  • Diodo (ex: 1N400X)
  • Resistències (1K, 3K3)
  • Protoboard
  • Saltadors
  • Filferro de coure

Comproveu si hi ha programari necessari:

quin pitó3

que fan quins sdcc quins git

Pas 2: crear el programador

Construint el programador
Construint el programador
Construint el programador
Construint el programador
Construint el programador
Construint el programador

Aquesta secció serà breu, ja que vaig construir el meu escut de programació fa temps. He adjuntat l’esquema i les imatges del tauler muntat. El PDF de l'esquema es pot trobar al dipòsit.

Haureu de programar la placa del programador:

1. Cloneu el dipòsit.

git clon

2. Obriu el fitxer AT89C2051_programmer / AT89_prog / AT89_prog.ino a Arduino IDE.

3. Construïu i pengeu l'esbós des de l'IDE Arduino.

Pas 3: Instal·lació del programari del programador

Instal·lació del programari del programador
Instal·lació del programari del programador
Instal·lació del programari del programador
Instal·lació del programari del programador

1. Creeu un entorn virtual python.

python3 -m venv venv

. venv / bin / activate

2. Instal·leu at89overlord. at89overlord és un programador de codi obert per al xip AT89C2051 escrit per mi. El seu codi font es pot trobar aquí.

instal·lar pip a 89overlord

3. Verifiqueu la instal·lació.

at89overlord -h

Pas 4: Programació del xip

Programació del xip
Programació del xip
Programació del xip
Programació del xip
Programació del xip
Programació del xip
Programació del xip
Programació del xip

1. Cloneu un simple projecte de parpelleig.

cd ~

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

2. Creeu l'aplicació.

fer

3. Connecteu Arduino al PC, connecteu el subministrament de 12V, col·loqueu el xip AT89C2051 al sòcol ZIF.

4. Localitzeu el port sèrie d'Arduino.

ls / dev / tty *

5. Pengeu el fitxer IntelHex integrat al xip. Si el port del vostre Arduino és diferent de / dev / ttyACM0, heu de passar el valor correcte amb el paràmetre de línia d'ordres -p.

at89overlord -f./hello.ihx

Pas 5: Muntatge

muntatge
muntatge
muntatge
muntatge
muntatge
muntatge

Muntar el circuit segons l’esquema. Es pot trobar una versió PDF al repositori.

Hauríeu de veure el flaix LED verd amb una freqüència d’uns 0,5 Hz.

Pas 6: explicació del codi

Explicació del codi
Explicació del codi

#incloure

#incloure

Comencem per incloure la capçalera AT89X051 de sdcc. Conté macros per interactuar amb registres com si fossin variables. També incloem stdint.h que conté definicions de tipus enters uint8_t i uint16_t.

// Suposant que l’oscil·lador és de 16 MHz

#define INTERRUPTS_PER_SECOND 5208

Es produeix una interrupció quan el Timer0 es desborda. Està configurat com un sol temporitzador de 8 bits, de manera que això passa cada 2 ^ 8 cicles de processador. Un cicle de processador dura 12 cicles de rellotge i, per tant, arribem a 16000000/12/2 ^ 8 = 5208.33333.

volàtil uint8_t led_state = 0;

volàtil uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Declarem les variables de control de l'estat del led i de comptador d'interrupcions.

void Timer0_ISR (void) _interrupt (1) {

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

Cada vegada que el Timer0 desborda el comptador disminueix. Si és igual a zero, es restableix i es canvia l'estat del led. Això es produeix aproximadament una vegada per segon, cosa que provoca una freqüència de parpelleig del LED de ~ 0,5 Hz.

int main () {

TMOD = 0x3; // Mode temporitzador: 8 bits, sense prescaler. freq = OSCFREQ / 12/2 ^ 8 TL0 = 0; // Esborra el comptador TH0 = 0; // Esborra el registre TR0 = 1; // Estableix el temporitzador perquè s’executi. ET0 = 1; // Estableix la interrupció. EA = 1; // Estableix una interrupció global. while (1) {if (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}

Configurem el mòdul de temporitzador i esperem canvis a la variable de control de l’estat del led. TMOD és el registre de control del mode de temporitzador. TL0 i TH0 són registres de control Timer0. ET0 és el bit enable-timer0 del registre de control del temporitzador (TCON). TR0 i EA són bits del registre d’habilitació d’interrupcions (IE).

Pas 7: recursos addicionals

  • Full de dades AT89C2051:
  • Compilador de petits dispositius C (sdcc):
  • 8051 recursos:
  • Dipòsit del programador AT89C2051:
  • repositori hola-8051:

Recomanat: