Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Besoin d'aide sur programme PIC



  1. #1
    RABOUDAHAB

    Besoin d'aide sur programme PIC


    ------

    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
    .

    -----
    Dernière modification par gienas ; 06/10/2009 à 20h16. Motif: Ajouté les balises code

  2. #2
    Gérard

    Re : Aidez-moi svp

    Start:
    LED = 1
    call Tempo
    LED = 0
    ici:
    goto ici

    si tu sautes à START, le cycle 1/0 de la LED se répète indéfiniment (elle clignote)

  3. #3
    RABOUDAHAB

    Re : Aidez-moi svp

    merci Gérard pour la réponse mais en fait j'ai oublié de mettre la version que j'ai le pb avec mais normalement dans mon programme qui marche pas j'ai bien :

    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

    END ; directive fin de programme
    et pourtant ma led n'arrete pas de clignotée

  4. #4
    Gérard

    Re : Aidez-moi svp

    C'est peut être le chien de garde qui fait un reset, mets la ligne goto ici et désactive le chien.

  5. A voir en vidéo sur Futura
  6. #5
    RABOUDAHAB

    Re : Besoin d'aide sur programme PIC

    le WTD je l'ai mis hors service (wtd_off) je vois pas pk n'arrete de clignoté

    MErci

  7. #6
    gedonet

    Re : Besoin d'aide sur programme PIC

    Bonjour
    Dans ta seconde version du programme, apres l'instruction "call tempo ", le programme ne s'arrete pas, il continue de lire toute la memoire flash (programme) puis arriver à la fin il recommence à l'adresse 0 et c'est reparti pour un tour. "END" n'a pas le rôle de stopper le µC, mais d'indiquer à Mplab que c'est la fin du programme.
    Pour arreter le deroulement du programme, il faut une boucle sans fin comme te l'a proposé Gérard, dans cette ligne:
    ici: goto ici
    Gilles

  8. #7
    w4w4r7b

    Re : Besoin d'aide sur programme PIC

    bonjour

    si le END est directement après l'extinction de la led (avec éventuellement une tempo mais elle est inutile si le programme ne doit rien faire après) le PIC se met a essayer d'exécuter le programme contenue dans une zone de sa mémoire non programmée et il n'y a rien de bizarre que le programme fasse n'importe quoi

    la solution est bien celle que Gérard a donné est il faut mètre

    Code:
    ;*********************************************************************
    ;                      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)
    boucle_pricipal
    	; ici viens ce mètre les instructions que le pic devra exécuter après le clignotement de la led
    	goto 	boucle_pricipal		; boucler
    
    
    	END 						; directive fin de programme
    autre petite remarque sur votre code (en espèrent que vous me le permettez) :
    - pourquoi avoir définit des macro pour allumer est éteindre la led sans les utiliser ?
    - je suppose que vous avez lus le cour de Bigonoff vu la grande ressemblance entre votre source et les fichier maquette présent dans c'est cour or il indique clairement dans un de c'est cour l'erreur qui c'est clicée chez vous

  9. #8
    RABOUDAHAB

    Re : Besoin d'aide sur programme PIC

    merci (w4w4r7b,gedonet,Gérard)d'avoi r répondu en fait je savais pas que END est une directive utilisée uniquement par mplab pendant la compilation du programe, je croiyais que c etais pour arrete le pic .

Discussions similaires

  1. aidez moi svp
    Par davidvilla62 dans le forum TPE / TIPE et autres travaux
    Réponses: 4
    Dernier message: 11/03/2009, 12h08
  2. aidez moi svp
    Par sanaya0169 dans le forum Santé et médecine générale
    Réponses: 3
    Dernier message: 15/02/2009, 07h51
  3. [Divers] Aidez-moi svp
    Par thedoors dans le forum Biologie
    Réponses: 1
    Dernier message: 10/02/2009, 14h45
  4. svp aidez moi
    Par abdel-rahman dans le forum Physique
    Réponses: 10
    Dernier message: 07/10/2008, 19h15
  5. Aidez-moi svp!
    Par Manudu42 dans le forum Électronique
    Réponses: 27
    Dernier message: 17/03/2006, 14h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.