Vous êtes sur la page 1sur 4

;**********************************************************************

; *
; GROUPE : 2 A 4 *
; POSTE : (1 à 8) : 6 *
; DATE DE REMISE DU RAPPORT : 21/11/2022
*
; *
;**********************************************************************
; *
; Auteur : *
; Titre : *
; Date : *
; *
;**********************************************************************
; *
; Hardware (quoi est câblé où ?) *
; *
; *
; *
; *
;**********************************************************************

LIST p=16F84 ; Définition de processeur


#include <p16F84.inc> ; Définitions des constantes

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

; '__CONFIG' précise les paramètres encodés dans le processeur au moment


de
; la programmation du processeur. Les définitions sont dans le fichier
include.
; Voici les valeurs et leurs définitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur à réseau RC

;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************

OPTIONVAL EQU B'01000111' ; Valeur registre option


; Résistance pull-up ON
; Interrupt flanc montant RB0
; Préscaler timer à 2

INTERMASK EQU B'00000000' ; Masque d'interruption


; Pas d'interruption

CONFIG_PORTA EQU B'00011111' ; Les 5 ports du PORTA sont configurés


en entrée
CONFIG_PORTB EQU B'00000000' ; Les 8 ports du PORTB sont configurés
en entrée

;*********************************************************************
; DEFINE *
;*********************************************************************

;Exemple :
;#DEFINE LED1 PORTB,1
#DEFINE SENS PORTA,4 ; define "sens" comme RP04 de PortA
#DEFINE LED PORTB ; define "LED" comme le PortB

;*********************************************************************
; MACRO *
;*********************************************************************

BANQUE1 macro
bsf STATUS,RP0 ; sélectionner BANQUE 1
endm

BANQUE0 macro
bcf STATUS,RP0 ; sélectionner BANQUE 0
endm

GAUCHE macro ; rotation vers la gauche


rlf LED,W
rlf LED,F
endm

DROITE macro ; rotaion vers la droite


rrf LED,W
rrf LED,F
endm

;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************

CBLOCK 0x00C ; début de la zone variables


Cpt : 1 ; zone de 1 byte
ENDC ; Fin de la zone

;*********************************************************************
; DECLARATIONS DE LA ZONE EEPROM *
;*********************************************************************

org 0x2100 ; adresse début zone eeprom


; DE d'5' ; adresse h'00' initialisée à 5

;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************

org 0x000 ; Adresse de départ après reset

;*********************************************************************
; INITIALISATIONS *
;*********************************************************************

init

BANQUE1 ; sélectionner BANQUE 1

movlw OPTIONVAL ; charger masque


movwf OPTION_REG ; initialiser registre option

movlw CONFIG_PORTA ; configuration du PORTA


movwf TRISA

movlw CONFIG_PORTB ; configuration du PORTB


movwf TRISB

BANQUE0 ; Sélectionner BANQUE 0

movlw INTERMASK ; masque interruption


movwf INTCON ; charger interrupt control

clrf PORTA ; Sorties portA à 0


clrf PORTB ; sorties portB à 0
BSF PORTB,0 ; initialise la première led allumé

;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************

start

BTFSS SENS ; test pour savoir le sens


goto suite ; renvoie à l'autre test si test raté
DROITE ; fait la rotation droite si test
réussi
suite
BTFSC SENS ; test pour savoir le sens
goto fin ; renvoie à fin si test raté
GAUCHE ; fait la rotation gauche si test
réussi
fin

MOVLW b'00001111' ; move l'adresse du PortA vers W


ANDWF PORTA,W ; sélectionne les bits qu’on utilise
MOVWF Cpt ; initialise move les nombre de boucles à
faire (du PortA)

boucle
Movlw d'61' ; set le timer0 à 195 µs (256-61)
Movwf TMR0 ; set le timer0 à 195 µs (256-61)
Pulling
BTFSS INTCON,T0IF ; polling pour le flag de TMR0 (T0IF)
goto Pulling ; renvois à "pulling"
BCF INTCON,T0IF ; réinitialise le flag
DECFSZ Cpt ; décrémente et teste Cpt
goto boucle ; renvois à boucle si Cpt est différent de 0

goto start ; boucler le programme


;*********************************************************************
; PROCEDURES *
;*********************************************************************

END ; directive fin de programme

Vous aimerez peut-être aussi