Surveillance d' entrées par IT

PapyJP

Senior Member
Quand je mets le picaxe sous tension, les cinq entrées C1 à C5 d' un 20M2 sont dans un certain état, par exemple C1,2 = 1 et C3:5 = 0.
Je voudrais surveiller les changements d' état de ces entrées par interruption ( c' est possible sur C1:5 ).
Donc " setint input,mask "

mask = %00111110 c' est évident.

L' état initial des entrées est facilement connu :
je peux écrire par exemple : bx = pinsC
puis complementer ( bx = bx XOR %11111111 ) pour avoir la valeur de " input " dans bx.

Question : Comment passer la variable bx dans l' instruction serint à la place de " input " ?

Tous mes essais dans PE ( bx, %bx, ... ) se terminent invariablement par un message d' erreur de compilation.
Pourtant le manuel2 précise :
input is a variable/constant (0-255) which specifies input condition
C' est bien dit " variable " !
Help, merci.
 

PieM

Senior Member
Question : Comment passer la variable bx dans l' instruction serint à la place de " input " ?
.
Bonsoir

Si ça marche! Vous n'aviez pas défini de routine interrupt: sans doute ...

Code:
b1=%00000000
setint b1,%00000010

interrupt:

setint %00000000,%00000010
return
 

PapyJP

Senior Member
En effet, ça fonctionne mais pas comme je le pensais !
La routine d' IT n' est pas exécutée si un des bits 2^1 à 2^5 est en 1 .
Si par exemple b0 = 192 ( 64 + 128 ) ou 193 ( 1 + 64 + 128 ) ---> IT
si b0 = 194 ( 2 + 64 + 128 ) ---> Pas d' IT
L état des bits C1:C5 ne sont pas précisés dans le code en simultation.
Sont-ils ' implicitement ' fixés à zéro et donc se serait un ET sur les zéros de 2^1 à 2^5 ? ( setint n' a pas d'attribut )
 
Last edited:

PapyJP

Senior Member
fuse
merci de cette synthèse complète et précise.
Il me parait trés logique, de décoder la page 5 en bas :
mask = %0000110 ---> surveiller les entrées C1 et C2 ( sur un 20M2 )
input = %0000110 ---> dérouler la sous-routine " interrupt " si C1 = 1 OU C2=1 ( puisque vous avez écrit ' setint or ' )
Celà est conforme et au manuel et à votre synthèse.

Cette logique, trés précise, ne s' applique pas à mon essai en #3.

J' en réfèrre à votre remarque de la page 4 " Attention : le mode simuation pose des pb " et pense être tombé dedans puisque les résultats de la simulation sont erronés à mon sens.
Votre avis ?

Il est nécessaire de ' réarmer ' le setint ' en fin de routine interrupt, Ok,
peut-on écrire setint avec un nouvel attribut ( and par exemple ), un nouveau ' mask ' et un nouvel ' input ' ?
Ce serait trés puissant.

PS : Parfois j' écris une réponse que je perds en cours de route avant de l' envoyer ( ? ).
Comment retrouver mon texte qui est ' Auto-saved ' ?
 
Last edited:

fuse

Senior Member
Bonjour papy JP,
votre commande
mask = %0000110 ---> surveiller les entrées C1 et C2 ( sur un 20M2 )
input = %0000110 ---> dérouler la sous-routine "
doit être remplacée par

setint or = %0000110, %00000110 ---> interruptions sur les entrées C1 et C2 avec Mask sur C1 et C2.

Cependant, la surveillance de C1 et C2 s'effectue uniquement sur le front montant (passage de 0 à 1), à mon avis cela ne répond pas exactement à votre problème de surveillance des entrées... En effet, si à la mise en route une entrée est à 1, le changement d'état (donc de 1 à 0) ne sera pas pris en compte....
 

fuse

Senior Member
Bonjour,

Pour avoir des infos rapides sur les commandes, je vous recommande de cliquer sur le bandeau "BASIC Commands" en haut de cette page.

Cordialement
 
Top