Claudius a écrit :Les noms des variables entre le C et l'assembleur même au sein d'un même fichier ne sont pas les mêmes (un bon exemple est
Connaitre le temps d’exécution d'une instruction où
i définie en C est accédée en assembleur par
_i 
)
j'ai un problème avec les constantes pas avec les variables et si je ne me trompe ici c'est le résultat d'une decompli rien a voir.
Les variables restent les même, c'est pour le compli. Exemple en ASM l'appel d'un spg en biblio objet ce fait, du style _ClavierX4 pourtant le spg est bien déclaré clavierx4 et on est en ASM
Par expérience les noms des variables accessibles depuis l'assembleur et définies en C doivent être préfixées par '_'
maï, je t'invite donc à essayer: asm("MOVLW _cons");
merci mais tu penses bien, que cela j'ai déjà fait ,c'est pas le problème, le problème c'est le CONSTANTES
NB: Restera peut-être un problème de taille car par défaut en C, les constantes numériques sont des int qui risquent de ne pas "rentrer" présentement dans le registre W qui est, sauf erreur de ma part, codé sur 8 bits
tu es sur ? regarde le résultat chargement d'une constant sur un char.il suffit que la constant fasse moins de 256 et sa rentre
Code : Tout sélectionner
! CodeX= QUARTZ;
0xD6: MOVLW 0x14
0xD7: BCF STATUS, 0x5
0xD8: BCF STATUS, 0x6
0xD9: MOVWF 0x27
0xDA: MOVF 0x27, W
0xDB: MOVWF CodeX
Les constantes NON pas de FORMAT et c'est la le risque
tient ici
c'est pas de INT

on est loin des 65535
tient resultat avec QUARTZ 300
Code : Tout sélectionner
! int Tempo;
! CodeX= QUARTZ;
0xD6: MOVLW 0x2C
0xD7: BCF STATUS, 0x5
0xD8: BCF STATUS, 0x6
0xD9: MOVWF 0x27
0xDA: MOVF 0x27, W
0xDB: MOVWF CodeX
la c'est tout
FAUXje sais aussi qu'il faut manipuler les constants avec prudence mais la n'est pas la question
Je suis toujours sous 16F donc gestion des banques
A+