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)
-   -   Cho hỏi về giao tiếp RS232 của PIC16F877A (http://www.picvietnam.com/forum/showthread.php?t=796)

anhtuongpro88 29-03-2010 02:39 AM

em mới học pic. em muốn viết một ctrinh nhân một kí tự (A) từ pc qua cổng rs232 xuống vdk pic6f877a và lập trình cho vdk đó xuất tín hiệu ra chân B0 để dk thiết bị ngoại vi. rât mong được sự giúp đỡ của các pác. thanks!

anhtuongpro88 30-03-2010 12:24 AM

các pác giup em chuong trinh nhận một ki tu A tu may tinh xuong pic 16f877a, va tu do lap trinh cho vdk xuất tín hiêu ra chan B0 di ạ. chuong trinh viet bang ccs. cac pác giup em voi!

nguyenthanhdt5 13-04-2010 01:31 AM

Anh Hard ơi cho em hỏi một chút. Nếu truyền dữ liệu dạng khung có nhiều trường như anh nói( kích thước lớn) qua UART thì làm thế nào?
Mọi người cho em xin ý kiến!
Thanksss!

thuc101 15-05-2010 10:29 PM

truyền nối tiếp rs232
mình mới vào nghề pic6f877a cho mình hỏi cái này chút:
nếu như mình gửi xuống bằng vb6 thì khi gửi xuống cho pic nó sẽ hiểu là mã ascii phai không vậy thì làm sao để pic có thể hiểu được nhỉ
chương trình mình dùng vb6 với mscomm gửi các số từ 0 dến 150 xuống cho pic6f877a(dùng ccs)vậy thì có 2 vấn đề xảy ra như thế này:
-khi truyền từ pc vb6 sẽ truyền mã ascii phải ko ạ như vậy số 1 mà pc truyền la 49 vậy pic nhận như thế nào để xuất ra portd là 00000001 và gửi lên pc là số bao nhiêu để vb6 hiển thị số 1
-và 1 vấn đề nữa là khi gửi số có 2 chữ số trở lên thì phải gửi như thê nào nữa ví dụ mình gửi số 127 từ pc xuống pic rồi hiển thị bằng cách quét led với portd va porte.rồi mình gửi từ pic lên cho pc số 132 để hiển thị lên text2.text trên vb6
MONG CÁC BÁC LÂU NĂM TRONG NGHỀ GIÚP ĐỠ!
RẤT MONG ĐƯỢC HỒI ÂM CỦA CÁC BẠN TRONG DIỄN ĐÀN VÌ MÌNH ĐANG RẤT CẦN

thuc101 15-05-2010 10:30 PM

mong được các bác giúp đỡ để mình có thể làm được
nếu có ai vô tình ghé qua thì cũng xin góp ý cho minh với
cam on rat nhieu!

tungbka 16-05-2010 05:50 PM

Trích:

Nguyên văn bởi thuc101 (Post 36042)
truyền nối tiếp rs232
mình mới vào nghề pic6f877a cho mình hỏi cái này chút:
nếu như mình gửi xuống bằng vb6 thì khi gửi xuống cho pic nó sẽ hiểu là mã ascii phai không vậy thì làm sao để pic có thể hiểu được nhỉ
chương trình mình dùng vb6 với mscomm gửi các số từ 0 dến 150 xuống cho pic6f877a(dùng ccs)vậy thì có 2 vấn đề xảy ra như thế này:
-khi truyền từ pc vb6 sẽ truyền mã ascii phải ko ạ như vậy số 1 mà pc truyền la 49 vậy pic nhận như thế nào để xuất ra portd là 00000001 và gửi lên pc là số bao nhiêu để vb6 hiển thị số 1
-và 1 vấn đề nữa là khi gửi số có 2 chữ số trở lên thì phải gửi như thê nào nữa ví dụ mình gửi số 127 từ pc xuống pic rồi hiển thị bằng cách quét led với portd va porte.rồi mình gửi từ pic lên cho pc số 132 để hiển thị lên text2.text trên vb6
MONG CÁC BÁC LÂU NĂM TRONG NGHỀ GIÚP ĐỠ!
RẤT MONG ĐƯỢC HỒI ÂM CỦA CÁC BẠN TRONG DIỄN ĐÀN VÌ MÌNH ĐANG RẤT CẦN

Mình cũng mới học qua về phần truyền nhận này, mình nghĩ bạn có thể làm như sau:
- Gửi từ PC xuống, bản có thể gửi theo 1 chuỗi xuống với ký tự cuối cùng là @ chẳng hạn để vi điều khiển có thể nhận biết và vi điều khiển sẽ nhận từng ký tự cất vào 1 mảng. Chương trình có thể tham khảo như sau:

#INT_RDA
void Receive_isr()
{
text[dem]=getc();
if(text[dem]=='@') //kiem tra dieu kien ket thuc
{
flag =1; //ket thuc nhan, bat co bao
dem=0;
}
else dem++;
}

- Còn truyền từ vi điều khiển lên thì chỉ cần dùng hàm printf là được.
VD: hiển thị số 132 là printf("%Lu",132)

Non_Stop(^_^) 27-05-2010 03:11 PM

cảm ơn all các bạn rất nhiều .

TheHouse 22-11-2010 08:30 AM

Mình vẫn chưa giao tiếp được, mặc dù mình chỉ truyền nhận 1 ký tự thôi..

Code:

#include <16f877a.h>
#use delay (clock=20000000)
#use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7)
#byte portb=0x06
#byte trisb=0x86
#byte portc=0x07
#byte trisc=0x87


void main()
{
trisb=0;
while(true)
{
  portb = 0x00;
  putc(0x00);
  delay_ms(100);
  portb = 0xff;
  putc(0xff);
  delay_ms(100);
}
}


huuminhtsqtt 22-03-2011 09:40 AM

mình sử dụng 2 con pic 16f877 để giao tiếp với nhau qua cổng RS232. nhưng chúng không hiểu được nhau. Bạn nào đã làm rồi cho mình xin code hoặc hướng dẫn giúp mình nhé. mình xin cảm ơn nhiều.

stupid11 26-03-2011 09:01 PM

Trích:

Nguyên văn bởi tungbka (Post 36055)
Mình cũng mới học qua về phần truyền nhận này, mình nghĩ bạn có thể làm như sau:
- Gửi từ PC xuống, bản có thể gửi theo 1 chuỗi xuống với ký tự cuối cùng là @ chẳng hạn để vi điều khiển có thể nhận biết và vi điều khiển sẽ nhận từng ký tự cất vào 1 mảng. Chương trình có thể tham khảo như sau:

#INT_RDA
void Receive_isr()
{
text[dem]=getc();
if(text[dem]=='@') //kiem tra dieu kien ket thuc
{
flag =1; //ket thuc nhan, bat co bao
dem=0;
}
else dem++;
}

- Còn truyền từ vi điều khiển lên thì chỉ cần dùng hàm printf là được.
VD: hiển thị số 132 là printf("%Lu",132)


Bạn tungbka cho mình hỏi mảng text[dem] bạn khai báo kiểu gì

int text[dem] hay char text[dem] ..mình đang phân vân chỗ này.

121388th 01-04-2011 10:14 PM

to dang viet chuong trinh dieu khien con robot cung dung rs232 va muon ket hop tong the voi chuong trinh khac : tuc la to muon dung nut bam de chon che do dieu khien theo rs232 hay che do onchip nhung kho hieu sao ma chuong trinh nay kho the chay khi ket hop ca hai chuong trinh dc ?? ai bit lam cach nao de ket hop chung voi nhau xin chi giup to !! thanks rat rat rat rat nhieu

121388th 01-04-2011 10:17 PM

to quen mat to dung pic6f877a va ccs de viet chuong trinh va vb de truyen thong

121388th 01-04-2011 10:29 PM

cho to hoi chan ngat trong khi dung rs232 la chan nao vay ?? va chuong trinh ngat cho no thi viet tong quat ntn ?? hic hic to moi bat dau hoc nen kho hieu may mong moi nguoi chi giup !!!

stupid11 01-04-2011 11:21 PM

Trong PIC16F877A có 2 ngắt truyền thông
-ngắt RDA:ngắt xảy ra khi nhận được 1 ký tự qua cổng nối tiếp.
#int_RDA()
-ngắt TBE:xảy ra khi bộ đệm truyền trống.
#int_TBE()

-Bạn nên xem lại datasheet của pic16f877a

htungtdh3 05-05-2011 05:09 PM

Trích:

Nguyên văn bởi tungbka (Post 36055)
Mình cũng mới học qua về phần truyền nhận này, mình nghĩ bạn có thể làm như sau:
- Gửi từ PC xuống, bản có thể gửi theo 1 chuỗi xuống với ký tự cuối cùng là @ chẳng hạn để vi điều khiển có thể nhận biết và vi điều khiển sẽ nhận từng ký tự cất vào 1 mảng. Chương trình có thể tham khảo như sau:

#INT_RDA
void Receive_isr()
{
text[dem]=getc();
if(text[dem]=='@') //kiem tra dieu kien ket thuc
{
flag =1; //ket thuc nhan, bat co bao
dem=0;
}
else dem++;
}

- Còn truyền từ vi điều khiển lên thì chỉ cần dùng hàm printf là được.
VD: hiển thị số 132 là printf("%Lu",132)

bác cho em hỏi, truyền dữ liệu từ vi điều khiển lên PC cần lưu ý gì nữa không ạ
em sử dụng câu lệnh printf("truyen") nhưng trên PC không nhận đuợc gì cả.
còn truyền từ PC - VDK thì VDK vẫn hiển thị tốt ạ.


Múi giờ GMT. Hiện tại là 01:55 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