Ne mettre à jour que la pinoche qui doit l'être
Re bonjour,
Cette fois-ci, je suis à la recherche d'une solution pour éviter de toujours écrire sur l'intégralité du port. Chez moi, ce port est coupé volontairement en 2, le LSB et le MSB. Si bien que quand j'écris un byte 0x05, j'ai bien 00000101. mais sur les deux ports 0000 et 0101.
Donc je passe à la suite. J'aimerais bien éviter de voir de inversions de pinoches involontaires. Ce qui peut, hélas arrivé quand le timing est serré et que le fait de couper en 2 le port pose problème.
Viens la solution de ne mettre a jour la pinoche tel que:
Code:
1 2
|
portWrite = (pin7 << 7) | (pin6 << 6) | (pin5 << 5) | (pin4 << 4) | (pin3 << 3) | (pin2 << 2) | (pin1 << 1) | (pin0 << 0); |
Il faut chargé pin7 avec 0/1 selon le cas etc pour les autres pin...
Jusque là, c'est pareil, je me dis que si je fais ceci:
Citation:
//Un peu de pseudo code
Prendre la nouvelle valeur de port
Rentrer dans une boucle de 7 à 0
Pour chaque bit du port actuel
comparer avec le même bit du précédent port mémorisé
si le nouveau bit != au bit ancien
mettre a jour le code précédent
placer dans le précédent port, le nouveau port
Tout ça est bien beau. Je rencontre un souci toute fois. Pour des raisons de simplicité de protocole, je transmet la valeur en décimale (oui, c'est mal mais j'ai pas le choix car le mode série hein...). Du coup, comment parcours-t-on un byte, bit à bit quand celui-ci est chargé avec du décimal ?
Je vous remercie par avance.