Trích:
Nguyên văn bởi hvhdtk3
Các bạn giúp mình với
Mình dùng PIC877A, cứ sau 1 giây thì gửi 1 mảng gồm 11 bytes lên máy tính bằng lệnh sau:
Code CCS:
Code:
//-----------------------------------------------------------------------
for (i=0;i<=10;i++)
{
printf("%u ",send_to_PC[i]);
}
//-----------------------------------------------------------------------
Trên máy tính, mình đã nhận được đủ 11 bytes này bằng phần mềm Visual Basic:
Code Visual Basic:
Code:
'------------------------------------------------------------------------
Private Sub MSComm1_OnComm()
Dim Buffer As Variant
If MSComm1.CommEvent = comEvReceive Then
Buffer = MSComm1.Input
data_nhan.Text = data_nhan.Text + Buffer
'------------------------------------------------------------------------
Như vậy, sau mối giây, máy tính lại nhận được 11 bytes.
Làm thế nào để tách các byte trong nhóm 11 bytes? Giữa các nhóm byte với nhau?
Mình đã thử dùng một biến count_byte để đếm số bytes nhận được, nhưng chỉ đúng cho nhóm 11 bytes đầu tiên, còn các nhóm bytes sau thì không đúng.
Các bạn biết nhiều về Visual Basic giúp mình với
Cảm ơn nhiều
|
Với đoạn code ở trên, thì mỗi giây bạn nhận được nhiều hơn 11 Byte là chắc chắn, vì mỗi một giá trị trong biến
send_to_PC khi được định dạng bởi hàm printf sẽ có thể có 1, 2 hay 3 ký tự ascii, ví dụ, giá trị 0-9 có 1 ký tự ascii, giá trị 10-99 là 2 ký tự ascii và giá trị 100-255 có 3 ký tự ascii - chưa kể mỗi lần bạn gởi bạn còn có thể khoảng trắng phía sau nữa.
Bạn muốn gởi chính xác 11 byte lên máy tính và tách nó ra dễ dàng thì bạn nên tạo một frame, bao gồm 1 byte mở đầu hay 1 byte kết thúc hoặc có thể có 1 byte mở đầu + 1 byte kết thúc ..v.v