Pic16f631/690

elsena Messages postés 3 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 17 novembre 2009 - 16 nov. 2009 à 13:50
elsena Messages postés 3 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 17 novembre 2009 - 17 nov. 2009 à 16:17
Bonjour,
J'ai fait un petit programme afin de me familariser avec la série 16f631/390, avant de réinscrire mes programmes dans ces nouveaux pics.
Celui ci a été fait pour le 16f631 et fonctionne sauf le PULL UP. J'ai beau essayer, je ne voies pas où j'ai fauté.

#include
__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 OPTION_REG, 7
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

merci à vous

PS: sur votre forum, est il possible d'ajouter un fichier joint, plutot que de recopier tout le programme?

2 réponses

elsena Messages postés 3 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 17 novembre 2009
16 nov. 2009 à 13:55
Excuses,

j'ai oublié de vous signaler:
W0 est une boucle qui attends une info descendente sur RA2. A ce moment, cicle interruption qui allume ou éteind la led sur RC0, puis retour à W0 jusqu'à info suivante sur RA2
0
elsena Messages postés 3 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 17 novembre 2009
17 nov. 2009 à 16:17
Bonjour,

Solution trouvée. Les effacements des analogiques se font en Bank2 au lieu de Bank1!!!!

A+

Elsena
0
Rejoignez-nous