Documente Academic
Documente Profesional
Documente Cultură
57
58
EQU
300H
PortC
EQU
300H
Reg_com
EQU
Mot_com EQU
Masque_SW0
Diode_allume
306H
91H
EQU
01H
EQU
Diode_etainte EQU
0FH
00H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
MOV DS,AX
MOV AL,Mot_com
OUT
; configurer
Reg_com,AL
59
OUT PortA,AL
CALL Tempo
; temporisation
MOV AL,Diode_etainte
OUT PortA,AL
CALL Tempo
IN AL,PortC
AND AL,01H
; temporisation
; Lecture du portC
; verifier s'il a appui sur SW0
CMP AL,01H
JNZ Debut
MOV AX,4C00H
INT 21H
Prog endp
Tempo: MOV CX,7FFFH
Temp1: PUSh CX
MOV CX,7FFFH
Temp2: NOP
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET Code
ends
End prog
60
300H
PortB EQU
302H
01H
EQU
0FH
Diode_eteinte EQU
00H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
MOV DS,AX
61
MOV AL,Mot_com
OUT
; configurer
les ports (A :S )
Reg_com,AL
XOR BX,BX
DEBUT: MOV AX,BX
AAA
OR AL,AH
OUT portB,al
CALL Tempo
INC BX
CMP BX,15
; voir si BX = 15
JNZ DEBUT
MOV AX,4C00H
INT 21H
Prog endp
Tempo : MOV CX,7FFFH
Temp1: PUSh CX
MOV CX,7FFFH
Temp2: NOP NOP NOP NOP
LOOP Temp2
POP CX LOOP Temp1
RET
Code ends
End prog
62
Remarque :
Le battement signifie qu'on allume la diode puis on l'teint une seule fois
car dans notre cas il faut toujours lire les switches car l'utilisateur peut
changer l'tat des switches tout moment.
Le programme de l'application est le suivant :
Donnee SEGMENT
PortA
EQU 300H
PortC
EQU 302H
01H
EQU
0FH
63
MOV DS,AX
MOV AL,Mot_com
OUT
; configurer
Reg_com,AL
DEBUT: IN AL,PortC
AND AL,03H
CMP AL,01
JZ Diode_paire
CMP AL,02
JZ Diode_impaire
JMP DEBUT
Diode_paire : MOV AL,05H
OUT PortA,AL
CALL Tempo
; Temporisation
MOV AL,00H
OUT PortA,AL
CALL Tempo
; Temporisation
JMP DEBUT
Diode_impaire : MOV AL,0AH
OUT PortA,AL
CALL Tempo
; Temporisation
MOV AL,00H
OUT PortA,AL
CALL Tempo
; Temporisation
JMP DEBUT
MOV AX,4C00H
INT 21H
Prog endp
Tempo : MOV CX,7FFFH
Temp1: PUSh CX
MOV CX,7FFFH
Temp2: NOP
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET
Code ends
End prog
Exemples 2 :
On donne le schma de la figure suivante :
64
On suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306
Donner l'organigramme ainsi que le programme qui permet de gnrer le
signal suivant :
65
Donnee SEGMENT
PortA EQU
300H
MOV DS,AX
MOV AL,Mot_com
OUT
; configurer
Reg_com,AL
; Si on augmente la temporisation
; on augmente la pente du signal
CMP AL,0FFH
JNZ DEBUT2
JMP DEBUT1
Prog endp
Tempo : MOV CX,7FFFH
Temp1: PUSh CX
MOV CX,7FFFH
Temp2: NOP
66
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET
Code ends
End prog
Exemple 3 :
Pour commander un afficheur LCD 16*2 ( 16 caractres , 2 lignes ) on
propose le schma du montage suivant :
Exemple de programme qui affiche le message bonjour iset n' sur LCD
Avant de commencer le programme il faut dterminer les mots qu'il faut
envoyer au portB pour valider une donne ou valider une commande d'o
le tableau suivant :
On suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H
Le programme est comme suit :
Donnee SEGMENT
Message db bonjour iset n'
PortB EQU
302H
68
PortC EQU
304H
Reg_com
EQU
306H
Mot_com
EQU
80H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
MOV DS,AX
MOV AL,Mot_com
OUT
; configurer
Reg_com,AL
LEA SI,message
MOV CX,14
; on 14 caractre afficher
CALL Init_LCD
; initialisation de l'LCD
DEBUT :
MOV AL,[SI]
; programme principal
OUT PortC,AL
; envoie de la donne
CALL Vali_donne
; validation de la donne
INC SI
LOOP DEBUT
Init_LCD :
MOV AL,01
; effacer LCD
OUT PortC,AL
CALL Vali_commande
MOV AL,0EH
; Validation de l'effacement
; effectuer un Home pour LCD
OUT PortC,AL
CALL Vali_commande
MOV AL,06
; Valide le HOME
; Ecriture vers la droite
OUT PortC,AL
CALL Vali_commande
RET
Vali_commande :
MOV AL,04
OUT PortB,AL
MOV AL,00
OUT PortB,AL
RET
Vali_donne :
MOV AL,05
OUT PortB,AL
MOV AL,01
OUT PortB,AL
RET
MOV AX,4C00H
69
INT 21H
Prog endp
Les diffrentes phases sont les suivantes (en mode avancement par un
pas):
70