Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1416 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Programmation port parallèle !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programmation port parallèle !

n°435131
skyman23
Posté le 21-06-2003 à 14:48:25  profilanswer
 

Bonjour, j'essaie de faire un programme pour la gestion d'un afficheur lcd 4*20. Malheureusement le programme ne marche pas.
 

Code :
  1. /* TestLCD.c */
  2. #include "TestLCD.h"
  3. /*
  4. Adresse du curseur (en hexadécimal):
  5.  
  6. digit  : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
  7. ligne 1: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  8. ligne 2: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
  9. */
  10. int main(void)
  11. {
  12. char *Phrase="Test d'afficheur lcd",*Phrase2="Ca marche parfaitement !"; /* Changer la phrase à écrire ici */
  13. Init_LCD();
  14. clrscr();
  15. printf("*************************************************\n" );
  16. printf("*      Programme de test d'un ecran LCD         *\n" );
  17. printf("*************************************************\n\n\n" );
  18. Ecrire_LCD(Phrase,0x00);
  19. Ecrire_LCD(Phrase2,0x40);
  20. printf("Ecriture de \"%s\" terminee.\n",Phrase);
  21. printf("Ecriture de \"%s\" terminee.\n",Phrase2);
  22. printf("Appuyez sur une touche pour effacer l'ecran.\n" );
  23. getch();
  24. Efface_LCD();
  25. printf("L'ecran est efface.\n" );
  26. return 0;
  27. }
  28. void Init_LCD (void)
  29. {
  30. char Init[3],i;
  31.  Init[0] = 0x0D; /* Initialisation de l'affichage */
  32.  Init[1] = 0x38; /* 2 lignes, communication sur 8 bits */
  33.  Init[2] = 0x01; /* Efface l'écran */
  34.  outp(CONTROL, inp(CONTROL) & 0xDF); /* On place le port parallèle en sortie */
  35.  RAZ_RS;
  36.  for(i=0;i<=2;i++)
  37.    {
  38.      outp(DATA, Init[i]); /* On place la donnée sur le bus */
  39.      SET_E;
  40.      delay(20); /* Délais de 20 ms */
  41.      RAZ_E;
  42.      delay(20);
  43.    }
  44.  SET_RS;
  45. }
  46. void Efface_LCD (void)
  47. {
  48. RAZ_RS;
  49. outp(DATA, 0x01); /* On place l'instruction d'effacement sur le bus */
  50. SET_E;
  51.     delay(20);
  52.     RAZ_E;
  53.     delay(20);
  54.     SET_RS;
  55. }
  56. void Ecrire_LCD (char *Chaine, char Position)
  57. {
  58. int i,Taille;
  59. Taille=strlen(Chaine);
  60. RAZ_RS;
  61. outp(DATA, 0x80+Position); /* Adresse d'écriture */
  62. SET_E;
  63.     delay(20);
  64.     RAZ_E;
  65.     delay(20);
  66.     SET_RS;
  67.  for(i=0;i<Taille;i++)
  68.    {
  69.      outp(DATA, Chaine[i]); /* On place la donnée sur le bus */
  70.      SET_E;
  71.      delay(2);
  72.      RAZ_E;
  73.      delay(2);
  74.     }
  75. }


 
et le fichier d'en tête :
 

Code :
  1. /* TestLCD.h */
  2. #include <time.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <conio.h> /* Header de outp et de inp */
  6. #define DATA 0x378  /* Changer l'adresse du port ici */
  7. #define STATUS DATA+1
  8. #define CONTROL DATA+2
  9. /* Une série de définitions pour simplifier la programmation */
  10. #define SET_E outp(CONTROL,inp(CONTROL) & 0xFE) /* E=1 (Strobe) */
  11. #define RAZ_E outp(CONTROL,inp(CONTROL) | 0x01) /* E=0 (Strobe) */
  12. #define SET_RS outp(CONTROL, inp(CONTROL) & 0xF7) /* RS=1, la donnée est un caractère */
  13. #define RAZ_RS outp(CONTROL, inp(CONTROL) | 0x08) /* RS=0, la donnée est une instruction */
  14. extern void Init_LCD (void);
  15. extern void Efface_LCD (void);
  16. extern void Ecrire_LCD (char *Chaine, char Position);


 
Les erreurs que j'ai, c'est LINK2001 pour la fonction "outp" et "inp". Pourtant elles sont bien inclues dans conio.h.  :??:  
 
Comment resoudre ce probleme ?

mood
Publicité
Posté le 21-06-2003 à 14:48:25  profilanswer
 

n°435139
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 21-06-2003 à 15:08:51  profilanswer
 

Si ton OS est NT4 ou + :
http://support.microsoft.com/defau [...] s%3B112298


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°435340
skyman23
Posté le 21-06-2003 à 18:58:52  profilanswer
 

Merci, mais j'ai pas tres bien compris ce qu'ils veulent dire.
 
J'ai compris que l'on ne pouvait plus utiliser outp et inp, mais ils ne disent pas quelles sont les autres fonctions pour utiliser le port parallèle.  :??:

n°435342
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 21-06-2003 à 19:01:23  profilanswer
 

Dans le lien que j'ai fourni, il est clairement indiqué :  
 

Citation :


Only code executing in kernel mode has the necessary rights to execute privileged instructions. Kernel mode code is typically found in device drivers.  


 
Trouve un driver, ça doit surement exister.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°435344
*syl*
--&gt; []
Posté le 21-06-2003 à 19:02:31  profilanswer
 
n°435381
skyman23
Posté le 21-06-2003 à 19:36:33  profilanswer
 


 
merci pour le driver  :jap:  
 
Je l'ai installe et j'ai trouve dans les fichier installes, un fichier nommé "DLPortIO.H", il faut que je l'inclue dans le fichier d'en-tete, mais apres je ne vois pas dans le fichier quelle est la fonction similaire à outp() et inp().  :??:  
 
 

Code :
  1. /****************************************************************************
  2. *  @doc INTERNAL
  3. *  @module dlportio.h |
  4. *
  5. *  DriverLINX Port I/O Driver Interface
  6. *  <cp> Copyright 1996-1999 Scientific Software Tools, Inc.<nl>
  7. *  All Rights Reserved.<nl>
  8. *  DriverLINX is a registered trademark of Scientific Software Tools, Inc.
  9. *
  10. *  Win32 Prototypes for DriverLINX Port I/O
  11. *
  12. *  @comm   
  13. *  Author: RoyF<nl>
  14. *  Date:   09/26/96 14:08:58
  15. *
  16. *  @group Revision History
  17. *  @comm
  18. *  $Revision: 2 $
  19. *  <nl>
  20. *  $Log: /DLPortIO/API/DLPORTIO.H $
  21. *  
  22. * 2     3/03/99 5:25p Kevind
  23. * Removed any reference for customer to call us when encountering bugs,
  24. * also removed our old address info.
  25. *  
  26. * 1     9/27/96 2:03p Royf
  27. * Initial revision.
  28. *
  29. ****************************************************************************/
  30. #ifndef DLPORTIO_H
  31.   #define DLPORTIO_H
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35. #ifndef IN
  36.   #define IN
  37. #endif
  38. #define DLPORT_API _stdcall
  39. UCHAR DLPORT_API
  40. DlPortReadPortUchar(
  41.     IN ULONG Port
  42.     );
  43. USHORT DLPORT_API
  44. DlPortReadPortUshort(
  45.     IN ULONG Port
  46.     );
  47. ULONG DLPORT_API
  48. DlPortReadPortUlong(
  49.     IN ULONG Port
  50.     );
  51. VOID DLPORT_API
  52. DlPortReadPortBufferUchar(
  53.     IN ULONG Port,
  54.     IN PUCHAR Buffer,
  55.     IN ULONG  Count
  56.     );
  57. VOID DLPORT_API
  58. DlPortReadPortBufferUshort(
  59.     IN ULONG Port,
  60.     IN PUSHORT Buffer,
  61.     IN ULONG Count
  62.     );
  63. VOID DLPORT_API
  64. DlPortReadPortBufferUlong(
  65.     IN ULONG Port,
  66.     IN PULONG Buffer,
  67.     IN ULONG Count
  68.     );
  69. VOID DLPORT_API
  70. DlPortWritePortUchar(
  71.     IN ULONG Port,
  72.     IN UCHAR Value
  73.     );
  74. VOID DLPORT_API
  75. DlPortWritePortUshort(
  76.     IN ULONG Port,
  77.     IN USHORT Value
  78.     );
  79. VOID DLPORT_API
  80. DlPortWritePortUlong(
  81.     IN ULONG Port,
  82.     IN ULONG Value
  83.     );
  84. VOID DLPORT_API
  85. DlPortWritePortBufferUchar(
  86.     IN ULONG Port,
  87.     IN PUCHAR Buffer,
  88.     IN ULONG  Count
  89.     );
  90. VOID DLPORT_API
  91. DlPortWritePortBufferUshort(
  92.     IN ULONG Port,
  93.     IN PUSHORT Buffer,
  94.     IN ULONG Count
  95.     );
  96. VOID DLPORT_API
  97. DlPortWritePortBufferUlong(
  98.     IN ULONG Port,
  99.     IN PULONG Buffer,
  100.     IN ULONG Count
  101.     );
  102. #ifdef __cplusplus
  103. }
  104. #endif
  105. #endif // DLPORTIO_H

 

n°435410
*syl*
--&gt; []
Posté le 21-06-2003 à 19:54:26  profilanswer
 

Tu rigoles ou quoi ? Le nom des fonctions n'est pas assez parlant ? :heink:

n°435493
skyman23
Posté le 22-06-2003 à 01:38:42  profilanswer
 

*Syl* a écrit :

Tu rigoles ou quoi ? Le nom des fonctions n'est pas assez parlant ? :heink:  


 
Bah si je demande c'est que pour moi c'est pas assez parlant. Car je ne sais pas du tout lesquelles utiliser en remplacement de outp et inp. J'ai remarque qu'il y'avait des fonctions avec "read" et "write", mais apres je ne comprend pas la difference entre "DlPortReadPortUshort()" et "DlPortReadPortBufferUlong()". Je debute, et c'est pas si facile je trouve de connaitre la difference entre les deux.

n°435514
skyman23
Posté le 22-06-2003 à 10:52:11  profilanswer
 

:bounce:

n°457372
MrNoop
Posté le 14-07-2003 à 17:49:29  profilanswer
 

La différence c'est que avec UChar t'envoies 8 bits, UShort 16 bits et ULong 32 bits!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Programmation port parallèle !

 

Sujets relatifs
Porbleme super urgent de port série !!!!!!Programmation NDIS
[programmation robot] problème avec un timer...[C] Socket UDP connaitre le port source ???
Cherche aide programmation Pascal (assez urgent) ?!communication par port com
[programmation systeme] popen et fgets[blabla@hosto] Le topic des vieux
Programmation du jeu memory en CCommunication port parallèle
Plus de sujets relatifs à : Programmation port parallèle !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR