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 18-10-2008, 05:57 PM   #1
ndc
Đệ 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
ndc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-10-2008, 12:17 AM   #2
nguyenquoctoan
Đệ 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)
nguyenquoctoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-10-2008, 10:37 PM   #3
naivatho
Đệ 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ẻ!!!
naivatho vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-10-2008, 11:22 PM   #4
nguyenquoctoan
Đệ 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
nguyenquoctoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-10-2008, 01:17 AM   #5
dvnccbmacbt
Đệ 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);

 // ----------------
}
Hi vọng giúp được các bạn.
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-10-2008, 05:35 PM   #6
naivatho
Đệ 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.
naivatho vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-10-2008, 05:41 PM   #7
naivatho
Đệ 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 đỡ
naivatho vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-10-2008, 08:48 PM   #8
maiduy082
Đệ tử 4 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 66
:
Trích:
Nguyên văn bởi naivatho View Post
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 đỡ

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ì ???
maiduy082 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-10-2008, 08:51 PM   #9
nguyenquoctoan
Đệ 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
nguyenquoctoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-10-2008, 10:17 PM   #10
dvnccbmacbt
Đệ 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".
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-10-2008, 07:47 AM   #11
le.nhatcuong
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);
}
}
}
__________________
Lê Nhật Cường
ĐT: 0904937804 - 0623.626249
Email: le.nhatcuong@gmail.com

thay đổi nội dung bởi: le.nhatcuong, 25-10-2008 lúc 01:16 AM.
le.nhatcuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-10-2008, 10:11 PM   #12
naivatho
Đệ 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
naivatho vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-10-2008, 01:18 AM   #13
le.nhatcuong
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
__________________
Lê Nhật Cường
ĐT: 0904937804 - 0623.626249
Email: le.nhatcuong@gmail.com
le.nhatcuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2008, 08:20 AM   #14
thanhduy_meo
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.
thanhduy_meo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-10-2008, 07:20 PM   #15
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi thanhduy_meo View Post
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.
Với những vấn đề liên quan đến AVR, bạn có thể hỏi tại www.dientuvietnam.netwww.avrvietnam.com.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


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


Múi giờ GMT. Hiện tại là 07:22 PM.


Đượ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