Xin chào mọi người !
Có 1 vấn đề mình nhờ mọi người giúp đỡ !
Mình đang xây dựng 1 USB CDC với PIC18F4550, thư viện usb, driver lấy từ mla ( microchip libraries application).
Quá trình kết nối và truyền nhận dữ liệu không có sự số tuy nhiên có 1 trường hợp đặc biệt nếu trong dữ liệu gửi lên PC có chứa byte = 27 ( escape ).
Nếu trong đoạn dữ liệu gửi lên có chứa 27 thì các giá trị của byte khác bị sai.
Đây là đoạn mã xử lý dưới PIC cho 4byte trong dữ liệu tăng lên 1 trước mỗi lần truyền :
Đây là đoạn code nhận dữ liệu trên PC ( C#)
Về nguyên lý trên phần mềm sẽ nhận được 4 byte dữ liệu lệch nhau 1 đơn vị theo hướng tăng dần. ( 4byte được khởi tạo lệch 1 ở đầu hàm main).
Tuy nhiên nếu dữ liệu gửi lên PC có chứa byte = 27 thì dữ liệu nhận sai như hình:
Có 1 vấn đề mình nhờ mọi người giúp đỡ !
Mình đang xây dựng 1 USB CDC với PIC18F4550, thư viện usb, driver lấy từ mla ( microchip libraries application).
Quá trình kết nối và truyền nhận dữ liệu không có sự số tuy nhiên có 1 trường hợp đặc biệt nếu trong dữ liệu gửi lên PC có chứa byte = 27 ( escape ).
Nếu trong đoạn dữ liệu gửi lên có chứa 27 thì các giá trị của byte khác bị sai.
Đây là đoạn mã xử lý dưới PIC cho 4byte trong dữ liệu tăng lên 1 trước mỗi lần truyền :
Code:
WRITEBUFF[0]++; WRITEBUFF[1]++; WRITEBUFF[2]++; WRITEBUFF[3]++; putUSBUSART(WRITEBUFF,CDC_DATA_IN_EP_SIZE);
Code:
byte[] bdat = new byte[4]; private void sPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { sPort.Read(bdat, 0, 4); lblStatus.Text = bdat[0].ToString() + "," + bdat[1].ToString() + "," + bdat[2].ToString() + "," + bdat[3].ToString(); listBox1.Items.Add(lblStatus.Text); }
Tuy nhiên nếu dữ liệu gửi lên PC có chứa byte = 27 thì dữ liệu nhận sai như hình:
Comment