![]() |
![]() |
#46 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
nếu bạn mô phỏng thì không cần max 232 đâu.
nối trực tiếp chân 2 , 3 với RC6 ,RC7 luôn |
![]() |
![]() |
![]() |
#47 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
hà hà.cùng hợp tác nha Nuyennam888
bạn đang mo phỏng thằng proteus phải ko ?
bạn xem file sau nha. proteus 7.4 (sp3) không cần max 232 |
![]() |
![]() |
![]() |
#48 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 154
: |
pic
[QUOTE=nguyennam8888;24308]các bác giúp em với, nghĩ mãi mà chưa làm được , chương trình của em nó chỉ nhận thôi, nhưng khi nhận xong thì PIC lại không thấy hiển thị, còn void main()
{ set_tris_a(0); ENABLE_INTERRUPTS(GLOBAL); ENABLE_INTERRUPTS(INT_RDA); //////////////////////////// bạn chưa khởi tạo portc làm sao nó nhận hay gửi được set_tris_c(0x80); |
![]() |
![]() |
![]() |
#49 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 154
: |
các bạn cho mình hỏi vấn đề này nhé.
nếu mình dùng 2 bộ cổng Tin1 và Tin2, Rout1 và Rout2 cung nối vào một cổng COM của PC. 2 bộ còn lại được nối vào 2 con PIC. khi tuyền từ PC xuống thì cả 2 PIC cùng nhận. vấn đề này có ảnh hưỡng gì đến data nhận không hả các bác (phương pháp này có thực hiện được không). bác nào đã từng làm rồi xin chỉ giúp |
![]() |
![]() |
![]() |
#50 |
Đệ tử 6 túi
Tham gia ngày: Apr 2006
Bài gửi: 125
: |
Hình như bác đang nói tơi chân của con Max232. Vể lý thuyết thì không được phép làm như vậy vì RS232 chỉ cho phép truyền nhận giữa điểm và điểm. Tuy nhiên nếu như tốc độ truyền của bạn thấp thì mình nghĩ chắc nó cũng nhận được. Còn nếu muốn làm đúng chuẩn thì bạn có thể đưa nó sang chuẩn RS485 rồi nối với nhau thì không sao.
|
![]() |
![]() |
![]() |
#51 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 154
: |
uh. mình đang nói đến Max232. mình hỏi xem bạn nào đã làm thực tế việc đó chưa. vì mình chỉ truyền cho 2 PIC nên nếu được thì tốt, ko cần phải tốn thêm Ma485. nếu bạn nào đã từng làm thì cho ý kiến thử nhé
|
![]() |
![]() |
![]() |
#52 |
Đệ tử 6 túi
Tham gia ngày: Apr 2006
Bài gửi: 125
: |
Theo quy định về các chuẩn giao tiếp thì chắc chắn là không nối được theo cách này, nên nếu bạn đang làm đố án hoặc, bài tập thì không thể làm theo kiểu này được. Còn nếu để làm chơi thì cứ thử xem
![]() |
![]() |
![]() |
![]() |
#53 |
Nhập môn đệ tử
Tham gia ngày: Apr 2009
Bài gửi: 2
: |
em có câu hỏi muốn mọi người giúp đỡ":đó là code của em viết để truyền nhận dữ liệu nhung ma sao nó mời chỉ truyền từ máy tính xuống nhưng tù vi điều khiên thì chưa có truyền lên máy tính được..
code VB: Private Sub cmdexit_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If Unload Me End Sub Private Sub Cmdsend_Click() MSComm1.Output = Text1.Text End Sub Private Sub Form_Load() Dim t As Integer Dim a As Integer Me.BackColor = RGB(255, 155, 255) 'Returns Red Label1.BackColor = RGB(255, 0, 0) 'Returns Red Cmdsend.BackColor = RGB(255, 255, 0) 'Returns Red MSComm1.CommPort = 1 MSComm1.Settings = "9600,o,8,1" MSComm1.PortOpen = True End Sub Private Sub MSComm1_OnComm() If MSComm1.CommEvent = comEvReceive Then text2.Text = MSComm1.Input End If End Sub CODE VI DIEU KHIỂN #include <16f877.h> #FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #byte portb =0x06 #byte portc =0x07 #byte porta =0x05 #use rs232(baud=9600, parity=N, xmit=pin_C6, rcv=pin_C7, bits=8) char t; int8 i; #INT_RDA void rda_isr() { t=getc() ; if (t==103) { porta=0xff; delay_ms(300); porta=0x00; putc(T); } //putc(t); } void main() { set_tris_b(0); set_tris_c(0x80); set_tris_a(0); enable_interrupts(INT_RDA) ; enable_interrupts(GLOBAL) ; while(1) { portb=t; ; } } |
![]() |
![]() |
![]() |
#54 |
Đệ tử 4 túi
Tham gia ngày: May 2009
Bài gửi: 74
: |
trong chương trình của phương gặp vấn đề đó là:
chương trình vdk của bạn không vấn đề gì cả .pic có nhận được ký tự mã ascii là 103 và gủi lại máy tình vấn đề khi nhận là trên chương trình vb của bạn . bạn nhận dữ liệu bằng ngắt on_comm Private Sub MSComm1_OnComm() If MSComm1.CommEvent = comEvReceive Then text2.Text = MSComm1.Input End If End Sub khi xẩy ra ngắt thì lấy dữ liệu ra hiển thị trên text2 nhưng khi nào thì xấy ra ngắt thì bạn chưa hiểu về nó .ở ct vb của bạn thì sẽ không bao giờ xẩy ra ngắt vì bạn chưa khai báo số byte nhận về ở bộ đệm để xẩy ra ngắt mscomm1.rthreshohld = x ( số byte xẩy ra ngắt) nếu bạn dặt x=1 thì cứ có 1 byte nhận đựoc thì sẽ xẩy ra ngắt... khi bạn lấy ra và sử dụng active comm hỗ trợ truyền thông của visual basic thì khi chưa khai báo thì mscomm.rthreshold mặc định =0 tức là không cho phép ngắt nhận nên ct của bạn o nhận được bạn nên thêm mscomm1.rthreshold =1 vào private form_load() có đúng hay không bạn kiểm tra sem! và lần sau bạn nên up cả file ct của bạn lên nhé để tiện kiểm tra! |
![]() |
![]() |
![]() |
#55 |
Nhập môn đệ tử
Tham gia ngày: Jul 2009
Bài gửi: 7
: |
giao tiếp máy tính
em đang làm bài tập về giao tiếp máy tính, sử dụng 16f877(ngôn ngữ C) qua cổng Com.Nhưng em gặp vấn đề là khi truyền tín hiệu từ 1 cảm biến đến máy tính hiển thị trên 1 textbox.Nhưng khi có 2 tín hiệu cảm biến truyền đển máy tính hiển thị trên 2 textbox thì em không biêt đó là dữ liệu của textbox nào khi nhận được.(em sử dụng ngat MSComm1_OnComm)>
Mong các Pro giải thích giúp em.Thanks |
![]() |
![]() |
![]() |
#56 |
Đệ tử 2 túi
Tham gia ngày: Sep 2008
Nơi Cư Ngụ: Tp. HCM
Bài gửi: 38
: |
Bạn có thể cho mọi người xem code của bạn, sẽ dễ góp ý hơn.
Mình ko hiểu rõ ý bạn lắm, nhưng theo cách mình hay làm, nếu phải truyền 2 giá trị từ 2 cảm biến lên, thì ứng với mỗi cảm biến, cần có một ký tự đi trước để báo hiệu. Ví dụ thay vì truyền 1 byte của cảm biến 1, mình sẽ truyền 2 byte, byte đầu là '@' chẳng hạn, báo hiệu giá trị sắp nhận được là của cảm biến 1, sau đó truyền byte giá trị, với cảm biến 2 thì truyền '#' + giá trị, như vậy trên máy tính sẽ nhận biết dễ dàng giá trị nào của cảm biến nào thôi. |
![]() |
![]() |
![]() |
#57 | |
Nhập môn đệ tử
Tham gia ngày: Jul 2009
Bài gửi: 7
: |
Trích:
" Private Sub MSComm1_OnComm() Dim a As Variant If MSComm1.InBufferCount Then a = MSComm1.Input End If Text2.Text = a End Sub " Nhưng bây giờ bên VDK truyền byte bao hieu + byte gia tri thi ben VB em tách làm sao được chỉ lấy được byte gia tri thôi? |
|
![]() |
![]() |
![]() |
#58 |
Đệ tử 2 túi
Tham gia ngày: Sep 2008
Nơi Cư Ngụ: Tp. HCM
Bài gửi: 38
: |
Theo mình có 2 cách:
- Cách 1: Đặt bộ đệm Mscomm1.RThreshold = 2, có nghĩa là sau khi nhận được 2byte mới xảy ra ngắt oncomm, khi đó ta đọc 2 byte này, kiểm tra byte đầu, và giá trị là byte sau. Có thể đọc 2 byte bằng cách sau: Code:
Privat Sub MSComm1_onComm() Dim buffer 'kiểu varriant Dim Arr() as byte ' mảng động If MSComm1.CommEvent = comEvReiceive then buffer=MSComm1.Input Arr = buffer If (Arr(0)="@")then .................... End Sub ![]() thay đổi nội dung bởi: npbaoduy, 18-12-2009 lúc 01:52 PM. |
![]() |
![]() |
![]() |
#59 |
Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 2
: |
nhờ các bác giải thích giùm đoạn lệnh này với.
Option Explicit Private Sub btnClear_Click(Index As Integer) Dim i As Integer Select Case Index Case 0: For i = 0 To 11 txtHEX(i) = "" Next i Case 1: txtTextOut = "" Case 2: txtResponse = "" End Select End Sub Private Sub btnSend_Click(Index As Integer) Dim i As Integer Dim j As Integer Dim Temp As Long Dim OutString As String OutString = "" Select Case Index Case 0 ' Send Hex character string For i = 0 To 11 Temp = 0 If (Len(txtHEX(i)) > 0) Then For j = 1 To Len(Left(txtHEX(i), 2)) Temp = Temp * 16 + HexChar(Mid(txtHEX(i), j, 1)) Next j OutString = OutString & Chr(Temp) End If Next i send (OutString) Case 1 ' Send ascii string send txtTextOut.Text End Select End Sub Sub send(txtin As String) If MSComm1.PortOpen = True Then MSComm1.Output = txtin End If End Sub Function HexChar(strData As String) As Integer Select Case strData Case "0" To "9" HexChar = Val(strData) - Val("0") Case "a", "A" HexChar = 10 Case "b", "B" HexChar = 11 Case "c", "C" HexChar = 12 Case "d", "D" HexChar = 13 Case "e", "E" HexChar = 14 Case "f", "F" HexChar = 15 Case Else HexChar = 0 End Select End Function Private Sub Form_Load() Dim i As Integer For i = 0 To 2 ' Clear all input/output fields btnClear_Click (i) Next i If Not ValidatePort Then MsgBox "There are no available comm ports on this computer.", , "Commx" End End If UpdateStatus End Sub Private Sub Form_Unload(Cancel As Integer) If (MSComm1.PortOpen) Then MSComm1.PortOpen = False End If End Sub Private Sub mnuCom_Click(Index As Integer) Dim i As Integer Dim OldPort As Long On Error Resume Next With MSComm1 OldPort = .CommPort If MSComm1.PortOpen Then .PortOpen = False .CommPort = Index .PortOpen = True If Err.Number <> 0 Then ' This should not happen... MsgBox "Com" & Index & " is not available." & _ vbCrLf & Err.Description Err.Clear .CommPort = OldPort Else For i = 1 To 4 mnuCom(i).Checked = False Next i mnuCom(Index).Checked = True End If Else .CommPort = Index For i = 1 To 4 mnuCom(i).Checked = False Next i mnuCom(Index).Checked = True End If End With UpdateStatus End Sub Private Sub mnuConnect_Click() On Error Resume Next With MSComm1 If .PortOpen = True Then .PortOpen = False Else .PortOpen = True If Err.Number <> 0 Then MsgBox "Com" & .CommPort & " is not available." & vbCrLf & _ Err.Description Err.Clear End If End If End With UpdateStatus End Sub Private Sub mnuDataBSel_Click(Index As Integer) Dim i As Integer Dim NewSettings As String For i = 4 To 8 If (i = Index) Then mnuDataBSel(i).Checked = True Select Case Index Case 4 ' 4 NewSettings = ",,4," Case 5 ' 5 NewSettings = ",,5," Case 6 ' 6 NewSettings = ",,6," Case 7 ' 7 NewSettings = ",,7," Case 8 ' 8 NewSettings = ",,8," End Select Else mnuDataBSel(i).Checked = False End If Next i SetPort (NewSettings) End Sub Private Sub mnuHelpSel_Click(Index As Integer) Select Case Index Case 0 ' Basic Help MsgBox "Basic Communications Program what you see is what you get." _ , vbInformation, "Help" Case 1 ' About MsgBox "Basic Communications Program Version 0.91", , "Help About" End Select End Sub Private Sub mnuParitySel_Click(Index As Integer) Dim i As Integer Dim NewSettings As String For i = 0 To 4 If (i = Index) Then mnuParitySel(i).Checked = True Select Case Index Case 0 ' E NewSettings = ",E,," Case 1 ' M NewSettings = ",M,," Case 2 ' N NewSettings = ",N,," Case 3 ' O NewSettings = ",O,," Case 4 ' S NewSettings = ",S,," End Select Else mnuParitySel(i).Checked = False End If Next i SetPort (NewSettings) End Sub Private Sub mnuSpeedSel_Click(Index As Integer) Dim i As Integer Dim CurPortOpen As Boolean Dim NewSettings As String For i = 0 To 12 If (i = Index) Then mnuSpeedSel(i).Checked = True Select Case Index Case 0 ' 110 NewSettings = "110,,," Case 1 ' 300 NewSettings = "300,,," Case 2 ' 600 NewSettings = "600,,," Case 3 ' 1200 NewSettings = "1200,,," Case 4 ' 2400 NewSettings = "2400,,," Case 5 ' 9600 NewSettings = "9600,,," Case 6 ' 14400 NewSettings = "14400,,," Case 7 ' 19200 NewSettings = "19200,,," Case 8 ' 28800 NewSettings = "28800,,," Case 9 ' 38400 NewSettings = "38400,,," Case 10 ' 56000 NewSettings = "56000,,," Case 11 ' 128000 NewSettings = "128000,,," Case 12 ' 256000 NewSettings = "256000,,," End Select Else mnuSpeedSel(i).Checked = False End If Next i SetPort (NewSettings) End Sub Private Sub mnuStopSel_Click(Index As Integer) Dim i As Integer Dim NewSettings As String For i = 0 To 2 If (i = Index) Then mnuStopSel(i).Checked = True Select Case Index Case 0 ' 1 NewSettings = ",,,1" Case 1 ' 1.5 NewSettings = ",,,1.5" Case 2 ' 2 NewSettings = ",,,2" End Select Else mnuStopSel(i).Checked = False End If Next i SetPort (NewSettings) End Sub Private Sub MSComm1_OnComm() Dim txtBuf As String Dim i As Integer Dim c As Integer With MSComm1 Select Case .CommEvent Case comEvReceive txtBuf = .Input For i = 1 To Len(txtBuf) c = Asc(Mid(txtBuf, i, 1)) If (c < 32 Or c > 126) Then txtResponse = txtResponse & "<" & Hex(c) & ">" Else txtResponse = txtResponse & Chr(c) End If Next i End Select End With txtResponse.SelStart = Len(txtResponse) End Sub Private Sub UpdateStatus() If MSComm1.PortOpen Then StatusBar1.Panels(1).Text = "Connected" mnuConnect.Caption = "Dis&connect" btnSend(0).Enabled = True btnSend(1).Enabled = True Else StatusBar1.Panels(1).Text = "Disconnected" mnuConnect.Caption = "&Connect" btnSend(0).Enabled = False btnSend(1).Enabled = False End If StatusBar1.Panels(2).Text = "COM" & MSComm1.CommPort StatusBar1.Panels(3).Text = MSComm1.Settings End Sub Private Function ValidatePort() As Boolean Dim i As Integer On Error Resume Next ValidatePort = False With MSComm1 For i = 4 To 1 Step -1 .CommPort = i Err.Clear .PortOpen = True If (Err.Number <> 0) Then mnuCom(i).Enabled = False Else ValidatePort = True .PortOpen = False End If Next i End With End Function Private Sub txtHEX_GotFocus(Index As Integer) txtHEX(Index).SelStart = 0 txtHEX(Index).SelLength = Len(txtHEX(Index)) End Sub Private Sub txtHEX_LostFocus(Index As Integer) Dim Temp As String Temp = txtHEX(Index) Select Case Len(txtHEX(Index)) Case 0 txtHEX(Index) = "" Case 1 txtHEX(Index) = "0" & LegalHex(Mid(txtHEX(Index), 1, 1)) Case Else txtHEX(Index) = LegalHex(Mid(txtHEX(Index), 1, 1)) & _ LegalHex(Mid(txtHEX(Index), 2, 1)) End Select If (Len(txtHEX(Index)) > 0) Then Do While (Len(txtHEX(Index)) < 2) txtHEX(Index) = "0" & txtHEX(Index) Loop End If End Sub Private Function LegalHex(c As String) As String c = UCase(c) Select Case c Case "0" To "9", "A" To "F" LegalHex = c Case Else LegalHex = "" End Select End Function Private Sub SetPort(NewSettings As String) Dim CurPortOpen As Boolean Dim OldIndex As Integer Dim OldLength As Integer Dim NewIndex As Integer Dim NewLength As Integer Dim i As Integer Dim Settings(0 To 3) As String Dim Temp As String With MSComm1 CurPortOpen = .PortOpen If .PortOpen Then .PortOpen = False End If OldIndex = 1 NewIndex = 1 For i = 0 To 3 NewLength = InStr(NewIndex, NewSettings, ",") If (NewLength = 0) Then NewLength = NewIndex + Len(Mid(NewSettings, NewIndex)) End If OldLength = InStr(OldIndex, .Settings, ",") If (OldLength = 0) Then OldLength = OldIndex + Len(Mid(.Settings, OldIndex)) End If If (NewLength = NewIndex) Then Settings(i) = Mid(.Settings, OldIndex, OldLength - OldIndex) Else Settings(i) = Mid(NewSettings, NewIndex, NewLength - NewIndex) End If OldIndex = OldLength + 1 NewIndex = NewLength + 1 Next i .Settings = Settings(0) & "," & Settings(1) & "," & _ Settings(2) & "," & Settings(3) If CurPortOpen Then .PortOpen = True End If End With UpdateStatus End Sub Private Sub txtTextOut_GotFocus() txtTextOut.SelStart = 0 txtTextOut.SelLength = Len(txtTextOut) End Sub |
![]() |
![]() |
![]() |
#60 |
Nhập môn đệ tử
Tham gia ngày: Nov 2010
Bài gửi: 2
: |
có sư huynh nào có làm giao tiếp USB cho em xin,mạch quang báo giao tiếp USB.
|
![]() |
![]() |