# Codigo fuente Turbo Pascal, Accionar un motor Stepper por el puerto paralelo



## enigmaelectronica (Jul 5, 2011)

*Codigo fuente Turbo Pascal, Accionar un motor Stepper por el puerto paralelo*

El programa puede mover o accionar los motores Stepper por el puerto paralelo, aqui se los dejo, queda a criterio de ustedes si lo usan adecuadamente, porque si lo hacen mal o no saben la dirección del BIOS de su puerto Paralelo, pueden hacer estragos 









```
program steppermotor; 

uses crt; 

const portAddr=$3BC; 
motors=2; 

var counter, a: integer; 

procedure Low; 
{Load one LOW bit in shift register} 
begin 
port[portAddr]:=$4; { [0100]b } 
port[portAddr]:=$0; { [0000]b } 
end; 

procedure High; 
{Load one HIGH bit in shift register} 
begin 
port[portAddr]:=$2; { [0010]b } 
port[portAddr]:=$6; { [0110]b } 
port[portAddr]:=$0; { [0000]b } 
end; 

procedure Strobe; 
{Create STROBE signal for shift registers 
to latch contents of shift reg. to output} 
begin 
port[portAddr]:=$1; { [0001]b } 
port[portAddr]:=$0; { [0000]b } 
end; 

procedure Init; 
{Makes all outputs of shift register(s) LOW} 
begin 
port[portAddr]:=$0; { [0000]b } 
for counter := 1 to (8*motors) do Low; 
Strobe; 
end; 

procedure Step 1; 
{Load pattern for Step 1 [1000 1000]b } 
begin 
High; Low; Low; Low; High; Low; Low; Low; 
end; 

procedure Step 2; 
{Load pattern for Step 2 [0010 1000]b } 
begin 
Low; Low; High; Low; High; Low; Low; Low; 
end; 

procedure Step 3; 
{Load pattern for Step 3 [0100 1000]b } 
begin 
Low; High; Low; Low; High; Low; Low; Low; 
end; 

procedure Step 4; 
{Load pattern for Step 4 [0001 1000]b } 
begin 
Low; Low; Low; High; High; Low; Low; Low; 
end; 

procedure Step 2Res; 
{Load pattern for Step 2 with R3 in series 
[0010 0000]b } 
begin 
Low; Low; High; Low; Low; Low; Low; Low; 
end; 

procedure Step 4Res; 
{Load pattern for Step 4 with R3 in series 
[0001 0000]b } 
begin 
Low; Low; Low; High; Low; Low; Low; Low; 
end; 

begin 
{User defined} 
ClrScr; 
Init; 
for a:= 1 to 50 do 
begin 
{Example causes one (slow) turn of both 
motors in opposite direction. 
mot_2; mot_1; strobe 1+2; Delay 
--+------+-------+------+----- 
| | | | 
V V V V } 
Step 1; Step 4; Strobe; delay(10); 
Step 2; Step 3; Strobe; delay(10); 
Step 3; Step 2; Strobe; delay(10); 
Step 4; Step 1; Strobe; delay(10); 
end; 
delay(1000); 
for a:= 1 to 50 do 
begin 
{Example causes one (fast) turn 
of both motors in opposite direction. 
mot_2; mot_1; strobe 1+2; Delay 
--+------+-------+------+----- 
| | | | 
V V V V } 
Step 4; Step 1; Strobe; delay(5); 
Step 3; Step 2; Strobe; delay(5); 
Step 2; Step 3; Strobe; delay(5); 
Step 1; Step 4; Strobe; delay(5); 
end; 
Step 2Res;Step 2Res; 
Step 4Res;Step 4Res; 
Strobe; 
end.
```


Espero les funcione con aquellos motores Stepper que andan por ahi en impresoras viejas


----------



## Dr. Zoidberg (Jul 5, 2011)

> *const portAddr=$3BC;*


Esa dirección del puerto paralelo es la que se usaba en la época de las placas de video *Hércules*  y que venían con un LPT. En la actualidad no va a funcionar en ninguna PC, a menos que sea posible configurar el BIOS para que mapee esta dirección I/O a una puerta paralelo on-board (si es que aún se fabrican PC con puerto paralelo  ).
Hay que cambiar esta dirección por la 378 (o la 278) que es la que se utiliza(ba) actualmente...

PD: Claro que tampoco funciona en bajo güindos a menos que se utilice algún driver del kernel o aplicación que le dé acceso al programa en forma directa a los puertos.


----------

