PDA

View Full Version : Nhận tín hiệu ở cổng COMx bằng Delphi?



ktcatson84
24-12-2002, 17:07
Làm sao đây? Hồi còn xài pascal thì dùng port[], còn trên delphi thì làm thế nào?

Mach2
24-12-2002, 17:58
Dùng cái này nè bạn... cho cổng song song, bạn xài cổng song song hay nối tiếp? Cơ bản là dùng hàm asm thui...

function Inport(address: word):byte;
var data: word;
begin
asm
mov dx, address
in ax, dx
mov data, ax
end;
inport:=data;
end;

procedure Outport(address: word; data:word);
begin
asm
mov dx, address
mov ad, data
out dx, ax
end;
end;

Hic! Một bài thế này mà tui post đến 3 lần trong box này lận, các bạn chịu khó xem kỹ các thread trước trước khi post vấn đề tương tự lên nhé.

ktcatson84
25-12-2002, 11:24
Ok, thanx. Tôi cứ ngỡ là phải dùng các hàm APi cơ đấy, hóa ra là assembler.

conanct
25-12-2002, 15:44
Hi!!!

Bạn có thể xem cái ActiveX Mscomm của Delphi nó có hỗ trợ cho bạn lập trình truyền thông với cổng Com.
Bạn có thể vào Google tìm kiếm component về cổng song song và nối tiếp. Bạn không cần phải "đụng tay" vào mà vẫn có để xài.

Bye!!!

Mach2
25-12-2002, 17:22
Bạn có component nào cho phép điều khiển cổng song song (nối tiếp thì dễ rồi) với joystick trong Win2k, WinXP ko? Tôi kiếm hoài ko ra...

ktcatson84
27-12-2002, 16:29
Hmm, Match2 xem lại cái inport với outport coi. Nó chỉ làm việc trên pascal/DOS thui (y chang port[]), còn trên Delphi7/winxp thì báo lỗi Privilege permission tại lệnh in ax,dx

Mach2
28-12-2002, 08:11
Bạn dùng Win2k hay XP phải ko? Tôi đang bí cái đó đó bạn à. Bạn thử chạy trên 98 hay Me thì vô tư... WinNT và XP cấm các nhà lập trình nghiệp dư can thiệp trực tiếp các cổng. Thôi ta tạm an ủi với 98 vậy.

ktcatson84
29-12-2002, 15:25
Hic, thảm.... tui chỉ xài xp thui. làm sao bi giờ? Nhưng nếu tui chạy đoạn chương trình trên bằng pascal trong DOS nền winxp thì vẫn chạy được, nó chỉ ko chịu chạy trên delphi thui.

Mach2
30-12-2002, 11:53
Thua, bó tay? Bạn dùng điều khiển cổng để làm gì? Nếu là cổng nối tiếp thì vẫn còn cách mừ... Thôi nếu đĩa còn dư thì chịu khó cài thêm 98 một tí chứ mấy?

ktcatson84
31-12-2002, 01:18
Cách nào thế? Tui đang cần viết chương trình điều khiển cho mạch nhận tín hiệu hồng ngoại từ remote (đã đăng trên pcworld ý), không quan trọng lắm nhưng cũng là học tập.

Mach2
31-12-2002, 08:57
Cổng nối tiếp có thể dùng nhiều cách lắm. Bạn có thể ùng component có sẵn như component của VB (Ms Comm gì đó quên rồi) hay lên Google search là ra nhiều... hoặc dùng API CreateFile tạo bộ đệm đọc dữ liệu. Hàm này bạn vào MSDN xem thử hay trong giúp đỡ của Delphi (Win API References) cũng có đó.

ktcatson84
02-01-2003, 16:42
Xài Creatfile rùi dùng Readfile để nhận tín hiệu phải không?

Mach2
04-01-2003, 08:23
yeah, MSDN có cả ví dụ luôn mờ... Bạn làm được chưa? Nếu khi nào bạn biết cách dkh cổng song song trong WinNT thì chỉ mình nhé, mình đang cần lém!

ktcatson84
04-01-2003, 19:14
Bộ MSDN của me tiêu rùi, bây giờ chỉ còn có bộ SDK trong Delphi thui nên ko có vd, nhưng mà tui thấy hình như hàm createfile có thể xài với LPT1 mờ.

Mach2
05-01-2003, 11:20
Tôi đã thử ruì mà ko được. Hic!

tumickey
06-01-2003, 08:22
he he đọc trong PCWORLD tháng 8 có nói về cách gửi dự liêu qua cổng com

Mach2
06-01-2003, 10:11
Đọc rùi bạn à, nhưng mà vấn đề là trong WinNT chứ, còn bình thường thì đâu có gì đang nói.
Nhân tiện, tôi đã tìm được comp rùi, cám ơn các bạn đã quan tâm.

tumickey
07-01-2003, 17:15
vậy thì đem lê đây anh em cùng dùng chớ

ktcatson84
11-01-2003, 11:39
đúng đấy. Gửi lên đi chứ. Còn không thì share cho me hoặc chỉ chỗ để down về nhé.

Mach2
11-01-2003, 19:17
Lớn wá ko để lên đây được. Bạn lên google kiếm "delphi LPT" là có à, nếu muốn tìm comp chạy được cho cả WinXP thì thêm chữ "vxd" nữa.

conanct
15-01-2003, 14:27
Hi!!!
Tôi xin bổ sung. Trong PCWorld tháng gần đây có bài viết: nhận tín hiệu hồng ngoại bất kì để điều khiển máy tính. Tôi đã ráp xong, mạch chạy rất tốt. Tôi đang có ý định viết lại chương trình đó. Các bạn có thể sử dụng ActiveX Mscomm của Delphi để giao tiếp với cổng Com (có thể chạy trên NT).
Bye!!!

Mach2
15-01-2003, 21:40
Cảm ơn nhiều. Thư viện đó có cho truy cổng xuất cổng LPT và Joystick ko vậy bạn?

conanct
16-01-2003, 08:31
Hi!!!
Mscomm chỉ hổ trợ cho lập trình truyền thông thôi (cổng com). Nếu muốn truy xuất cổng LPT thì bạn phải tìm Component của Parallel để Install vào. Còn nếu bạn muốn sử dụng Joystick thì bạn down ActiveX về để Install (Joysticks.ocx).
Joystick tui chưa thử dùng nhưng đã Install rồi.
Bye!!

QuanNguyen
20-01-2003, 19:15
Chào các bạn,
Các bạn thảo luận xôm tụ tụ quá. Có một địa chỉ này mình muốn share cho các bạn cùng xài (VB, Delphi, v.v...) đó là : http://www.torry.net
Chuyện sử dụng cổng COM hay là LPT là chuyện nhỏ, các bạn hãy tìm nó ở trong mục "Communication" là khắc có.
Chúc các bạn thành công.

ktcatson84
22-01-2003, 11:14
Torry tui đã tìm rùi. Có thì có đấy, như chỉ là trên Win 98- thui, hơn nữa component của họ viết bằng Delphi cũ quá (từ 3.0 trở xuống) nên ko thể chạy trên delphi7 được, nhiều component thì chỉ có file DCU, ko có source. Mà cần gì phải vô torry.net nhỉ, ra chợ mua 1 đĩa CD Torry Delphi là đủ rùi.

thadasabeco
06-11-2004, 22:54
moi nguoi noi delphi co activeX mscomm ha? co lon ko, cai do no thuoc ve VB ma. Minh import vao delphi roi, nhung tren may phai co cai VB nua. Con ko cai VB thi no bao activeX nay ko co licence, ko dua vao form duoc, co ai biet tai sao ko, cach khac phuc lam sao day! Kho wa he`m!

9m4re
08-11-2004, 14:56
Việc giao tiếp với cổng COM thì không khó, bạn có thể in/out trực tiếp dữ liệu ra cộng COM rất dễ dàng < trên Win98 hay NT ,XP hay 2k3 đều được>
Nhưng với cổng // thì bạn không thể IN/OUT trực tiếp dữ liệu ra cổng được <Với Win NT/XP/2k3> vì các fiên bản đó là windoze với chế độ protected-mode thực sự ,còn win98 thì vẫn là real-mode
Trên chế độ bảo vệ, việc I/O dữ liệu ra cổng trục tiếp chỉ thực hiện được với mức quyền CPL = 0 < ring 0> hay trên kernel . Còn để I/O dữ liệu trực tiếp ra cổng // trên Windoze ở mức user-mode thì bạn fải thay đổi I/O Permission Bitmap trên thanh ghi TSS của hệ thống - và việc thay đổi này cũng fải được thực hiện trên kernel
Túm lại là bình thường bạn không thể i/o dữ liệu ra cổng LPT được
vd :
debug
-o 03bc ff - > Trên Data port sẽ không có tín hiệu ;)

-Bạn có thể dùng một số kernel driver để i/o dữ liệu ra cổng // vd : http://beyondlogic.org/porttalk/porttalk.htm

Thân

jiSh@n
08-11-2004, 21:40
Trên Win NT/2K/XP bạn ko xài in và out trực tiếp ra COM được đâu, xài asm trên DOS/Win thì do NTVDM làm giùm đấy. Còn bạn thử xài trong Delphi, VC++ thử xem, sẽ bị báo lỗi ngay.

antn
08-11-2004, 22:24
Nhận - xuất tín hiệu qua cổng COM ư, mình có cái component nho nhỏ này có thề làm đc điều đó đấy. Các bạn đừng lo, hoàn toàn dùng Win32 chứ ko dùng asm đâu. Nếu cần xin liên hệ: antn12@yahoo.com

jiSh@n
09-11-2004, 21:22
Dùng APi cũng được, xài CreateFile, ReadFile và WriteFile có thể giao tiếp với COM và LPT đấy.

THE LAST LEAF
10-11-2004, 16:52
Mấy giờ rồi mà dùng Delphi của Borland mà lại cần dùng ActiveX MSComm của MS sao không sử dụng VCL TCommPortDriver có khả năng truy xuất cổng COM tương tự (khéo khi hay hơn vì có mã nguồn kèm theo ,nó thực chất là API được đóng gói). Ai cần tôi up lên cho, mà site này có up được không nhể

ghosthd
11-11-2004, 11:22
Nghe nói đã ngứa ngáy tay chân rùi... UP lên đi bạn gì ơi.

thadasabeco
11-11-2004, 18:38
THE LAST LEAF up Tcommportdriver len cho anh em di, hay gui mail cho minh di: thadasabeco@yahoo.com, cam on nhieu nha!

THE LAST LEAF
12-11-2004, 12:29
Chỉ định cổng COM bằng thuộc tính Port (COM1 ... COM16)
Sử dụng event OnReceivedData thay cho OnComm của MSComm (tham số DataPtr: Pointer thay cho thuộc tính MSComm.Input)
Sử dụng SendString(...) để gửi chuỗi qua cổng COM
Sử dụng SendZString(...) để gửi chuỗi kết thúc zero
Sử dụng SendData(...) để gửi dữ liệu

Ví dụ để nhận chuỗi về biến Buffer các bạn dùng như sau

procedure TForm1.CommPortDriver1OnReceivedData( Sender: TObject; DataPtr: pointer; DataSize: DWORD );
var
ps : PChar;
temp : string;
begin
ps := DataPtr;
SetString(temp, ps, DataSize);
Buffer := Buffer + temp;
end;

Đã được kiểm tra và chạy thử giao tiếp qua cổng COM giữa 2 máy, chạy trên mọi Windows, chương trình viết bằng Delphi 7
Chúc các bạn thành công!!

Đây là TCommPortDriver

thadasabeco
12-11-2004, 22:48
the last leaf co kinh nghiem dung ngat bang tcomm... ko, post ro ro hon dum minh dc ko, hay 1 doan code vi du cung dc. Minh viet bang ky thuat hoi vong nhung thay chua on lam!!!

phubinh1
15-12-2004, 12:07
component TCommPortDriver co phan source khong ban Hay port len cho anh em nghien cuu di

THE LAST LEAF
15-12-2004, 13:27
Có, bác cứ down về mà nghiên cứu

ghosthd
15-12-2004, 18:22
Cái này hôm trước down rồi không phải src.

dhdhbk
16-12-2004, 23:38
Cai nay em chi test bang virtual COM chu chua test bang COM that tai chua co day noi :))