begin process at 2010 03 22 02:23:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.Net

 > PORT PARRALLELE

PORT PARRALLELE


 Information sur la source

Note :
Aucune note
Catégorie :.Net Niveau :Débutant Date de création :15/02/2003 Date de mise à jour :15/02/2003 23:50:31 Vu :8 374

Auteur : amosc

Ecrire un message privé
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 ... ;-)


 Sources du même auteur

Source avec Zip BASE DE DONNEE ACCESS

 Sources de la même categorie

Source avec Zip Source avec une capture MAP_MAKER_JEU par seekplus
Source avec Zip Source avec une capture Source .NET (Dotnet) EMISSION D'UN OCTET SUR LE PORT SÉRIE - CLASSE SERIALPORT par jmchatelet01
Source avec Zip Source .NET (Dotnet) RESOLV EQU DE DEGRES N par darckangel731
Source avec Zip Source avec une capture Source .NET (Dotnet) INTEROP XCHAT / .NET : CHARGEUR DE PLUGINS MANAGÉS par TeBeCo
Source avec Zip Source avec une capture Source .NET (Dotnet) SCANNER D'ADRESSES MAILS PRÉSENTENT SUR GOOGLE par Zaltez

Commentaires et avis

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 ????

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.

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 ?

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

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

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

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.

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

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...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales