Thông báo

Collapse
No announcement yet.

Thắc mắc về gửi và nhận dữ liệu khi giao tiếp giữa VXL với PC

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

  • Thắc mắc về gửi và nhận dữ liệu khi giao tiếp giữa VXL với PC

    Em thắc mắc làm sao gửi dữ liệu dạng số xuống cho VXL, chẳng hạn gửi 8bit 10101110 xuống cho VXL mà làm cho VXL hiểu đó là số 8bit chứ không phải dữ liệu là chuỗi?
    Ý tưởng gửi dữ liệu từ VXL lên VB của em là nó sẽ xác định giá trị đầu tiên. Chẳng hạn "k" thì sau đó các giá trị còn lại phía sau của nó (VD số: 3507 nó sẽ được lưu vào biến giatri1. Còn khi dữ liệu đầu là "a" thì các giá trị sau nó (VD chữ: "Hello moto" sẽ được ghi vào biến giatri2. Mong các bác giúp dùm em nhé. Em tìm hiểu hổm rài mà chưa ra.

  • #2
    Không có ai giúp dùm em à. Em sử dụng ngắt #int_RDA nhưng mà chỉ nhận và gửi được 1 ký tự, từ 2 ký tự trở lên em không nhận được. Mong có ai làm qua rồi chỉ dùm em chút ích.

    Comment


    • #3
      bạn gửi từ computer [mẫu tự đầu], [lệnh hoặc số]
      trong 1 loop bạn chờ [mẫu tự đầu], nếu nhận được [mẫu tự đầu] thì bytes kế tiếp là số mình muốn nhận
      tôi có ý vậy, bạn tự viết code cho vxl nha. trong cái loop phải biết là sau bao nhiêu giây (s) thì đi làm chuyện khác xong rồi quay trở lại chờ nhận lệnh tiếp.
      Last edited by KVLV; 13-11-2011, 03:12.
      Mãi đi tìm vàng.

      Comment


      • #4
        Sao khó quá vậy ? Mà cho em hỏi nha VD chữ "hello" nó gửi và VXL pic16F nhận như thế nào ? Khi phát hiện có dữ liệu, nhảy vào chương trình ngắt sau khi xong ký tự đầu nó nháy ra ngoài hay là khi có dữ liệu nó nhảy vào chương trình ngắt và khi nó nhận hết các chữ nó mới nhảy ra?
        Cây lệnh nào để đọc từng dữ liệu vậy ? chẳng hạn câu "Hello" nó sẽ đọc chứ "H" vào mảng a[1], "e" vào mạng a[2], "l' vào mảng a[3]... vậy. Em có thử dùng fgetc trong ccs nhưn cũng thất bại.

        Comment


        • #5
          Nguyên văn bởi sunshine Xem bài viết
          Sao khó quá vậy ? Mà cho em hỏi nha VD chữ "hello" nó gửi và VXL pic16F nhận như thế nào ? Khi phát hiện có dữ liệu, nhảy vào chương trình ngắt sau khi xong ký tự đầu nó nháy ra ngoài hay là khi có dữ liệu nó nhảy vào chương trình ngắt và khi nó nhận hết các chữ nó mới nhảy ra?
          Cây lệnh nào để đọc từng dữ liệu vậy ? chẳng hạn câu "Hello" nó sẽ đọc chứ "H" vào mảng a[1], "e" vào mạng a[2], "l' vào mảng a[3]... vậy. Em có thử dùng fgetc trong ccs nhưn cũng thất bại.
          Hịc, cơ bản là SAI toàn bộ, từ A - Z
          thứ 1 : học lại C
          thứ 2 : Xem lại chuẩn rs232 (xem nó truyền nhận thế nào)
          My Face :

          Comment


          • #6
            Hi,
            Bác là người đi ngược với thời đại, ai ai cũng muốn tăng tốc độ truyền dữ liệu lên cao nhất có thể đằng này bác lại làm chậm nó đi gấp 8 lần. Tại sao không nhận nguyên 1 byte rồi tách ra từng bít cho nhanh mà xác suất lỗi lại giảm đáng kể thay vì phải nhận từng bit?
            Thân ái.
            Đường đến những ngày vinh quang không còn xa
            Con đường chúng ta... chúng ta đã chọn.

            Comment


            • #7
              Nguyên văn bởi sunshine Xem bài viết
              Em thắc mắc làm sao gửi dữ liệu dạng số xuống cho VXL, chẳng hạn gửi 8bit 10101110 xuống cho VXL mà làm cho VXL hiểu đó là số 8bit chứ không phải dữ liệu là chuỗi?
              Ý tưởng gửi dữ liệu từ VXL lên VB của em là nó sẽ xác định giá trị đầu tiên. Chẳng hạn "k" thì sau đó các giá trị còn lại phía sau của nó (VD số: 3507 nó sẽ được lưu vào biến giatri1. Còn khi dữ liệu đầu là "a" thì các giá trị sau nó (VD chữ: "Hello moto" sẽ được ghi vào biến giatri2. Mong các bác giúp dùm em nhé. Em tìm hiểu hổm rài mà chưa ra.
              Hi,
              Cái này phải quy ước giao thức trước cho software và firmware. Khi truyền một khung dữ liệu thì tối thiểu phải có kí tự bắt đầu khung và kết thúc khung. PC hoặc MCU khi nhận được kí tự bắt đầu khung thì trỏ lại đầu mảng và sẽ ghi từng byte nhận được vào lần lượt các phần tử mảng cho đến khi nhận được ký tự kết thúc khung thì sẽ chuyển qua xử lý dữ liệu trong mảng vừa thu được đó. Nếu ký tự kết thúc khung có thể trùng với dữ liệu thì không dùng cái này mà dùng số bytes sẽ truyền nhận trong khung, khi nhận đủ thì chuyển qua xử lý khung.
              Thân ái.
              Đường đến những ngày vinh quang không còn xa
              Con đường chúng ta... chúng ta đã chọn.

              Comment


              • #8
                Em đã làm cũng khá được rồi. Giờ em còn bế tắc 1 vấn đề nữa làm sao gửi dữ liệu dạng số 8bit ( số nhị phân hoặc số hex cũng được) xuống vi xử lý vậy. Em gửi chỉ toàn là gửi dạng char thôi. mặc dù trong VB em khai báo dữ liệu gửi là biến interger.

                Comment


                • #9
                  khi dữ liệu truyền từ máy tính xuống vi xử lí sẽ nhận từng byte và đưa vao bộ đệm của rs232 viec của ban là dọc bộ đêm của rs232 thoi,neu nhu ban truyền dữ liệu qua cổng com.

                  Comment


                  • #10
                    Nguyên văn bởi sunshine Xem bài viết
                    Em đã làm cũng khá được rồi. Giờ em còn bế tắc 1 vấn đề nữa làm sao gửi dữ liệu dạng số 8bit ( số nhị phân hoặc số hex cũng được) xuống vi xử lý vậy. Em gửi chỉ toàn là gửi dạng char thôi. mặc dù trong VB em khai báo dữ liệu gửi là biến interger.
                    Cho dù là chuỗi hay số hex thì cuối cùng truyền đi vẫn là hex. Hàm truyền đi có thể định dạng lại kiểu dữ liệu, kết hợp với hàm đọc giá trị từ textbox sẽ cho phép ta làm được nhiều điều. Vấn đề làm sao để VXL hiểu được các kiểu dữ liệu là không cần thiết. Công việc này nên để cho PC thì tốt hơn vì tốc độ của nó nhanh hơn nhiều lần VXL. PC->chuyển dữ liệu về dạng duy nhất->VXL. Ứng dụng byte đầu tiên nhận được thường thì đó là byte command, tức là ra lệnh cho VXL sẽ làm việc gì, hoặc xử lý dữ liệu các byte tiếp sau. Đó là cách PC kết nối VXL để thao tác 1 công việc nào đó.

                    Comment


                    • #11
                      Cho em muốn hỏi chút xiu, em cần viết 1 phần mềm giao tiếp với cổng RS 232, nếu chỉ nhận dữ liệu không thôi thì ok, tức là bao nhiều dữ liệu truyền qua cổng COM e cũng "nghe" và hiển thị ra được hết. Nhưng khi em muốn xử lý cái đoạn hex nhận về đó (ví dụ: cắt, xén, copy..) thì dữ liệu nhần về chưa hết mà nó đã xử lý dẫn đến lỗi.
                      E đang sử dụng C#, làm thế nào để chờ cho nó nhận hết dữ liệu vào buffer rồi mới xử lý được bây giờ ạ, các anh giúp em với ạ

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X