Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Peut-on separement gerer les bits en MikroC?
patmus
Membre
Membre
Messages : 4
Enregistré en : février 2019

#1 Message par patmus » dim. 21 avr. 2019 12:31

Salut
Je un débutant passionné de microcontrôleur PIC et je souhaite réaliser un compteur et un décompteur modulo 99 avec un PIC16F84A. J'utilise deux décodeurs sur les portb, B0 à B3 pour le compteur et port B4 à B7 pour le décompteur. Ma question est de savoir comment faire pour separer les ports b de 4bits à 4bits. pour le multiplexage là il n'y a pas de problème je me débrouille un peu bien.
Patmus

Peut-on separement gerer les bits en MikroC?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2321
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » lun. 22 avr. 2019 10:07

Bonjour patmus et bienvenue sur FantasPic,

Je ne suis pas sur d'avoir très bien compris ta problématique mais je vais tenter une réponse .

Je pense qu'il faut que tu utilises "un masque de bits". C'est à dire qu'il faut cacher les bits que tu ne veux pas tenir comptes.
Le but est d'extraire les données qui t'intéresse. Les mettres dans une variable temporaire pour les exploiter "seuls".

Si tu veux je peux expliciter un peu plus !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Peut-on separement gerer les bits en MikroC?
patmus
Membre
Membre
Messages : 4
Enregistré en : février 2019

#3 Message par patmus » lun. 22 avr. 2019 10:40

Salut Jeremie,
Pour éclairer ma question, c'est juste savoir comment gérer les bits par ordre de 4 c'est-à-dire faire le comptage de 0 à 9 avec RB0 - RB3 et le décomptage de 9 à 0 avec RB4 - RB7.
Pour ce que vous avez dit d'isoler les bits comment ça se fait?
Patrick

Peut-on separement gerer les bits en MikroC?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2321
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » lun. 22 avr. 2019 11:40

Re,

Je tiens au "Y" de mon prénom !!! :sifflotte:

Pour les bits de poids faibles ( ceux qui sont à droite) . il faut masquer les 4 bits de gauche. On fait une petite opération booléenne.
Ton chiffre "ET" "00001111" = ton chiffre à exploiter.
En faisant ainsi les 4 bits de poids fort sont mis à zéro(donc ignorés) et il ne reste que les 4 chiffres de poids faibles.

Pour sortir les bits de poids forts , on effectue un décalage à droite de 4 cases. ainsi les bits de poids forts se retrouve en bit de poids faibles avec que des zéros en poids fort .
Par exemple : ABCDEFGH si je fais un décalage à droite de 4 cases j'obtiens : 0000ABCD et donc mon chiffre à exploiter.

Je ne sais pas si c'est très clair mon explication lol . A s tu un début de programme? je pourrais utiliser des exemples plus concrets!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Peut-on separement gerer les bits en MikroC?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1118
Âge : 60
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#5 Message par Gérard » lun. 22 avr. 2019 14:19

Jérémy a écrit :Re,

Je tiens au "Y" de mon prénom !!! :sifflotte:
...


Attention Pat, tu vas fâcher le Boss... :lol:

Ceci dit, bienvenu à toi, c'est cool et sympa ici, tu verras.

Je vais te proposer une solution.
Soit 3 octets, D (celui qui contient la valeur de 0 à 9 des dizaines), U (celui qui contient la valeur de 0 à 9 des unités) et FINAL (celui que tu enverras au port RB)
Avec les valeurs de 0 à 9 dans U et D tu vas faire la chose suivante :
- 4 décalages vers la gauche de D (tu auras une valeurs de 0 à 9 dans la partie gauche de l'octet et quatre 0 à droite)
- tu fais un AND entre U et D, valeur que tu attribueras à FINAL
- tu envoies FINAL sur RB

C'est le principe, je ne connais pas bien le C, mon truc (non Temps-x, ce n'est pas l'ASM :langue: ) c'est le Basic.
Le 18 / 04 / 2019 je suis devenu papy de jumeaux, une fille et un garçon. Quel bonheur.

Peut-on separement gerer les bits en MikroC?
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1253
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » lun. 22 avr. 2019 15:16

Bonjour patmus, Jérémy, Gérard, et tout le forum,


Soit le bienvenue sur le forum, et j'espère que tu y passeras des bons moment comme nous. :wink:


Ben moi je pratique ASM, le C pour moi c'est incompréhensible.

La premier chose c'est de lire tout le PORTB et le stocker dans une variable pour traitement,

Mais je peux pas continuer à t'aider si tu n'a pas de schéma, et la datasheet de tes décodeurs,

Ne pas confondre encodeur avec décodeurs, c'est pas la même chose.

Jérémy a écrit :Source du message Je tiens au "Y" de mon prénom !!! :sifflotte:


cyril13110 à un concurrent..... :sifflotte:

Gérard a écrit :Source du message mon truc (non Temps-x, ce n'est pas l'ASM :langue: ) c'est le Basic.


Gérard pratique couramment les deux langages ASM, Basic, c'est un Pro.... :eek:

A+
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

Peut-on separement gerer les bits en MikroC?
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1338
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#7 Message par paulfjujo » lun. 22 avr. 2019 15:48

bonjour,

En effet,
la solution masque et decalage me semble la solution la plus appropriée

(PORTD en exemple ..au lieu de PORTB )

Code : Tout sélectionner



  
//en lecture
  PORTD=0x36;
  // lecture PORTS
  c1=PORTD;
  ByteToHex(c1,CRam1);
  //isolation b7..b4
  UART1_Write_Text(CRam1);UART1_Write(TAB);
  c1=PORTD>>4;
  ByteToHex(c1,CRam1);
  UART1_Write_Text(CRam1);UART1_Write(TAB);
  // isolation   B3..b0
  c1=PORTD & 0x0F;
  ByteToHex(c1,CRam1);
  UART1_Write_Text(CRam1);
  CRLF1();
  



affiche 36 03 06

ne pas oublier qu'on a acces aussi aux bits individuellement


PORTB.B0
PORTB.B1
...etc ...
Aides toi, le ciel ou Fantastpic t'aideras

Peut-on separement gerer les bits en MikroC?
patmus
Membre
Membre
Messages : 4
Enregistré en : février 2019

#8 Message par patmus » mar. 23 avr. 2019 02:31

Je tiens à veiller sur l’écriture de votre nom avec un Y. Jeremy
mon problème est que pendant que les quatre premier bits font le comptage les quatre autres font le décomptage

Peut-on separement gerer les bits en MikroC?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1118
Âge : 60
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#9 Message par Gérard » mar. 23 avr. 2019 07:29

patmus a écrit :Je tiens à veiller sur l’écriture de votre nom avec un Y. Jeremy
mon problème est que pendant que les quatre premier bits font le comptage les quatre autres font le décomptage


Ce que j'ai écrit en #5 reste valable pour du comptage et du décomptage.
Le 18 / 04 / 2019 je suis devenu papy de jumeaux, une fille et un garçon. Quel bonheur.

Peut-on separement gerer les bits en MikroC?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2321
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#10 Message par Jérémy » mar. 23 avr. 2019 19:10

patmus a écrit :Source du message mon problème est que pendant que les quatre premier bits font le comptage les quatre autres font le décomptage


Pour la partie compteur ( bit de poids faibles) pas de problème tu comptes normalement de 2^0 à 2^3
Pour la partie dé-compteur au lieu de décompter de 1 en 1 tu peux décompter de 2^4 à 2^7
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités