Bonjour à tous,
Je cherche un moyen de lire et modifier l'état des bits du port parrallèle.
Comment peut on réaliser cela?
Merci,
Bonjour à tous,
Je cherche un moyen de lire et modifier l'état des bits du port parrallèle.
Comment peut on réaliser cela?
Merci,
Bonjour
Il y a plusieurs moyen de faire cela.
Si on veux faire proprement, on ouvre la fichier "\\LPT1" puis on l'utilise comme un vrai fichier text on lisant et écrivant des octects. (c'est lourd à faire)
Si on veut être plus cochon, on peut faire cela :(je serai incapable d'expliquer les partie en assembleur du code, c'est un exemple que j'avais trouvé sur le net)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #include <iostream.h> char lire(unsigned short adr); void ecrire(unsigned short adr,char out_char); char lire(unsigned short adr) { unsigned char ret_char; asm { mov dx,adr in al,dx mov ret_char,al } return(ret_char); } void ecrire(unsigned short adr,char out_char) { asm { mov al,out_char mov dx,adr out dx,al } } int main() { //ecrit sur le port parallele la valeur 10 ecrire(0X0378,10); //lit le port parallele cout<<lire(0X0378); return 0; }
mabu
ne marche pas sous NT/XP.Si on veut être plus cochon, on peut faire cela :
Il me semblais bien qu'il y avait une limite... Mais comment se fait ce ?Envoyé par Aurelien.Regat-Barrel
L'autre méthode fonctionne sous xp, je l'ai testé il y a pas longtemps, je dois avoir les sources sur un cd chez moi, je reviendrai poster le minimum.
in / out sont des instructions privilégiées, réservées aux drivers. En effet en modifiant les IO ports, tu peux mettre en péril la stabilité de l'OS. Les OS sérieux (XP, Linux...) t'interdisent de les utiliser dans tes progs basiques. Si tu le fait, ton programme sera tué.Il me semblais bien qu'il y avait une limite... Mais comment se fait ce ?
Faudrait spécifier ce que tu entends par "les bits du port parallèle".
Tu peux ouvrir "LPT1" (ou "\\.\LPT1", mais pas "\\LPT1") comme te l'a expliqué mabu, et tenter d'utiliser GetCommConfig / GetCommProperties / etc... pour avoir des infos. Celà dit le port LPT1 est un peu à part et c'est pas garantie que ça marche. A tester...
Merci à tous,
Dans certain exemple sur le net on trouve cette fonction: _inp, apparament pour lire le port LPT1.
En fait, mon objectif et d'utiliser le port parrallèle pour communiquer avec un montage éléctronique externe à partir d'un PC et de pouvoir lui envoyer des commandes.
J'entend par bits toute les broches du port LPT1, elles peuvent être à un niveau haut ou à un niveau bas pour indiquer un 1 ou un 0 logique.
_inp, inp, __asm in, ... tout ça c'est pareil, ça passera pas sous NT/XP. Sois tu tentes "LPT1", soit tu utilises un driver qui te fourni une fonction équivalente à _inp.
Ok, merci,
Donc si je résume et avec ce que j'ai trouvé comme info sur le net.
- Soit j'utilise des drivers, type portIO.dll ou autre
- Soit j'utilise le code fournit plus haut (Assembleur)
- Soit j'utilise les fonctions CreateFiles pour avoir un accé au port LPT1.
La solution assembleur me semble un peu brutale et je préfère une des deux autres.
Quelqu'un pourrait t'il partager son experience sur le sujet pour voir la meillieur solution ou pour trouver des exemples, surtout avec les drivers.
Est ce que Windows fournit un driver pour avoir un accé direct au port // (LPT1)?
Dans le cas des fonctions CreateFiles peut-on connaitre les broches de sorties qui vont être mise à 5Volts ou à 0Volts en fonction des octets envoyés?
Partager