EST de Salé TP : Informatique industrielle
TP 2
Manipulation 2 :
Compléter le programme suivant pour copier les valeurs du PORTC dans PORTD, puis vérifier le
programme par Proteus
List p=16f887
#include <[Link]>
__Config 2007h, 0x23E4 ; Configuration bits (à ajuster si nécessaire)
__Config 2008h, 0x3EFF
; Début du programme
Org 0x00 ; Point de départ
START:
; Configurer les banques pour accéder à TRISB et TRISC
; Passer à la banque 1
; Configurer toutes les broches de PORTC comme entrées
; Écrire dans TRISC
; Configurer toutes les broches de PORTD comme sorties
; Écrire dans TRISD
; Revenir à la banque 0
; Boucle principale
MAIN_LOOP:
; Lire la valeur de PORTB dans WREG
; Copier la valeur de WREG dans PORTC
GOTO MAIN_LOOP ; Répéter indéfiniment
End ; Fin du programme (pour l'assembleur)
1
EST de Salé TP : Informatique industrielle
Manipulation 3 :
Modifier le programme pour pouvoir commander le PORTD avec un bouton poussoir comme suit :
List p=16f887
#include <[Link]>
__Config 2007h, 0x23E4 ; Configuration bits (à ajuster si nécessaire)
__Config 2008h, 0x3EFF
; Début du programme
Org 0x00 ; Point de départ
START:
; Configurer les banques pour accéder à TRISC et TRISD
; Passer à la banque 1
; Configurer toutes les broches de PORTC comme entrées
; Écrire dans TRISC
; Configurer toutes les broches de PORTD comme sorties
; Écrire dans TRISD
; Revenir à la banque 0
; Boucle principale
MAIN_LOOP:
; Vérifie si RC0 est à 0 (skip si RC0 = 1)
GOTO LED_OFF ; Si RC0 = 0, aller à LED_OFF
; Si RB0 = 1
; Charger la valeur pour allumer toutes les LEDs
; Écrire cette valeur dans PORTD
GOTO MAIN_LOOP ; Retour à la boucle principale
LED_OFF:
; Éteindre toutes les LEDs (mettre PORTC à 0)
GOTO MAIN_LOOP ; Retour à la boucle principale
End ; Fin du programme (pour l'assembleur)
2
EST de Salé TP : Informatique industrielle
Manipulation 3 :
Gestion de deux carrefours : Rouge 4s, Orange 1s et Vert 3s
Programme :
List p=16f887
include <[Link]>
__Config _CONFIG1, 0x23E4 ; Configuration bits (oscillateur, WDT, etc.)
__Config _CONFIG2, 0x3EFF
ORG 0x00 ; Point d'entrée du programme
; Déclaration des variables
CBLOCK 0x20 ; Bloc de mémoire pour les variables utilisateur
DELAY1 ; Registre pour la boucle externe des délais
DELAY2 ; Registre pour la boucle interne des délais
DELAY3
ENDC
3
EST de Salé TP : Informatique industrielle
; Configuration initiale
Start:
; Accéder à la banque 1
; Configurer PORTD comme sortie (TRISD = 0x00)
; Retour à la banque 0
; Initialiser PORTD à 0
Main_Loop:
; Feu tricolore 1 : Rouge, Feu tricolore 2 : Vert
; Rouge (RD0) pour feu 1, Vert (RD5) pour feu 2
CALL Delay_3s ; Délai 3 secondes (Rouge pour feu 1)
; Feu tricolore 1 : Orange, Feu tricolore 2 : Rouge
; Rouge (RD0) pour feu 1, Orange (RD4) pour feu 2
CALL Delay_1s ; Délai 1 seconde (Orange pour feu 1)
; Feu tricolore 1 : Vert, Feu tricolore 2 : Rouge
; Vert (RD2) pour feu 1, Rouge (RD3) pour feu 2
CALL Delay_3s ; Délai 4 secondes (Vert pour feu 1)
; Feu tricolore 1 : Rouge, Feu tricolore 2 : Vert
; Orange (RD1) pour feu 1, Rouge (RD3) pour feu 2
CALL Delay_1s ; Délai 3 secondes (Rouge pour feu 2)
GOTO Main_Loop ; Recommencer le cycle
; Routine de délai (3 secondes)
Delay_3s:
MOVLW D'212' ;
CALL Delay
RETURN
; Routine de délai (1 seconde)
Delay_1s:
MOVLW D'75' ;
CALL Delay
RETURN
Delay:
MOVWF DELAY1 ; Charger DELAY1 avec 75 ou 212 selon le délai
Outer_Loop:
MOVLW 0x32 ; Charger W avec 50 (0x32 en hexadécimal)
4
EST de Salé TP : Informatique industrielle
MOVWF DELAY2 ; Charger DELAY2 avec 50 pour la boucle intermédiaire
Middle_Loop:
MOVLW 0x16 ; Charger W avec 22 (0x16 en hexadécimal)
MOVWF DELAY3 ; Charger DELAY3 avec 22 pour la boucle interne
Inner_Loop:
DECFSZ DELAY3, 1 ; Décrémenter DELAY3
GOTO Inner_Loop ; Répéter la boucle interne tant que DELAY3 n'est pas à zéro
DECFSZ DELAY2, 1 ; Décrémenter DELAY2
GOTO Middle_Loop ; Répéter la boucle intermédiaire tant que DELAY2 n'est pas à zéro
DECFSZ DELAY1, 1 ; Décrémenter DELAY1
GOTO Outer_Loop ; Répéter la boucle externe tant que DELAY1 n'est pas à zéro
RETURN ;
END ; Fin du programme
5
EST de Salé TP : Informatique industrielle
Annexe
Voir Datasheet page 226