Introduzione alla programmazione 8051 in linguaggio Assembly

Prova Il Nostro Strumento Per Eliminare I Problemi





Il linguaggio assembly è un linguaggio di programmazione di basso livello utilizzato per scrivere codice di programma in termini di mnemonica. Anche se sono attualmente richiesti molti linguaggi di alto livello, il linguaggio di programmazione assembly è comunemente utilizzato in molte applicazioni e può essere utilizzato per manipolazioni hardware dirette. È anche usato per scrivere il file Codice di programmazione 8051 in modo efficiente con un numero inferiore di cicli di clock consumando meno memoria rispetto agli altri linguaggi di alto livello.

8051 Programmazione in linguaggio Assembly

Programmazione 8051



8051 Programmazione in linguaggio Assembly

Il linguaggio assembly è un linguaggio di programmazione completamente correlato all'hardware. I progettisti incorporati devono avere una conoscenza sufficiente dell'hardware di un particolare processore o controller prima di scrivere il programma. Il linguaggio assembly è sviluppato da mnemonici quindi, gli utenti non possono capirlo facilmente per modificare il programma.


8051 Programmazione in linguaggio Assembly

8051 Programmazione in linguaggio Assembly



Il linguaggio di programmazione Assembly è sviluppato da vari compilatori e il 'sala da bowling' è più adatto per microcontrolloreprogrammazione sviluppo. Microcontrollorioppure i processori possono capire solo il linguaggio binario sotto forma di '0 o 1' Un assemblatore converte il linguaggio assembly in linguaggio binario e quindi lo memorizza nelmicrocontrollorememoria per eseguire il compito specifico.

8051 Architettura del microcontrollore

L'8051microcontrolloreè il Architettura di Harvard basata su CISC , e dispone di periferiche come 32 I / O, timer / contatori, comunicazione seriale e memorie. Ilmicrocontrollorerichiede un programma per eseguire le operazioni che richiedono una memoria per il salvataggio e per leggere le funzioni. L'8051microcontrolloreè costituito da RAM e memorie ROM per memorizzare le istruzioni.

8051 Microcontrollore Arctitecuture

8051 Architettura del microcontrollore

Un registro è la parte principale di i processori emicrocontrollori che è contenuto nella memoria che fornisce un modo più veloce di raccogliere e archiviare i dati. La programmazione in linguaggio assembly dell'8051 si basa sui registri di memoria. Se vogliamo manipolare i dati a un processore o controllore eseguendo sottrazioni, addizioni, ecc., Non possiamo farlo direttamente nella memoria, ma ha bisogno di registri per elaborare e memorizzare i dati.Microcontrolloricontengono diversi tipi di registri che possono essere classificati in base alle loro istruzioni o al contenuto che vi opera.

8051 Programmi per microcontrollori in linguaggio Assembly

Il linguaggio assembly è costituito da elementi in cui vengono utilizzati tutti per scrivere il programmamodo sequenziale. Seguire le regole fornite per scrivere la programmazione in linguaggio assembly.


Regole del linguaggio dell'Assemblea

  • Il codice assembly deve essere scritto in lettere maiuscole
  • Le etichette devono essere seguite da due punti (etichetta :)
  • Tutti i simboli e le etichette devono iniziare con una lettera
  • Tutti i commenti sono scritti in minuscolo
  • L'ultima riga del programma deve essere la direttiva END

Gli mnemonici del linguaggio assembly sono sotto forma di codice operativo, come MOV, ADD, JMP e così via, che vengono utilizzati per eseguire le operazioni.

Codice operativo: Il codice operativo è una singola istruzione che può essere eseguita dalla CPU. Qui il codice operativo è un'istruzione MOV.

Operandi: Gli operandi sono un unico pezzo di dati che può essere utilizzato dal codice operativo. Esempio, l'operazione di moltiplicazione viene eseguita dagli operandi che vengono moltiplicati per l'operando.

Sintassi: MUL a,b

Gli elementi di una programmazione in linguaggio assembly:

  • Assemblare le linee guida
  • Set di istruzioni
  • Modalità di indirizzamento

Assemblare le istruzioni:

Le direttive di assemblaggio danno le indicazioni alla CPU. L'8051microcontrolloreconsiste in varie tipologie di direttive di montaggio per dare la direzione alla centralina. Le direttive più utili sono la programmazione 8051, come:

  • ORG
  • DB
  • EQU
  • FINE

ORG(origine): Questa direttiva indica l'inizio del programma. Viene utilizzato per impostare l'indirizzo del registro durante l'assemblaggio. Ad esempio ORG 0000h comunica al compilatore tutto il codice successivo a partire dall'indirizzo 0000h.

Sintassi: ORG 0000h

DB(definire byte): Il byte di definizione viene utilizzato per consentire una stringa di byte. Ad esempio, stampa 'EDGEFX' in cui ogni carattere è preso dall'indirizzo e infine stampa la 'stringa' dal DB direttamente tra virgolette.

Sintassi:

ORG 0000h

MOV a, # 00h
————-
————-
DB 'EDGEFX'

EQU (equivalente): La direttiva equivalente viene utilizzata per equiparare l'indirizzo della variabile.

Sintassi:

reg equ,09h
—————–
—————–
MOVreg,# 2h

FINE: La direttiva END viene utilizzata per indicare la fine del programma.

Sintassi:

reg equ,09h

—————–
—————–
MOVreg,# 2h
FINE

Modalità di indirizzamento:

La modalità di accesso ai dati è denominata modalità di indirizzamento. La CPU può accedere ai dati in modi diversi utilizzando le modalità di indirizzamento. L'8051microcontrolloreconsiste in cinque modalità di indirizzamento come:

  • Modalità di indirizzamento immediato
  • Registra la modalità di indirizzamento
  • Modalità di indirizzamento diretto
  • Modalità di indirizzamento indiretto
  • Modalità di indirizzamento dell'indice di base

Modalità di indirizzamento immediato:

In questa modalità di indirizzamento, l'origine deve essere un valore che può essere seguito da '#' e la destinazione deve essere Registri SFR, registri di uso generale e indirizzo. Viene utilizzato per memorizzare immediatamente il valore nei registri di memoria.

Sintassi:

MOV A, # 20h // A èunregistro dell'accumulatore, 20 è memorizzato nel registro A //
MOV R0,# 15 // R0 è un registro per uso generico 15 è memorizzato nel registro R0 //
MOV P0, # 07h // P0 è un registro SFR07 è memorizzato in P0 //
MOV 20h,# 05h // 20h è l'indirizzo del registro 05 memorizzato in 20h //

Ex:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, il valore finale viene memorizzato in R0 //

Registra la modalità di indirizzamento:

In questa modalità di indirizzamento, la sorgente e la destinazione devono essere un registro, ma non registri di uso generale. Quindi i dati non vengono spostati all'interno del file registri bancari generici .

Sintassi:

MOV A, B // A è un registro SFR, B è un registro generico //
MOV R0, R1 // Istruzione non valida, da GPR a GPR non possibile //

EX:

MOV R0, # 02h
MOV A, # 30h
AGGIUNGI R0, A // R0<—R0+A, the final value is stored in the R0 register//

Modalità di indirizzamento diretto

In questa modalità di indirizzamento, l'origine o la destinazione (o sia l'origine che la destinazione) deve essere un indirizzo, ma non un valore.

Sintassi:

MOV A,20h // 20h è un indirizzo A è un registro //
MOV 00h, 07h // entrambi sono indirizzati dai registri GPS //

Ex:

MOV 07h,# 01h
MOV A, # 08h
AGGIUNGERE UN,07h // A<—A+07h the final value is stored in A//

Modalità di indirizzamento indiretto:

In questa modalità di indirizzamento, la sorgente o la destinazione (o la destinazione o la sorgente) deve essereperindirizzo indiretto, ma non un valore. Questa modalità di indirizzamento supporta il concetto di puntatore. Il puntatore è una variabile che viene utilizzata per memorizzare l'indirizzo dell'altra variabile. Questo concetto di puntatore viene utilizzato solo per i registri R0 e R1.

Sintassi:

MOVR0, # 01h // Il valore 01 è memorizzato nel registro R0, l'indirizzo R0 è 08h //
MOV R1, # 08h // R1 è la variabile puntatore cheI negoziindirizzo (08h) di R0 //
MOV 20h,@ R1 // Il valore 01 è memorizzato nell'indirizzo 20h del registro GP //

Modalità di indirizzamento indiretto

Modalità di indirizzamento indiretto

Modalità di indirizzamento dell'indice di base:

Questa modalità di indirizzamento viene utilizzata per leggere i dati dal file memoria esterna o memoria ROM . Tutte le modalità di indirizzamento non possono leggere i dati dalla memoria dei codici. Il codice deve essere letto tramite il registro DPTR. Il DPTR viene utilizzato per puntare i dati nel codice o nella memoria esterna.

Sintassi:

MOVC A, @ A + DPTR // C indica la memoria del codice //
MOCX A, @ A + DPTR // X indica la memoria esterna //
EX: MOV A, # 00H // 00H viene memorizzato nel registro A //
MOV DPTR, # 0500H // DPTR punta l'indirizzo 0500h nella memoria //
MOVC A, @ A + DPTR // invia il valoreperil registro A //
MOV P0, A // data di invio di A al registrar PO //

Set di istruzioni:

Il set di istruzioni è la struttura del controller o del processore che fornisce comandi al controller per guidare il controller per l'elaborazione dei dati. Il set di istruzioni è costituito da istruzioni, tipi di dati nativi, modalità di indirizzamento, registri di interrupt, gestione eccezionale e architettura di memoria. Il 8051microcontrollore può seguire le istruzioni CISC con l'architettura di Harvard. Nel caso della programmazione 8051, diversi tipi di istruzioni CISC includono:

  • Set di istruzioni per il trasferimento dei dati
  • Set di istruzioni sequenziali
  • Set di istruzioni aritmetiche
  • Ramificazione Instructionimpostato
  • Set di istruzioni di loop
  • Set di istruzioni condizionali
  • Set di istruzioni incondizionate
  • Set di istruzioni logiche
  • Set di istruzioni booleane

Set di istruzioni aritmetiche:

Le istruzioni aritmetiche eseguono le operazioni di base come:

  • Aggiunta
  • Moltiplicazione
  • Sottrazione
  • Divisione

Aggiunta:

ORG 0000h
MOV R0, # 03H // sposta il valore 3 nel registro R0 //
MOV A, # 05H // sposta il valore 5 nell'accumulatore A //
Aggiungi A, 00H //addAvalue con valore R0 e memorizza il risultatoin un//
FINE

Moltiplicazione:

ORG 0000h
MOV R0, # 03H // sposta il valore 3 nel registro R0 //
MOV A, # 05H // sposta il valore 5 nell'accumulatore A //
MUL A, 03H //Moltiplicatoil risultato viene memorizzato nell'accumulatore A //
FINE

Sottrazione:

ORG 0000h
MOV R0, # 03H // sposta il valore 3 nel registro R0 //
MOV A, # 05H // sposta il valore 5 nell'accumulatore A //
SUBB A, 03H // Il valore del risultato viene memorizzato nell'accumulatore A //
FINE

Divisione:

ORG 0000h
MOV R0, # 03H // sposta il valore 3 nel registro R0 //
MOV A, # 15H // sposta il valore 5 nell'accumulatore A //
DIV A, 03H // il valore finale viene memorizzato nell'accumulatore A //
FINE

Istruzioni condizionali

La CPU esegue le istruzioni in base alla condizione controllando lo stato del singolo bit o lo stato del byte. L'8051microcontrolloreconsiste in varie istruzioni condizionali come:

  • JB -> Salta sotto
  • JNB -> Salta se non sotto
  • JC -> Salta se trasporta
  • JNC -> Salta senonTrasportare
  • JZ -> Salta se zero
  • JNZ -> Salta senonZero
Istruzioni condizionali

Istruzioni condizionali

1. Sintassi:

JB P1.0, etichetta
- - - - - - - -
- - - - - - - -
Etichetta: - - - - - - - -
- - - - - - - -
FINE

2. Sintassi:

JNB P1.0, etichetta
- - - - - - - -
- - - - - - - -
Etichetta: - - - - - - - -
- - - - - - - -
FINE

3. Sintassi:

JC, etichetta
- - - - - - - -
- - - - - - - -
Etichetta: - - - - - - - -
- - - - - - - -
FINE

4. Sintassi:

JNC, etichetta
- - - - - - - -
- - - - - - - -
Etichetta: - - - - - - - -
- - - - - - - -
FINE
5. Sintassi:

JZ, etichetta
- - - - - - - -
- - - - - - - -
Etichetta: - - - - - - - -
- - - - - - - -
FINE

6. Sintassi:

JNZ, etichetta
- - - - - - - -
- - - - - - - -
Etichetta: - - - - - - - -
- - - - - - - -
FINE

Istruzioni per chiamare e saltare:

Le istruzioni di chiamata e di salto vengono utilizzate per evitare la replica del codice del programma. Quando un codice specifico viene utilizzato più di una volta in punti diversi del programma, se menzioniamonome specificopercodice quindipotremmo usare quel nome ovunque nel programma senza inserire un codice ogni volta. Ciò riduce la complessità del programma. La programmazione 8051 consiste in istruzioni di chiamata e salto come LCALL, SJMP.

  • LCALL
  • UNA CHIAMATA
  • SJMP
  • LJMP

1. Sintassi:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, etichetta
- - - - - - - -
- - - - - - - -
STOP SJMP
Etichetta: - - - - - - - -
- - - - - - - -
- - - - - - - -
giusto
FERMARE:NOP

2. Sintassi:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, etichetta
- - - - - - - -
- - - - - - - -
STOP SJMP
Etichetta: - - - - - - - -
- - - - - - - -
- - - - - - - -
giusto
FERMARE:NOP

Istruzioni per chiamate e salti

Istruzioni per chiamate e salti

Istruzioni per il ciclo:

Le istruzioni di ciclo vengono utilizzate per ripetere il blocco ogni volta durante l'esecuzione delle operazioni di incremento e decremento. L'8051microcontrolloreconsistono in due tipi di istruzioni di ciclo:

  • CJNE -> confronta e salta se non è uguale
  • DJNZ -> decrementa e salta se diverso da zero

1. Sintassi:

diCJNE
MOV A, # 00H
MOV B, # 10H
Etichetta: INC A
- - - - - -
- - - - - -
CJNE A, etichetta

2. Sintassi:

diDJNE

MOV R0, # 10H
Etichetta: - - - - - -
- - - - - -
DJNE R0, etichetta
- - - - - -
- - - - - -
FINE

Set di istruzioni logiche:

Il set di istruzioni del microcontrollore 8051 fornisce le istruzioni logiche AND, OR, XOR, TEST, NOT e booleane per l'inserimento e azzera i bit in base alle necessità del programma.

Set di istruzioni logiche

Set di istruzioni logiche

1. Sintassi:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ORL A, R0 // 00100000/00000101 = 00000000 //

2. Sintassi:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ANL A, R0

3. Sintassi:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
XRL A, R0

Operatori in movimento

Gli operatori di turno vengono utilizzati per inviare e ricevere i dati in modo efficiente. L'8051microcontrolloresono composti da quattro operatori di turno:

  • RR -> Ruota a destra
  • RRC -> Ruota a destra durante il trasporto
  • RL -> Ruota a sinistra
  • RLC -> Ruota a sinistra durante il trasporto

Ruota a destra (RR):

In questa operazione di spostamento, l'MSB diventa LSB e tutti i bit si spostano verso destra bit per bit, in serie.

Sintassi:

MOV A, # 25h
RR A

Ruota a sinistra (RL):

In questa operazione di spostamento, l'MSB diventa LSB e tutti i bit si spostano verso il lato sinistro bit per bit, in modo seriale.

Sintassi:

MOV A, # 25h
RL A

RRC Rotate Right through Carry:

In questa operazione di spostamento, l'LSB si sposta in riporto e il riporto diventa MSB, e tutti i bit vengono spostati verso destra bit per bit.

Sintassi:

MOV A, # 27h
RRC A

RLC Ruota a sinistra attraverso Carry:

In questa operazione di spostamento, l'MSB si sposta in carry e il carry diventa LSB e tutti i bit si spostano verso il lato sinistro in una posizione bit per bit.

Sintassi:

MOV A, # 27h
RLC A

Programmi C integrati di base:

Ilmicrocontrollorela programmazione è diversa per ogni tipo di sistema operativo. Ci sono molti sistemi operativi come Linux, Windows, RTOS e così via. Tuttavia, RTOS presenta diversi vantaggi per lo sviluppo di sistemi embedded. Di seguito vengono forniti alcuni esempi di programmazione a livello di assembly.

LED lampeggiante utilizzando con 8051microcontrollore:

  • Numero Visualizzazione su display a 7 segmenti utilizzando il microcontrollore 8051
  • Calcoli con timer / contatore e programma utilizzando 8051microcontrollore
  • Calcoli di comunicazione seriale e programma utilizzando 8051microcontrollore

Programmi LED con 8051 Microcontrller

1. WAP per attivare o disattivare i LED PORT1

ORG 0000H
COMMUTA: MOV P1, # 01 //mossa00000001 al registro p1 //
RITARDO CHIAMATA // esegue il ritardo //
MOV A, P1 // spostavalore p1all'accumulatore //
CPL A // complemento A valore //
MOV P1, A // sposta 11111110 nel registro port1 //
RITARDO CHIAMATA // esegue il ritardo //
SJMP TOGLE
DELAY: MOV R5, # 10H // carica il registro R5 con 10 //
DUE: MOV R6, # 200 // carica il registro R6 con 200 //
ONE: MOV R7, # 200 // carica il registro R7 con 200 //
DJNZ R7, $ // decrementa R7 finché non è zero //
DJNZ R6, ONE // decrementa R7 finché non è zero //
DJNZ R5, TWO // decrementa R7 finché non è zero //
RET // torna al programma principale //
FINE

Calcoli con timer / contatore e programmazione utilizzando 8051 Microcontroller:

Il ritardo è uno dei fattori importanti nello sviluppo del software applicativo. Il timer e contatori sono componenti hardware dimicrocontrollore, che vengono utilizzati in molte applicazioni per fornire il ritardo di tempo preciso con gli impulsi di conteggio. Both i compiti sono implementati dalla tecnica del software.

1. WAP per calcolare il ritardo di 500us.

MOV TMOD, # 10H // seleziona la modalità timer dai registri //
MOV TH1, # 0FEH // memorizza il tempo di ritardo nel bit più alto //
MOV TL1, # 32H // memorizza il tempo di ritardo in bit basso //
JNB TF1, $ // decrementa il valore del timer finché non è zero //
CLR TF1 // cancella il flag del timerpo//
CLR TR1 // OFF il timer //

2. WAP per attivare o disattivare i LEDcon il5secritardo

ORG 0000H
RITORNO: MOV PO, # 00H
RITARDO DI CHIAMATA
MOV P0, # 0FFH
RITARDO DI CHIAMATA
SJUMP RETURN
RITARDO: MOV R5, # 50H // carica il registro R5 con 50 //
DELAY1: MOV R6, # 200 // carica il registro R6 con 200 //
DELAY2: MOV R7, # 229 // carica il registro R7 con 200 //
DJNZ R7, $ // decrementa R7 finché non è zero //
DJNZ R6, DELAY2 // decrementa R6 finché non è zero //
DJNZ R5, DELAY1 // decrementa R5 finché non è zero //
RET // torna al programma principale //
FINE

3. WAP per contare i 250 impulsi utilizzando mode0 count0

Sintassi:

ORG 0000H
MOV TMOD, # 50H // seleziona il contatore //
MOV TH0, # 15 // sposta gli impulsi di conteggio più in alto //
MOV TH1, # 9FH //mossagli impulsi di conteggio, bit inferiore //
SET TR0 // ATTIVA il timer //
JNB $ // decrementa il valore del conteggio fino a zero //
CLR TF0 // cancella il contatore, flagpo//
CLR TR0 // ferma il timer //
FINE

Programmazione della comunicazione seriale utilizzando 8051 Microcontroller:

Comunicazione seriale è comunemente usato per trasmettere e ricevere i dati. L'8051microcontrolloreconsistono nella comunicazione seriale UART / USART ei segnali vengono trasmessi e ricevuti daTxe perni Rx. La comunicazione UART trasferisce i dati bit per bit in modo seriale. L'UART è un protocollo half-duplex che trasferisce e riceve i dati, ma non allo stesso tempo.

1. WAP per trasmettere i caratteri all'Hyper Terminal

MOV SCON, # 50H // imposta la comunicazione seriale //
MOV TMOD, # 20H // seleziona la modalità timer //
MOV TH1, # -3 // imposta la velocità di trasmissione //
SET TR1 // ATTIVA il timer //
MOV SBUF, # ’S’ // trasmette S alla finestra seriale //
JNB TI, $ // decrementa il valore del timer finché non è zero //
CLR RI // cancella interrupt di ricezione //
CLR TR1 // cancella il timer //

2. WAP per trasmettere la ricezione del carattere da Hyper Terminal

MOV SCON, # 50H // imposta la comunicazione seriale //
MOV TMOD, # 20H // seleziona la modalità timer //
MOV TH1, # -6 // imposta la velocità di trasmissione //
SET TR1 // sul timer //
MOV SBUF, # ’S’ // trasmette S alla finestra seriale //
JNB RI, $ // decrementa il valore del timer finché non è zero //
CLR RI // cancella interrupt di ricezione //
MOV P0, SBUF // invia il valore del registro SBUF alla porta 0 //
CLR TR1 // cancella il timer //

Questo è tutto sulla programmazione 8051 in linguaggio Assembly in breve con programmi basati su esempi. Ci auguriamo che questa adeguata informazione sul linguaggio assembly sia sicuramente utile per i lettori e attendiamo con impazienza i loro preziosi commenti nella sezione commenti qui sotto.