clignoter diode avec microcontroleur 16f84

Alimentations, composants ...
lotfi23
Nouveau membre !!!
Nouveau membre !!!
Messages : 1
Enregistré le : 04 mars 2012, 23:40

clignoter diode avec microcontroleur 16f84

Message non lu par lotfi23 »

slt j'ai besoin de votre aide,c 'est trés urgent, la question est:
On vous demande de compléter ce qui manque dans le fichier program1.asm afin d’avoir un clignotement d’une diode, connecté à la broche RA2, approximativement tout les demi seconde sachant que la fréquence du quartz est de 4 Mhz.


le fichier program1 est :



;**********************************************************************
; PROGRAMME N°1. PROGRAMME D'ENTRAINEMENT AU FONCTIONNEMENT *
; DES PICS. *
; *
;**********************************************************************
; *
; NOM: P1 *
; Date: XX/YY/ZZZZ *
; Version: 1.0 *
; *
; Auteur: XYZ *
; *
;**********************************************************************
; *
; Fichier requis: P16F84.inc *
; *
;**********************************************************************
; *
; Notes: *
; *
; *
; *
;**********************************************************************
LIST p=16F84 ; Définition de processeur
#include <p16F84.inc> ; Définitions de variables

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation. Les définitions sont dans le fichier include.
; Voici les valeurs et leurs définitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur à réseau RC

;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************

OPTIONVAL EQU H' à compléter' ; Valeur registre option
; Résistance pull-up ON
; Pas de préscaler

;*********************************************************************
; DEFINE *
;*********************************************************************

#DEFINE LED PORTA,2 ; Led rouge



;*********************************************************************
; 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 approximative de 500.000 µs.
; Elle ne reçoit aucun paramètre et n'en retourne aucun
;---------------------------------------------------------------------
tempo
movlw 1 ;à compléter ; pour Y 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
; LEDON (voir les macros)
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

zeltron
Rang "6 LEDs"
Rang "6 LEDs"
Messages : 3298
Enregistré le : 15 oct. 2006, 20:05
Localisation : planète terre
Contact :

Re: clignoter diode avec microcontroleur 16f84

Message non lu par zeltron »

Bonjour,

j'ai jamais compris pourquoi on s'évertuais a utiliser un µC pour des fonctions si élémentaire , comme un clignoteur pour LED (un multivibrateur à 2 transistors suffit ) , ou une régulation de radiateur électrique (un thermostat a bilame suffit) ou d'autre fonctions du même tonneau (on fout des µC même dans un grille pain, un frigo, une guirlande de noël ) :?:

faut vraiment être atteint de compliquite chronique : D ou avoir l'esprit assez tordu et vicieux pour transformer un appareil simple en un truc indépannable juste pour "faire iech" et obliger l'usager a racheter un autre bronzingue quand ça ne marche plus :S/

P/S/Z

Gérard
Rang "6 LEDs"
Rang "6 LEDs"
Messages : 1522
Enregistré le : 12 avr. 2012, 21:58

Re: clignoter diode avec microcontroleur 16f84

Message non lu par Gérard »

zeltron a écrit :Bonjour,

j'ai jamais compris pourquoi on s'évertuais a utiliser un µC pour des fonctions si élémentaire , comme un clignoteur pour LED (un multivibrateur à 2 transistors suffit ) , ou une régulation de radiateur électrique (un thermostat a bilame suffit) ou d'autre fonctions du même tonneau (on fout des µC même dans un grille pain, un frigo, une guirlande de noël ) :?:

faut vraiment être atteint de compliquite chronique : D ou avoir l'esprit assez tordu et vicieux pour transformer un appareil simple en un truc indépannable juste pour "faire iech" et obliger l'usager a racheter un autre bronzingue quand ça ne marche plus :S/

P/S/Z
Et pourquoi roules-tu en voiture ?
Une charrette à boeufs avance aussi.

Ce genre d'exercice permet de se familiariser avec les micros et c'est çà l'objectif.
Il faut commencer par des choses simples.

Bon WE.

Termi87
Administrateur
Administrateur
Messages : 3630
Enregistré le : 09 juil. 2006, 21:20
Localisation : Limousin

Re: clignoter diode avec microcontroleur 16f84

Message non lu par Termi87 »

Salut, et désolé de voir le sujet aussi longtemps après ! :/
Si je ne suis pas capable de te compléter ton fichier programme assemblage, je devrais cependant être capable de te fournir un code en C, qui doit tenir sur 5 lignes (:)), et qui permet simplement de faire clignoter une led ou plusieurs.
Cela t’intéresse ?
Je pourrais te le fournir que une fois revenu chez moi, si ça t’intéresse, merci de laisser un petit message ici pour que ça me le rappel en mail ;).

Bonne journée.

Edit : je déplace aussi le sujet, dans question technique ...

Répondre