PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 12-07-2007, 11:44 AM   #16
signin
Nhập môn đệ tử
 
Tham gia ngày: Apr 2007
Bài gửi: 6
:
Kính gởi: anh Hải Bắc !

Em tên là Trung, học ngành cơ khí. Em đang làm đồ án tốt nghiệp, hiện em đang gặp sự cố ở khâu truyền dữ liệu từ máy tính xuống vi điều khiển 89S52. Em đã làm đi làm lại nhiều lần nhưng không được.

Mong anh Hải Bắc xem giúp source code và hướng dẫn dùm em. Vào ngày 18 tháng 7 em bảo vệ đồ án tốt nghiệp, chỉ còn trục trặc ở khâu này thôi !

Anh có thể chỉ em:
• viết code cho visual basic truyền được khoảng 10 byte hex mà vi điều khiển nhận được
• viết code cho vi điều khiển 89S52 nhận đươc 10 byte hex do visual basic gởi
Và cho em hỏi :
• Khi vi điều khiển gởi đi nội dung “0FFh” thì máy tính nhận được ký tự gì, và ngược lại.

Cảm ơn anh Hải Bắc nhiều, thật sự em rất ngưỡng mộ anh, chúc anh luôn vui vẻ và hạnh phúc !

Code:
Code:
org 	000h
		ljmp	main
	
		org	0023h
		ljmp	ngat_noitiep

		org	0030h

main:		mov	p1,#0
		mov	TMOD,#20h			; bo dinh thoi 1 che do 2
		mov	TH1,#-3			; gia tri nap lai
		setb	Tr1				; bo dinh thoi hoat dong
		mov	SCON,#01010010b		
		mov	IE,#90h			; cho phep ngat noi tiep
		sjmp	$

ngat_noitiep:
		mov	p1,#0ffh
		clr	TI
reti
end
Code:
Code:
	Private Sub cmdPause_Click()
MSComm1.Output = "0"
End Sub

Private Sub cmdPlay_Click()
MSComm1.Output = "1"
End Sub

Private Sub Form_Load()
With MSComm1
.Settings = "9600,N,8,1"
.RThreshold = 1
.SThreshold = 0
.InBufferSize = 1024
.OutBufferSize = 1024
.InputMode = comInputModeText
.ParityReplace = ""
.CommPort = 2
If .PortOpen = False Then
.PortOpen = True
End If
End With
End Sub
Private Sub MSComm1_OnComm()
    Dim Buffer As String
    Dim size As Byte
    Dim c As Integer
    Dim i As Integer
    Dim chay As Integer
    Text1.Text = ""
              
        If MSComm1.CommEvent = comEvReceive Then ' n?u là s? ki?n truy?n
            Buffer = MSComm1.Input
            Text1.Text = Mid(Buffer, 1, 1)
        End If
 End Sub

thay đổi nội dung bởi: ngohaibac, 12-07-2007 lúc 11:59 AM.
signin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 12:05 PM   #17
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Trích:
Khi vi điều khiển gởi đi nội dung “0FFh” thì máy tính nhận được ký tự gì, và ngược lại.
Nếu bạn hiển thị kí tự đó thì nó sẽ tương ứng với kí tự có mã ASCII = 0xFF. Thực tế giá trị này sẽ được lưu vào 1 byte nên bạn có thể không cần quan tâm nó là kí tự gì mà vãn truyền nhận đúng giá trị.

Trích:
ngat_noitiep:
mov p1,#0ffh
clr TI
reti
end
Code trên vi điều khiển thế này là hỏng rùi. Vì bạn biết ngắt truyền, khi thanh ghi bộ đệm truyền rỗng thì sẽ nhảy vào ngắt nối tiếp. Khi truyền xong nó lại nhảy vào đây. Vậy không nên dùng ngắt truyền.

Bạn chỉ nên dùng ngắt nối tiếp khi nhận dữ liệu mà thôi. Nhớ xóa cờ nhớ RI nhé.

Còn chương trình trên PC chắc OK rùi. Bạn xem thếm code tại đây:
http://dientuvietnam.net/forums/showthread.php?t=5281

Chúc bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 05:49 PM   #18
controlufo
Nhập môn đệ tử
 
Tham gia ngày: Apr 2007
Bài gửi: 4
:
giúp tui lun đi ,,tui viết vb trong access mà

bạn ngohaibac biết thì chỉnh dùm tui lun đi
chương trình tui gửi kèm theo lun đó
mình bên trường tự nhiên nên cái khoản truyền thông qua thiết bị này các thày cô cũng chẳng giúp gì cho tui được đành phải nhờ bạn thui


bạn bung file codedum.rad chỉnh lại đoạn code dùm nhe
form trong acess khác trong vb
nếu bạn biết giúp tui trọn bộ nhe

form chỉ có 1 ô textbox "vao" liệu tui có lấy được số liệu cân từ đầu dọc toledo được không


mong hùi âm

thank
File Kèm Theo
File Type: rar codedum.rar (228.5 KB, 544 lần tải)
controlufo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2007, 10:13 PM   #19
VNArmy
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 33
:
Send a message via MSN to VNArmy Send a message via Yahoo to VNArmy
Muốn đọc dữ liệu từ đầu cân thì không đơn giản đâu. Bởi vì mình đâu có biết được format dữ liệu của đầu cân. Để debug format dữ liệu này bạn cần phải có thiết bị đầu cân thật và dùng Hyper terminal mà debug.
Chúc thành công.
__________________
OpAmp, EEPROM, Real Time, MCU, 74xx, 4xxx, ADC, DAC... vào đây
LCD các loại vào đây
VNArmy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-07-2007, 08:00 AM   #20
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
To controlufo:

Chào bạn.

Mình đã hướng cho bạn suy nghĩ và tìm hiểu rùi mà. Như thế này nhé, bạn sẽ làm như sau:

- Đầu tiên test xem module UART của 8051 có hoạt động ok không bằng cách đầu tiên gửi lên PC, sau đó tiếp tục là PC gửi xuống và vi điều khiển nhận được gì thì gửi lại luôn. Bạn dùng Hyper Terminal để debug. Bạn cần đọc lại module UART trong 8051, cái này thì rất đơn giản rùi, sách vở nào cũng nói cả.

Bạn đọc thêm 8051 Tutorial: Serial Communication tại đây:
http://www.8052.com/tutser.phtml nói quá dễ hiểu và đơn giản. Hoặc search google với từ khóa 8051 uart

- Sau khi xong code trên 8051 bạn làm lại trên PC gửi dữ liệu xuống 8051. Sau đó mới phát triển lên là gửi 10 kí tự và đọc 10 kí tự.


Chúc bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-07-2007, 09:14 PM   #21
hieucdtspk
Nhập môn đệ tử
 
Tham gia ngày: Nov 2005
Bài gửi: 1
:
Lựa chọn cổng còn trống...

Chào Hải Bắc và mọi người!
Các bài viết của bạn rất hay. Mình cũng đang nghiên cứu về truyền dữ liệu qua cổng COM bằng VB, mọi thứ OK, nhưng mình còn một rắt rối nhỏ, mong Bắc chỉ giúp!
Trong các bài viết, có một bài Bắc nói về việc kết nối sẽ bị lỗi nếu cổng đó đang bị sử dụng bởi một ứng dụng khác.
Nếu nhận ra cổng nào đang bị chiếm dụng và set qua cổng khác bằng tay thì không có gì đáng nói. nhưng ở đây, mình muốn chương trình tự động lựa chọn cổng còn trống mà thiết lập kết nối với nó. mò mẫm trong các thuộc tính của MSCOMM thì chẳng thấy. mình muốn công việc này thực hiện tự động bằng cách kiểm tra thuộc tính nào đó của MSCOMM (nếu có) trước khi thực hiện .PortOpen = True.
Bắc và các bạn biết vấn đề này thì chỉ giúp tớ nhé!
Cám ơn nhiều lắm...
hieucdtspk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2007, 02:15 AM   #22
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chào bạn.

Vấn đề này mình đã làm good rùi. Mình đã làm với VC++.net hay VC++ 6.0 cũng thế.

Để mình xem lại code và upload lên đây cho bạn sau nhé. Code này dùng hàm API chứ không có trong thuộc tính nào của MSCOMM đâu.

Bạn có thể qua bên luồng về lập trình bằng VC++.Net

Chúc bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2007, 10:35 AM   #23
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chào bạn.

Đây là code để test xem một port có tồn tại hay là không tồn tại hoặc đang bị ứng dụng khác chiếm giữ bằng cách dùng hàm API là CreatFile. Bạn dễ dàng tra đối số của nó trong MSDN.

Visual C++ hoặc Visual C++.Net
Code:
bool CRS232Dlg::COMAvailable(int COMNum)
{
	HANDLE hCOM; 
	CString portName;

	portName.Format(_T("COM%d "),COMNum);
 
	hCOM = CreateFile(portName,  // Specify port device: default "COM1"
						GENERIC_READ | GENERIC_WRITE,       // Specify mode that open device.
						0,                                  // the devide isn't shared.
						NULL,                               // the object gets a default security.
						OPEN_EXISTING,                      // Specify which action to take on file. 
						FILE_ATTRIBUTE_NORMAL,              // default.
						NULL);                              // default.

	if (hCOM == INVALID_HANDLE_VALUE){
		return false;
	}
	else{
		BOOL ret = CloseHandle(hCOM);
		return true;
	};
}
Visual Basic:
Code:
'// Return TRUE if the COM exists, FALSE if the COM does not exist
Public Function COMAvailable(COMNum As Integer) As Boolean
    Dim hCOM As Long
    Dim ret As Long
    Dim sec As SECURITY_ATTRIBUTES

    '// try to open the COM port
    hCOM = CreateFile("\.\COM" & COMNum & "", 0, FILE_SHARE_READ + _
        FILE_SHARE_WRITE, sec, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
    If hCOM = -1 Then
        COMAvailable = False
    Else
        COMAvailable = True
        '// close the COM port
        ret = CloseHandle(hCOM)
    End If
End Function
Tham khảo: http://www.developerfusion.co.uk/show/21/2/

Chúc bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-11-2007, 09:02 PM   #24
toanck86
Đệ tử 1 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 20
:
sao luồng này dừng luôn vậy các bác, em đang theo dõi và học về lập trình giao tiếp qua cổng com, bác nào có chương trình gì hay up lên cho mọi người tham khảo trap đổi nhé
toanck86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2008, 09:31 PM   #25
tienbkit
Nhập môn đệ tử
 
Tham gia ngày: Dec 2007
Bài gửi: 3
:
Unhappy

Cho mình hỏi thêm chút:
Nếu như mình sử dụng bắt tay bằng phần mềm (dùng 2 tín hiệu Xon & Xoff) thì chỉ cần thiết lập chế độ này( MSComm1.Handshaking = comXOnXoff) là các thiết bị tự động thực hiện hay có cần điều khiển thêm gì ko?
tienbkit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-03-2008, 02:43 PM   #26
Longnguyen
Nhập môn đệ tử
 
Tham gia ngày: Dec 2007
Bài gửi: 7
:
Anh Bac xem lai gium. Chuong trinh Rs232.exe khong chay duoc.
Longnguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-03-2008, 10:23 PM   #27
lttet
Nhập môn đệ tử
 
Tham gia ngày: Mar 2008
Bài gửi: 1
:
Xin chào ! cho em hỏi cách truyền file qua cổng com như thế nào nhỉ? em đang làm đề tài này ! mấy anh giúp em với ! Dùng bằng VB.
lttet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2008, 11:21 AM   #28
ltpbkis
Đệ tử 1 túi
 
ltpbkis's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: BKHN
Bài gửi: 14
:
Send a message via ICQ to ltpbkis
tôi cũng đang làm đồ án vi xử lý liên wan đến giao tiếp PC va VB va vi xử lý.bác nào cho tôi biết nguyên lý để PC nhận dữ liệu từ VXL lên PC rồi lại hiện wa giao dien VB như thế nào?và nếu có mã nguồn thì cho tôi với. VXL tôi dùng PIC
ltpbkis vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2008, 08:09 PM   #29
ha_vy_cson
Nhập môn đệ tử
 
Tham gia ngày: Jan 2008
Bài gửi: 3
:
các bác ơi! cho em hỏi một tý...
em đang lập trình giao tiếp giữa pc và pic 16f877a, em muon truyen một chuổi từ máy tính bằng vb6 đến pic thi nên viết code trên VB như thế nào và viết hàm nhận trong ccs như thế nào........
ha_vy_cson vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2008, 03:49 PM   #30
quoctrung
Nhập môn đệ tử
 
Tham gia ngày: Mar 2008
Bài gửi: 1
:
chào bác ngohaibac bác có thể giúp mình 1 số tài liệu về lập trình vb giao tiếp bằng cổng com với plc s7200 và mình dùng phần mềm pc acess để upload từ plc lên máy tính để giám sát mong bạn giúp mình
quoctrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
forms!nhap!vao = x


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Giao tiếp RS232 trên PC ngohaibac Giao tiếp cổng COM và LPT 189 08-05-2024 08:10 PM
Cho hỏi về giao tiếp RS232 của PIC16F877A enti Giao tiếp cổng COM và LPT 31 25-03-2016 10:14 PM
Giao tiếp RS232 trên PC qua Matlab ngohaibac Giao tiếp cổng COM và LPT 47 18-11-2015 03:51 PM
cần mua bộ thu GPS có giao tiếp RS232 kienvq Tìm mua sản phẩm 15 17-03-2011 11:25 PM
Help! Dùng C để giao tiếp RS232 dandiennang Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 6 15-03-2009 06:41 PM


Múi giờ GMT. Hiện tại là 11:30 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam