asm pic16f631
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

asm pic16f631



  1. #1
    elsena

    asm pic16f631


    ------

    Bonjour,

    Intéréssé par cette famille 631/690 et avant d'y adapter mes programmes rélisés sur 16f84, j'ai fait ce petit programme suivant:
    #include <p16f631.inc>

    __config _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF &_IESO_OFF & _FCMEN_OFF

    ;REGISTRES
    W_temp equ 0x70 ; sauvegarde
    status_temp equ 0x71

    ORG 0x00
    goto MAIN

    ;INTERRUPTIONS

    ORG 0x04

    movwf W_temp
    swapf STATUS, w
    movwf status_temp
    movf PORTA, w
    call face_mode
    bcf INTCON, INTF
    bcf INTCON, RABIF
    swapf status_temp, w
    movwf STATUS
    swapf W_temp, f
    swapf W_temp, w
    retfie

    MAIN:
    ; initialisation
    bcf STATUS, RP0
    clrf PORTA
    clrf PORTB
    clrf PORTC
    bsf STATUS, RP0 ; bank 1
    movlw 0xFF
    movwf TRISA ; RA = in
    bsf TRISB, 0 ; RB0 = in, ne sert pas
    bcf TRISC, 0 ; RC = out
    bcf OPTION_REG, INTEDG ; int sur flanc desc
    bsf IOCA, 2 ; int sur RA2
    bcf OPTION_REG, 7
    movlw 0x04
    movwf WPUA ; res rappel sur RA2
    movlw 0x00
    movwf VRCON ; désactiver référence de tension
    bcf CM1CON0, 7 ; désactiver les comparateurs
    bcf CM2CON0, 7 ; idem
    bcf STATUS, RP0 ; bank 0

    bsf INTCON, INTE
    bsf INTCON, GIE

    w_0:
    nop
    goto w_0

    face_mode:
    btfsc PORTC, 0 ; RC0 = 0? saut
    goto w_1
    btfss PORTC, 0 ; RC0 = 1? saut
    goto w_2
    return

    end_mode:
    return

    w_1:
    bcf PORTC, 0 ; RC0 à 0
    goto end_mode

    w_2:
    bsf PORTC, 0 ; RC0 à 1
    goto end_mode

    end

    W0 est une boucle qui attend un pulse descendent sur RA2 qui génère une interruption, pendant laquelle une led sur RC est à 1 ou 0 en toggle.
    Il fonctionne mais je n'arrive pas a faire fonctionner le pull up ( res de rappel )

    Ronny

    -----

  2. #2
    RISC

    Re : asm pic16f631

    Salut,

    Ton code est illisible....
    Peux-tu le reposter en utilisant les balises "code" et "/code" entre crochets ?

    a+

  3. #3
    Laboum

    Re : asm pic16f631

    Bonsoir elsena,
    Citation Envoyé par elsena Voir le message
    movlw 0x04
    Ce ne serais pas plutôt "movlw 0x10", car il s'agit bien du bit 4 du registre WPUA, donc b'00010000'
    Bon courage

  4. #4
    Laboum

    Re : asm pic16f631

    Re bonsoir à tous,
    Citation Envoyé par Laboum Voir le message
    Bonsoir elsena,
    Ce ne serais pas plutôt "movlw 0x10", car il s'agit bien du bit 4 du registre WPUA,
    Je crois que j'ai commis une erreur ce doit être "movlw 0x1"
    Mais l'expert RISC est arrivé, donc pas de soucis !
    Bonne soirée

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

    Re : asm pic16f631

    salut,

    quelques remarques:
    Les registres VRCON, CM1CON0, CM2CON0 se trouve en banque RAM 02 (bits status RP0=0,RP1=1).
    Je ne vois pas d'initialisation du registre ANSEL. bit=1 les ports sont en mode analogique, bit=0 les ports sont en mode digital)

  7. #6
    elsena

    Re : asm pic16f631

    Bonjour et merci à tous,

    La rougeur me monte au front.
    Cela fonctionne!!!!
    J'ai corrigé VRCON.... en bank 2, ajouté ANSEL à 0 dans la même bank et ......la correction de LABOUM: WPUA movlw 0x01 et là je suis largué.
    En effet, pour moi, le pull up doit se faire sur RA2 donc avec WPUA 2 à 1, soit 0x04. Pouvez vous m'expliquer??

  8. #7
    schmo

    Re : asm pic16f631

    Salut,

    Citation Envoyé par elsena Voir le message
    la correction de LABOUM: WPUA movlw 0x01 et là je suis largué.
    En effet, pour moi, le pull up doit se faire sur RA2 donc avec WPUA 2 à 1, soit 0x04. Pouvez vous m'expliquer??
    Heu.. moi aussi je ne comprend pas.. As-tu essayé avec WPUA=0x04 ?

    J'ai remarquer que ton interruption est uniquement provoqué par INT (interuption externe) Donc il faut juste mettre à 1 le bit INTE de INTCON et remettre à 0 INTF dans ton interruption. Pourquoi dans ce cas valider RA2 pour le changement d'état (bit IOAC2 de IOCA) et reseter RABIF car ce n'est pas le changement d'état qui te déclenche ton interuption puisque RABIE=0.
    Si tu n'utilise que l'interuption INT laisse RABIE et IOAC2 à 0. Tu gères uniquement les flags INTE,INTF et INTEDG

  9. #8
    elsena

    Re : asm pic16f631

    Bonjour SCHMO,

    J'ai essayé 0x04 et dans ce cas, le pull up ne fonctionne pas!!!!
    J'ai validé les autres bits d'interruptions car seul le flanc descendant sur RA2 doit générer l'interruption. J'ai donc tout mis par précaution.
    Merci pour ton aide.

    A+

  10. #9
    elsena

    Re : asm pic16f631

    Bonjour RISC,
    Citation Envoyé par RISC Voir le message
    Ton code est illisible....
    Peux-tu le reposter en utilisant les balises "code" et "/code" entre crochets ?
    Désolé mais je ne comprends pas la demande.

    Cordialement

  11. #10
    Laboum

    Re : asm pic16f631

    Bonsoir elsena,
    Citation Envoyé par elsena Voir le message
    Désolé mais je ne comprends pas la demande.
    Code:
    #include <p16f631.inc>
    
    __config _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF &_IESO_OFF & _FCMEN_OFF
    
    ;REGISTRES
    W_temp equ 0x70 ; sauvegarde
    status_temp equ 0x71
    
    ORG 0x00
    goto MAIN
    
    ;INTERRUPTIONS
    
    ORG 0x04
    
    movwf W_temp
    swapf STATUS, w
    movwf status_temp
    movf PORTA, w
    call face_mode
    bcf INTCON, INTF
    bcf INTCON, RABIF
    swapf status_temp, w
    movwf STATUS
    swapf W_temp, f
    swapf W_temp, w
    retfie
    
    MAIN:
    ; initialisation
    bcf STATUS, RP0
    clrf PORTA
    clrf PORTB
    clrf PORTC
    bsf STATUS, RP0 ; bank 1
    movlw 0xFF
    movwf TRISA ; RA = in
    bsf TRISB, 0 ; RB0 = in, ne sert pas
    bcf TRISC, 0 ; RC = out
    bcf OPTION_REG, INTEDG ; int sur flanc desc
    bsf IOCA, 2 ; int sur RA2
    bcf OPTION_REG, 7
    movlw 0x04
    movwf WPUA ; res rappel sur RA2
    movlw 0x00
    movwf VRCON ; désactiver référence de tension
    bcf CM1CON0, 7 ; désactiver les comparateurs
    bcf CM2CON0, 7 ; idem
    bcf STATUS, RP0 ; bank 0
    
    bsf INTCON, INTE
    bsf INTCON, GIE
    
    w_0:
    nop
    goto w_0
    
    face_mode:
    btfsc PORTC, 0 ; RC0 = 0? saut
    goto w_1
    btfss PORTC, 0 ; RC0 = 1? saut
    goto w_2
    return
    
    end_mode:
    return
    
    w_1:
    bcf PORTC, 0 ; RC0 à 0
    goto end_mode
    
    w_2:
    bsf PORTC, 0 ; RC0 à 1
    goto end_mode
    
    end
    Voila c'est fait, voici la procédure: la balise [CODE et /CODE ] à la place de "et" il faut mettre 2 crochets ][ et entre ces 2 crochets, faire un copier/coller du fichier "asm"
    Bon courage

  12. #11
    elsena

    Re : asm pic16f631

    Ops!!!! C'est vu et compris.

    A propos de mon programme, le pull up ne focntionne à nouveau plus?!?!?
    Tous mes essais sont avec MPLAB SIM. Je vais tenter un essais réel, mais sans conviction.

    A+

  13. #12
    schmo

    Re : asm pic16f631

    salut,

    Ca marche apres ca marche plus ???? bizarre, bizarre...

    Voici quelques modifications que j'ai apporté à ton programme.
    Fais un essais et dis-moi si ca marche:
    Code:
    	ORG 0x04
    
    	movwf W_temp
    	swapf STATUS, w
    	movwf status_temp
    	call face_mode
    	bcf INTCON, INTF      ;-> on utilise plus INTERUPT ON CHANGE
    	swapf status_temp, w
    	movwf STATUS
    	swapf W_temp, f
    	swapf W_temp, w
    	retfie
    
    MAIN:
    ; initialisation
    	bcf STATUS, RP0
    	clrf PORTA
    	clrf PORTB
    	clrf PORTC
    	bsf STATUS, RP0 ; bank 1
    	movlw 0xFF
    	movwf TRISA ; RA = in
    	bsf TRISB, 0 ; RB0 = in, ne sert pas
    	bcf TRISC, 0 ; RC = out
    	bcf OPTION_REG, INTEDG ; int sur flanc desc
    	clrf IOCA      ;-> aucune entrée du portA pour INTER.ON.CHANGE
    	bcf OPTION_REG, 7
    	movlw 0x04
    	movwf WPUA ; res rappel sur RA2
    	bcf STATUS, RP0
    	bsf STATUS, RP1
    	clrf WPUB  ;--> pas de pullup sur portB
    	movlw 0x00
    	movwf VRCON ; désactiver référence de tension
    	bcf CM1CON0, 7 ; désactiver les comparateurs
    	bcf CM2CON0, 7 ; idem
    	clrf ANSEL  ;--> les entrées sont digitales
    	bcf STATUS, RP1 ; bank 0
    
    	bsf INTCON, INTE   ;--> on valide uniquement INT comme source d'interruption
    	bsf INTCON, GIE
    
    w_0:
    	nop
    	goto w_0
    A+

  14. #13
    elsena

    Re : asm pic16f631

    Bonsoir SCHMO,

    Là c'est un peu la m......
    Cela fonctionne en réel!!!!!! pas avec MPLAB SIM !!!!!!!
    Je vais toutefois tester ton programme et te tenir au courant, mais je suis maintenant, déjà occupé dans un autre programme plus complexe, donc un peu de patience.

    A tous, toute ma reconnaissance pour votre aide.

    A+

  15. #14
    elsena

    Re : asm pic16f631

    Bonsoir,

    J'ai testé le prog de Schmo et cela fonctionne.
    Mes programmes également en réel, mais pas de pull up avec le MPLAB SIM 8.30 fournit sur le CD avec le pickit2.
    Je n'ai jamais eu ce cas avec les MPLAB précédents.
    J'ai posté une question chez Microchip. On verra

    A+

  16. #15
    elsena

    Re : asm pic16f631

    Bonjour,

    Pas de réponse de Microchip, par contre, sur leur forum,ce problème est signalé à plusieurs reprises avec comme solution de charger le 8.33.
    Même problème ainsi que sur leur dernier 8.40.
    Donc je laisses tomber et utilise le toggle!!

    A+

    Elsena

  17. #16
    RISC

    Re : asm pic16f631

    Salut,

    Je pense que tes problèmes viennent des différences de concept entre le simulateur et la maquette :
    As-tu injecté des signaux sur les broches en entrée avec le simulateur ? Si ma question ne te semble pas claire c'est que tu ne l'as probablement pas fait
    Lorsque l'on simule des interactions avec les E/S, il faut aller dans des menus spécifiques de MPLAB pour lui décrire les signaux à injecter.
    Tu peux t'aider de ce webseminar pour comprendre comment faire.

    a+

  18. #17
    elsena

    Re : asm pic16f631

    Bonjour,

    J'ai visionné le media sans trouver de procédure autre que celles que j'utilise.
    MPLABSIM>STIMILIS> VIEW....etc Quand on met un pull up sur des entrées elles se trouvent bien en réels mais n'apparaissent pas sur le SIM, donc le stimilis n'agit pas en pulse, SAUF si on joue avec le toggle ou set hight ou low. Ceci n'a jamais été le cas dans les MPLAB précédents et le forum de MICROCHIP contient quantité de posts avec ce problème spécifique. La seule réponse est : charger 8.33 au lieu de 8.30, résultat; idem.
    J'ai questionné mon fournisseur du pickit2: RS Component, qui s'est informé et n'a également pas trouvé de réponse.
    Il me reste à relire l'entièreté du tuto mais ce sera pour plus tard.

    Merci pour votre aide

    A+

Discussions similaires

  1. Convertisseur Asm => C
    Par inviteec0556c7 dans le forum Électronique
    Réponses: 8
    Dernier message: 28/06/2009, 23h42
  2. .C et .ASM
    Par invitec1317d72 dans le forum Électronique
    Réponses: 4
    Dernier message: 07/05/2008, 13h05
  3. Programmation PIC16F631 en ICD2
    Par Toufinet dans le forum Électronique
    Réponses: 9
    Dernier message: 14/12/2006, 23h32
  4. :fs: Passer du .c en .asm
    Par invitee37923cb dans le forum Logiciel - Software - Open Source
    Réponses: 18
    Dernier message: 08/02/2006, 21h09
  5. Asm-> Hexadecimal
    Par acx01b dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/01/2005, 20h13
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...