Port parrallele

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 312 fois - Téléchargée 35 fois

Contenu du snippet

test d une liaison centronics code en C

Source / Exemple :


/*
	BP_LED.CPP
	BP_LED.EXE
	Projet : BP ==> LED
	but : Allumer la led pendant 5s en appuyant sur le BP
	Version 1.1
	23/11/2001
	ABELANSKI Micha?l
	Turbo C

  • /
// declaration des biblioth?ques utiliser; #include <stdio.h> //pour param?tre entr?e sortie standart; #include <dos.h> //pour outportb, inportb, delay; #include <conio.h> //pour clrscr; gotoxy; #define RegData 0x0378 //d?claration du registre de donn?e; #define RegEtat 0x0379 //d?claration du registre de statut; void Led(void); //d?claration de la proc?dure LED; int BP(void); //d?claration de la proc?dure BP; void main(void) { clrscr(); printf("\n\t-Appuyer sur une touche pour quitter"); printf("\n\t-Appuyer sur le BP pour allumer la led pendant 5s"); gotoxy(2,7); //pointe ? la colonne 2 ligne 7 printf("ETAT LED : LED ETEINTE"); do { Led(); //appel de la fonction LED } while(!kbhit()); //faire tant qu'auncune touche frapper; gotoxy(1,15); //pointe ? la colonne 1 ligne 15 printf("\nVous avez appuyer sur une touche \nFin de programme"); delay(1000); //tempo 1s; } void Led(void) // Proc?dure LED(); { int i; outportb(RegData,0x00); //ecriture du registre de donn?e pour eteindre la led; if (BP() == 0) //si BP enfonc?; { outportb(RegData,0x01); // ?criture pour allumer la led; gotoxy(2,7); //pointe ? la colonne 2 ligne 7 printf("ETAT LED : LED ALLUMER"); for (i=5;i>= 0;i = i-1) //pour affichage d'1 { //decompteur boucle pour gotoxy(28,7); //r?p?ter 5 fois printf("T: %ds",i); //pendant 1s delay(1000); //5 * 1s = 5s } gotoxy(2,7); printf("ETAT LED : LED ETEINTE"); outportb(RegData,0x00); //?criture pour eteindre la led } } int BP(void) // proc?dure BP(); { int d5; d5 = (inportb(RegEtat) & 0x20); // lecture du registre d'?tat et masque pour lire seul le Bit D5; return d5; //renvoie de la valeur de d5 ? la proc?dure BP() ; }

Conclusion :


j ai egalement les test de bp et led separer by ... ;-)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
1 octobre 2005

je me suis trompé, dans la declaration , il faut declarer un la variable i comme un char . On choisi char car on a besoin de 8 bits
Messages postés
12
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
1 octobre 2005

j'ai trouver la solution : c'etait effectivement l'ardesse du port : 0x03BC au lieu de 0x0278 .
un lien google : port ibm
http://nicolas.marchildon.net/electro/parallele/

je vous donne un petit programme a ma facon :
attention , il n'est ni optimiser ni claire

le chenillard tant attendu:

#include <stdio.h>
#include <dos.h>
#include<conio.h>

void affiche(char Data)
{
outportb(RegData,Data);
delay(200);
}


void main (void)
{

void affiche(char);//prototype reconnu que dans main()
int Data=0x01;//equivalent a Data=1;

while(!kbhit())
{

affiche(Data);
Data=Data*2;//decalage vers le bit de poid fort

if(Data==0x080)
{
for(;Data>1;Data=Data/2)affiche(Data);
}

};

}

...bon ce programme n'est pas terrible mais c juste pour montrer le decalage de bits

ma question:
----------------
Je ne sais pas comment on accede a la carry en c , si quelqu'un sait ca serait franchement sympa de nous le dir. merci d'avance
PS:merci amosc
Messages postés
12
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
1 octobre 2005

slt, avec turbo C++2 j'ais compilé avec succes ce programme en C avec mon vieux pc
(un ibm portable [1980] intel pentum1 25Mhz avec un DDH de 25Mo Mdrr c meme pas mon lecteur MP3-))) ...bref.

-----Maleureusement ma LED ne change pas d'etat-----
?est-ce l'adresse du port?
________________________________________
| l'ecriture hazardeuse sur certains ports |
| peut degrader votre carte mere |
-----------------------------------------------------------------
le schema:
----------
(D0 est la broche 2 du port)
____ I
.bit D0 ---|____|->----+ courant de 20mA environs
. R |
. _|_
. DEL \ / environs 1,2 volts
. |
.bit 18-25 MASSE ___|

le rpogramme: effet tromboscope garanti lol ... pf
------------------
/*
____________________________
\/ clignotement de 1 hz de la del \/

PETITE REMARQUE:
ne pas depasser 25hz sinon on ne voie plus la LED clignoter

*/

#include <stdio.h>
#include <dos.h>
#include <conio.h>

void main(void)
{
while(!kbhit())
{
outportb(0x0378,0x00); // 0x00= (etteint del)
delay(500); //ETAT BAS de 0,5 seconde
//
outportb(0x0378,0x0FF); // 0x0FF= (allume del)
delay(500); //ETAT HAUT de 0,5 seconde
};
}

mes tests:
----------

j'ai alors mis mon voltemetre sur chaque bit du registre de donnée pendant l'execution de mon prog
et toujours pas de changement d'etat d'la part du port //
Cependant j'ai remarqué que mon port // avait toujours la meme valeur
lors du demarrage(au debut:led etteinte), le port prend une valeur qui allume la del
ce qui montre le bon fonctionnement du port // .

si quelqu'un a le temps et l'envie d'aider:
---------------------------------------------------
j'aurais aimer savoire :
-si la fonction outportb(id,data) initialise le port // en sortie (inversemment pour inportb )
-si l'adresse de mon port est exacte ( pc ibm des année 80 sous ms-dos) -j'en doute fort-


PS:
---
quand ca marcherra on ferra un p'tit chenillard sur le port // avec l'instruction rol ou autre ( rolc ?)
on va bien rigoler...
l'autre moi >>je t'arrete, On ne rigole pas avec son pc , c lui qui nous blague.
Messages postés
82
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
18 octobre 2005

Messages postés
82
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
18 octobre 2005

salut les ga,

j suis vraiment désole de ne pas vous avoir repondu avant mais je n avez pas recu de mail pour ce sujet,

Pour repondre à vos questions :

-la led se branche bien (pas directement ;-)) sur la broche 2 (bit D0 du bus de donnée);
-le bp se branche sur la broche 12 (bit PE du bus de control).
(pour + http://www.gazalo.com/technik/connecteur/parallele.htm)

Ce programme marche sous WinXp,NT, 2000 SI, et seulement "SI", vous telecharger un utilitaire du nom de "USERPORT" il permet de liberer l'acces à n'importe quel port de votre machine ....

...by ...by

Amosc ;-)
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.