Bonjour à tous!
Voila c'est mon premier message sur vos forums. On trouve vraiment plein de chose dessus!^^
Venons en au fait: je me suis mis sérieusement à la programmation des PIC en language évolué (ici le C). Je suis équipé d'un PIC KIT 2 officiel avec la carte de demonstration sur laquelle il y a un PIC 16F690. J'ai comme compilateur la version LITE de HI-TECH SOFTWARE. Apparamment, la seule difference avec la version payante du compilateur (donc non limité) c'est une fonction qui réduit la taille du code de 50%.
J'ai appris le C à l'IUT (je suis maintenant en école d'ingé) mais j'ai un souci avec les masques que je fais pour changer la valeur d'une sortie.
Pour lire une valeur pas de souci:
ex: lire RA7 --> PORTA=PORTA & 0b01000000;
Par contre, pour les sorties, si RC est à 1 par exemple, quand je veux mettre RC1 à 1 sans toucher à RC0, je fais ce masque:
PORTC=PORTC | 0b00000010;
Et là, RC0 tombe mystérieusement à 0, et RC1 monte bien à 1.
Si je fais ca:
RC0=1;
RC1=1;
RC0 tombe à 0 une fois l'instruction RC1=1; exécutée.
Je comprends pas... Pourtant le masque est correcte. J'ai essayé de cerner le souci, alors j'ai fais qq tests. Quand je fais:
PORTC=0b00000001; //RC0 passe a 1
PORTC=PORTC; //ligne à priori inutile
La ligne inutile ne semble en faite pas si inuile que ça, puisque une fois exécuté, RC0 passe à 0. Ca veut donc dire que le registre du PORT C repasse à 0.La seule solution que j'ai trouvé c'est ca:
PORTC_ACTUEL = PORTC = 0b00000001;
PORTC = PORTC_ACTUEL|0b00000010;
Et la j'ai bien RC0 et RC1 à 1...
Si je fais ca, ca ne marche pas ...
PORTC=0b00000001;
PORTC_ACTUEL=PORTC; //enregistrement de l'état du portc
PORTC=PORTC_ACTUEL|0b00000010;
C'est un peu galère comme code alors j'aimerais trouver une solution plus appropriée..
Je sais pas si vous connaissez d'autres compilateur C gratuit, ou si vous avez une solution.
D'avance merci!
-----