Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PORT PARRALLELE


Information sur la source

Catégorie :.Net Niveau : Débutant Date de création : 15/02/2003 Date de mise à jour : 15/02/2003 23:50:31 Vu : 7 721

Note :
Aucune note

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

test  d une liaison centronics code en C
 

Source

  • /*
  • 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() ;
  • }
/*
	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 ... ;-)
 

Commentaires et avis

signaler à un administrateur
Commentaire de MangaII le 16/02/2003 09:43:51

A priori, ca a l'air simple et efficace ! j'ai pas testé ! toute façon, j'ai rien sous la main abranché sur le port // !

Mais est-ce que ton truc fonctionne sous des systèmes NT ????

signaler à un administrateur
Commentaire de Manson le 16/02/2003 15:31:54

Non, tu ne peux pas l'utiliser sous NT ou 2000/XP, car il utilise les appels direct aux ports, et ces system la interdisent l'acces aux ports directement.

signaler à un administrateur
Commentaire de jackky le 17/04/2003 15:28:50

salut je suis nouveau en c++ ca m'a l'air super ton truc et c'est sur quelle broche qu'il faut je connecte ma led ?

signaler à un administrateur
Commentaire de ttnicolas le 28/05/2004 17:08:05

Apparament la sortie serai sur la pin 2 (la led) et le bouton poussoir sur la pin 12 vue son code. Mais ce code fonctionne sur ms-dos, W95 et 98, peut etre le 2000

signaler à un administrateur
Commentaire de amosc le 01/06/2004 10:08:51

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  ;-)

signaler à un administrateur
Commentaire de amosc le 01/06/2004 10:14:20

Telecharger UserPort :

http://www.maestra.tv/francais/fichiers/index.php?action=file&id=212&PHPSESSID=93e983f31296f7d1b298e7f74867a686

signaler à un administrateur
Commentaire de mygiorgio le 04/12/2004 13:27:16

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.

signaler à un administrateur
Commentaire de mygiorgio le 04/12/2004 17:31:32

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

signaler à un administrateur
Commentaire de mygiorgio le 04/12/2004 17:35:17

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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.