Bonjour,
je suis débutant dans le domaine de la programmation du pic, j'ai un soucis avec mon petit programme si vous pouvez m'aider merci d'avance, alors mon pb que ma led n'arrête pas à clignoter et pourtant je l'ai programmée pour qu'elle clignote une seul fois, voila mon programme.
.Code:;********************************************************************* ; ASSIGNATIONS * ;********************************************************************* OPTIONVAL EQU H'08' ; Valeur registre option ;********************************************************************* ; DEFINE * ;********************************************************************* #DEFINE LED PORTA,2 ; Led rouge #DEFINE BOUTON PORTB,2 ; bouton-poussoir ;********************************************************************* ; MACRO * ;********************************************************************* LEDON macro bsf LED endm LEDOFF macro bcf LED endm ;********************************************************************* ; DECLARATIONS DE VARIABLES * ;********************************************************************* CBLOCK 0x00C ; 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 ;********************************************************************** ; DEMARRAGE SUR RESET * ;********************************************************************** org 0x000 ; Adresse de départ après reset goto init ; Adresse 0: initialiser ;********************************************************************* ; INITIALISATIONS * ;********************************************************************* init clrf PORTA ; Sorties portA à 0 clrf PORTB ; sorties portB à 0 clrf EEADR ; permet de diminuer la consommation bsf STATUS,RP0 ; sélectionner banque 1 movlw OPTIONVAL ; charger masque movwf OPTION_REG ; initialiser registre option ; Effacer RAM ; ------------ movlw 0x0c ; initialisation pointeur movwf FSR ; pointeur d'adressage indirec init1 clrf INDF ; effacer ram incf FSR,f ; pointer sur suivant btfss FSR,6 ; tester si fin zone atteinte (>=40) goto init1 ; non, boucler btfss FSR,4 ; tester si fin zone atteinte (>=50) goto init1 ; non, boucler ; initialisations spécifiques ; --------------------------- bcf LED ; LED en sortie (banque1) bcf STATUS,RP0 ; repasser banque 0 goto start ; sauter au programme principal ;********************************************************************* ; SOUS-ROUTINE DE TEMPORISATION * ;********************************************************************* ;--------------------------------------------------------------------- ; Cette sous-routine introduit un retard de 500.000 µs. ; Elle ne reçoit aucun paramètre et n'en retourne aucun ;--------------------------------------------------------------------- tempo 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 ;********************************************************************* ; PROGRAMME PRINCIPAL * ;********************************************************************* start bsf LED ; allumer la LED : on aurait pu écrire call tempo ; appeler la tempo de 0.5s bcf LED ; éteindre LED (LEDOFF) call tempo ; appeler la tempor de 0.5s goto start ; boucler END ; directive fin de programme
-----