Extraire un bit d'une variable.

Vous constatez des problèmes de fonctionnement, ou vous avez des propositions pour améliorer LogiPic, postez vos idées et remarques ici.

Extraire un bit d'une variable.

Message par L'Arsène » Lun Fév 24, 2014 4:55 pm

Bonjour vous tous,

Dans le but de faire une trame pour piloter un UAA 2022 je voudrais extraire bit à bit une variable et de mettre ce bit dans la trame via un bit d'un port configuré en sortie.
Par exemple: lire le bit 4 d'une variable Unité_heure qui modifiera le bit RC3 du port C selon son état. J'ai fait de multiples essais avec la fonction que l'on trouve dans Modules Bit Opération sans succès.

Le module à l'écran est composé comme suit:

PORTC,3
=Unité_heure,4

J'ai fait d'autres essais en testant le bit qui m'intéresse dans cette variable et positionner le bit d'un port en sortie, la aussi sans résultat correct.
Comment feriez-vous ?

Merci d'avance pour votre aide.
L'Arsène.
L'Arsène
1er Maître
 
Message(s) : 77
Inscription : Dim Mars 13, 2011 1:56 pm
Localisation : Moselle

Re: Extraire un bit d'une variable.

Message par LECLERE Michel » Mer Mars 05, 2014 2:28 am

Bonjour L'Arsène

Il existe une instruction dans Logipic qui permet d'attribuer le bit d'une variable à un bit d'un port (en fait ça peut très bien être d'une variable vers un port, un port vers un port ou encore d'un port vers une variable). J'ai testé avec des pics de la série 16F ainsi que 18F. Les résultats sont similaires. Le seul problème c'est que la valeur des bits est inversée. Je crois que Idmax avait corrigé le problème mais il semble persister quelque peu.
Quoi qu'il en soit, il existe 2 possibilités pour corriger ce petit problème :
1/ Tester le bit de la variable avec l'instruction "Test/Bit". Si la condition est vraie on positionne le bit du port concerné (Bit Port=1) sinon le bit du port est mis à 0.
2/ Un petit code asm :
Code : Tout sélectionner
             BTFSS     Variable,Bit
             GOTO      ClearBit
SetBit       BSF       PORT,Bit
             GOTO      Exit
ClearBit     BCF       PORT,Bit
             Exit


Il existe bien encore la possibilité de faire un XOR PORT mais ça risque de modifier des bits qui ne doivent pas l'être si l'on ne connait pas exactement le fonctionnement de cette fonction, l'avantage c'est que l'on peut effectuer le transfert en une seule opération.

J'espère que celà apportera une solution à ton problème

A bientôt
LECLERE Michel
Site Admin
 
Message(s) : 219
Inscription : Ven Juin 16, 2006 5:47 pm
Localisation : Bruxelles

Re: Extraire un bit d'une variable.

Message par L'Arsène » Mer Mars 05, 2014 3:32 pm

Bonjour Michel,

Heureux de pouvoir t'écrire.Tout d'abord merci pour tes solutions.
Je vais tester le résultat lors des attributions pour vérifier si ceux ci sont inversés. Il se peut bien du fait que j'avais un résultat mais pas celui je j'attendais.
J'essayerai aussi ta façon de faire en code asm. Si j'écris que "j'essayerai" c'est que je me suis souvenu qu'avec Thierry nous avions échanger nos idées concernant le mode I2C et qu'il avait mis au point la façon de faire un And entre bits de deux variables (tutos I2C). J'ai adapté sa façon de faire et cela fonction très bien. Le UAA 2022 n'a plus de mystère pour moi malheureusement n'est apparement plus fabriqué car je ne trouve plus dans les catalogues des grands distributeurs. Des vendeurs sur le net le proposent encore.
Mais comme je l'ai écrit dans ce lignes, j'essayerai aussi par curiosité et pour compléter mon savoir faire.

Cordialement.
L'Arsène.
L'Arsène
1er Maître
 
Message(s) : 77
Inscription : Dim Mars 13, 2011 1:56 pm
Localisation : Moselle

Re: Extraire un bit d'une variable.

Message par LECLERE Michel » Jeu Mars 06, 2014 12:33 am

Rebonjour

Juste une petite précision concernant le code asm...
Quand je mets BSF PORT,Bit ou BCF PORT,Bit il faut bien évidement préciser de quel port il s'agit, par exemple PORTA ou PORTB.
Le code que j'ai mis en ligne est un code générique.
C'est pareil pour la variable, il faut préciser le nom exact de la variable.

Amicalement
LECLERE Michel
Site Admin
 
Message(s) : 219
Inscription : Ven Juin 16, 2006 5:47 pm
Localisation : Bruxelles


Retour vers Bugs et idées d'améliorations

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron