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

  FORUM HardWare.fr
  Programmation
  Divers

  [Aide] déplacer tête d'impression

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Aide] déplacer tête d'impression

n°1202049
PARTH-L@N
Posté le 19-09-2005 à 08:09:42  profilanswer
 

Bonjours dans le cadre des PPE (projets pluritechniques encadrés) de mon lycée, j'aurai besoind d'aide pour déplacer la tete d'impression d'une imprimante sur une distance donnée grace à un ordinateur (sur une imprimante tournant à vide, c'est pour déplacer quelque chose grace à la tete  )
 
J'avais poster dans la partie périphérique mais on ma conseiller de changer mon post d'endroit car il semble que mon problème releve plus de la programation
 
Merci de répondre en exposants toute les idées qui vous sembles réalisables.
++

mood
Publicité
Posté le 19-09-2005 à 08:09:42  profilanswer
 

n°1202050
betsamee
Asterisk Zeperyl
Posté le 19-09-2005 à 08:21:35  profilanswer
 

J'avais fait un truc du style a la fac (avec un robot pas une imprimante :D ) en C++ mais je n'arrive pas a retrouver mes cours  :sol:  
 
j'ai en revanche vu l'article suivantici
 
Comment piloter une sortie imprimante sur un PC
Zône réservée aux Programmeurs ou aux vilains curieux
Pour les autres, vous cassez pas la tête et utilisez les logiciels qui sont disponibles sur ce site.
Tout se passe au niveau des ports d'imprimante. On utilisera les trois registres qui lui sont réservés :  
 
data : port de sortie des données sur 8 bits  
etat : port d'entrée. l'état de l'imprimante..  
cont : registre de contrôle  
Voila une première procédure pour initialiser les variables liées aux adresses des ports imprimante :
 
en TurboPascal ou Delphi1:
procedure InitLpt(lpt:byte);
begin
  if lpt=1 then begin data:=$0378; etat:=$0379; cont:=$037A; end;
  if lpt=2 then begin data:=$0278; etat:=$0279; cont:=$027A; end;
  if lpt=3 then begin data:=$03BC; etat:=$03BD; cont:=$03BE; end; { mono }
  port[data]:=$00; { remise à zéro des huit sorties }
  port[cont]:=$04; { les bits de selection inactifs }
end;
 
en basic (beuark, ça existe encore ?) :
10 lpt = 1 ; (ou 2 ou 3)
20 if lpt=1 then data=&h0378 : etat=&h0379 : cont=&h037A
30 if lpt=2 then data=&h0278 : etat=&h0279 : cont=&h027A
40 if lpt=3 then data=&h03BC : etat=&h03BD : cont=&h03BE
50 out data = &h00; mise à zéro des huit sorties
60 out cont = &h04; les bits de selection inactifs
 
Attention : le basic n'étant pas standard, vérifiez bien la syntaxe du tien.  
1) Sorties
Voici un petit exemple plus explicite que bien des discours.
 
 
en TurboPascal et Delphi1:
procedure EcritureHard(Sortie : byte); {Sortie contient la valeur à sortir}
begin
  Port[Data]:=Sortie; {seulement pour les sorties 8 bits lpt}
end;
 
en basic :
110 Sortie = &hxx ; &hxx contient la valeur à sortir
120 Out Data = Sortie
 
2) Entrées
Là, c'est un peu plus complexe puisque certains des bits du registre d'état sont inversés (c'est pas ma faute, c'est IBM qui l'a fait le PC !)  
Cette procédure recupère les cinq bits d'entrée. Elle fonctionne sur tout type de PC. Puisqu'on branche des contacts sur les entrées, la lecture est inversée ( car par défaut les entrées sont polarisées au + 5V )  
 
Function Lecture_Inv : byte;
{ bits intéressants : Nx11 1xxx à mettre en ordre, le bit 7 est inversé }
var octet, octet1 : byte;
begin
  octet := port[etat]; { Nx11 1xxx }
  octet := octet div 8; {decale octet de 3 à droite 000N x111 }
  octet := octet xor $07; {inverse les 3 premiers bit 000N xNNN }
  octet1 := octet mod 8; {stocke les 3 derniers bits dans octet1 }
  octet := octet and $F0; {mise à 0 des 4 derniers bits 000N 0000 }
  octet := octet div 2; {decale bit4 à droite 0000 N000 }
  octet := octet + octet1; {reconstitue les 4 derniers bits 0000 NNNN }
  if (port[Etat] and $40)<>0 then octet := octet + 16; {lecture bit 4}
  Lecture_Inv := octet;
end;
 
 
Voici une autre fonction qui n'est acceptée que par les µP > 286. Elle permet de lire très rapidement les quatre premières entrées (0..3)  
 
Function Lecture_Inv : byte; { restitue un quartet inversé (TTL) }
{ bits intéressants : Nx11 1xxx à mettre en ordre, le bit 7 est inversé }
begin
  asm {seulement pour les 80286 et superieurs}
    mov dx,etat
    in al,dx { al = port[etat] Nx11 1xxx }
    shr al,3 { decale al de 3 à droite 000N x111 }
    mov ah,al { fait un double de al dans ah}
    and al,$07 { mise à 0 des 4ème et 5ème bits de al 0000 0111 }
    and ah,$10 { mise à 0 des 4 premiers bits de ah 000N 0000 }
    shr ah,1 { decale ah de 1 à droite 0000 N000 }
    or al,ah { assemble al et ah dans al 0000 N111 }
    xor al,$07 { inversion 3 premiers bits xxxx NNNN }
    mov @result,al { met al dans le retour fonction (lecture) }
  end;
end;
 
3)Lecture et écriture d'un port entrée/sortie en Delphi32 (Delphi2 et +)
Parmis les nouveautés de Delphi32, la disparition du tableau Port[adresse]  
var Entree, Sortie : SmallInt;
procedure Lecture;
begin
  asm
    mov dx,0379h // adresse $0379 dans DX
    in al,dx // lecture du port dans AL
    mov Entree,al // AL dans la variable
  end;
end;
procedure Ecriture;
begin
  asm
    mov dx,0378h // adresse $0378 dans DX
    mov ax,Sortie // ecriture de la variable dans AL
    out dx,al // ecriture de AL dans le port
  end;
end;
 
4)DLL  
Pour les programmeurs sous Windows, j'ai créé des DLL qui sont disponibles avec le programme GrafPiou pour Windows. (bipas128.dll, bipas115.dll, Dialog.dll, FischerT.dll, Jeulin.dll et PIA1.dll). Sers-toi ou contacte moi.
 
Voilà, c'est fini pour moi et je rentre me coucher mais pour toi, AU BOULOT, ça traine, allez allez... :-))


Message édité par betsamee le 19-09-2005 à 08:22:45
n°1202684
PARTH-L@N
Posté le 19-09-2005 à 17:55:50  profilanswer
 

Merci bien je vais voir ça


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

  [Aide] déplacer tête d'impression

 

Sujets relatifs
à l'aide : requete SQL : "FROM" variable ?[MySQL] Besoin d'aide - Optimisation d'une requête très lourde
[réglé]Besoin d'aide avec SQL d'OraclePblm avec les styles d'impression FFX/IE
MySQL aide pour selectImpression d'une frame depuis une autre
Aide substitution de variable DOS SVP (mille merci nglechau)Besoin d'aide pour Javascript BBCode
[Résolu] J'ai besoin d'aide pour quelques base.php debutant aide script
Plus de sujets relatifs à : [Aide] déplacer tête d'impression


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