Thông báo

Collapse
No announcement yet.

Đổi chuỗi số thành số trong 8051

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Đổi chuỗi số thành số trong 8051

    chào các anh chị em có 1 vấn đề đang bí là em làm truyền nối tiếp từ PC xuống 8051 bằng RS232 nhưng truyền số xuống thì 8051 nó nhận là chuỗi vì vậy làm sao để đổi nó lại thành số ví dụ em muốn truyền số 123 xuống và lưu vào ô nhớ 32H thì fải làm sao, xin chỉ giáo vì mỗi lần nó chỉ truyền từng kí tự, thank các anh chị nhiều

  • #2
    chào các anh chị em có 1 vấn đề đang bí là em làm truyền nối tiếp từ PC xuống 8051 bằng RS232 nhưng truyền số xuống thì 8051 nó nhận là chuỗi vì vậy làm sao để đổi nó lại thành số ví dụ em muốn truyền số 123 xuống và lưu vào ô nhớ 32H thì fải làm sao, xin chỉ giáo vì mỗi lần nó chỉ truyền từng kí tự, thank các anh chị nhiều
    Bạn mankichi0688 thân mến!
    Đúng là cổng COM của 8051 mỗi lần truyền được 1 byte (thường chọn chế độ này) nhưng mà nó không có biến đổi dữ liệu đâu. Bạn đưa cho nó một byte có nội dung là bao nhiêu thì nó truyền đi đúng như thế.
    Lấy ví dụ: Bạn truyền từ PC xuống vi điều khiển số 123 (một trăm hai mươi 3 = 7BH) thì ở dưới VDK bạn sẽ nhận được một byte có nội dung là 123 (hay 7BH).
    Vấn đề của bạn có lẽ nằm ở việc hiển thị dữ liệu ra:
    - Ở dưới vi điều khiển giả sử bạn muốn hiển thị nội dung của byte này (123) lên LCD hoặc lên LED7 thanh thì bạn không thể để nguyên như thế mà hiển thị được. Bạn phải tách chúng ra thành từng chữ số rồi hiển thị từng chữ số đó lên các vị trí tương ứng.
    - Ở trên máy tính cũng thế (tôi không kể các chương trình do các bạn tự viết): Ví dụ chương trình Hyper Terminal của window khi bạn truyền lên một byte (ví dụ 123) thì nó hiển thị ra là ký tự có mã ACSII trùng với byte mà bạn nhận được.
    - Theo tôi vấn đề ở đây không phải là nhận dữ liệu sai mà là dữ liệu hiển thị ra không phải là cái mà mình nhận được.

    Thân mến!
    For a better world

    Comment


    • #3
      Nguyên văn bởi Toan.Lv Xem bài viết
      Bạn mankichi0688 thân mến!
      Đúng là cổng COM của 8051 mỗi lần truyền được 1 byte (thường chọn chế độ này) nhưng mà nó không có biến đổi dữ liệu đâu. Bạn đưa cho nó một byte có nội dung là bao nhiêu thì nó truyền đi đúng như thế.
      Lấy ví dụ: Bạn truyền từ PC xuống vi điều khiển số 123 (một trăm hai mươi 3 = 7BH) thì ở dưới VDK bạn sẽ nhận được một byte có nội dung là 123 (hay 7BH).
      Vấn đề của bạn có lẽ nằm ở việc hiển thị dữ liệu ra:
      - Ở dưới vi điều khiển giả sử bạn muốn hiển thị nội dung của byte này (123) lên LCD hoặc lên LED7 thanh thì bạn không thể để nguyên như thế mà hiển thị được. Bạn phải tách chúng ra thành từng chữ số rồi hiển thị từng chữ số đó lên các vị trí tương ứng.
      - Ở trên máy tính cũng thế (tôi không kể các chương trình do các bạn tự viết): Ví dụ chương trình Hyper Terminal của window khi bạn truyền lên một byte (ví dụ 123) thì nó hiển thị ra là ký tự có mã ACSII trùng với byte mà bạn nhận được.
      - Theo tôi vấn đề ở đây không phải là nhận dữ liệu sai mà là dữ liệu hiển thị ra không phải là cái mà mình nhận được.

      Thân mến!
      ko là có phải như bạn nói không nhưng lệnh truyền mscomm1.output = "chuỗi cần truyền " trong VB6.0 phải có dấu nháy đôi mới truyền đc mà như vậy thì nó đã là chuỗi rồi mình chỉ muốn truyền xuống số 123 và cất vào 1 ô nhớ nào đó ( vd 32H) là đc, mong bạn chỉ giáo thêm

      Comment


      • #4
        Nguyên văn bởi mankichi0688 Xem bài viết
        ko là có phải như bạn nói không nhưng lệnh truyền mscomm1.output = "chuỗi cần truyền " trong VB6.0 phải có dấu nháy đôi mới truyền đc mà như vậy thì nó đã là chuỗi rồi mình chỉ muốn truyền xuống số 123 và cất vào 1 ô nhớ nào đó ( vd 32H) là đc, mong bạn chỉ giáo thêm
        Đổi 123 thành ký tự ASCII tương ứng rồi truyền. Tuy nhiên cách này không tổng quát vì khi truyền giá trị 0 thì sẽ là kí tự NULL dẫn đến không truyền (gửi/nhận) được.
        Cách tổng quát sẽ là chuyển 2 nửa byte thấp và cao thành chuỗi kí tự hexa tương ứng rồi truyền.
        Ví dụ như giá trị 23H sẽ thành chuỗi gồm 2 ký tự '2' (mã ASCII 32H) và '3' (mã ASCII 33H) và truyền, bên dưới sau khi nhận được 2 byte sẽ ghép 2 nửa lại bằng lệnh kiểu như sau

        Code:
        HIGH = HIGH - 30H;  // '2' mã ASCII 32H - 30H = 2
        LOW = LOW - 30H; // '3' mã ASCII 33H - 30H = 3
        HIGH = HIGH << 4; // HIGH = 20H
        HIGH = HIGH OR LOW; // HIGH = 20H OR 03H = 23H;

        Comment

        Về tác giả

        Collapse

        mankichi0688 Tìm hiểu thêm về mankichi0688

        Bài viết mới nhất

        Collapse

        Đang tải...
        X