0% ont trouvé ce document utile (0 vote)
48 vues6 pages

TP 2

Transféré par

ismailbenjelloun0
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
48 vues6 pages

TP 2

Transféré par

ismailbenjelloun0
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi