Menu
Code PIC et équations booléennes


1) Fonctions booléennes et PIC

Préambule :
Toutes les instructions PIC occupe une seule adresse dans la mémoire programme (Zone mémoire programme du PIC de largeur 14 bits en général)
Pour simplifier l'écriture, chaque bit adressé est représenté par une lettre : a, b, c, etc.
Microchip PIC : plus d'info sur http://www.microchip.com
Programme à télécharger PIC Finder, pour l'utiliser, lire ce qui est ci-dessous

Il y a quatre fonctions de travail sur bit dans les codes PIC.
Ci-dessous, nous allons voir comment un programme travaillant sur des bits peut être assimilé à un ensemble d'équation booléennes :
  • à chaque instruction on a :
  • 1 équation de passage dans l'instruction
  • si une variable x est modifiée à l'extérieur d'un saut,on a l'équation   x:=(valeur de modif)
  • si une variable x est modifiée à l'intérieur d'un saut,on a l'équation    x:=x./(condition de passage)+(valeur de modif).(condition de passage)
La valeur de modif ets 0 ou 1

Instructions de base :
BCF Le bit a est mis à 0 La valeur du bit a est remplacée par 0
 a:=0
BSF Le bit a est mis à 1 La valeur du bit a est remplacée par 1
 a:=1
BTFSC L'instruction suivante est sautée si a=0 Si l'instruction est BCF b, on obtient b:=/a.b
Ceci est  un clear conditionné



Si l'instruction est BSF b, on obtient b:=a+b soit b:=/a=>b
Ceci est  un set conditionné
Valeur de b
b  \  a 0 1
0 0 0
1 1 0
Valeur de b
b  \  a 0 1
0 0 1
1 1 1
BTFSS
L'instruction suivante est sautée si a=1 Si l'instruction est BCF b, on obtient b:=a.b
Ceci est  un clear conditionné



Si l'instruction est BSF b, on obtient b:=/a+b soit  b:=a=>b
Ceci est  un set conditionné
Valeur de b
b  \  a 0 1
0 0 0
1 0 1
Valeur de b
b  \  a 0 1
0 1 0
1 1 1

Etudions l'exemple ci-dessous :

test condition de passage

1


1


/b


/b.c+b=b+c


1
Equation de a

a:=0


a:=0


a:=0


 a:=0./(b+c)+1.(b+c)


a:=b+c

Explications
:
Le programme passe dans BTFSC c si b=0 donc la condition de passage est /b
Le programme passe dans BSF a si ( b=0 et  c=1) ou si ( b=1)  soit b+c=1 donc la condition de passage est b+c
Le  bit a est mis à 1 si le programme passe dans BSF a, et reste à sa valeur 0 si le programme ne passe pas dans BSF a.
La valeur de a est donc 0./(b+c)+1.(b+c) soit b+c.
On a ainsi réalisé une fonction  ou

Le tableau ci-dessous est plus sobre, mais moins compréhensible :

Code Passage Variable
BCF a 1 a:=0
BTFSS b 1 a:=0
BTFSC c /b a:=0
BSF a /b.c+b=b+c a:=0./(b+c)+1.(b+c)
Instruction.. 1 a:=b+c

Autre test :

Code Passage Variable
BCF a 1 a:=0
BTFSS b 1 a:=0
BSF a /b a:=0./(/b)+1.(/b)
Instruction.. 1 a:=/b

2) Petit programme à télécharger

Télécharger PIC Finder : c'est un programme qui recherche toutes les solution correspondant à une équation booléenne données.

Après avoir télécharger, exécuter l'équation proposée  a=b+/c  en cliquant sur l'ampoule.
Le programme répond :

 Recherche systématique de code Microchip
 Par Y.Printems, Juillet 2007
 a=b+/c
 3 variable(s) : a, b, c,
 00=01+/02
 Réduction de :   01+/02
1 2 3 3  03
 Pas d'autorisation de sacrifier des bits
 Pas d'autorisation d'utiliser des bits temporaires
 Recherche sur 3 lignes 0 variable(s) temporaire(s)
128!!!
 Recherche sur 4 lignes 0 variable(s) temporaire(s)
 Solution 1 Essai N° 694
 BCF   a
 BTFSC c
 BTFSC b
 BSF   a

Solution 2 Essai N° 960
 BCF   a
 BTFSS b
 BTFSS c
 BSF   a

1024!!!

Le programme a testé sur 3 lignes de code puis sur 4 lignes de code toutes les combinaisons de codes (en tout 1152 ) et de variables possibles et affiche celles qui donnent le bon résultat pour l'équation demandée. Ici, il a trouvé 2 codes corrects.

On peut lui demander
  • d'utiliser des variables temporaires : des bits supplémentaires sont alors utilisés
  • de sacrifier des bits : des bits sont utilisés et donc modifiés pour le calcul. cela permet de gagner 1 ou 2 codes quand il y a une solution qui utilise ce principe.
Remarque :
Il faut développer les équations pour les soumettre à PIC Finder.


3) Exemple plus corsé

a=b.d+b.e+c.d+c.e  donne sans sacrifice 24 solutions de 8 lignes, dont la dernière est :
 BCF   a
 BTFSS d
 BTFSC e
 BSF   a
 BTFSS b
 BTFSC c
 BTFSS a
 BCF   a

a=b.d+b.e+c.d+c.e  donne avec sacrifice et un peu de patience 16 solutions de 7 lignes, dont la dernière est :
 BSF   a
 BTFSC b
 BSF   c
 BTFSS d
 BTFSC e
 BTFSS c
 BCF   a
Ici, on sacrifie c et on gagne une ligne de code.

Analysons ce code :

Code Passage Variable
 BSF   a 1 a=1
 BTFSC b 1
 BSF   c b c=b+c
BTFSS d 1
 BTFSC e /d
 BTFSS c d+e
 BCF   a /b./c+/d./e e.c+e.b+c.d+b.d
instruction 1

Détails de calcul :

BSF c     :  variable c=/b.c+b.1 = /b.c+b = b+c  (si si !!!)
BTFSS c : passage  d+/d.e=d+e
BCF   a   :  passage /d./e+(d+e)./c ,  avec  c=b+c on obtient : /d./e+(d+e)./(b+c) = /b./c+/d./e   (mais si, mais si : vous pouvez faire une table de Karnaugh pour vérifier...)


4) Conclusion

Programme PIC Finder :

Peut rendre service à ceux qui utilisent des PICs
Mais peut amener à cogiter sur des résultats comme ci-dessus...

Méthode d'analyse

A priori, elle peut être utilisée pour d'autre matériel  et pour d'autre langages

Menu