![]() |
|
Tài trợ cho PIC Vietnam |
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... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 2 túi
Tham gia ngày: Sep 2008
Bài gửi: 37
: |
giao tiếp rs232
xin chào các bác
em mới học pic, em có một thắc mắc muốn hỏi các bác: em dùng con 877a để nhận dữ liệu từ pc , nhưng em mới chỉ nhận dc 1 kí tự thôi.VD:em truyền kí tự "a"từ pc thì nó nhận dc nhưng em muốn nhận dc 1 chuỗi kí tự ,nhưng kho biết phải lập trình cho nó thế nào. vd như em muốn truyền chữ "hello" từ pc , thì ở vđk cũng nhận dc từ "hello" rồi sau đó nó truyền lại cho pc. Mong các bác sớm giúp em!!!! thanku |
![]() |
![]() |
![]() |
#2 |
Đệ tử 6 túi
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: BK TP HCM
Bài gửi: 136
: |
bạn làm như vậy nè(mình đã làm như vậy với vb)
-trong vb xác định độ dài chuỗi cần truyền, giả sử là 4 ký tự đi,nuế chưa đủ thì thêm 0 trước vô,đủ rồi thì thôi... -dưới vi điều khiển xác định số ký tự nhận là 4 nhận đủ thì thôi(dùng vòng lặp for) |
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Aug 2008
Nơi Cư Ngụ: BKHCM
Bài gửi: 17
: |
Bạn toàn ơi.Bạn chỉ giúp mình code viết cho Pic để nó nhận kí tự mà bạn truyền xuống được không?
Mình cũng dùng truyền nhận VB mà mình mới truyền được thôi chứ mình viết code cho Pic nhận chưa được Mình củng học BKTPHCM nhưng mình học bên cơ khí,mà muốn học điện cho biết có gì bạn gởi mail cho mình được không hhtien192@yahoo.com ai biết thì chỉ giúp mình với Thanks các bác nhiều!!!!! Chúc các bác tuần mới vui vẻ!!! |
![]() |
![]() |
![]() |
#4 |
Đệ tử 6 túi
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: BK TP HCM
Bài gửi: 136
: |
đoạn code có thể viết đơn giản như sau:
void getvalue() { int16 x; int i; char s[4]; “khai bao s 4 byte,so luong byte truyen xuong for(i=0;i<4;i++) s[i]=getc(); “nhan s vao tu tu dang chuoi,so ky tu trong moi chuoi x=atol(s); “chuyen chuoi sang so y=x; printf("%lu",x); “xuat gia tri x ra pc so ko dau } hàm nhận dữ liệu từ vb đơn giản như sau, số lượng ký tự truyền và nhận phải đồng nhất trong hàm chính while(1) { if (y==0) getvalue(); } bạn bổ sung mấy khai báo khác, chạy ok thôi |
![]() |
![]() |
![]() |
#5 |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 65
: |
các bạn có thể dùng lệnh gets(str) để nhận 1 chuỗi ký tự từ máy tính. sau đó muốn làm j với chỗi đó cũng được. Mình gửi 1 ví dụ mình đã làm và đã chạy ok:
Code:
#INT_RDA void ngat_serial() { gets(str); \\ NHAN CHUOI KY TU printf("%s\r",str); \\GUI TRA CHUOI KY TU //-------THAO TAC VOI CAC PHAN TU CUA CHUOI----// if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='p')) fini = 1; else if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='i')) fini = 2; else if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='d')) fini = 3; else if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='v')) fini = 4; else if ((str[strlen(str)-2]=='2')&&(str[strlen(str)-1]=='p')) fini = 5; else if ((str[strlen(str)-2]=='2')&&(str[strlen(str)-1]=='i')) fini = 6; else if ((str[strlen(str)-2]=='2')&&(str[strlen(str)-1]=='d')) fini = 7; else if ((str[strlen(str)-2]=='3')&&(str[strlen(str)-1]=='p')) fini = 8; else if ((str[strlen(str)-2]=='3')&&(str[strlen(str)-1]=='i')) fini = 9; else if ((str[strlen(str)-2]=='3')&&(str[strlen(str)-1]=='d')) fini = 10; else if ((str[strlen(str)-2]=='v')&&(str[strlen(str)-1]=='m')) fini = 11; else if ((str[strlen(str)-2]=='a')&&(str[strlen(str)-1]=='m')) fini = 12; else if ((str[0]=='o')&&(str[1]=='n')) on = 1; strncpy(value,str,strlen(str)-2); // ---------------- } |
![]() |
![]() |
![]() |
#6 |
Đệ tử 1 túi
Tham gia ngày: Aug 2008
Nơi Cư Ngụ: BKHCM
Bài gửi: 17
: |
Bác Toàn ơi! sao em viết code như bác thế mà pic vẫn không nhận và xuất lên máy tính được
em viết code của bác khi dịch vẫn dịch được và chương trình VB của em cũng send và nhận được khi e nối chân 2 và 3 lại với nhau Nhưng khi kết hợp lại thì k được. Mong bác sớm giúp đỡ thay đổi nội dung bởi: naivatho, 22-10-2008 lúc 05:55 PM. |
![]() |
![]() |
![]() |
#7 |
Đệ tử 1 túi
Tham gia ngày: Aug 2008
Nơi Cư Ngụ: BKHCM
Bài gửi: 17
: |
Bác dvnccbmacbt
code của bác e đọc chưa hiểu hết nơi,nhất là đoạn code sau if. bác chú thích giúp em được k ạ,e cũng muốn pic nhận chuỗi kí tự mà trên VB em truyền xuất sau đó xuất ra led ma trận mà chưa làm được,em đã có mạch và chương trình trên vb truyền được rồi ạ vì em mới học nên mong bác sớm giúp đỡ |
![]() |
![]() |
![]() |
#8 | |
Đệ tử 4 túi
Tham gia ngày: Apr 2008
Bài gửi: 66
: |
Trích:
phần trên là nhận ký tự từ pc gửi ra ,còn sau đó là thao tác bạn dùng cho chuỗi ký tự đó thôi . đoạn if chỉ la ví dụ thôi . hay là bạn muốn biết chính xác đoạn code đó có chức nạng gì ??? |
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 6 túi
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: BK TP HCM
Bài gửi: 136
: |
mình truyền giá trị 0<X<1000 cho bạn xem như sau
khi truyền và nhận tất cả phải ở dạng chuỗi code vb: rstr = txttruyen.Text 'dữ liệu cần truyền If (Val(rstr) < 1000) And (Val(rstr) > 0) Then l = Len(rstr) ‘gan l cho do dai c If (l = 1) Then rstr = "000" + rstr End If If (l = 2) Then rstr = "00" + rstr End If If (l = 3) Then rstr = "0" + rstr End If End If If rstr = "" Then ' do anything if u want Else Call MoPort_Click 'goi hàm mở port khai báo thông số cần truyền MSComm1.Output = rstr 'truyền dữ liệu xuống End If code c #include<16f877a.h> #device PIC16F877a*=16 ADC=10 #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7) //hàm nhận dữ liệu void getvalue() { int16 x; int i; char s[1]; //khai báo số lượng chuỗi truyền for(i=0;i<4;i++) //số ký tự truyền xuống s[i]=getc(); //nhan s vao tu tu dang chuoi x=atol(s); //chuyen chuoi sang so y=x; //số bạn cần truyền đây printf("%lu",x); “xuat gia tri x ra pc so ko dau } //hàm main void main() { while(1) { if (y==0) getvalue(); } } hi vọng giúp được bạn |
![]() |
![]() |
![]() |
#10 |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 65
: |
đoạn code sau if không cần hiểu đâu. Mình chỉ minh họa thao tác với chuỗi thôi mà. Đoạn đó tùy ứng dụng của ban. Còn câu lệnh
[code] gets(str); [\code] là nhận 1 chuỗi ký tứ cho đến khi nhận được ký tự kết thúc là "\r". |
![]() |
![]() |
![]() |
#11 |
Nhập môn đệ tử
Tham gia ngày: Dec 2007
Bài gửi: 6
: |
#include <16F876A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_A2, rcv=PIN_A3) int8 ch; void main(void) { while(true) { ch = getc(); if (ch!=0) { putc(ch); } } } thay đổi nội dung bởi: le.nhatcuong, 25-10-2008 lúc 01:16 AM. |
![]() |
![]() |
![]() |
#12 |
Đệ tử 1 túi
Tham gia ngày: Aug 2008
Nơi Cư Ngụ: BKHCM
Bài gửi: 17
: |
Em cám ơn các bác nhiều!!!
Để em thử xem em truyền và nhận được không rồi em liên hệ các bác giúp đỡ!!! Đa tạ các bác |
![]() |
![]() |
![]() |
#13 |
Nhập môn đệ tử
Tham gia ngày: Dec 2007
Bài gửi: 6
: |
đoạn mã trên đơn giản nhất, khi nhận được sẽ truyền len PC lai đúng ký t75 vừa nhận
|
![]() |
![]() |
![]() |
#14 |
Nhập môn đệ tử
Tham gia ngày: Nov 2007
Bài gửi: 2
: |
chào các pác! tui đang gặp khó khăn về giao tiếp vdk với máy tính.cụ thể là giao tiếp AVR với PC điểu khiển bằng VB6 hiển thị nhiệt độ con LM35.các cao thủ xin chỉ giúp với.tui khó khăn ở khâu truyền nhận làm sao VB nó lấy tín hiệu từ con AVR đấy.Xin cảm ơn các bạn trước hen.
|
![]() |
![]() |
![]() |
#15 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|