Vous êtes sur la page 1sur 4

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

; *
; GROUPE : 2A4 *
; POSTE : (1 à 8) : 6 *
; DATE DE REMISE DU RAPPORT : 14/11/2022 *
; *
;**********************************************************************
; *
; Auteur : Copine Anthoine *
; Titre : *
; Date : 14/11/2022 *
; *
;**********************************************************************
; *
; 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'01000010' ; 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'00000000' ; Les 5 ports du PORTA sont configurés


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

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

;Exemple :
;#DEFINE LED1 PORTB,1

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

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

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

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

CBLOCK 0x00C ; début de la zone variables


; cpt : 1 ; zone de 1 byte
cpt : 8
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

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

start
movlw d'1' ; On met 1 dans W
xorwf PORTA,f ; On inverse Les bits de PORTA
call tempo1

goto start ; il faut boucler sinon le programme va n’importe


tempo1
movlw d'250' ; On met 250 dans W
movwf cpt ; On set Cpt à 250

Timer
movlw d'6' ; On met 6 dans W
movwf TMR0 ; On set TMR0 à 250
test
btfss INTCON,T0IF ; Test si T0IF (flag TMR0 = 1) est = a
1 (si 1 ==> skip)
goto test ; On fait du polling pour voir si le
flag T0IF est actif

BCF INTCON,T0IF ; On clear le flag de TMR0


decfsz cpt ; En décrémente et test Cpt
goto Timer ; si cpt > 0, on boucle le timer
return

tempo2
movlw d'250' ; On met 250 dans W
movwf cpt2 ; On set cpt2 à 250

boucle2
movlw d'250' ; On met 250 dans W
movwf cpt1 ; On set cpt1 à 250

boucle1
nop ;1
nop ;2
nop ;3
nop ;4 pourquoi des nops?
nop ;5
decfsz cpt1
goto boucle1

decfsz cpt2
goto boucle2
return

goto start ; Boucler à mettre plus haut

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

END ; directive fin de programme

Vous aimerez peut-être aussi