Introduction à la programmation 8051 en langage d'assemblage

Essayez Notre Instrument Pour Éliminer Les Problèmes





Le langage d'assemblage est un langage de programmation de bas niveau utilisé pour écrire du code de programme en termes de mnémoniques. Même si de nombreux langages de haut niveau sont actuellement en demande, le langage de programmation assembleur est couramment utilisé dans de nombreuses applications et peut être utilisé pour des manipulations matérielles directes. Il est également utilisé pour écrire le 8051 code de programmation efficacement avec moins de cycles d'horloge en consommant moins de mémoire par rapport aux autres langages de haut niveau.

Programmation 8051 en langage d

Programmation 8051



Programmation 8051 en langage d'assemblage

Le langage d'assemblage est un langage de programmation entièrement lié au matériel. Les concepteurs embarqués doivent avoir une connaissance suffisante du matériel d'un processeur ou de contrôleurs particuliers avant d'écrire le programme. Le langage d'assemblage est développé par mnémoniques donc les utilisateurs ne peuvent pas le comprendre facilement pour modifier le programme.


Programmation 8051 en langage d

Programmation 8051 en langage d'assemblage



Le langage de programmation d'assemblage est développé par divers compilateurs et le 'Allée de bowling' convient le mieux pour microcontrôleurprogrammation développement. Microcontrôleursou les processeurs ne peuvent comprendre que le langage binaire sous la forme de «0 ou 1» Un assembleur convertit le langage d'assemblage en langage binaire, puis le stocke dans lemicrocontrôleurmémoire pour effectuer la tâche spécifique.

8051 Microcontrôleur Architecuture

Le 8051microcontrôleurest le Architecture de Harvard basée sur l'ICCA , et il a des périphériques comme 32 E / S, des minuteries / compteurs, une communication série et des mémoires. Lemicrocontrôleurnécessite un programme pour effectuer les opérations qui nécessitent une mémoire pour la sauvegarde et la lecture des fonctions. Le 8051microcontrôleurse compose de mémoires RAM et ROM pour stocker des instructions.

8051 Microcontrôleur Arctitecuture

8051 Microcontrôleur Architecuture

Un registre est la partie principale de les transformateurs etmicrocontrôleurs qui est contenu dans la mémoire qui fournit un moyen plus rapide de collecter et de stocker les données. La programmation en langage assembleur 8051 est basée sur les registres de mémoire. Si nous voulons manipuler des données vers un processeur ou un contrôleur en effectuant des soustractions, des additions, etc., nous ne pouvons pas le faire directement dans la mémoire, mais il faut des registres pour traiter et stocker les données.Microcontrôleurscontiennent plusieurs types de registres qui peuvent être classés en fonction de leurs instructions ou du contenu qui y opère.

Programmes de microcontrôleur 8051 en langage d'assemblage

Le langage d'assemblage est composé d'éléments qui sont tous utilisés pour écrire le programme enmanière séquentielle. Suivez les règles données pour écrire la programmation en langage assembleur.


Règles du langage d'assemblage

  • Le code d'assemblage doit être écrit en majuscules
  • Les étiquettes doivent être suivies de deux points (étiquette :)
  • Tous les symboles et étiquettes doivent commencer par une lettre
  • Tous les commentaires sont écrits en minuscules
  • La dernière ligne du programme doit être la directive END

Les mnémoniques du langage d'assemblage se présentent sous la forme de code opérationnel, tel que MOV, ADD, JMP, etc., qui sont utilisés pour effectuer les opérations.

Code opération: Le code opération est une seule instruction qui peut être exécutée par le CPU. Ici, l'op-code est une instruction MOV.

Opérandes: Les opérandes sont une seule donnée qui peut être exploitée par le code opération. Exemple, l'opération de multiplication est effectuée par les opérandes qui sont multipliés par l'opérande.

Syntaxe: MUL a,b

Les éléments d'une programmation en langage d'assemblage:

  • Assembler Directives
  • Jeu d'instructions
  • Modes d'adressage

Assembler Directives:

Les directives d'assemblage donnent les directions à la CPU. Le 8051microcontrôleurse compose de différents types de directives d'assemblage pour donner la direction à l'unité de contrôle. Les directives les plus utiles sont la programmation 8051, telles que:

  • ORG
  • DB
  • EQU
  • FINIR

ORG(origine): Cette directive indique le début du programme. Ceci est utilisé pour définir l'adresse du registre lors de l'assemblage. Par exemple ORG 0000h indique au compilateur tout le code suivant commençant à l'adresse 0000h.

Syntaxe: ORG 0000h

DB(définir l'octet): L'octet de définition est utilisé pour autoriser une chaîne d'octets. Par exemple, imprimez le 'EDGEFX' dans lequel chaque caractère est pris par l'adresse et finalement imprime la 'chaîne' par le DB directement avec des guillemets doubles.

Syntaxe:

ORG 0000h

MOV a, # 00h
————-
————-
DB «EDGEFX»

EQU (équivalent): La directive équivalente est utilisée pour assimiler l'adresse de la variable.

Syntaxe:

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

FINIR: La directive END est utilisée pour indiquer la fin du programme.

Syntaxe:

reg equ,09h

—————–
—————–
MOVreg,# 2h
FINIR

Modes d'adressage:

La manière d'accéder aux données est appelée mode d'adressage. La CPU peut accéder aux données de différentes manières en utilisant des modes d'adressage. Le 8051microcontrôleurse compose de cinq modes d'adressage tels que:

  • Mode d'adressage immédiat
  • Enregistrer le mode d'adressage
  • Mode d'adressage direct
  • Mode d'adressage indirect
  • Mode d'adressage d'index de base

Mode d'adressage immédiat:

Dans ce mode d’adressage, la source doit être une valeur qui peut être suivie du «#» et la destination doit être Registres SFR, registres à usage général et adresse. Il est utilisé pour stocker immédiatement la valeur dans les registres de mémoire.

Syntaxe:

MOV A, # 20h // A estuneregistre d'accumulateur, 20 est stocké dans le A //
MOV R0,# 15 // R0 est un registre à usage général 15 est stocké dans le registre R0 //
MOV P0, # 07h // P0 est un registre SFR 07 est stocké dans le P0 //
MOV 20h,# 05h // 20h est l'adresse du registre 05 stocké dans le 20h //

Ancien:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, la valeur finale est stockée dans R0 //

Enregistrer le mode d'adressage:

Dans ce mode d'adressage, la source et la destination doivent être un registre, mais pas des registres à usage général. Ainsi, les données ne sont pas déplacées dans le registres bancaires à usage général .

Syntaxe:

MOV A, B // A est un registre SFR, B est un registre à usage général //
MOV R0, R1 // Instruction non valide, GPR vers GPR impossible //

ANCIEN:

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

Mode d'adressage direct

Dans ce mode d'adressage, la source ou la destination (ou à la fois la source et la destination) doit être une adresse, mais pas une valeur.

Syntaxe:

MOV A,20h // 20h est une adresse A est un registre //
MOV 00h, 07h // les deux sont adressés des registres GPS //

Ancien:

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

Mode d'adressage indirect:

Dans ce mode d'adressage, la source ou la destination (ou la destination ou la source) doit êtreàadresse indirecte, mais pas une valeur. Ce mode d'adressage prend en charge le concept de pointeur. Le pointeur est une variable utilisée pour stocker l'adresse de l'autre variable. Ce concept de pointeur n'est utilisé que pour les registres R0 et R1.

Syntaxe:

MOVR0, la valeur # 01h // 01 est stockée dans le registre R0, l'adresse R0 est 08h //
MOV R1, # 08h // R1 est la variable de pointeur quimagasinsadresse (08h) de R0 //
MOV 20h,@ La valeur R1 // 01 est stockée dans l'adresse 20h du registre GP //

Mode d

Mode d'adressage indirect

Mode d'adressage d'index de base:

Ce mode d'adressage permet de lire les données du mémoire externe ou mémoire ROM . Tous les modes d'adressage ne peuvent pas lire les données de la mémoire de code. Le code doit lire le registre DPTR. Le DPTR est utilisé pour pointer les données dans le code ou la mémoire externe.

Syntaxe:

MOVC A, @ A + DPTR // C indique la mémoire de code //
MOCX A, @ A + DPTR // X indique la mémoire externe //
EX: MOV A, # 00H // 00H est stocké dans le registre A //
MOV DPTR, # 0500H // DPTR points 0500h adresse dans la mémoire //
MOVC A, @ A + DPTR // envoyer la valeuràle registre A //
MOV P0, A // date de A envoyer au registraire PO //

Jeu d'instructions:

Le jeu d'instructions est la structure du contrôleur ou du processeur qui fournit des commandes au contrôleur pour guider le contrôleur pour le traitement des données. Le jeu d'instructions se compose d'instructions, de types de données natifs, de modes d'adressage, de registres d'interruption, d'une gestion exceptionnelle et d'une architecture mémoire. Le 8051microcontrôleur peut suivre les instructions CISC avec l'architecture Harvard. Dans le cas de la programmation 8051, différents types d'instructions CISC comprennent:

  • Jeu d'instructions de transfert de données
  • Jeu d'instructions séquentielles
  • Jeu d'instructions arithmétiques
  • Ramification Instructionensemble
  • Ensemble d'instructions de boucle
  • Jeu d'instructions conditionnelles
  • Ensemble d'instructions inconditionnelles
  • Jeu d'instructions logiques
  • Jeu d'instructions booléennes

Jeu d'instructions arithmétiques:

Les instructions arithmétiques exécutent les opérations de base telles que:

  • Une addition
  • Multiplication
  • Soustraction
  • Division

Une addition:

ORG 0000h
MOV R0, # 03H // déplace la valeur 3 vers le registre R0 //
MOV A, # 05H // déplace la valeur 5 vers l'accumulateur A //
Ajouter A, 00H //ajouter unvaleur avec la valeur R0 et stocke le résultatdans un//
FINIR

Multiplication:

ORG 0000h
MOV R0, # 03H // déplace la valeur 3 vers le registre R0 //
MOV A, # 05H // déplace la valeur 5 vers l'accumulateur A //
MUL A, 03H //Multipliéle résultat est stocké dans l'accumulateur A //
FINIR

Soustraction:

ORG 0000h
MOV R0, # 03H // déplace la valeur 3 vers le registre R0 //
MOV A, # 05H // déplace la valeur 5 vers l'accumulateur A //
SUBB A, 03H // La valeur du résultat est stockée dans l'accumulateur A //
FINIR

Division:

ORG 0000h
MOV R0, # 03H // déplace la valeur 3 vers le registre R0 //
MOV A, # 15H // déplace la valeur 5 vers l'accumulateur A //
DIV A, 03H // la valeur finale est stockée dans l'accumulateur A //
FINIR

Instructions conditionnelles

La CPU exécute les instructions en fonction de la condition en vérifiant l'état d'un seul bit ou l'état d'octet. Le 8051microcontrôleurse compose de diverses instructions conditionnelles telles que:

  • JB -> Aller ci-dessous
  • JNB -> Sauter sinon en dessous
  • JC -> Jump if Carry
  • JNC -> Sauter sine pasTransporter
  • JZ -> Sauter si zéro
  • JNZ -> Sauter sine pasZéro
Instructions conditionnelles

Instructions conditionnelles

1. Syntaxe:

JB P1.0, étiquette
- - - - - - - -
- - - - - - - -
Étiqueter: - - - - - - - -
- - - - - - - -
FINIR

2. Syntaxe:

JNB P1.0, étiquette
- - - - - - - -
- - - - - - - -
Étiqueter: - - - - - - - -
- - - - - - - -
FINIR

3. Syntaxe:

JC, étiquette
- - - - - - - -
- - - - - - - -
Étiqueter: - - - - - - - -
- - - - - - - -
FINIR

4. Syntaxe:

JNC, étiquette
- - - - - - - -
- - - - - - - -
Étiqueter: - - - - - - - -
- - - - - - - -
FINIR
5. Syntaxe:

JZ, étiquette
- - - - - - - -
- - - - - - - -
Étiqueter: - - - - - - - -
- - - - - - - -
FINIR

6. Syntaxe:

JNZ, étiquette
- - - - - - - -
- - - - - - - -
Étiqueter: - - - - - - - -
- - - - - - - -
FINIR

Instructions d'appel et de saut:

Les instructions d'appel et de saut sont utilisées pour éviter la réplication de code du programme. Lorsqu'un code spécifique est utilisé plus d'une fois à différents endroits du programme, si nous mentionnonsnom spécifiqueàcode alorsnous pourrions utiliser ce nom n'importe où dans le programme sans entrer un code à chaque fois. Cela réduit la complexité du programme. La programmation 8051 se compose d'instructions d'appel et de saut telles que LCALL, SJMP.

  • LCALL
  • UN APPEL
  • SJMP
  • LJMP

1. Syntaxe:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, étiquette
- - - - - - - -
- - - - - - - -
STOP SJMP
Étiqueter: - - - - - - - -
- - - - - - - -
- - - - - - - -
droit
ARRÊTER:NOP

2. Syntaxe:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, étiquette
- - - - - - - -
- - - - - - - -
STOP SJMP
Étiqueter: - - - - - - - -
- - - - - - - -
- - - - - - - -
droit
ARRÊTER:NOP

Instructions d

Instructions d'appel et de saut

Instructions de boucle:

Les instructions de boucle sont utilisées pour répéter le bloc à chaque fois lors de l'exécution des opérations d'incrémentation et de décrémentation. Le 8051microcontrôleurse composent de deux types d'instructions de boucle:

  • CJNE -> comparer et sauter sinon égal
  • DJNZ -> décrémenter et sauter si ce n'est pas zéro

1. Syntaxe:

deCJNE
MOV A, # 00H
MOV B, # 10H
Étiqueter: INC A
- - - - - -
- - - - - -
CJNE A, étiquette

2. Syntaxe:

deDJNE

MOV R0, # 10H
Étiqueter: - - - - - -
- - - - - -
DJNE R0, label
- - - - - -
- - - - - -
FINIR

Jeu d'instructions logiques:

Le jeu d'instructions du microcontrôleur 8051 fournit les instructions logiques AND, OR, XOR, TEST, NOT et boolean pour définir et efface les bits en fonction des besoins du programme.

Jeu d

Jeu d'instructions logiques

1. Syntaxe:

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

2. Syntaxe:

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

3. Syntaxe:

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

Opérateurs changeants

Les opérateurs de quart sont utilisés pour envoyer et recevoir les données de manière efficace. Le 8051microcontrôleurse composent de quatre opérateurs de quart:

  • RR -> Rotation à droite
  • RRC -> Rotation à droite par report
  • RL -> Rotation à gauche
  • RLC -> Rotation à gauche par report

Rotation à droite (RR):

Dans cette opération de décalage, le MSB devient LSB et tous les bits se décalent vers le côté droit bit par bit, en série.

Syntaxe:

MOV A, # 25h
RR A

Rotation à gauche (RL):

Dans cette opération de décalage, le MSB devient LSB et tous les bits se décalent vers le côté gauche bit par bit, en série.

Syntaxe:

MOV A, # 25h
RL A

Rotation RRC à droite à travers le transport:

Dans cette opération de décalage, le LSB se déplace pour porter et le report devient MSB, et tous les bits sont décalés vers la position du côté droit bit par bit.

Syntaxe:

MOV A, # 27h
RRC A

RLC Rotation à gauche via Carry:

Dans cette opération de décalage, le MSB se déplace pour porter et le report devient LSB et tous les bits se décalent vers le côté gauche dans une position bit par bit.

Syntaxe:

MOV A, # 27h
RLC A

Programmes C embarqués de base:

Lemicrocontrôleurla programmation diffère pour chaque type de système d'exploitation. Il y a de nombreux systèmes d'exploitation tels que Linux, Windows, RTOS et ainsi de suite. Cependant, RTOS présente plusieurs avantages pour le développement de systèmes embarqués. Certains des exemples de programmation au niveau de l'assemblage sont donnés ci-dessous.

LED clignotant avec 8051microcontrôleur:

  • Affichage du nombre sur un écran à 7 segments à l'aide du microcontrôleur 8051
  • Calculs de minuterie / compteur et programme à l'aide du 8051microcontrôleur
  • Calculs et programme de communication série avec 8051microcontrôleur

Programmes LED avec 8051 Microcontrller

1. WAP pour activer les voyants PORT1

ORG 0000H
TOGLE: MOV P1, # 01 //bouge toi00000001 au registre p1 //
CALL DELAY // exécuter le retard //
MOV A, P1 // déplacervaleur p1vers l'accumulateur //
CPL A // valeur complémentaire A //
MOV P1, A // déplacer 11111110 vers le registre port1 //
CALL DELAY // exécuter le retard //
SJMP TOGLE
DELAY: MOV R5, # 10H // charge le registre R5 avec 10 //
DEUX: MOV R6, # 200 // charge le registre R6 avec 200 //
ONE: MOV R7, # 200 // charge le registre R7 avec 200 //
DJNZ R7, $ // décrémente R7 jusqu'à zéro //
DJNZ R6, ONE // décrémente R7 jusqu'à zéro //
DJNZ R5, TWO // décrémente R7 jusqu'à zéro //
RET // retourne au programme principal //
FINIR

Calculs de minuterie / compteur et programme avec 8051 Microcontrôleur:

Le retard est l'un des facteurs importants dans le développement du logiciel d'application. Le minuteries et compteurs sont des composants matériels dumicrocontrôleur, qui sont utilisés dans de nombreuses applications pour fournir un délai précis avec des impulsions de comptage. BLes deux tâches sont mises en œuvre par la technique logicielle.

1. WAP pour calculer le délai de 500us.

MOV TMOD, # 10H // sélectionne le mode timer par les registres //
MOV TH1, # 0FEH // stocke le temps de retard dans le bit supérieur //
MOV TL1, # 32H // stocke le temps de retard dans le bit bas //
JNB TF1, $ // décrémente la valeur de la minuterie jusqu'à ce qu'elle soit nulle //
CLR TF1 // efface le drapeau de la minuteriebit//
CLR TR1 // OFF la minuterie //

2. WAP pour activer les voyantsavec le5secondetemporisation

ORG 0000H
RETOUR: MOV PO, # 00H
RETARD D'APPEL
MOV P0, # 0FFH
RETARD D'APPEL
RETOUR SJUMP
DELAY: MOV R5, # 50H // charge le registre R5 avec 50 //
DELAY1: MOV R6, # 200 // charge le registre R6 avec 200 //
DELAY2: MOV R7, # 229 // charge le registre R7 avec 200 //
DJNZ R7, $ // décrémente R7 jusqu'à zéro //
DJNZ R6, DELAY2 // décrémente R6 jusqu'à zéro //
DJNZ R5, DELAY1 // décrémente R5 jusqu'à zéro //
RET // retourne au programme principal //
FINIR

3. WAP pour compter les 250 impulsions en utilisant mode0 count0

Syntaxe:

ORG 0000H
MOV TMOD, # 50H // sélectionner le compteur //
MOV TH0, # 15 // déplacer le bit de comptage plus haut //
MOV TH1, # 9FH //bouge toiles impulsions de comptage, bit inférieur //
SET TR0 // ON la minuterie //
JNB $ // décrémente la valeur de comptage jusqu'à zéro //
CLR TF0 // efface le compteur, drapeaubit//
CLR TR0 // arrête la minuterie //
FINIR

Programmation de communication série à l'aide du 8051 Microcontrôleur:

Communication série est couramment utilisé pour transmettre et recevoir les données. Le 8051microcontrôleurconsistent en une communication série UART / USART et les signaux sont transmis et reçus parTxet les broches Rx. La communication UART transfère les données bit par bit en série. L'UART est un protocole semi-duplex qui transfère et reçoit les données, mais pas en même temps.

1. WAP pour transmettre les caractères à l'Hyper Terminal

MOV SCON, # 50H // définir la communication série //
MOV TMOD, # 20H // sélectionnez le mode minuterie //
MOV TH1, # -3 // définir la vitesse de transmission //
SET TR1 // ON la minuterie //
MOV SBUF, # ’S’ // transmet S à la fenêtre série //
JNB TI, $ // décrémente la valeur de la minuterie jusqu'à ce qu'elle soit nulle //
CLR RI // effacer l'interruption de réception //
CLR TR1 // effacer la minuterie //

2. WAP pour transmettre le Recevoir le caractère par l'Hyper Terminal

MOV SCON, # 50H // définir la communication série //
MOV TMOD, # 20H // sélectionnez le mode minuterie //
MOV TH1, # -6 // définir la vitesse de transmission //
SET TR1 // sur la minuterie //
MOV SBUF, # ’S’ // transmet S à la fenêtre série //
JNB RI, $ // décrémente la valeur de la minuterie jusqu'à ce qu'elle soit nulle //
CLR RI // effacer l'interruption de réception //
MOV P0, SBUF // envoie la valeur du registre SBUF au port0 //
CLR TR1 // effacer la minuterie //

Il s'agit de la programmation 8051 en langage d'assemblage en bref avec des programmes basés sur des exemples. Nous espérons que ces informations adéquates sur le langage d'assemblage seront certainement utiles pour les lecteurs et nous attendons avec impatience leurs précieux commentaires dans la section des commentaires ci-dessous.