Xây dựng Phần cứng và cách điều khiển

Một phần của tài liệu Giáo trình lập trình ghép nối máy tính (nghề kỹ thuật lắp ráp và sửa chữa máy tính) trình độ cao đẳng nghề (Trang 121 - 125)

Mục tiêu:

- Viết được đoạn chương trình cơ sở dùng cho giao diện đa năng nối tiếp

Hình 6.1 chỉ ra sơ đồ khối của một giao diện với tám lối ra số, tám lối vào số, một lối vào analog và một lối và đếm. Tồn bộ ba thanh ghi dịch dùng để nhập vào và xuất ra cĩ thể được điều khiển bằng một đường dẫn giữ nhịp và đồng bộ (strobe) chung.

Hình 6.1: Một giao diện nối tiếp đa năng

Việc nhập vào và xuất ra cĩ thể được thực hiện đồng thời, bởi vì một đường dẫn giữ nhịp chung được sử dụng cho tất cả các vi mạch. Thủ tục “Trao đổi” trong đoạn chương trình 6.1 đảm nhận việc truyền dữ liệu theo hai hướng. Mỗi lời gọi lại phục hồi trạng thái lối ra của vi mạch 4094 và đồng thời đọc ra

các trạng thái của các lối vào số và bộ biến đổi A/D. Tất cả dữ liệu sắp xếp trong các biến tồn cục Dout (lối ra sơ), Din (lối vào số) và Ain (lối vào analog)

Ngồi ra, lối vào tự do CTS được sử dụng để đo tần số. Ở đây thời gian mở cổng được thiết lập cố định là 100 ms, vì vậy cĩ thể nhận được độ phân giải về tần số bằng 10 Hz. Khi ta đấu vào trước đĩ một bộ biến đổi điện áp/ Tần số, thì giao diện cĩ thể được sử dụng với hai lối vào analog.

Đoạn chương trình 8-1: Chương trình cơ sở dùng cho giao diện đa năng nối tiếp Unit Unil

Interface

Uses PORTINC

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;

Type

Tform1 = class (TForm)

CheckBox1 : TcheckBox; CheckBox2 : TcheckBox; CheckBox3 : TcheckBox; CheckBox4 : TcheckBox; CheckBox5 : TcheckBox; CheckBox6 : TcheckBox; CheckBox7 : TcheckBox; CheckBox8 : TcheckBox; Labell : TLabel; Label2 : TLabel; Label3: TLabel; Label4 : TLabel; Label5 : TLabel; Label6 : TLabel; Label7 : TLabel; Label8 : TLabel; Timer1 : TTimer; Label9 : TLabel; CheckBox10 : TCheckBox; CheckBox11 : TCheckBox; CheckBox12 : TCheckBox; CheckBox13 : TCheckBox; CheckBox14 : TCheckBox; CheckBox15 : TCheckBox; CheckBox16 : TCheckBox; Label10 : TLabel; Edit1 : TEdit; Label11 : TLabel; Edit2 : TEdit;

Label12 : TLabel;

Procedure FromCreate(Sender : TObject); Procedure Timer1TTimer(Sender : TObject); End;

Var

Form1: TForm1; Dout, Din, Ain: Byte; Implementation

{$R *.DFM}

Procedure Trao_doi;

Var Vi_tri, Vi_triAD, r, m : Integer; Begin RTS(1); Delayus(20); RTS(0); Vi_tri := 1; Vi_triAD := 128; Din := 0; Alin := 0; For n:=1 to 8 do begin

If ((Dout AND Vi_tri) > 0) then TXD (1) {xuất ra dữ liệu} Else TXD (0);

If DCD = 1 { đọc dữ liệu} Then Din := Din + Vi_tri; If DSR = 1 then {đọc A/D}

Alin := Alin + Vi_triAD; DTR (1); {Clock tới} Delayus (20); {Gây trễ} DTR (0); {Clock tắt} Vi_tri := Vi_tri *2;

Vi_triAD :=Vi_triAD div 2; End; RTS(1); {Strobe tới} Delayus(20) {Gây trễ} RTS(0); {Strobe} End; Function Tan_so:Integer;

Var Bo_dem, Cu, Nhap_vao:Integer; Cu:Cũ Begin

Bo_dem:=0;

ReCuime (true); TimeInitus;

While TimeReadus<(100000) do begin Nhap_vao:=CTS;

If Nhap_vao>Cu then Bo_dem:=Bo_dem +1; Cu:=Nhap_vao;

End;

Tan_so:=Bo_dem; ReCuime (false); End;

Procedure TForm1.FormCreate (Sender: TObject); Begin

OpenCom (pchar (‘com2:9600, N, 8, 1’)) Timer1.Interval :=100;

Timer1.Enabled :=true; End;

Procedure TForm1.Timer1Timer(Sender: TObject); Var Gia_tri: Word;

Dien_ap: Real; Begin

Dout :=0;

If CheckBox1.Checked Then Dout := Dout +1; If CheckBox2.Checked Then Dout := Dout +2; If CheckBox3.Checked Then Dout := Dout +4; If CheckBox4.Checked Then Dout := Dout +8;

If CheckBox5.Checked Then Dout := Dout +16; If CheckBox6.Checked Then Dout := Dout +32; If CheckBox7.Checked Then Dout := Dout +64; If CheckBox8.Checked Then Dout := Dout +128; Trao_doi;

CheckBox9.Checked := ((Din And 1)>0); CheckBox10.Checked := ((Din And 2)>0); CheckBox11.Checked := ((Din And 4)>0); CheckBox12.Checked := ((Din And 8)>0); CheckBox13.Checked := ((Din And 16)>0); CheckBox14.Checked := ((Din And 32)>0); CheckBox15.Checked := ((Din And 64)>0); CheckBox16.Checked := ((Din And 128)>0); Dien_ap :=Alin/255*5;

Edit1.Text :=FloatToStrF (Dien_ap, ffGeneral,3,2) +’ V’; Edit2.Text :=FloatToStrF (Tan_so*10, ffGeneral,4,0) +’ Hz’; End;

Một phần của tài liệu Giáo trình lập trình ghép nối máy tính (nghề kỹ thuật lắp ráp và sửa chữa máy tính) trình độ cao đẳng nghề (Trang 121 - 125)

Tải bản đầy đủ (PDF)

(132 trang)