Vous êtes sur la page 1sur 4

LIST p=16F84 ; Définition de processeur

#include <p16F84.inc> ; Définitions de variables

__CONFIG _CP_ON & _WDT_OFF & _PWRTE_ON & _HS_OSC

;;;;;;;;;DEFINE;;;;;;;;;;;;;;;;

#DEFINE led_jaune portb,0

#DEFINE led_orange portb,1

#DEFINE led_verte portb,2

;;;;;;;;;MACROS;;;;;;;;;;;;;;;;

bank0 macro

bcf status,rp0

endm

bank1 macro

bsf status,rp0

endm

;;;;;;;ZONE DES DECLARATIONS DES VARIABLES;;;;;;;;;;;;;;

CBLOCK 0x0C ; début de la zone variables

cmpt1 : 1 ; compteur de boucles 1

cmpt2 : 1 ; compteur de boucles 2

cmpt3 : 1 ; compteur de boucles 3

ENDC ; Fin de la zone

;;;;;;;;;PROGRAMME PRINCIPAL;;;;;;;;;;;;;;;;

ORG 0x0005 ; adresse de debut de programme

;config

bank1

bsf trisa,0
bcf trisb,0

bcf trisb,1

bcf trisb,2

;initialisation

bank0

bcf led_jaune

bcf led_orange

bcf led_verte

test1

bsf led_orange ; allumer la led

call tempo1 ; appel sous-routine (dissiper t=0.5s)

call tempo1

bcf led_orange ; eteindre la led

call tempo1 ; appel sous-routine (dissiper t=0.5s)

call tempo1

goto test1

test2

bsf led_rouge ; allumer la led

call tempo1 ; appel sous-routine (dissiper t=1s)

call tempo1

bcf led_rouge ; eteindre la led

call tempo1 ; appel sous-routine (dissiper t=1s)

call tempo1

goto test1
test3

bsf led_verte ; allumer la led

call tempo1 ; appel sous-routine (dissiper t=0.5s)

call tempo1

bcf led_verte ; eteindre la led

call tempo1 ; appel sous-routine (dissiper t=0.5s)

call tempo1

bsf led_verte ; allumer la led

call tempo1 ; appel sous-routine (dissiper t=0.5s)

call tempo1

bcf led_verte ; eteindre la led

call tempo1 ; appel sous-routine (dissiper t=0.5s)

call tempo1

goto test2

;;;;;;;;;;;;;SOUS-ROUTINE D'ATTENTE 0,5s;;;;;;;;;;;;;;;;;

tempo1

movlw 2 ; pour 2 boucles

movwf cmpt3 ; initialiser compteur3

boucle3

clrf cmpt2 ; effacer compteur2

boucle2

clrf cmpt1 ; effacer compteur1

boucle1

nop ; perdre 1 cycle

decfsz cmpt1,f ; décrémenter compteur1


goto boucle1 ; si pas 0, boucler

decfsz cmpt2,f ; si 0, décrémenter compteur 2

goto boucle2 ; si cmpt2 pas 0, recommencer boucle1

decfsz cmpt3,f ; si 0, décrémenter compteur 3

goto boucle3 ; si cmpt3 pas 0, recommencer boucle2

return ; retour de la sous-routine

;;;;;;;;;;;;;;;;;;;;;FIN SOUS-ROUTINE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;fin du programme;;;;;;;;;;;;;;;;;;;;;;;;;

end

Vous aimerez peut-être aussi