Led en couleur

Soyez le premier à donner votre avis sur cette source.

Vue 6 530 fois - Téléchargée 1 075 fois

Description

Programme fonctionnant sous le pic16f84 permettant de faire fonctionner un led en couleur avec des temporisations.

Source / Exemple :


;;;;;;;;;;;;;;;;;;;;;;;;text du 18/3/2009;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	LIST P=16F84, R=DEC
	#include      "P16F84.INC"

	__CONFIG  _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
	__IDLOCS  1998h

	

	mv1		EQU		h'0C'	
	mv2		EQU		h'0D'	
        mv3             EQU             h'0E'
        mv4             EQU             h'0F'
;================================================;
       ledblue_a0        EQU             h'0'
       ledgreen_a1       EQU             h'2'
;================================================;
       ledred_b0         EQU             h'0'
       ledyellow_b2      EQU             h'2'
;================================================;

         
          
	ORG     0x004
	GOTO    projet
;;;;;;;;;;;;;;;;;;;;;;;;; zorne des souprogrammes;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  projet			; contiguration des ports du pic 

	bsf    STATUS,RP0	; passé en banque 1
 
				; 1 pour dit en entrée OU 0 en sortie 
	movlw	b'00000'	;  0     0     0     0    0
	movwf	TRISA		;  A4    A3    A2    A1   A0
	movlw	b'00000000'	;  0     0     0     0    0    0     0     0     
	movwf	TRISB		;  B7    B6    B5    B4   B3   B2    B1    B0

	bcf    STATUS,RP0	; passé en banque 0
	
	clrf	PORTA		; effacé les ports du pic portA
	clrf	PORTB           ; effacé les ports du pic portB

      program			; debut du program
      
    bsf   PORTA,ledblue_a0
    bsf   PORTB,ledyellow_b2
    call  temp_7s

           
    bsf   PORTA,ledblue_a0
    bsf   PORTB,ledred_b0
    bsf   PORTB,ledyellow_b2
    call  temp_10s

    bsf   PORTA,ledblue_a0
    bsf   PORTB,ledred_b0
    bsf   PORTB,ledyellow_b2
    call  temp_17s

    bsf   PORTB,ledred_b0
    bsf   PORTA,ledblue_a0
    call  temp_2s

    bsf   PORTB,ledred_b0
    bsf   PORTB,ledyellow_b2
    bsf   PORTA,ledblue_a0
    call  temp_17s

    bsf   PORTB,ledyellow_b2
    bsf   PORTA,ledgreen_a1
    bcf   PORTB,ledred_b0
    call  temp_2s

    bsf   PORTA,ledblue_a0
    bsf   PORTB,ledyellow_b2
    bsf   PORTB,ledred_b0
    call  temp_17s

    bcf   PORTA,ledgreen_a1
    bsf   PORTA,ledblue_a0
    call  temp_7s

             
                           
       goto  program            ; retour au program

;;;;;;;;;;;;;;;;;;;;; sous-programme ;;;;;;;;;;;;;;;;;;;;;;;
      temp_2s 
    
      movlw d'255'    
      movwf mv1
      movlw d'255'
      movwf mv2
      movlw d'12'
      movwf mv3

gf    decfsz mv1,f        ; -1 du contenu de mv1 saut si mv1 = 0
      goto   gf
      decfsz mv2,f        ; -1 du contenu de mv2 saut si mv2 = 0
      goto gf
      decfsz mv3,f        ; -1 du contenu de mv3 saut si mv3 = 0
      goto gf

      return
;=============================================================
      temp_7s 
    
      movlw d'255'    
      movwf mv1
      movlw d'255'
      movwf mv2
      movlw d'15'
      movwf mv3

gf1   decfsz mv1,f        ; -1 du contenu de mv1 saut si mv1 = 0
      goto   gf1
      decfsz mv2,f        ; -1 du contenu de mv2 saut si mv2 = 0
      goto gf1
      decfsz mv3,f        ; -1 du contenu de mv3 saut si mv3 = 0
      goto gf1

      return
;=============================================================
      temp_17s 
    
      movlw d'255'    
      movwf mv1
      movlw d'255'
      movwf mv2
      movlw d'80'
      movwf mv3

gf2   decfsz mv1,f        ; -1 du contenu de mv1 saut si mv1 = 0
      goto   gf2
      decfsz mv2,f        ; -1 du contenu de mv2 saut si mv2 = 0
      goto gf2
      decfsz mv3,f        ; -1 du contenu de mv3 saut si mv3 = 0
      goto gf2
      return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 temp_10s 
    
      movlw d'255'    
      movwf mv1
      movlw d'255'
      movwf mv2
      movlw d'30'
      movwf mv3

gf3   decfsz mv1,f        ; -1 du contenu de mv1 saut si mv1 = 0
      goto   gf3
      decfsz mv2,f        ; -1 du contenu de mv2 saut si mv2 = 0
      goto gf3
      decfsz mv3,f        ; -1 du contenu de mv3 saut si mv3 = 0
      goto gf3
      return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      END                 ; fin du projet

Conclusion :


dites moi ce que vous en pensez.

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

pont
Messages postés
197
Date d'inscription
samedi 2 mai 2009
Statut
Membre
Dernière intervention
16 novembre 2010
1 -
C'est bien, quelques détails améliorables, comme:
Je cite:
# movlw b'00000000' ; 0 0 0 0 0 0 0 0
# movwf TRISB

Cela peut se simplifier en "clrf TRISB"

Les tempo sont trop compliquées, une seule suffit avec passage de paramètre, ou en deux parties:
la 1e pour la tempo de 1 seconde (non appelée par le programme)
la 2e avec un compteur qui se charge à l'appel venant du programme et donne le nombre d'appels de la tempo d'une seconde. Return quand le compteur est à zéro, c'est fini.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.