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

Les pauses (Voilà un vrai problème de débutant).



  1. #1
    ico

    Les pauses (Voilà un vrai problème de débutant).


    ------

    Bonjour tout le monde.
    Je débute la programmation en assembleur pour le pic F84-10. J’ai téléchargé le superbe cours de BIGONOFF. J’ai un souci quand même. J’aimerais créer des pauses de 1 seconde, 5 secondes et 10 secondes. Et la j’ai beau relire et décrypter les codes que j’ai pu glaner ça et la. Rien n’y fait ! Je ne pige pas comment faire cela. En plus j’aimerais que dans mon programme principale cela soit un truc du style :

    ; Actions précédente à la pause
    Pause10 ; envoie à un sous programme qui effectuera une pause logicielle de 10s
    ; Actions suivantes
    Pause1 ; envoie à un sous programme qui effectuera une pause logicielle de 1s


    ; Effectuera une pause logicielle de 1 seconde
    Pause1 ………..
    …….. ;
    Return

    ; Effectuera une pause logicielle de 10 secondes
    Pause10 ………..
    …….. ;
    Return


    Etc.

    Je sait que j’ai pas bien dure mais la je cale. Existe-t-il un calcul simple et un moyen simple de programmer cela ? Si oui je serais ravi d’apprendre et de poursuivre.

    Merci beaucoup pour vos réponses.
    Amitiés
    Ico 2005.

    -----

  2. Publicité
  3. #2
    f6bes

    Re : Les pauses (Voilà un vrai problème de débutant).

    Bjr,
    Je n'ai jamais programmer en assembleur, mais le fait
    d 'écrire "Pause 1" pour 1 seconde est il suffisant.
    En effet les temps de pause ne sont ils pas décomptés en
    milliéme de seconde.
    Soit pour pause de 1 seconde= Pause 1000.
    Pourquoi faire dire (ou dire):si pause 1 alors allez au sous
    programme qui va générer la pause.Autant indiquer directement
    avec Pause le temps voulu sans passer par une sous routine.
    Cela doit "alléger" le programme.
    Cordialement

  4. #3
    Gérard

    Re : Les pauses (Voilà un vrai problème de débutant).

    Bigonoff part1 R18 page 136 et suivantes : utilisation du Timer0 et description d'une tempo de 0,5 s
    Si tu écris une routine qui appelle cette routine 2 x, tu auras une tempo de 1s, si tu l'appelle 20 x tu auras 10s de tempo.
    Gérard.

  5. #4
    ico

    Re : Les pauses (Voilà un vrai problème de débutant).

    Bonjour,

    Justement, j’ai bien regardé cet exemple mais il utilise les interruption et débordement du pic. Et la cela ne me va plus car je trouve cette méthode peu pratique pour le débutant. Existe-t-il d’autre solution au cas ou cela serais possible ? Sinon et bien je me passerais de pauses et je ferais différemment ! De plus il faut utiliser les pré divisions et la encore c’est pas trop mon truc mais bon…

    Merci beaucoup pour vos indications.
    Amitiés.
    Ico 2005.

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

    Re : Les pauses (Voilà un vrai problème de débutant).

    L' interruption du timer permet de faire tourner le programme principal sans se soucier du comptage de temps. Bigonoff explique très bien, c'est justement pour les débutants. L'utilisation du prédiviseur est aussi expliquée.
    Gérard.

  8. #6
    ico

    Re : Les pauses (Voilà un vrai problème de débutant).

    Quel est l’avantage de laisser tourné le programme principal ? La je ne voie pas. Désolé mais je débute.
    Amitiés.
    Ico2005.

  9. Publicité
  10. #7
    Gérard

    Re : Les pauses (Voilà un vrai problème de débutant).

    Quand tu feras des applics un peu + compliqué, tu verras qu'il ne faut pas gaspiller du temps à attendre la fin d'une tempo.
    Ex, si tu as un affichage multiplexé qu'il faut rafraichir, si tu attends 2s la fin de la tempo, tu comprends bien que l'affichage est dans les choux.
    Gérard.

  11. #8
    ico

    Re : Les pauses (Voilà un vrai problème de débutant).

    C’est sure dans ces cas la…

    Bon alors déjà je cale sur une boucle sensé allumer et éteindre une led sur le portA. J’ai essayer le .asm de Bigonoff a ce sujet et il marche mais le mien plus simple autant il marche en simulation autant en réalité, la led reste continuellement allumé donc mon prg est dans les choux. Cependant si je doit passer par un prescaler autant abandonné ce bout de code la et y passer directement. Mais tant que je n’arrive pas à résoudre la boucle simple en pause, pas la peine de songer à passer a la suite. Quelqu’un pourrais t il me dire ou dans mon code j’ai commis une erreur ou ce qu’il faudrait faire pour que cela marche ?

    Voila mon source :

    Code:
    LIST p=16F84          ;Définition du processeur
    #include <p16F84.inc> ;Définition des constantes
    
    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
    
    ; __CONFIG précise les paramètres qui est en rappot avec l'include.
    ; Les diférentes valeurs possibles de __CONFIG:
    ;		_CP_ON		Code protection ON: Impossible de relire après programmation
    ;		_CP_OFF		Code protection OFF: Possible de relire après programmation
    ;		_PWRTE_ON	Timer reset sur POWER en service
    ;		_PWRTE_OFF	Timer reset hors service
    ;		_WDT_ON		WatchDog en service
    ;		_WDT_OFF	WatchDog en 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 Récistance Condensateur
    
    ;+--------------------------------------------------------------------------------+
    ;|                              ->  ASSIGNATIONS  <-                              |
    ;+--------------------------------------------------------------------------------+
    
    OPTIONVAL EQU B'10001000'
    ;Pas de résistance de rappel au +5V (interne au pic)
    ;            -> Penser à les rajouter au circuit imprimé
    ;Interruption sur front descendant
    ;Horloge interne
    ;Sélection dur le front descendant de l'horloge
    ;Le Pré diviseur est sur le WATCHDOG
    ;La pré division est ici 0, 0, 0 donc 1/1 sur le watchdog.
    
    ;+--------------------------------------------------------------------------------+
    ;|                              ->  DEFINITIONS  <-                               |
    ;+--------------------------------------------------------------------------------+
    
    #DEFINE LED PORTA,2 ;Led
    
    ;+--------------------------------------------------------------------------------+
    ;|                                ->  MACRO  <-                                   |
    ;+--------------------------------------------------------------------------------+
    
    ;+--------------------------------------------------------------------------------+
    ;|                         ->  DECLARATION DES VARIABLES  <-                      |
    ;+--------------------------------------------------------------------------------+
    
    CBLOCK 0x00c		;Début de la zone variable
    compt1 : 1			;Compteur de la tempo1
    ENDC				;Fin de la zone variable
    
    ;+--------------------------------------------------------------------------------+
    ;|                          ->  DEMARRAGE SUR RESET  <-                           |
    ;+--------------------------------------------------------------------------------+
    
    org 0x000            ;Adresse de départ après reset
    goto init            ;Renvoie sur l'initialisation
    
    ;+--------------------------------------------------------------------------------+
    ;|                             ->  INITIALISATIONS  <-                            |
    ;+--------------------------------------------------------------------------------+
    
    init                 ;Etiquette 'init'
    		
    	clrf PORTA       ;Sortie du PORT A à 0
    	clrf PORTB		 ;Sortie du PORT A à 0
    	clrf EEADR		 ;Economie d'énergie
    	bsf  STATUS,RP0  ;Sélectionner la banque 1
    	movlw OPTIONVAL  ;Charge la configuration de OPTION_REG par OPTIONVAL
    	movwf OPTION_REG ;Initialise le registre option par la configuration de OPTIONVAL
    
    				;-> Effacer la RAM <-
    
    	movlw 0x0c		 ;Initialisation du pointeur
    	movwf FSR		 ;Initialiser le registre indirect
    
    init1       		 ;Etiquette 'initialisation1'
    
    	clrf INDF		 ;Effacer la RAM
    	incf FSR,f		 ;Pointer sur suivant
    	btfss FSR,6      ;Tester si la fin de zone est atteinte (>=40)
    	goto init1       ;Si non, on boucle
    	btfss FSR,4      ;Tester si la fin de zone est atteinte (>=50)
    	goto init1       ;Si non, on boucle
    
    				;-> Initialisations Spécifique <-
    	
    	bcf LED			 ;Led en sortie (Banque1)
    	bcf STATUS,RP0   ;Passer en banque 0
    	goto start       ;Saut vers le début du programme principal
    
    ;+--------------------------------------------------------------------------------+
    ;|                              ->  SOUS-ROUTINES  <-                             |
    ;+--------------------------------------------------------------------------------+
    
    tempo1 				;Etiquette 'tempo1'
    	movwf compt1    ;Initialise le compteur avec la valeur précédement passé
    boucle1				;Etiquette 'boucle1'
    	decfsz compt1,f	;Décrémenter le compteur et sauter si il vaut 0
    	goto boucle1	;Saut vers l'étiquette 'boucle1'
    	return			;Retour au programme principal
    
    
    ;+--------------------------------------------------------------------------------+
    ;|                            ->  PROGRAMME PRINCIPAL <-                          |
    ;+--------------------------------------------------------------------------------+
    
    start				;Etiquette 'start'
    
    	bsf LED			;On allume la led
    	
    	movlw 0x05		;Nombre imposer au compteur de la tempo qui suit
    	call tempo1		;Envoie à la sous routine ayant l'étiquette 'tempo1'
    
    	bcf LED			;On éteint la led	
    
    	movlw 0x05		;Nombre imposer au compteur de la tempo qui suit
    	call tempo1		;Envoie à la sous routine ayant l'étiquette 'tempo1'
    
    	goto start		;Boucler
    
    	END				;Fin de programme
    Merci beaucoup pour vos réponses.
    Amitiés.
    Ico 2005.

  12. #9
    Gérard

    Re : Les pauses (Voilà un vrai problème de débutant).

    Ton code est bon, c'est ton oeil qui est trop lent pour voir.
    Pour voir, mettre un oscillo sur la LED.
    Je te propose de compteur les cycles qui passent entre bsf LED et bcf LED. Tu verras que c'est trop court pour le voir.
    Regarde de nouveau Bigonoff.
    G&#233;rard.

Discussions similaires

  1. aide pour un vrai débutant
    Par cubitus77 dans le forum Chimie
    Réponses: 6
    Dernier message: 18/11/2006, 11h37
  2. Problème de débutant
    Par ogredoux dans le forum Électronique
    Réponses: 17
    Dernier message: 01/06/2006, 10h51
  3. Y a-t-il un vrai physicien dans les parages!!
    Par Alexandre Castonguay dans le forum TPE / TIPE et autres travaux
    Réponses: 4
    Dernier message: 01/12/2005, 21h50
  4. petit problème pour montrer que c'est vrai
    Par cindy06 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 15/01/2005, 15h03
  5. Est-ce vrai ? les virus préfèrent Microsoft ! que mac
    Par Cornemuse dans le forum Internet - Réseau - Sécurité générale
    Réponses: 13
    Dernier message: 10/01/2005, 22h00
Découvrez nos comparatifs produits sur l'informatique et les technologies.