Exercices corrigés microcontrolleur - informatique industrie

Informatique Industrielle : Exercices corrigés microcontrolleur

Télécharger PDF

Feu tournant à partir de la valeur stockée en @40h

ORG 100H

MOV A,#20h

boucle: MOV P1,A

RL A

SJMP boucle

END

Lire le port P0 et l'afficher sur P1

ORG 100H

boucle: MOV A,P0

MOV P1,A

SJMP boucle

END

Lire le port P0 et afficher uniquement les bits du poids faible sur P1

ORG 100H

boucle: MOV A,P0

ANL A,#00001111b ; Masquage des bits du poids fort

MOV P1,A

SJMP boucle

END

Charger le contenu du port P0 en @40h, l'additionner à 22h et afficher sur P1

ORG 100H

debut: MOV R0,#40h

MOV A,P0

MOV @R0,A

ADD A,#22h

MOV P1,A

SJMP debut

END

Écrire l'alphabet (A à Z) en mémoire externe à partir de @40h

ORG 100H

debut: MOV R0,#40h

MOV A,#'a'

boucle: MOV @R0,A

INC A

INC R0

CJNE A,#'z'+1,boucle

SJMP debut

END

Validation d'un code entré via P0 avec deux LEDs

ORG 100H

debut: MOV A,P0

CJNE A,#55h,invalide

MOV P1,#10000000b ; LED0 allumée (valide)

SJMP debut

invalide: MOV P1,#00000001b ; LED7 allumée (invalide)

SJMP debut

END

Émission d'un caractère via RS232

ORG 100H

LCALL INIT

MOV A,#'X'

MOV SBUF,A

Fin: SJMP Fin

INIT: MOV TMOD,#20h ; Mode timer 1

MOV TH1,#0FDh ; Vitesse 9600 bits/s

MOV SCON,#52h ; Mode RS232

SETB TR1

RET

END

Émission de l'alphabet (A à Z) via RS232

ORG 100H

MOV A,#'A'

Boucle: LCALL INIT

MOV SBUF,A

INC A

CJNE A,#'Z'+1,Boucle

Fin: SJMP Fin

INIT: MOV TMOD,#20h ; Mode timer 1

MOV TH1,#0FDh ; Vitesse 9600 bits/s

MOV SCON,#52h ; Mode RS232

SETB TR1

RET

END

Écrire son nom en mémoire externe et l'afficher via RS232

ORG 100H

LCALL INIT

MOV DPTR,#0000h

MOV A,#'A'

MOVX @DPTR,A

INC DPTR

MOV A,#'N'

MOVX @DPTR,A

INC DPTR

MOV A,#'A'

MOVX @DPTR,A

INC DPTR

MOV A,#'S'

MOVX @DPTR,A

INC DPTR

MOV A,#'S'

MOVX @DPTR,A

INC DPTR

MOV A,#13h ; Fin de chaîne

MOVX @DPTR,A

MOV DPTR,#0000h

Boucle: MOVX A,@DPTR

MOV SBUF,A

INC DPTR

CJNE A,#13h,Boucle

Fin: SJMP Fin

INIT: MOV TMOD,#20h ; Mode timer 1

MOV TH1,#0FDh ; Vitesse 9600 bits/s

MOV SCON,#52h ; Mode RS232

SETB TR1

RET

END

Lecture d'un caractère au clavier et émission via RS232

ORG 0H

LJMP 100H

ORG 80H

INIT: MOV TMOD,#20h ; Mode timer 1

MOV TH1,#0FDh ; Vitesse 9600 bits/s

MOV SCON,#52h ; Mode RS232

SETB TR1

RET

RECP: MOV A,SBUF

RET

EMET: MOV SBUF,A

RET

ORG 100H

LCALL INIT

LCALL RECP

Fin: SJMP Fin

END

Enregistrer une chaîne clavier en mémoire externe à partir de @0000H

ORG 0H

LJMP 100H

ORG 80H

INIT: MOV TMOD,#20h ; Mode timer 1

MOV TH1,#0FDh ; Vitesse 9600 bits/s

MOV SCON,#52h ; Mode RS232

SETB TR1

RET

RECP: MOV A,SBUF

RET

EMET: MOV SBUF,A

RET

ORG 100H

LCALL INIT

MOV DPTR,#0000h

Boucle: LCALL RECP

MOVX @DPTR,A

INC DPTR

CJNE A,#'/',Boucle

Fin: SJMP Fin

END

Afficher une chaîne clavier sur la console avec mémoire externe @0000H

ORG 0H

LJMP 100H

ORG 80H

INIT: MOV TMOD,#20h ; Mode timer 1

MOV TH1,#0FDh ; Vitesse 9600 bits/s

MOV SCON,#52h ; Mode RS232

SETB TR1

RET

RECP: MOV A,SBUF

RET

EMET: MOV SBUF,A

RET

ORG 100H

LCALL INIT

MOV DPTR,#0000h

Boucle: LCALL RECP

MOVX @DPTR,A

INC DPTR

CJNE A,#'/',Boucle

MOV DPTR,#0000h

Boucle2: MOVX A,@DPTR

LCALL EMET

INC DPTR

CJNE A,#'/',Boucle2

Fin: SJMP Fin

END

Compteur binaire (00 → FF ou FF → 00) selon le caractère tapé (C/D)

ORG 0H

LJMP 100H

ORG 80H

INIT: MOV TMOD,#20h ; Mode timer 1

MOV TH1,#0FDh ; Vitesse 9600 bits/s

MOV SCON,#52h ; Mode RS232

SETB TR1

RET

ORG 100H

LCALL INIT

Boucle: MOV A,SBUF

MOV R1,A

SUBB A,#0FFh

JZ Boucle

MOV A,R1

SUBB A,#'C'

JZ COMPT

MOV A,R1

SUBB A,#'c'

JZ COMPT

MOV A,R1

SUBB A,#'D'

JZ DCMPT

MOV A,R1

SUBB A,#'d'

JZ DCMPT

COMPT: MOV P1,#00h ; Initialisation à 00h

MOV P3,#00h ; Initialisation à 00h

Boucle2: INC P1 ; Incrémentation

INC P3

SJMP Boucle2

DCMPT: MOV P1,#0FFh ; Initialisation à FFh

MOV P3,#0FFh ; Initialisation à FFh

Boucle3: DEC P1 ; Décrémentation

DEC P3

SJMP Boucle3

Fin: SJMP Fin

END

Régulation du niveau d'eau dans un bassin

ORG 100H

ET1: MOV A,P0

ANL A,#00000001b ; Tester bit 0 (P1)

CJNE A,#00000001b,ET1

MOV P1,#00000001b ; Allumer LED0

MOV P3,#50 ; Initialisation niveau

ET2: MOV A,P3 ; Incrémentation

ADD A,#05

MOV P3,A

CJNE A,#70,ET2

MOV P1,#00000000b ; Éteindre LED0

MOV P1,#00010000b ; Allumer LED4 (remplissage terminé)

ET3: MOV A,P0

ANL A,#00000010b ; Tester bit 1 (P2)

CJNE A,#00000010b,ET3

ET4: MOV P1,#10000000b ; Allumer LED7 (détection vide)

DEC P3 ; Décrémentation

CJNE A,#50,ET4

MOV P1,#00000000b ; Éteindre toutes les LEDs

SJMP ET1

END

Adressage indirect avec registre R0

ORG 100H

DEBUT: MOV R0,#82h

MOV A,#00h

MOV @R0,A

MOV R0,#83h

MOV A,#20h

MOV @R0,A

MOV DPTR,#2000h ; Adresse mémoire externe

MOV A,#'A'

MOVX @DPTR,A

SJMP DEBUT

END

Écrire l'alphabet (A à Z) en mémoire externe à partir de @3000H

ORG 100H

MOV DPTR,#3000H

MOV A,#'A'

Boucle: MOVX @DPTR,A

INC DPTR

INC A

CJNE A,#'Z'+1,Boucle

Fin: SJMP Fin

END

Charger des valeurs en mémoire externe selon X (P0) et afficher sur P1 avec temporisation

ORG 100H

debut: MOV A,P0

MOV DPTR,#4000H ; Adresse de départ

MOV R0,#07h ; Compteur de boucle (7 valeurs)

boucle: MOVX @DPTR,A

MOV P1,A

LCALL Tempo

INC DPTR

ADD A,#10h ; Incrémenter X de 10h

DEC R0

CJNE R0,#00h,boucle

SJMP debut

Tempo: MOV R4,#08h ; Valeur temporisation

ET1: MOV R5,#0FFh

ET2: MOV R6,#0FFh

ET3: MOV R7,#0FFh

ET4: DJNZ R7,ET4

DJNZ R6,ET3

DJNZ R5,ET2

DJNZ R4,ET1

RET

END

FAQ

1. Que signifie "ORG 100H" dans un programme assembleur ?

La directive "ORG 100H" indique au compilateur d'assembleur de positionner le début du programme à l'adresse mémoire 100H.

2. Pourquoi utiliser "MOV P1,A" deux fois dans certains exemples ?

L'utilisation répétée de "MOV P1,A" peut servir à stabiliser l'affichage en évitant un retard dû à la propagation des signaux.

3. À quoi sert la sous-routine "Tempo" dans les programmes ?

La sous-routine "Tempo" crée un délai en utilisant des registres et des instructions de décrémentation (DJNZ) pour synchroniser l'affichage ou les actions.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne