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

clignoter une led avec pic 16F873



  1. #1
    ibrakanet

    clignoter une led avec pic 16F873


    ------

    salut
    je veux faire clignoter une led toute les 1Seconde pour test mon pic16F873.
    je ne maitrise pas trop le pic
    j'ai compulé mon code mais il ne marche pas. j'aurai bien aimé vos conseils et vos suggestions.
    voici mon code.
    merci d'avance.
    ;***************************** ****************************** ***********
    ; DECLARATIONS DE VARIABLES *
    ;***************************** ****************************** ***********

    CBLOCK 0x00C
    compteur_allume_led :1 ; compteur allume led
    compteur_éteindre_led :1 ; cmpteur eteindre led
    ENDC

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


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

    RESET_VECTOR CODE 0x000 ; processor reset vector
    goto start ; go to beginning of program

    ;***************************** ****************************** ***************************
    ; Programme Principal
    ;***************************** ****************************** ***************************

    MAIN CODE

    ;initialisation des ports
    ;************************

    bcf STATUS, RP0 ; selectionner la bankO
    bcf STATUS, RP1
    clrf PORTA ; efface le PORTA
    bsf STATUS,RP0 ;selectionner la bank1
    movlw 0x06 ; PORTA = digital input/output
    movwf ADCON1
    movlw b'00000000' ; RA0.....>RA7 en sortie
    movwf TRISA
    ;bcf PORTA,0 ; éteindre_led à la patte RA0
    ;bsf PORTA,0 ; Allume_led à la patte RA0

    ;fin du programme main
    start
    call temporisation
    bsf PORTA,1
    goto boucle_led
    goto start


    boucle_led:
    btfss PORTA,1 ;led alummée
    goto allume_led ; nous allons allumer la led
    goto éteindre_led ; nous allons éteindre la led

    allume_led:
    bsf PORTA,1
    call temporisation ; allumer la led pendant 1 seconde
    goto boucle_led

    éteindre_led:
    bcf PORTA,1
    call temporisation ;éteindre la led pendant 1 seconde
    goto boucle_led

    temporisation:

    clrf compteur_allume_led ;éffacer compteur_allume_led
    boucle2:
    clrf compteur_éteindre_led ;éffacer compteur_éteindre_led

    boucle1:
    nop ;perdre 1 cycle
    decfsz compteur_éteindre_led,f ;décrémenter compteur etéint led
    goto boucle1 ;si pas 0, je boucle
    decfsz compteur_allume_led , f ; si 0, décrémenter compteur 2
    goto boucle2 ;si compteur_allume_led pas 0,
    ;recommencer boucle1
    return ;retour au progr prin à la fin
    ;d'une sous routine
    ; initialisation des variables
    ; initialisation des ports d'E/S
    ; clrf PORTB
    ; remaining code goes here
    END ; directive fin de programme

    -----

  2. Publicité
  3. #2
    behemerre

    Re : clignoter une led avec pic 16F873

    Salut,

    Désolé de te le dire, mais ton code est un vrai torchon !!

    Des virgules pas à leurs places, des lignes de codes carrément inéxistantes, et parmi les choses qui m'ont le plus "choqués", je cite :

    -Les accents (Tu déclares "éteindre" avec un "é", et tu l'écrit aprés avec un "e" simple)

    -La directive : "RESET_VECTOR CODE 0x000" pour le reset, qui n'existe pas du tout, il faut faire un : "org 0x00"

    -Un "MAIN CODE" non-précédé par une virgule, de ce fait MPLAB l'a pris pour une ligne de code

    -Les étiquettes suivies par un double point " : " qui NE DOIVENT JAMAIS ETRE MISENT aprés une étiquette (ni ailleurs en dehors des commentaires)

    Voilà pour le plus gros, le reste tu peux le connaitre par une comparaison de ton ancien code, et celui-là (pas encore examiné en détails pour voir ce qu'il donne, mais simulable sur MPLAB : sans erreurs)

    Code:
       LIST      p=16F873            ; Définition de processeur 
       #include <p16F873.inc>        ; Définitions de variables 
    
       __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC 
    
    ;DECLARATION DE VARIABLES
    
    CBLOCK 0x00C 
    	compteur_allume_led :1 		; compteur allume led
    	compteur_eteindre_led :1 	; cmpteur eteindre led
    ENDC
    
    ;***************************** ****************************** ***********
    
    
    ;***************************** ****************************** ***********
    
    org		0x000 			; processor reset vector
    goto start 				; go to beginning of program
    
    ;***************************** ****************************** ***************************
    ; Programme Principal
    ;***************************** ****************************** ***************************
    
    ;MAIN CODE
    
    ;initialisation des ports
    ;************************
    
    	bcf STATUS, RP0 				; selectionner la bankO
    	bcf STATUS, RP1 	
    	clrf PORTA 					; efface le PORTA
    	bsf STATUS,RP0 					;selectionner la bank1
    	movlw 0x06 					; PORTA = digital input/output
    	movwf ADCON1	
    	movlw b'00000000' 				; RA0.....>RA7 en sortie
    	movwf TRISA
    	bcf PORTA,0 					; éteindre_led à la patte RA0
    	bsf PORTA,0 					; Allume_led à la patte RA0
    
    ;fin du programme main
    
    start 
    		call temporisation
    		bsf PORTA,1
    		goto boucle_led
    		goto start
    
    
    boucle_led
    		btfss PORTA,1 				;led alummée 
    		goto allume_led 			; nous allons allumer la led
    		goto eteindre_led			; nous allons eteindre la led
    
    allume_led
    		bsf PORTA,1
    		call temporisation 			; allumer la led pendant 1 seconde
    		goto boucle_led	
    
    eteindre_led
    		bcf PORTA,1
    		call temporisation 			;eteindre la led pendant 1 seconde
    		goto boucle_led
    
    temporisation
    		clrf compteur_allume_led 		;effacer compteur_allume_led
    		boucle2: 
    		clrf compteur_eteindre_led 		;effacer compteur_eteindre_led 
    
    boucle1: 
    		nop 					;perdre 1 cycle 
    		decfsz compteur_eteindre_led,f 		;decrementer compteur eteint led 
    		goto boucle1 				;si pas 0, je boucle
    		decfsz 	compteur_allume_led , f 	; si 0, decrementer compteur 2 
    		goto 	boucle2 			;si compteur_allume_led pas 0
    							;recommencer boucle1 
    
    		return 					;retour au progr prin à la fin
    							;d'une sous routine
    
    							; initialisation des variables
    							; initialisation des ports d'E/S
    		clrf PORTB
    							; remaining code goes here
    	END 						; directive fin de programme
    Dernière modification par behemerre ; 24/05/2007 à 23h25.
    L'éxpérience de chacun est le trésor de tous

  4. #3
    DavidDB

    Re : clignoter une led avec pic 16F873

    Salut behemerre,

    RESET_VECTOR est une assignation dans le linker et ici l'adresse est forcée à 0X000 (même si dans le fichier du Linker il y a une autre adresse)

    MAIN CODE est aussi une assignation dans le linker qui revoie à une adresse de la mémoire flash (il faut ouvrir le fichier linker pour connaître l'adresse exact)

    Donc, ces assignations existent bien et sont correctes si on utilise le Linker...

    David.

  5. #4
    Gérard

    Re : clignoter une led avec pic 16F873

    Behemere : tes remarques sont justifiées mais ton init pésente des erreurs.
    Pour configurer TRISx, il faut être en bank1 et repasser en bank0 à la fin de l'init.

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

    Re : clignoter une led avec pic 16F873

    Salut,
    Citation Envoyé par Gérard
    Pour configurer TRISx, il faut être en bank1 et repasser en bank0 à la fin de l'init.
    ça, ça m'a échappé !!

    Mais heuresement que j'ai dis pour ma défense :
    Citation Envoyé par behemerre
    (pas encore examiné en détails pour voir ce qu'il donne
    a+
    L'éxpérience de chacun est le trésor de tous

  8. #6
    DavidDB

    Re : clignoter une led avec pic 16F873

    Salut,

    Allez, la remarque de Gérard n'est pas vrai dans ce "programme" buggé, car jamais, ce programme ne rentrera dans l'Init...


    David.

  9. Publicité

Discussions similaires

  1. Clignoter une LED avec intel 8051
    Par baskouteh dans le forum Électronique
    Réponses: 2
    Dernier message: 16/12/2007, 14h57
  2. Clignoter une LED avec intel 8051
    Par baskouteh dans le forum Électronique
    Réponses: 0
    Dernier message: 16/12/2007, 10h42
  3. Test de PIC 16F628 avec une LED...
    Par Raphael2 dans le forum Électronique
    Réponses: 15
    Dernier message: 23/07/2006, 10h37
  4. COMMENT ,faire clignoter 4 LED avec un microswitch ?
    Par davidgag dans le forum Électronique
    Réponses: 3
    Dernier message: 03/05/2006, 19h14
  5. Problème pic 16f873
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 10
    Dernier message: 29/03/2006, 09h24
Découvrez nos comparatifs produits sur l'informatique et les technologies.