2. Xuất dữ liệu ra cổng song
2.2. Điều khiển những máy mĩc đơn giản
Giao diện máy in cĩ tổng cộng mười hai đường dẫn xuất ra và năm đường dẫn nhập vào. Nhờ vậy cĩ thể điều khiển mơtơ và kiểm tra các cơng tắc. Khi ta sử dụng các mơtơ bước theo cách điều khiển 4 bit ( so sánh mục 3.3), thì cĩ thể điều khiển ba mơtơ cùng lúc. Các mơtơ này cĩ thể vận hành các mơ hình chuyển động đơn giản.
Được điều khiển qua bộ đệm Darlington loạei UNL2803. Ngồi ra cịn cĩ ba cơng tắc được đấu vào, các cơng tắc này cĩ thể được máy tính kiểm tra.
. Các thủ tục “Motor1” đến “Motor3” thực hiện thao tác một bước “sang trái” hoặc “sang phải” theo hướng đã chỉ định. Ba cơng tắc S1 đến S3 dùng làm cơng tắc tận cùng dùng cho mơtơ M1 đén M3 và được kiểm tra bằng hàm “cơng_tắc1” đến “cơng_tắc3”. Như vậy, một trạng thái ban đầu xác định của tất cả các mơtơ cĩ thể đạt được bằng thủ tục “Vị_trí_Null”.
Việc điều khiển chuyển động thực diễn ra trong thủ tục “CH_DONG1”, trong đĩ chỉ ra một thí dụ rất đơn giản. Tất cả các mơtơ cĩ thể được điều khiển riêng lẻ hoặc đồng thời. Thời gian chờ ngắn được quy định qua lệnh Delay sẽ ấn định tốc độ của mơtơ. Khi đĩ tốc độ cực đại được cần phải được giữ đúng, nhờ vậy khơng cĩ bước nào bị bỏ qua. Mơtơ chịu tải lớn cần phải điều khiển chậm hơn.
Unit LPT1; Interface
Une PORTINC,
Windows, Messages, Sysutils, Classes, Graphics, Controls, Forms, Dialogs, Sdctrls;
Type
Tfom1 = class (tfom) Button1 : Tbuton; Button2 : Tbuton;
Procedure FormCreate (Sender: Tobject); Procedure ButtonlClick (Sender: Tobject); Procedure Button2Click (Sender: Tobject); End;
Var
Form : Trorml;
Buocl, Buoc1, Buoc3 : Byte;
Const BA = $378; {NPT1}
Rechts = true; Links = false; Implementation
{$R *.DFM}
Begin
If rechts then begin
Buoc1 := buoc1*2;
If buoc1 = 16 then buoc1 := 1 End else begin
Buoc1 := Buoc1 div 2
If Buoc1 = 0 then Buoc1 := 8; End;
Out Port (Ba, Buoc1 + 16 * Buoc2); End;
Procedure Motor2 (rechts : Boolean); Begin
If rechts then begin
Buoc2 := Buoc2 * 2;
If Buoc2 = 16 then Buoc2 :=1 End else begin
Buoc2 := Buoc2 div 2;
If Buoc2 = 0 then Buoc2 := 8; End;
outPort (BA, Buoc1+16 * Buoc2); end;
procedure Motor3 (rechts : Boolean); begin
if rechts then begin
Buoc3 := Buoc3 * 2;
If Buoc3 = 16 then Buoc3 :=1 End else begin
Buoc3 := Buoc3 div 2;
If Buoc3 = 0 then Buoc3 := 8; End;
OutPort (BA+2, Buoc3 XOR 11) End;
Function Cong_tac1 : Boolean; {Cong_tac : Cơng tắc } Begin
If (Inport (BA+1) and 8) = 0 then Cong_tac1 := true Else Cong_tac1 := false;
End;
Function Cong_tac2 : Boolean; Begin
If (Inport (BA+1) and 16) = 0 then Cong_tac2 := true Else Cong_tac2 := false;
Function Cong_tac3 : Boolean; Begin
If (Inport (BA+1) and 32) = 0 then Cong_tac3 := true Else Cong_tac3 := false;
End; Procedure NullPosition; Begin Repeat Mororl (links); Delay (5); Until Cong_tac1; Repeat Moror2 (links); Delay (5); Until Cong_tac2; Repeat Moror3 (links); Delay (5); Until Cong_tac3; End;
Procedure Chuyen_dong1; Chuyen_dong : chuyển động Var N : Word;
Begin
For n := 1 to 100 do begin { 100 buoc } Motorl ( rechts );
Motor2 ( rechts ); { tất cả các mơtơ } Motor3 ( rechts );
Delay ( 5); { nhanh } End;
For n := 1to 100 do begin { 100 buoc } Motorl rechts ); {chỉ mơtơ 1 } Delay (10); { cham } End;
Delay ( 1000); { tr_thái đứng 1s } For n :=1 to 100 do begin { 100 buoce }
Motor1 ( links ) ;
Motor2 ( links ) ; { tất cả các mơtơ } Motor3 ( links ) ;
Delay (5); { nhanh} End;
For n:= 1 to 100 begin {100 bước } Motorl ( links); { chỉ mơtơ 1 } Delay (10); { chậm }
End;
Delay (1000); { tr_thái đứng 1s } End;
Procedure Tforml. FormCreate ( Sender : Tobject); Begin
openCom (Pchar ( ‘LPT1:’)); Buoc1 := 2;
Buoc2 := 2; Buoc3 := 2;
Uot Port (BA,17); { D0 = 1, D4 = 1 } Out Port (BA+2, 1 XOR 11 ) ; { Strobe = 1 } End;
Procedure Tforml. ButtonlClick ( Sender : Tobject ); Begin
nullPosition; end;
Procedure Tforml. ButtonlClick ( Sender : Tobject ); Begin
Chuyen_dong1; End;
End.