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

Question de programmation simple en assembler



  1. #1
    lcoulon

    Question de programmation simple en assembler


    ------

    Bonjour


    Je cherche a modifier un programme existant qui en language Assembler pour Pic Microchip.

    Je voudrai que dans cette boucle de programme appelée rej_2 :

    SI RA2 passe à "0" ( RA2 sera connecté a un bouton poussoir grace à une resistance de tirage du +5V ) ALORS le port RA4 fera clignoter une led indéfiniement, sans que le reste du programme soit executé.

    Pourriez vous me traduire cette condition en assembler pour PIC s'il vous plait ?

    voici l'extrait de mon programme, et notemment la boucle ou j'aimerai intégrer cette nouvelle condition :

    Code:
    rej_2	;
    
    		movlw 0X01			; Set RA0 as output
    		movwf PORTA			; RA0 = 1
    
    		; JE VOUDRAIS AJOUTER MA NOUVELLE CONDITION ICI :
    
    		movlw 0x03 			; Set RA2 as input
    		tris PORTA
    
    		; JE NE SAIS PAS ECRIRE LA SUITE DE LA CONDITION ...
    
    	
    		movlw msg_line		; Define where message will be printed on LCD (1st line)
    		call lcd_cmdout		; Print a message on the LCD
    		movlw msg_lock1		; Call message to be printed in Line 1
    		call lcd_strout		; Print message on LCD
    
    		
    		movlw reject_delay
    		call sdelay
    		goto loop
    Je vous remercie beaucoup de votre aide,

    -----

  2. #2
    gedonet

    Re : Question de programmation simple en assembler

    Bonjour
    Voila une methode que l'on peut utiliser:
    Code:
    rej_2	;
    
    		movlw 0X01			; Set RA0 as output
    		movwf PORTA			; RA0 = 1
    
    		; JE VOUDRAIS AJOUTER MA NOUVELLE CONDITION ICI :
    	swapf	STATUS,w 			; comme oon ne connait pas le contexte on assure
    	movwf	status_temp			; sauvegarde de STATUS pour retour dans la bonne BANK
    	
    	bsf	STATUS,RP0			; passage en bank1 sans connaitre le pic
    	bcf	STATUS,RP1
    	
    	bsf	TRISA,2				; RA2 en entrée
    
    	swapf	status_temp,w
    	movwf	STATUS				; restauration de STATUS pour retour dans la bonne BANK
    	
    	btfss	PORTA,2				; test du bouton
    	goto	SP_RA4_clignotte		; si RA2 =0 alors aller au sous programmede clignottement
    						; de RA4 que tu dois ecrire
    						; sinon le programme continue
    						; à noter qu'il faudrait un anti rebond selon le contexte
    	 
      			
    
    
    		; JE NE SAIS PAS ECRIRE LA SUITE DE LA CONDITION ...
    
    	
    		movlw msg_line		; Define where message will be printed on LCD (1st line)
    		call lcd_cmdout		; Print a message on the LCD
    		movlw msg_lock1		; Call message to be printed in Line 1
    		call lcd_strout		; Print message on LCD
    
    		
    		movlw reject_delay
    		call sdelay
    		goto loop
    Ce n'est que le principe, que tu peux ajuster, par exemple je sauvegarde STATUS pour pouvoir revenir dans la banque que tu utilises, mais toi tu connais probablement ta banque c'est donc peut etre inutile.
    Pour le bouton il faudrai peut etre un anti rebon ou un meilleur controle, mais comme je ne connais pas le contexte, à toi de faire.
    Pour la routine de clignottement de RA4 je pense que tu peux la faire.

    Gilles

  3. #3
    lcoulon

    Re : Question de programmation simple en assembler

    Merci Gilles,

    Avec quelles commandes assembler je peux demander a un PIC de tester sans cesse l'etat d'un bouton poussoir ( RA2 ) si l'état passe à 1 alors fera appel à un goto xxx sinon il continuera d'attendre indéfiniement que l'état viennet à changer ...

    Voici ce que j'ai tapé en m'inspirant de ce que tu m'as proposé, mais ça ne fonctionne pas comme je voudrai :
    Code:
    rej_2	; Maximun of code tries reached :
    
    
    		movlw msg_line		; Define where message will be printed on LCD (1st line)
    		call lcd_cmdout		; Print a message on the LCD
    		movlw msg_lock1		; Call message to be printed in Line 1
    		call lcd_strout		; Print message on LCD
    
    		movlw reject_delay	; define how long system is locked
    		call sdelay
    
    		
    		bsf	TRISA,2			; Set RA2 as input
    		btfss PORTA,2		; Test Push button connected to RA2
    
    		; RA2 = 0 : go back to rej_2  :
    		goto rej_2
    
    		; RA2 =1  
    		
    		goto loop
    Peut on faire une boucle de test dans une boucle existante ? ( ici rej_2)

    Mon but ici est d'afficher en permanence un message sur un LCD tant que l'etat de RA2 reste à "0"

    Si RA2 passe à "1" alors je voudrai que le programme appelle la boucle "loop"

Sur le même thème :

Discussions similaires

  1. Problème simple de changement de base (avec une touche de programmation)
    Par CaptainCoinCoin dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 02/02/2009, 13h36
  2. simple question
    Par felipe dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 25/08/2008, 20h33
  3. Simple question ?
    Par LAS sabri dans le forum Physique
    Réponses: 16
    Dernier message: 20/01/2008, 13h11
  4. Question simple
    Par Emiliaria dans le forum Chimie
    Réponses: 2
    Dernier message: 07/12/2007, 15h13
  5. question simple
    Par spitfireman dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 2
    Dernier message: 04/06/2005, 20h33