![]() |
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 |
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) |
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ẻ!!! |
đ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 |
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 |
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 đỡ |
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 đỡ |
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ì ??? |
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 |
đ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". |
#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); } } } |
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 |
đ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
|
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.
|
Trích:
Thân, |
Múi giờ GMT. Hiện tại là 05:05 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