Đọc string từ MSP430 thông qua uart

BBlackmoon

Thành Viên PIF
Chào các anh chị.
Em đang học GUI, nhưng có vấn đề về đọc chuỗi thông qua uart.
Code em dùng là (giống TUT):
Code:
private void OnCOM(object sender, SerialDataReceivedEventArgs e)
        {
            string s;
            s = COM.ReadExisting();
            Display(s);
        }  //end OnCOM
 
        private delegate void DlDisplay(string s);
 
        private void Display(string s)
        {
            if (txtReceive.InvokeRequired)
            {
                DlDisplay sd = new DlDisplay(Display);
                txtReceive.Invoke(sd, new object[] { s });
            }
            else
            {
                txtReceive.Text = s;
                switch (s)
                {
                    case "1" :  // LED1 is on
                       .....
 
                }  // end switch
            }
        }  //end Display()
nhưng sao khi chạy chương trình, chỉ lần đầu tiên là txtReceive hiển thị đầy đủ string, những lần sau chỉ hiển thị kí tự cuối cùng. (ví dụ: "123" thì hiển thị là "3", "abc" thì hiển thị "c"...)
các anh chị cho em hỏi đó là lỗi gì và cách khắc phục ntn được không ạ?
Em cảm ơn!
 

honghiep

Cố Vấn CLB
Staff member
Chào các anh chị.
Em đang học GUI, nhưng có vấn đề về đọc chuỗi thông qua uart.
Code em dùng là (giống TUT):
Code:
private void OnCOM(object sender, SerialDataReceivedEventArgs e)
        {
            string s;
            s = COM.ReadExisting();
            Display(s);
        }  //end OnCOM
 
        private delegate void DlDisplay(string s);
 
        private void Display(string s)
        {
            if (txtReceive.InvokeRequired)
            {
                DlDisplay sd = new DlDisplay(Display);
                txtReceive.Invoke(sd, new object[] { s });
            }
            else
            {
                txtReceive.Text = s;
                switch (s)
                {
                    case "1" :  // LED1 is on
                      .....
 
                }  // end switch
            }
        }  //end Display()
nhưng sao khi chạy chương trình, chỉ lần đầu tiên là txtReceive hiển thị đầy đủ string, những lần sau chỉ hiển thị kí tự cuối cùng. (ví dụ: "123" thì hiển thị là "3", "abc" thì hiển thị "c"...)
các anh chị cho em hỏi đó là lỗi gì và cách khắc phục ntn được không ạ?
Em cảm ơn!
dòng txtReceive.Text = s; sẽ hiện ra kí tự nhận về
Các kí tự trước đó sẽ bị ghi đè. Vì vậy để hiển thị được tất cả, bạn sửa lại dòng này thành:
txtReceive.Text = txtReceive.Text + s;
 

BBlackmoon

Thành Viên PIF
dòng txtReceive.Text = s; sẽ hiện ra kí tự nhận về
Các kí tự trước đó sẽ bị ghi đè. Vì vậy để hiển thị được tất cả, bạn sửa lại dòng này thành:
txtReceive.Text = txtReceive.Text + s;
có cách nào xóa nội dung txt.Receive trước, chỉ hiển thị string nhận về không anh?
 

honghiep

Cố Vấn CLB
Staff member
dòng txtReceive.Text = s; sẽ hiện ra kí tự nhận về
Các kí tự trước đó sẽ bị ghi đè. Vì vậy để hiển thị được tất cả, bạn sửa lại dòng này thành:
txtReceive.Text = txtReceive.Text + s;
có cách nào xóa nội dung txt.Receive trước, chỉ hiển thị string nhận về không anh?
Bạn cho txtReceive.Text = ""; thì nội dung textbox sẽ bị xóa
Khi bạn truyền dữ liệu về thì GUI chỉ biết nhận, thời điểm xóa textbox bạn phải cho nó biết. VD như sau bao nhiêu byte thì xóa textbox 1 lần hoặc khi nhận được 1 ký tự (hay 1 chuỗi ký tự liên tiếp) nào đó sẽ xóa textbox 1 lần
 

BBlackmoon

Thành Viên PIF
anh có thể cho em xem code cụ thể được không ạ?
em thử xóa giá trị txt.Receive.Text rồi sau đó cộng s vào
txtReceive.Text = "";
txtReceive.Text = txtReceive.Text + s;
nhưng vẫn lỗi như lúc đầu
 

thienminh_npn

Thành Viên PIF
2 thằng K11 hết nhé.
Gửi UART qua GUI thì tốt nhất gửi dữ liệu số thô hoặc command tự định nghĩa thôi. String thì để cho máy tính tự convert.
 
Top