PDA

View Full Version : Hỏi về Giao tiếp 16f877a với VB truyền số 16bit


toanho
12-11-2011, 07:01 PM
đây là bài tập thực hành em đang làm:
Nội dung là truyền số 16bit từ VB xuống pic rồi từ pic nhân số 16bit đó cho 2, sau đó truyền số đó lên hiển thị trên giao diện VB , truyền theo từng byte.
vấn đề là em chuơng trình VB mình test truyền nhận thì đúng ( nối chân 2-3 của cổng com) ,mô phỏng trên proteus với chuơng trình khác đúng, nhưng với chuơng trình cho pic sau thì kết quả truyền tín hiệu lên hiển thị sai so với yêu cầu. ví dụ: em truyền số 0 thì kết quả ra tín hiệu nhận là 32, truyền số 256 kết quả tín hiệu nhận là 288;... 512-->544.
vậy nhờ các bác kiểm tra xem chuơng trình sau cho pic có lỗi chổ nào, phép toán đã đúng chưa, nội dung chuơng trình thì thầy đã hướng dẫn chung rồi nhưng về nhà làm lại không xong, do pic và c em mới học nên chưa hiểu nhiều ! mong các bác giúp đỡ !

đây là chuơng trình viết cho pic và file vb cùng file proteus mô phỏng.


#include <16f877a.h>
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7)
char data[3];
int8 i;
int8 high;
int8 low;
char datain;
char data2;
int8 a;
int8 b;
#int_RDA
void interrupt_RDA()
{
for(i=0;i<3;i++)
{
data[i]=getc();
}
if(data[2]=0xff)
{
high=data[0];
low=data[1];
datain=(high*256+low)*2;
a=datain/256;
b=datain%256;
printf("%c %c",a,b);
}
}
void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(int_RDA);
delay_us(10);
while(true)
{

}
}

p/s: sorry mod vì em ko thấy thẻ code đâu !

toanho
21-11-2011, 12:13 AM
Vấn đề của mình đã giải quyết được. phuơng án là trong bytes truyền lên PC cũng thêm 1 byte kiểm tra, trên vb trong đoạn code nhận dữ liệu thêm đoạn kiểm tra byte nhận đã nhận được byte kiểm tra do pic truyền lên chưa nếu đã nhận được thì mới thực hiện sự kiện oncomm. lỗi đã gặp phải có thể do chuơng trình trên pc chưa nhận hết chuỗi dữ liệu do PIC truyền lên thì dữ liệu mới đã được gửi lên. nên số bytes nhận được ko đúng.