Overclocking : spittt, 3 utilisateurs anonymes et 23 utilisateurs inconnus

 Mot :   Pseudo :  
 
 Page :  1  2
Page Suivante 
Auteur Sujet :

programmer très simplement le port //

n°3171
Homertrix
Modérateur.
Posté le 10-06-2004 à 21:20:04  profilanswer
 

Reprise du message précédent :

Dr Lous a écrit :

Code :
  1. /* compiler avec gcc -O2 pour les macros inb et outb */
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <asm/io.h>
  5. #define lpt_port 0x378  /* Changer l'adresse du port ici */
  6. #define STATUS lpt_port+1
  7. #define CONTROL lpt_port+2
  8. /* Une série de définitions pour simplifier la programmation */
  9. #define SET_E outb(inb(CONTROL) & 254,CONTROL)  /* E=1 (Strobe) */
  10. #define RAZ_E outb(inb(CONTROL) | 1,CONTROL)  /* E=0 (Strobe) */
  11. #define SET_RS outb(4,CONTROL) /* RS=1, la donnée est un caractère */
  12. #define RAZ_RS outb(0,CONTROL) /* RS=0, la donnée est une instruction */
  13. void Init_LCD (void);
  14. void Efface_LCD (void);
  15. void Ecrire_LCD (char *Chaine, char Position);
  16. int coco;
  17. /*
  18. Adresse du curseur (en hexadécimal):
  19.  
  20. digit  : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
  21.  
  22. ligne 1: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93
  23. ligne 2: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3
  24. ligne 3: 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7
  25. ligne 4: D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7
  26. */
  27. int main(void)
  28. {
  29. char *Phrase1="Taper",
  30.  *Phrase2="Votre",
  31.  *Phrase3="Message Sur",
  32.  *Phrase4="La console";
  33. if(ioperm(lpt_port,3,1))
  34. {
  35.     perror("ioperm" );
  36.     exit(1);
  37. }
  38.  Init_LCD();
  39.  //clrscr();
  40.  printf("*************************************************\n" );
  41.  printf("*    Programme de test d'un ecran LCD 4 * 20    *\n" );
  42.  printf("*************************************************\n\n\n" );
  43.  Ecrire_LCD(Phrase1,0x80);
  44.  Ecrire_LCD(Phrase2,0xC0);
  45.  Ecrire_LCD(Phrase3,0x94);
  46.  Ecrire_LCD(Phrase4,0xD4);
  47.  //printf("Taper le message puis Enter.\n" );
  48.  
  49.  while (1)
  50.  {
  51.   coco = getchar();
  52.   if (coco == 47) //si caractere egale a    "/" effacement ecran...
  53.   {
  54.    printf("\n\n----EFFACEMENT ECRAN!!!----\n\n" );
  55.    RAZ_RS;
  56.    outb(0x01,lpt_port); // mise des valeur sur le port
  57.    SET_E;
  58.    usleep(2000);
  59.    RAZ_E;
  60.    usleep(2000);
  61.    SET_RS;
  62.   }
  63.   else
  64.   {
  65.    if (coco == 10)
  66.    {
  67.      //printf("Bouh\n" );
  68.    }
  69.    else
  70.    {
  71.     if (coco == 176){coco = 223;}
  72.     if (coco == 40){coco = 255;}
  73.     printf("-'%d'\n", coco);
  74.      outb(coco,lpt_port); // mise des valeur sur le port
  75.     SET_E;
  76.     usleep(10);
  77.     RAZ_E;
  78.     usleep(10);
  79.    }
  80.   }
  81.   if (coco == 81)
  82.   {
  83.    Efface_LCD();
  84.    Ecrire_LCD("MERCI D'AVOIR",0xC0);
  85.    Ecrire_LCD("UTILISE Dr-LCD",0x94);
  86.    exit();
  87.   }
  88.  }
  89.  printf("%d",0x30);
  90.  return 0;
  91. }
  92. void Init_LCD (void)
  93. {
  94. char Init[5],i;
  95. Init[0] =  0x30;
  96. Init[1] =  0x38;
  97. Init[2] =  0x0F;
  98. Init[3] =  0x01;
  99. Init[4] =  0x06;
  100. outb(inb(CONTROL) & 0xDF,CONTROL); /* On place le port parallèle en sortie */
  101. RAZ_RS;
  102. for(i=0;i<=4;i++)
  103. {
  104.  outb(Init[i],lpt_port); /* On place la donnée sur le bus */
  105.  SET_E;
  106.  usleep(20000); /* Délais de 20 ms */
  107.  RAZ_E;
  108.  usleep(20000);
  109. }
  110. SET_RS;
  111. }
  112. void Efface_LCD (void)
  113. {
  114. RAZ_RS;
  115. outb(0x01,lpt_port); /* On place l'instruction d'effacement sur le bus */
  116. SET_E;
  117. usleep(20000);
  118. RAZ_E;
  119. usleep(2000);
  120. SET_RS;
  121. }
  122. void Ecrire_LCD (char Chaine[20], char Position)
  123. {
  124. int i,Taille;
  125. Taille=strlen(Chaine);
  126. RAZ_RS;
  127. outb(Position,lpt_port); /* Adresse d'écriture */
  128. SET_E;
  129. usleep(1);
  130. RAZ_E;
  131. usleep(1);
  132. SET_RS;
  133. for(i=0;i<Taille;i++)
  134. {
  135.  outb(Chaine[i],lpt_port); /* On place la donnée sur le bus */
  136.  SET_E;
  137.  usleep(1);
  138.  RAZ_E;
  139.  usleep(1);
  140. }
  141. }




 
C'est le truc que tu as fini le 31 Décembre à 7H30 du math quand j'ai débarquer chez toi ? [:grut]
 
 :ange:

mood
Google
Posté le 10-06-2004 à 21:20:04  profilanswer
 

n°3174
Dr Lous
I see old password
Posté le 11-06-2004 à 00:26:06  profilanswer
 

oui


---------------
Oseras-tu m'affronter ?
n°3175
Deadog
Dain Bramaged
Posté le 11-06-2004 à 00:52:08  profilanswer
 

des variables avec des majuscules :heink:
 

n°3176
DarkBears
j'aime le miel put1 d'abeilles
Posté le 11-06-2004 à 00:59:12  profilanswer
 

bin oui pourquoi pas !
tu fais ce que je tu veux ;)

n°3177
Deadog
Dain Bramaged
Posté le 11-06-2004 à 01:19:08  profilanswer
 

pê mais c plutôt bof :/
pas agréable à lire, surtout kan les fonctions ont aussi des maj :D
 
d'ailleurs, générallement, le nom de fonctions n'a surtout pas de maj au 1er caractère :D
 
on va écrire getData plutôt que GetData par expl


Message édité par Deadog le 11-06-2004 à 01:20:18
n°3178
Dr Lous
I see old password
Posté le 11-06-2004 à 01:30:08  profilanswer
 

pour les defines


Message édité par Dr Lous le 11-06-2004 à 01:30:28

---------------
Oseras-tu m'affronter ?
n°3179
Deadog
Dain Bramaged
Posté le 11-06-2004 à 01:50:36  profilanswer
 

Oups dsl g edité ton post :ange:
 
 
ton mess c t ca a peu pres : les defines commence par __


Message édité par Deadog le 11-06-2004 à 02:01:58
n°3180
Dr Lous
I see old password
Posté le 11-06-2004 à 02:01:09  profilanswer
 

#define RAZ_RS
 
:D
 
sinon je cherche un bon bon bon tuto ou cours sur le c pour avoir de vrai base de prog (et aussi savoir prog avant de rentrer en sup :d)


---------------
Oseras-tu m'affronter ?
n°3181
Dr Lous
I see old password
Posté le 11-06-2004 à 02:02:02  profilanswer
 

les defines ça commence par __ :D
 
ca c pas les trucs integrer ?
 
genre __default__ ?


---------------
Oseras-tu m'affronter ?
n°3182
Deadog
Dain Bramaged
Posté le 11-06-2004 à 02:49:32  profilanswer
 

bon bah écoute, tu as ka lire les sources de la glibc C, la tu vas apprendre à prog, apprendre les notations standard, etc ...


Message édité par Deadog le 11-06-2004 à 02:50:17
n°3183
Dr Lous
I see old password
Posté le 11-06-2004 à 02:53:00  profilanswer
 

:/
 
un jour il y a un link sur un cours de C, mais plus moyen de remettre la main dessus :/


---------------
Oseras-tu m'affronter ?
n°3184
Deadog
Dain Bramaged
Posté le 11-06-2004 à 02:55:19  profilanswer
 
n°3185
Dr Lous
I see old password
Posté le 11-06-2004 à 02:56:15  profilanswer
 
n°3186
Dr Lous
I see old password
Posté le 11-06-2004 à 02:56:42  profilanswer
 

arf y sont bien fourni aussi ces cours la :D


---------------
Oseras-tu m'affronter ?
n°3199
Blue Sn4ke
Zelda Fan
Posté le 11-06-2004 à 23:11:10  profilanswer
 

pour revenir a mon sujet, alors il faut que je fasse comment ?
faut que je mette le port // a epp dans le bios ?

n°3896
cLx
Posté le 25-08-2004 à 15:29:32  profilanswer
 

Bonjour!  
 
J'ai trouvé cet article dans google parce que je cherchais, moi aussi, a faire des IN et des OUT avec g++ / dev-c++, et que je ne trouvais rien... D'ailleurs, je n'ai toujours rien trouvé. ":)
 
Moi, c'est pour programmer ce truc : une vielle carte ISA avec plein d'E/S dessus.
 
 
http://clx.freeshell.org/gallery/.thumbs/im000653.jpg http://clx.freeshell.org/gallery/.thumbs/im000652.jpg
http://clx.freeshell.org/view.html?&f=im000653.jpg
http://clx.freeshell.org/view.html?&f=im000652.jpg
 
A grands coups de debugger, ça a donné ce code là, avec plein d'assembleur AT&T dedans. Je sais, c'est moche mais ça marche sous dev-c++, et Win98 ne doit pas empecher les in/out.
 
J'espere que ça aidera. :)
 
 

Code :
  1. /* O/I */
  2. unsigned int in(unsigned int port){
  3.     __asm("
  4.       MOVW 8(%ebp), %dx
  5.       MOVL $0, %eax
  6.       IN %dx, %al
  7.     " );
  8.     /* pas de "return int;" : la valeur de retour est déjà contenue dans eax */
  9. }
  10. void out(unsigned int port, unsigned int donnee) {
  11.     __asm("
  12.       MOVL 12(%ebp), %eax
  13.       MOVL 8(%ebp), %edx
  14.       OUT %al, %dx
  15.     " );
  16. }


 
Là, c'est pour du 8 bits, mais tu dois pouvoir essayer de remplacer %al par %ax où %eax.


Message édité par cLx le 25-08-2004 à 15:39:09
n°4035
vinc29
Posté le 06-09-2004 à 13:49:12  profilanswer
 

Si tu sais t'interfacer sur une dll, tu peux regarger sur ce site. Il est dedie a l'I2C, mais utilise le port//, donc t'as qu'a n'utiliser que IN() et OUT()... et laisse le reste
http://webperso.easynet.fr/~chrisg/dll.htm

n°4048
xDiamant
Posté le 09-09-2004 à 21:30:39  profilanswer
 

Slt :
-----
 
Bon si tu as des bp pour ecrire sur le port //, teste deja tout  
simple ton interface a LED si g bien compris , par :
copy UnFichier.txt > lpt (c con mais ca marche)
 
elles doivent simplement clignoter ( assé rapide :) suivant la taille du fichier)
 
Ensuite par un language, il fo avant dire au port quel est la direction des données avec le regitre de control 0x37a bit 5 (0 a 5) a 1. soit out(0x37a,0x20) puis apres tu peut ecrire avec out(0x378,val)
 
voila
 
Bye

mood
Google
Posté le 09-09-2004 à 21:30:39  profilanswer
 

 Page :  1  2
Page Suivante 

Aller à :
Ajouter une réponse
 

Hit Parade