Programmation port parallèle !

Programmation port parallèle ! - C - Programmation

Marsh Posté le 21-06-2003 à 14:48:25    

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 ?

Reply

Marsh Posté le 21-06-2003 à 14:48:25   

Reply

Marsh Posté le 21-06-2003 à 15:08:51    

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
Reply

Marsh Posté le 21-06-2003 à 18:58:52    

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

Reply

Marsh Posté le 21-06-2003 à 19:01:23    

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
Reply

Marsh Posté le 21-06-2003 à 19:02:31    

Reply

Marsh Posté le 21-06-2003 à 19:36:33    


 
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

 

Reply

Marsh Posté le 21-06-2003 à 19:54:26    

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

Reply

Marsh Posté le 22-06-2003 à 01:38:42    

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

Reply

Marsh Posté le 22-06-2003 à 10:52:11    

:bounce:

Reply

Marsh Posté le 14-07-2003 à 17:49:29    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed