- Viết được chương trình kiểm tra dùng cho một vi mạch CMOS loại 4011
Khối ghép nối đa năng cĩ đủ các lối vào và lối ra để cĩ thể kiểm tra các khả năng làm việc bình thường của các vi mạch số đơn giản. Đặc tính này cĩ thể được minh họa thơng qua thí dụ về vi mạch NAND kép bốn, loại 4011 (xem hình 6.9). Nguyên tắc kiểm tra là so sánh bảng chân lý của vi mạch với các trạng thái đo được trên vi mạch. Cụ thể là: qua khối ghép nối, máy tính PC tạo ra các trạng thái lối vào xác định và đọc các trạng thái lối ra tương ứng của vi mạch. Ngồi ra, dịng tiêu thụ của vi mạch thử cũng được đo để kiểm tra, bởi vì các vi mạch CMOS hỏng thường cĩ dịng tiêu thụ lớn hơn bình thường.
Đoạn chương trình 6.2 chỉ ra một thí dụ về một chương trình cĩ thể được dùng để kiểm tra. Tám lối ra số của khối ghép nối (giao diện) được đếm tiến theo hệ nhị phân. Mỗi một trong số 256 trạng thái lối vào cĩ thể của vi mạch cần kiểm tra đều được tạo ra một lần, để kiểm tra trạng thái đáp ứng ở các lối ra vi mạch. Thủ tục “Trao đổi” cần được gọi theo cách lặp lại hai lần kế tiếp nhau, bởi vì trong lần gọi đầu tiên câu trả lời đọc được là ứng với trạng thái vừa cĩ trước đấy.
Hình 6.9: Kiểm tra một vi mạch CMOS bằng giao diện đa năng
Những phép tính tốn kém thời gian để suy ra trạng thái đứng của lối ra cĩ thể được né tránh, khi ta làm việc với một bảng so sánh. Bảng này được tạo ta bằng cách nhấn phím “New” khi một vi mạch được đưa vào làm đối tượng kiểm tra. Một bảng với đầy đủ các dữ liệu cần thiết cĩ thể được lưu trữ và nạp giống như một tệp nhị phân, chẳng hạn với tên là CD4011.BIN. Phương pháp kiểm tra này cĩ thể dễ dàng mở rộng ra cho các vi mạch khác, trong đĩ ta sắp xếp các tệp dữ liệu cụ thể thích hợp với vi mạch đĩ. Với một đế cắm vi mạch thích hợp ta cĩ thể kiểm tra các vi mạch thuộc những loại khác nhau. Mỗi sai lệch khỏi diễn biến bình thường được nhận biết đều dẫn đến một thơng báo lỗi. Trong số đĩ phải kể cả trường hợp dịng tiêu thụ vượt quá 0,2 mA.
B. CÂU HỎI VÀ BÀI TẬP
Câu 1: Trình bày cách xây dựng phần cứng và điều khiển? Câu 2: Nêu phương pháp thiết lập chương trình đo lường? Câu 3: Nêu phương pháp kiểm tra hoạt động của các vi mạch? Câu 4: Viết chương trình điều khiển giao diện đa năng?
Câu 5: Viết chương trình kiểm tra dùng cho một vi mạch CMOS loại 4011?
Hướng dẫn viết đoạn mã:
Chương trình kiểm tra dùng cho một vi mạch CMOS loại 4011. Unit ICtest;
Interface
Uses PORTNC;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Extctrls, StdCtrls, Menus; Type
TForm1 = class (TForm) Edit1 : TEdit; Button1 : TButton; Button2 : TButton; Timer1 :TTimer; OpenDialog1 : TOpenDialog; SaveDialog1 : TSaveDialog; MainMenu1 : TMainMenu; File1 : TMenuItem; SaveAs1 : TMenuItem; Open1 : TmenuItem; New1 : TmenuItem;
Procedure FormCreate (Sender : Tobject); Procedure Button3click (Sender : Tobject); Procedure Button2click (Sender : Tobject); Procedure Button1click (Sender : Tobject); Procedure Timer1Timer (Sender : Tobject); Procedure Open1Click (Sender : Tobject); Procedure SaveAsClick (Sender : Tobject); End;
Var
Form1 : Tform1; Dout, Din, Alin: byte; n: integer;
Lci_ra : Array [0..255] of Byte; Testfile : File of byte;
Ten_tep : string; Implementation
Procedure Trao_doi;
Var Vi_tri, Vi_triAD, n, m : Integer; Begin RTS (1); { Strobe an} Delayus (20); { Gây trễ } RTS (0); { Strobe cắt} Vi_tri := 1; Vi_triAD := 129; Din := 0; Ain := 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} Ain := Ain + 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); {Clock tới} Delayus (20); { Gây trễ} RTS (0); { Clock tắt} End; Procedure Tform1.Formcreate(Sender:Tobject); Begin Opencom(pchar(‘com2:9600, n, 2, 8, 1’)); End;
Proceduer Tform1.Button3click(sender : Tobject); Var n: integer;
Begin
(Ten_tep := OpenDialog.FileName;} Ten_tep := ‘TEST.BIN’;
AssignFile (Testfile, Ten_tep); {$I-} Rewrite (Testfile) {$I+}; For n:=0 to 255 do bein;
Write (Testfile, Loi_ra[n]); End;
End;
Procedure Tform1.Buttom2Click(Sender:Tobject); Var Gia_tri: Word;
Dien_ap, Fehler: Real; Begin Timer1.Enable := false; Fehler := 0; Edit1.Text := ‘Text ...’; For n:=1 to 255 do begin Dout := n; Trao_doi; Delay (1); Trao_doi;
If (Ain>10) or (Din <> Loi_ra[n]) then begin Fehler := Fehler + 1;
Dien_ap := Ain/255*5;
Edit1.Text := FloatToStr(N) + ‘, ‘ +
floatToStr(Din) + ‘<>’ + FloatToStr (Loi_ra[n]) +’ ‘+ FloatToStrF(Dien_ap, ffGeneral, 3, 2) + ‘mA’; End;
End;
If Fehler = 0 then Edit1.Text := ‘Test O.K’; Timer1.Interval := 2000;
Timer1.Enabled := true; End;
Procedure Tform1.ButtonClick(Sender : Tobject); Var n:integer; Begin {Ten_tep := OpenDialog.FileName;} Timer1.Enable := false; For n:=0 to 255 do begin; Dout := n; Trao_doi; Delay (1); Trao_doi; Loi_ra[n] := Din; End; Edit1.text:= ‘Fertig’; Timer1.Enable := true; End;
Procedure Tform1.Timer1Timer(Sender: Tobject); Begin
Edit1.Text := ‘bereit’; Timer1.Enabled := false
End; Procedure Tform1.Open1Click(Sender:Tobject); Begin OpenDialog1.FileName := ‘*.bin’; OpenDialog1.Execute; Ten_tep := OpenDialog1.FileName; If Ten_tep > ‘ ‘ then begin
AssignFile (Testfile, Ten_tep); {$I-} Reset (Testfile) {$I+};
For n:=0 to 255 do read (Testfile, Loi_ra[n]); Closefile (Testfile);
End; End;
Procedure Tform1.SaveAslClick(Sender : Tobject); Var n:integer;
Begin
SaveDialog1.FileName := ‘*.bin’; OpenDialog1.Execute;
If Ten_tep > ‘ ‘ then begin
AssignFile (Testfile, Ten_tep); {$I-} Rewrite (Testfile) {$I+};
For n:=0 to 255 do write (Testfile, Loi_ra[n]); Closefile (Testfile);
End; End; End.
TÀI LIỆU THAM KHẢO
1. Ngơ Diên Tập. Kỹ thuật ghép nối máy tính. Nhà xuất bản: Khoa học và Kỹ
thuật, năm 2005.
2. Ngơ Diên Tập. Lập Trình Ghép Nối Máy Tính Trong Windows. Nhà xuất bản: Khoa học và Kỹ thuật, năm 2005.
3. Trần Quang Vinh. Nguyên lý phần cứng và kỹ thuật ghép nối máy tính. NXB Giáo dục
4. Phạm Hữu Khang. Giáo trình nhập mơn lập trình VB6. NXB Lao động - Xã
hội, năm 2005