PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp cổng COM và LPT (http://www.picvietnam.com/forum/forumdisplay.php?f=44)
-   -   Giao tiếp RS232 trên PC (http://www.picvietnam.com/forum/showthread.php?t=274)

ngohaibac 01-05-2007 11:53 PM

Chương trình Terminal
 
1 Attachment(s)
Chương trình Terminal đây, các bạn download về nhà dùng nhé.

Chúc anh em luôn luôn ok :D.

signin 21-06-2007 09:30 PM

Goi Anh Hai Bac!
 
Chương trình nhận dữ liệu từ máy tính của vi điều khiển
Code:

org        000h

        ;  khoi tao UART
        ; Thiet lap SMOD = 1, nghia la chia cho 16
                mov        a,87h                ; 87h chinh la dia chi cua thanh ghi PCON
                setb        ACC.7                ; SMOD =1, nghia la chia cho 32
                mov        87h,a       
       
                mov        SCON,#01010010b
                                        ; SM0_SM1_SM2_REN_TB8_RB8_TI_RI
                                        ;    0        1        0        1          0        0      1    0
                                        ; UART 8 bit , cho phep nhan ki tu, set co ngat phat

                mov        TMOD,#00100000b
                                        ; GATE_C/T_M1_M0_GATE_C/T_M1_M0
                                        ;      0        0      1      0          0        0      0      0
                                        ; Timer 1, mode 2 ( auto load )
                mov        TH1,#-3                ; toc do thuc 19200 baud
                setb        TR1                ; cho phep timer hoat dong
               
td:                mov        r0,#40h                ; vi tri o nho bat dau luu
               
td1:                jnb        RI,$
                clr        RI
                mov        @r0,SBUF
                inc        r0
                jmp        td1

               
end


Chương trình gởi dữ liệu từ máy tính tới vi điều khiển:

Code:

Private Sub Form_Load()

RX_Counter = 0
' init for comport

With MSComm1
    .CommPort = 2              'chose COM2
    .Settings = "19200,N,8,1"    'baud 9600bps, none parity, 8 bit data, 1 bit stop
    .InBufferSize = 1024
    .InputLen = 0
    .RThreshold = 1
    .SThreshold = 1
    .OutBufferSize = 512
    .InputMode = comInputModeBinary
    '.InputMode = comInputModeText
    .PortOpen = True
End With

'init for edit boxes
For i = 0 To 10
    Text1.Item(i).Text = i
    Text1.Item(i).Alignment = 2
Next

End Sub

Private Sub cmdSend_Click()

Dim BytesToSend(10) As Byte

'Store the data in a byte array
For i = 0 To 10
    BytesToSend(i) = Val("&h" & Text1.Item(i).Text)
Next

'Send the data to the port
MSComm1.Output = BytesToSend()

End Sub

Em có download chương trình Giao tiếp RS232 trên PC bằng Visual Basic ( do anh Hải Bắc viết ) về dùng!


Em truyền dữ liệu từ vi điều khiển 89S52 lên máy tính thì nhận đúng nhưng gởi dữ liệu từ máy tính xuống vi điều khiển thì vi điều khiển không nhận được!

Kính mong anh Hải Bắc xem dùm source code của Visual Basic, vi điều khiển của em viết đúng không? Nhờ anh Hải Bắc chỉ giúp!

Hiện nay em đang làm đồ án tốt nghiệp nhưng gặp sự cố ở khâu truyền dữ liệu từ máy tính xuống vi điều khiển.

Em hiện đang học ngành cơ khí.

@ngohaibac: em nhớ để code giữa 2 tag code nhé. Cho người đọc dễ nhìn em ạ.

master_boot 21-06-2007 10:44 PM

Anh ơi anh có thể cho em code của trương trình không?em đang làm đề tài cơ sở về "viết chương trình đường truyền file giữa 2 máy tính bằng ngôn ngữ C" em muốn tham khảo thêm anh giup em trong thời gian ngắn nhất nhé em mới vào nghề mà nếu được anh mail vào hòm thư: virus_batdiet_k5d@yahoo.com cảm ơn anh nhiều

ngohaibac 22-06-2007 04:26 PM

Source code ngay trong file đính kèm của bài 1 mà bạn:
http://www.picvietnam.com/forum//sho...47&postcount=1

Chúc bạn thành công.

ngohaibac 22-06-2007 04:38 PM

Trích:

Nguyên văn bởi signin (Post 9509)
Chương trình nhận dữ liệu từ máy tính của vi điều khiển
.................................................. .........

1. Về chương trình truyền trên PC em không có hàm ngắt OnComm à ?Thế thì làm sao xử lý được dữ liệu truyền lên nhỉ ?

SThreshold = 0 để không xảy ra sự kiện ngắt truyền. RThreshold = 1 là khi có 1 byte trong bộ đệm nhận thì sẽ xảy ra sự kiện nhận dữ liệu.

2. Còn chương trình ở VĐK làm sao em biết là vi điều khiển nhận được hay chưa ? vì khi em nhận được dữ liệu thì chỉ có ghi dữ liệu vào trong RAM thôi mà. Em có thể test bằng cách cho một cổng nối với Led để test. Khi nhận được dữ liệu thì setb để led sáng.

Chương trình của em là hoàn toàn dùng kiểu Polling, chờ khi cờ RI = 1 thì ghi dữ liệu. Cách này không tối ưu, sao em không dùng ngắt nhỉ ? như thế sẽ làm được nhiều việc hơn.

Chương trình cũng không có đoạn lệnh gửi dữ liệu lên PC mà?

Chúc em thành công.

signin 02-07-2007 06:33 PM

Cam on anh Hai Bac nhieu!

ngohaibac 09-07-2007 09:13 AM

Chào các bạn.

Tài liệu Serial Port Complete ,TUT01 và các file có liên quan mình đều upload tại đây:
http://www.esnips.com/web/UARTBac

Chúc các bạn thành công.

nofre 19-08-2007 10:07 PM

thú vị thật đấy .
Đa tạ các đại ca đã chỉ dẫn cụ thể.

huunghia 13-09-2007 12:17 PM

Trích:

Nguyên văn bởi ntc (Post 5151)
Đây nè.

http://rapidshare.de/files/23579994/...an_Axelson.pdf

:)

Bạn vào địa chỉ này, nhấn vào cái nút "FREE", sau đó đọc kĩ các thông báo ở các trang tiếp theo và làm theo là được. Nó kêu đợi thì phải chịu khó đợi.

Hehe, sinh viên bắt đầu vào mùa làm đề tài rồi đây. Mình cũng thế.

Link nay hinh nhu die rui
bac gui cho em nhe huunghiaonline@gmail.com
cam on bac nhieu

dung424 13-09-2007 06:28 PM

cảm ơn các bác, em là thành viên mới đang làm đề tài giao tiềp máy tính bằng VB đang trong quá trình tự nghiên cứu nên nhận được tài liệu của các bác em rất hay mong các bác post lến giúp em. cảm ơn các bác

salem_tdh1 16-01-2008 09:31 AM

Trích:

Nguyên văn bởi hoangthongd (Post 8239)
chao cac bac!
em chi moi tap tanh ve VC++ va dung MScomm de giao tiep voi vdk 89s52.
truyen du lieu thi ca hai ben dieu nhan duoc. khi truyen kieu CString thi du lieu truyen khong co sai sot. tuy nhien, em muon truyen theo kieu so, chang han nhu truyen con so nguyen 234 thi lai truyen sai het ca ben vdk va PC.
em thay cac bac kha ranh ve van de nay nen xin cac bac giup em voi
dieu nay rat can thiet cho em vi em dang lam de tai mon hoc.
xin bac nao biet giup em voi

Mình chạy bài của Bắc thì thấy đúng tuốt nhưng mình định áp dụng thì vấp phải vấn đề giống hoangthongd. Mình muốn truyền và nhận dữ liệu dạng số để thực hiện tính toán sau này chứ không chỉ hiển thị mà không biết làm thế nào để chuyển đổi từ dạng string sang số cả. Rất mong mọi người giúp đỡ.

thanhlam220582 24-01-2008 03:45 PM

Trích:

Nguyên văn bởi salem_tdh1 (Post 13916)
Mình chạy bài của Bắc thì thấy đúng tuốt nhưng mình định áp dụng thì vấp phải vấn đề giống hoangthongd. Mình muốn truyền và nhận dữ liệu dạng số để thực hiện tính toán sau này chứ không chỉ hiển thị mà không biết làm thế nào để chuyển đổi từ dạng string sang số cả. Rất mong mọi người giúp đỡ.

bạn có chạy thử bài của anh Bắc viết bằng vb ko?mình chạy ko báo lỗi gì nhưng ko nhận đc dữ liệu về.mình ko bit có sai chỗ nào ko nữa.bạn chạy thử rồi chỉ cho mình với nhé.cám ơn nhiều
ah đây là link http://www.picvietnam.com/forum/showthread.php?t=869

svn 28-01-2008 10:37 AM

Theo mình, phần giao tiếp rs232 nếu viết trên máy tính thì có lẽ ko có gì bàn nữa :D Nếu gửi nhận string thì lại càng khỏe :)
Nhưng khi giao tiếp cần tốc độ nhanh, và gửi nhiều giá trị trong 1 lần truyền, thì ít ai truyền cả string đi cả. Thông thường là truyền kiểu binary. Khi truyền nhận giá trị binary, mình thấy nên chú ý những cái sau:
- Ở máy tính, nên bỏ chọn phần discard null character (có thể nó có tên khác) - nói chung một số công cụ chúng ta dùng có thể có chức năng bỏ qua các giá trị 0x00 này ko lưu vào buffer nhận.
- Ở VDK, khi ta lười ko nhận từng byte để xử lý mà dùng các hàm nhận cả chuỗi 1 lần rồi tách ra xử lý từng byte thì thường các hàm này trong các trình dịch cho VDK chỉ đọc đến kí tự null (0x00) là ngừng, kết thúc chuỗi đọc.
- Nên set parity cho rs232, để none lỡ có sai gì thì ... :D (mặc dù chả bao giờ mình thấy nó sai thì phải - chắc ăn cứ set)
- Nếu dùng pic, nên set luôn ERROR để khi có lỗi như tràn buffer khi nhận dc quá nhiều byte gửi đến thì nó tự reset lại, ko thì nó ngừng luôn, khỏi truyền nhận gì sất (mấy con khác mình ko biết :P ).
- Nếu muốn gửi nhận số thực (float, double) mà ko muốn phải gửi cả string 1 đống kí tự đi, có thể tham khảo cách lưu trữ số thực trên máy tính, gửi từng byte của nó đi, khi nhận về thì xử lý để nó lại trở thành số thực (tham khảo wikipedia - float number). Các tut và ex mình chưa thấy cái nào làm thế này, mà chỉ có chuyển số thực thành 1 chuỗi (123,456 => "123,456") rồi gửi cả chuỗi đi :D

falleaf 28-01-2008 11:43 AM

Trích:

Nguyên văn bởi svn (Post 14164)
- Nếu muốn gửi nhận số thực (float, double) mà ko muốn phải gửi cả string 1 đống kí tự đi, có thể tham khảo cách lưu trữ số thực trên máy tính, gửi từng byte của nó đi, khi nhận về thì xử lý để nó lại trở thành số thực (tham khảo wikipedia - float number). Các tut và ex mình chưa thấy cái nào làm thế này, mà chỉ có chuyển số thực thành 1 chuỗi (123,456 => "123,456") rồi gửi cả chuỗi đi :D

F nhớ đã có bài viết về mantissa rồi mà? Hồi một bạn làm luận văn về điều khiển mờ, F đã có cho bạn đó viết về thuật toán này rồi, các bạn thử tìm lại đâu đó trong phần thuật toán xem.

Chúc vui

littlephoc 21-02-2008 06:30 PM

Mình viết class đảm nhận việc đọc ghi từ PC tới cổng COM bằng các win32 API : ReadFile, WriteFile.
Và đang gặp một số trục trặc sau:
- Do không biết số byte mà thiết bị gửi trả về (response message) là bao nhiêu, tùy theo câu lệnh mình gửi đi đúng hay sai, mà độ dài của response message có thể thay đổi. Cho nên làm sao để đọc hết được buffer trong thời gian ngắn nhất, nghĩa là vừa hết dữ liệu được gửi về thì ngay lập tức quay về chương trình chính để xử lý.
- Khi debug, mình để ý thấy mỗi lần đọc thì lệnh ReadFile đọc được 7 byte một và mình cứ phải quay vòng để đọc nhiều lần mới hết được. Đây có phải là do setting cho com port chưa đúng, hay là do thiết bị nó trả về theo kiểu như thế? Thiết bị thì mình cũng chưa nắm hết được vì đó là thiết bị bảo mật, cho nên không có tài liệu để tham khảo tường tận mà chỉ có được input, output.
Mục đích là mỗi lần đọc thì lệnh ReadFile sẽ đọc được hết response message, có chiều dài thay đổi trong khoảng từ 6 bytes đến 64 bytes. Không phải đọc nhiều lần mà chỉ cần đọc một lần. Để làm điều này thì cần dùng timeout hay là loop lệnh ReadFile nhiều lần ?
Xin cảm ơn.

sonvienthong 21-03-2008 11:38 PM

Giao tiep COM
 
Trích:

Nguyên văn bởi linhnc308 (Post 1627)
Về cái giao tiếp này tôi cũng đã làm khá nhiều mạch, ,phần mềm thì viết bằng VB thôi. Nói chưng khá hay. Nhân đây, có bác nào đã làm mạch đo nhiệt độ dùng PIC và gửi dữ liệu lên máy tính chưa. Và dữ liệu đó sẽ được đưa vào một đồ thị, vẽ thanh dạng biểu đồ theo thời gian. Ở nhà tôi đã làm cái mạch đo rồi, nhưng còn khoản ghi dạng đồ thị thì chưa,ở nhà cũng có cái code mẫu họ dùng VB trông khá đơn giản,đồ thị chạy đẹp,khá ổn. Tôi thấy cái này khá hay. ta có thể lưu đồ thị đó lại,sau có thể xem lại tiến trình biến đổi nhiệt..v.v...

Mình cũng đang làm KIT đo nhiệt độ giao tiếp với COM nhưng lại truyền qua line điện thoại thông qua 2 modem/fax ở 2 đầu.Bạ có thể post cho mình phần mềm VB này đc ko? cả đoạn code đồ thị tiến trình biến đổi nhiệt độ nưa nhe. Thanks.
Mình đang làm luận văn nên rất cần nó lắm. Vả lại KIT nhiệt độ của mình vẫn chưa hoatddoognj được, xin bạn chỉ giáo

89c2051 04-04-2008 11:22 AM

may sư huynh cho em hỏi tý nha ; em viết xong chương trình quang báo ròi ,nhưng phần load font em bó tay lun,em có chương trình LCD Font Maker 3.0 nhưng nó chỉ xuất ra bộ font dang C (0x0A,0x00,0xFF,...) hoăc ASM ( 0aH,00h,ffh,...) vậy làm sao load nó mà truyền ra cổng com bay giờ đây !

hochoi2006 10-04-2008 09:53 AM

Thank!
 
Trích:

Nguyên văn bởi vdt (Post 8061)
Có ai lập trình điều khiển bằng Delphi không? Do lịch sử để lại, thời mình đi học chỉ đựoc dạy Pascal, thế nên sau này cũng vẫn theo con đường cũ mà dùng Delphi.
Mình thấy viết chương trình điều khiển bằng VB thì đơn giản thật, nhưng khi dân kỹ thuật dùng thì vẫn thấy thế nào ấy. Dùng VC thì là Pro nhất, nhưng với mình thì sẽ mất rất nhiều thời gian để học. Thế nên mình phải sử dụng Delphi.
Hiện mình có một số thư viện để viết cho cổng RS232 bằng Delphi, đây cũng là những thư viện free và mình download trên net cả thôi, nhưng mình thấy dùng khá ổn định và dễ dàng. Mình xin đóng góp lên đây để mọi ngừoi tham khảo nhé.
Chúc mọi người vui vẻ :) :) :)


Thank! Thank! Thank!

vuhuuthang 15-04-2008 12:47 AM

Trích:

Nguyên văn bởi ngohaibac (Post 1347)
Chào các bạn tôi xin đưa cho các bạn chương trình mẫu để giao tiếp với RS232 trên PC. Chương trình này tôi viết bằng Visual C++ trong bộ Microsoft Studio 6.0 của Microsoft, các bạn dịch lại ra file .exe để chạy. Phần hướng dẫn chi tiêt tôi sẽ gửi sau khi được kiểm duyệt kĩ lưỡng. Chương trình này còn đơn giản. Sẽ có nhiều phiên bản sau ra đời.

Giao diện chương trình như sau:
Hình 1: Giao diện chương trình

Chương trình có chức năng sau:

- Nhập kí tự hoặc xâu kí tự vào EditBox Transfer, điều chỉnh tham số giao tiếp trên các ComboBox. Nhấn nút Send để gửi dữ liệu ra cổng COM.

- Đồng thời với nó nếu có dữ liệu truyền vê cổng Com thì dữ liệu sẽ được hiển thị lên EditBox Receive. Khi bạn nhấn vào Clear thì sẽ xoá dữ liệu hiển thị trên EditBox này

Chú ý:

Để có thể test luôn chương trình các bạn nối tắt chân 2 và chân 3 của RS232 lại với nhau chính là nối chân RxD và TxD để chúng ta truyền dữ liệu ra RS232 sau đó nhận dữ liệu luôn.


http://luckytoki.com/haibac/download.../rs232_pin.gif
Hình 2: Sơ đồ đấu chân của RS232

Chúc các bạn thành công.

Chúc các bạn thành công

ngohaibac 15-04-2008 04:33 PM

Chào anh em.

Đang tập trung làm đồ án nên hơi lơ là với anh em quá. Xin lỗi nhé. Mình sẽ chú ý chăm sóc các bạn hơn nữa.

Chúc các bạn thành công.

ltpbkis 18-04-2008 09:16 AM

Hoi Ngo Hai Bac?
 
Anh Bắc ơi.em đang làm bài tập lớn về VXL.yêu cầu của bài là:
1. nhập nhiệt độ max va min để gửi xuống cho PIC .Nhiệt độ đó là khoảng để PIC ra báo động bằng loa nêu vượt ra khỏi khoảng [max ,min]
2.nhập xong gửi dữ liệu xuống
3.nhận nhiệt độ đo từ LM 335 đo được lên để hiển thị
Tất cả nhập, nhận và truyền dữ liệu đều được viết bằng Visual Basic

Anh cho em hỏi đoạn chương trình sau em viết để truyền nhiệt độ xuống đã đúng chưa mà sao vẫn không được.

' ham de gui du lieu xuong tu PC'
'================================================= ======================='
Private Sub Gui_Click()
Dim Tmaxs As String 'kieu bien truyen la string'
Tmaxs = Tmax 'Bien chua nhiet do max de truyen'
Dim Tmins As String
Tmins = Tmin 'Bien chua nhiet do min de truyen'
If (RS232.PortOpen = True) And (RS232.CTSHolding = False) Then
'neu cong da mo va khong trong wa trinh truyen du lieu thi truyen'
RS232.Output = Tmaxs 'truyen Tmax'
RS232.Output = Tmaxs 'Truyen Tmin'
Else
RS232.PortOpen = True 'nguoc lai phai mo cong'
RS232.Output = Tmaxs
RS232.Output = Tmaxs
End If 'ket thuc kiem tra dieu khien va truyen'
End Sub

và anh cho em cái thuật toán gửi và nhận dữ liệu đi.như để gửi và nhận cần làm cái gì từng bước một kiểm tra cái gì.Truyền và nhận chuỗi ký tự số thì làm như thế nào.

ltpbkis 18-04-2008 09:32 AM

Anh Bắc
 
Anh Bắc ơi ,em đã làm theo các bước trên mà vẫn không chạy được.Anh gửi cho em code mà anh viết để thực hiện chương trình cho em được không.em không hiểu làm sai ở đâu nữa mà không chạy được.em đang cần lắm ah.Cảm ơn anh!

leejongfan 04-06-2008 01:50 PM

Dùng C#
 
Hôm trước vòng vòng trên net có thấy vài trang web cũng bàn về giao tiếp COM trên PC dùng C#, post lên mọi người xem chơi :

http://www.dreamincode.net/forums/showtopic35775.htm

http://www.codeproject.com/KB/cs/ser...unication.aspx

http://msmvps.com/blogs/coad/archive...300_-.NET.aspx

ngqxuan 28-06-2008 01:57 PM

Tiện thể mình cũng nhờ các pác lỗi này là lỗi gì vậy ở VS C++,và cách khắc phục (mình ko phải dân IT nên các pác chỉ tường tận một chút,có hình ảnh càng tốt) Cảm ơn các pác nhiều


VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_ISampleGrabberCB
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _TIME_FORMAT_FRAME
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_IMediaSeeking
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_IMediaEvent
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_IMediaControl
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_IMediaFilter
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _CLSID_NullRenderer
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _MEDIASUBTYPE_RGB24
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _MEDIATYPE_Video
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _FORMAT_VideoInfo
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_ISampleGrabber
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _CLSID_SampleGrabber
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_IBaseFilter
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _CLSID_FilterGraph
VideoAnaDoc.obj : error LNK2001: unresolved external symbol _IID_IGraphBuilder

manh.1041399 28-06-2008 07:32 PM

Chào Ngohaibac!
Tôi là thành viên mới vào nghề nghe các thầy nói về điện tử thấy mê lấm, nhưng khổ nổi phần thực hành tôi còn yếu lắm. Bạn có thể giúp mình tiến bộ đuợc không. Tôi cũng liều thử làm đồ án xe lăng cho ngưòi già: là đề tài tự nghĩ thôi nhưng không biết bắt đầu từ đâu. Mình học cơ điện tử, nếu đuợc giúp đỡ mình xin chân thành cảm ơn cậu rất nhiều

haku039 21-09-2008 11:32 AM

Chào mọi người,mình mới bắt đầu học con 8051,mình làm theo TUT của anh ngohaibac,nhưng mình ko có code và sơ đồ mạch để truyền dữ liệu từ 8051 lên PC,bác nào giúp mình với hay mail cho minh theo địa chỉ : nguythachun@gmail.com
...thanks!!!

nhti 27-09-2008 08:13 PM

cam on mấy bác, để em về đọc đã có gì thắc mắc hôm sau em sẻ hỏi mấy bác

truongnv 29-09-2008 11:34 AM

Bac Bac va cac cao thu giup em cai truyen thong PC voi p30f4011 cai
 
1 Attachment(s)
Em muốn điều khiển tốc độ động cơ DC từ PC, PIC dùng cái UART2. Các bác giúp em xem chương trình PIC sai chỗ nào mà em k thể truyền thông được.
Cám ơn các bác nhiều nhiều.

tiendungkct 30-09-2008 10:39 AM

1 Attachment(s)
Trích:

Nguyên văn bởi ltpbkis (Post 15604)
Anh Bắc ơi ,em đã làm theo các bước trên mà vẫn không chạy được.Anh gửi cho em code mà anh viết để thực hiện chương trình cho em được không.em không hiểu làm sai ở đâu nữa mà không chạy được.em đang cần lắm ah.Cảm ơn anh!

mình cũng viết 1 ít về nó nhưng chắc chưa hay lắm bạn tham khao nha .có sai ji bạn góp ý nha

ngocvq 06-12-2008 06:05 AM

Cám ơn
 
E cảm ơn a Bắc rất nhiều!

tcoi001 06-01-2009 09:00 PM

Mình cũng đang muốn viết một phần mềm truyền thông giữa hai máy tính:có thể gửi các byte đơn (kí tự) hoặc là file text qua cho nhau dùng VB 6.0
Mình cũng mới học VB nên chưa biết nhiều. Tìm kếm trên mạng thì được đoạn code này

code:truyền kí tự
Code:

Private Sub cmdClear_Click()
    Text1.Text = ""
    Text2.Text = ""
End Sub

Private Sub cmdExit_Click()
Unload Me
End Sub

Private Sub cmdSend_Click()
    MSComm1.Output = Text2.Text
End Sub

Private Sub Form_Load()
    cmdSend.Caption = "&Send"
    Text1.Text = ""
    Text2.Text = ""
    Text1.Enabled = False
    cmdExit.Caption = "&Exit"
    With MSComm1
        .Settings = "9600,N,8,1"
        .CommPort = 1
        .RThreshold = 1
        .SThreshold = 0
        .InputMode = comInputModeText
        .InputLen = 0
        .Handshaking = comNone
        .InBufferSize = 1024
        .OutBufferSize = 1024
        If .PortOpen = False Then
          .PortOpen = True
        End If
       
    End With
End Sub

code: truyền file text

Private Sub Command1_Click()
Cdlg.DialogTitle = "Send file..."
Cdlg.Filter = "Textfile (*.TXT)|*.txt|All Files (*.*)|*.*"
Cdlg.InitDir = App.Path
Cdlg.FileName = ""
Cdlg.ShowOpen

' The Function Call
If Cdlg.FileName <> "" Then SendFile (Cdlg.FileName)

End Sub

Private Sub Form_Load()

' Opens the selected com port
MSComm1.CommPort = 1
MSComm1.PortOpen = True

End Sub


' here is the function
Function SendFile(tmp$)

Dim temp$
Dim hsend, bsize, LF&

' Open file
Open tmp$ For Binary Access Read As #2
' Check size on Mscomm1 OutBuffer
bsize = MSComm1.OutBufferSize
' Check file length
LF& = LOF(2)

' This code makes tiny pieces of data (Buffer sized)
' And send's it

Do Until EOF(2)
   
    If LF& - Loc(2) <= bsize Then
        bsize = LF& - Loc(2) + 1
    End If

    ' Make room for some data
    temp$ = Space$(bsize)
   
    ' Put the data piece in the Temp$ string
    Get #2, , temp$

    MSComm1.Output = temp$

    Do
        ret = DoEvents()
    ' Wait until the buffer is empty
    Loop Until MSComm1.OutBufferCount = 0
Loop

' close file
Close #2

End Function

Nhưng ở hai đoạn code này mình thấy đều chỉ có phần truyền kí tự và file mà chưa có phần nhận.Vậy thì chương trình có thể chạy được ko?
Ai rành về cái này có thể viết tiếp hộ mình được ko?
ah còn 1 yêu cầu nhỏ nữa là phần mềm thì phải có giao diện nữa nhỉ? có thể hướng dẫn mình cách tạo giao diện bằng tiếng việt được ko? kiểu như là một dòng ghi là: gửi file hay ki tự còn dòng dưới ghi là file hay kí tự nhận được.
Cảm ơn mọi người nhiều.
cảm ơn anh Bắc đã mở diễn đàn này cho đàn em học hỏi.
Cảm ơn!

ltt 20-01-2009 10:06 PM

tui chỉ có thể giúp bạn phần truyền kí tự thui.bạn có thể tham khảo đoạn chương trình đính kèm theo đây.Có gì không hiểu tui có thể giúp bạn

ngohaibac 27-01-2009 09:39 AM

Trích:

Nguyên văn bởi manh.1041399 (Post 17111)
Chào Ngohaibac!
Tôi là thành viên mới vào nghề nghe các thầy nói về điện tử thấy mê lấm, nhưng khổ nổi phần thực hành tôi còn yếu lắm. Bạn có thể giúp mình tiến bộ đuợc không. Tôi cũng liều thử làm đồ án xe lăng cho ngưòi già: là đề tài tự nghĩ thôi nhưng không biết bắt đầu từ đâu. Mình học cơ điện tử, nếu đuợc giúp đỡ mình xin chân thành cảm ơn cậu rất nhiều

Chào bạn.

Diễn đàn là nơi trao đổi, có rất nhiều người rất giỏi, mỗi người biết chút, góp nhặt vào sẽ là kiến thức tốt cho mình. Bạn cứ mạnh dạn thảo luận đề tài của bạn trên diễn đàn nhé.

Chúc bạn thành công.

tungtot_vl 26-02-2009 10:09 AM

mình muốn giao tiếp PC với 2 hoặc nhiều PIC thông qua 1 cổng COM của PC. nhưng khi PC gửi xuống chỉ có 1 PIC nhận data. giốmg như chuẩn I2C ấy. PC là Master còn các PIC là Slever. Bác nào biết thì chỉ giúp mình hướng giải quyết với. thank you!

nguyen tien 27-02-2009 10:59 AM

chào bác Bắc, vừa qua em có thực hiện cái TUT bác viết về RS232 hướng dẫn về lập trình giao tiếp RS232 bằng VC++. (http://www.picvietnam.com/download/T...OHB.100106.pdf). Em làm theo bác chỉ mà nó báo 102 lỗi, toàn lỗi "error C2018: unknown character '0xa0' ". Bác có thể giải thích cho em lỗi này đc không? Và cách khắc phục như thế nào.
Project em tạo đây: http://www.mediafire.com/?zlmntzbeg3m . Cám ơn các bác đã đọc!

tranvankien_bk 27-02-2009 11:37 AM

em dang lam ve giao tiep rs232 giua pic 16f877a voi may tinh.em khong biet lap trinh vb6.0 de truyen du lieu .bac nao biet day em voi .thank ,,,,,,,,,,,

xuanhiendk2 27-02-2009 11:58 AM

Các bạn ơi làm thế nào để viết được tiếng Việt trong CCS thế? Có phải chúng ta tạo một font rồi include font đó vào chương trình sau đó đổi lại mã ASCII mở rộng là được ko ạ?

hoang phuong 14-03-2009 05:24 PM

Bác Bắc ơi!Sao bác ko dịch luôn ra file.exe cho a e đc nhờ

mtuankct 15-03-2009 12:31 AM

Trích:

Nguyên văn bởi tungtot_vl (Post 23022)
mình muốn giao tiếp PC với 2 hoặc nhiều PIC thông qua 1 cổng COM của PC. nhưng khi PC gửi xuống chỉ có 1 PIC nhận data. giốmg như chuẩn I2C ấy. PC là Master còn các PIC là Slever. Bác nào biết thì chỉ giúp mình hướng giải quyết với. thank you!

Theo mình biết thì chuẩn RS232 chỉ cho phép thực hiện liên kết điểm-điểm, nếu bạn muốn tạo liên kết đa điểm thì bạn có thể chuyển nó sang chuẩn RS485

hoang phuong 15-03-2009 03:54 PM

a Bắc ơi! E ko down dc nó xuống. Chương trình ko còn nữa rồi.


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam