Thông báo

Collapse
No announcement yet.

Lai hoi tiep ve RS232.

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

  • Lai hoi tiep ve RS232.

    Em có vấn đề sau thỉnh giáo các bác:

    Theo như lý thuyết thì giao tiếp RS232 của máy tính chỉ cho phép kết nối với 1 thiết bị ngoại vi. Nhưng trong 89 ta vẫn có thể sử dụng được chế độ đa vi xử lý (ở chế độ 2,3 UART) với chế độ này dữ liệu đóng khung là 11 bit (start - 9 bit data - stop). Vậy nếu viết giao diện (VB6.0) khi sử dụng COM phải làm thế nào để có thể thiết lập được khung truyền như vậy. Hình như theo em nhớ với COM máy tính thì khung dữ liệu mặc định của COM là (start - 8 bit data - stop[1->1,5->2bit]). Có cách nào để biến thằng máy tính thành Master còn mấy con chip của mình thành slaver không nhỉ. Mong được các cao thủ trong diễn đàn chỉ giáo. Thank!


  • #2
    Nguyên văn bởi vanquang_qn Xem bài viết
    Em có vấn đề sau thỉnh giáo các bác:

    Theo như lý thuyết thì giao tiếp RS232 của máy tính chỉ cho phép kết nối với 1 thiết bị ngoại vi. Nhưng trong 89 ta vẫn có thể sử dụng được chế độ đa vi xử lý (ở chế độ 2,3 UART) với chế độ này dữ liệu đóng khung là 11 bit (start - 9 bit data - stop). Vậy nếu viết giao diện (VB6.0) khi sử dụng COM phải làm thế nào để có thể thiết lập được khung truyền như vậy. Hình như theo em nhớ với COM máy tính thì khung dữ liệu mặc định của COM là (start - 8 bit data - stop[1->1,5->2bit]). Có cách nào để biến thằng máy tính thành Master còn mấy con chip của mình thành slaver không nhỉ. Mong được các cao thủ trong diễn đàn chỉ giáo. Thank!
    Trong VB6.0 nó khai báo như sau: "9600,n,8,1" đây là cái bạn thường dùng.
    Còn có các khai báo "9600,m,8,1" ,"9600,s,8,1" ,"9600,e,8,1" ,"9600,o,8,1"...
    m là bit thứ 9 =1
    s là bit thứ 9 =0
    e,o là bit chẵn lẻ
    Bạn thấy đã thảo mãn chưa?
    Nếu dùng PC làm Master thì khi truyền địa chỉ bạn dùng "9600,m,8,1", còn khi truyền dữ liệu bạn dùng "9600,s,8,1"

    email:mahaco@fpt.vn

    Comment


    • #3
      Rất cảm ơn ý kiến của bác. Tối nay em sẽ thử luôn. Hic làm VB cũng lâu rồi mà còn gà quá. Thank bác nha.

      Comment


      • #4
        Tối qua mình đã làm được giao tiếp đa xử lý theo chỉ dẫn của bạn.
        Nhân tiện mình xin hỏi hoctro89xxx thêm chút về RS232:
        1. Khi dùng chế độ đa xử lý với máy tính làm Master -> truyền dữ liệu cho 1 Slaver được chỉ định (dữ liệu này có thể mang giá trị từ 00h-FFh, và số byte dữ liệu trong mỗi lần truyền không bằng nhau). Vậy vấn đề đặt ra là làm sao để biết được "cuộc" truyền dữ liệu giữa Máy tính và Slever đó kết thúc để đưa Slaver đó về chế độ nhận địa chỉ.
        2. Khi dùng Mscom trong VB mình truyền 1 đoạn dữ liệu làm theo cách "củ chuối" sau:
        Máy tính truyền 1 byte xuống VDK, VDK nhận phản hồi lại 1 byte (giả sử là 'a'), khi máy tính truyền song thì ngồi KT xem khi nào nhận được 'a' thì truyền tiếp byte tiếp theo. Mình biết làm như vậy là rất "chuối" nhưng thực ra trong thực tế mình phải làm vậy mạch mới chạy (vì mạch của mình khi máy tính truyền xuống 1 byte VDK nhận và ghi vào Eeprom, Nếu như mình không đưa byte phản hồi về máy tính thì khi truyền song 1 gói dữ liệu Eeprom xẽ có 1 vài vị trí bị ghi sai giá trị hoặc không ghi được). Bạn góp ý giùm mình nhé. Thank!

        Comment


        • #5
          Nguyên văn bởi vanquang_qn Xem bài viết
          Tối qua mình đã làm được giao tiếp đa xử lý theo chỉ dẫn của bạn.
          Nhân tiện mình xin hỏi hoctro89xxx thêm chút về RS232:
          1. Khi dùng chế độ đa xử lý với máy tính làm Master -> truyền dữ liệu cho 1 Slaver được chỉ định (dữ liệu này có thể mang giá trị từ 00h-FFh, và số byte dữ liệu trong mỗi lần truyền không bằng nhau). Vậy vấn đề đặt ra là làm sao để biết được "cuộc" truyền dữ liệu giữa Máy tính và Slever đó kết thúc để đưa Slaver đó về chế độ nhận địa chỉ.
          2. Khi dùng Mscom trong VB mình truyền 1 đoạn dữ liệu làm theo cách "củ chuối" sau:
          Máy tính truyền 1 byte xuống VDK, VDK nhận phản hồi lại 1 byte (giả sử là 'a'), khi máy tính truyền song thì ngồi KT xem khi nào nhận được 'a' thì truyền tiếp byte tiếp theo. Mình biết làm như vậy là rất "chuối" nhưng thực ra trong thực tế mình phải làm vậy mạch mới chạy (vì mạch của mình khi máy tính truyền xuống 1 byte VDK nhận và ghi vào Eeprom, Nếu như mình không đưa byte phản hồi về máy tính thì khi truyền song 1 gói dữ liệu Eeprom xẽ có 1 vài vị trí bị ghi sai giá trị hoặc không ghi được). Bạn góp ý giùm mình nhé. Thank!
          1. Để đưa Slaver đó về chế độ nhận địa chỉ - kết thúc nhận dữ liệu - là do người lập trình thôi, thích nhận bao nhiêu gói hoặc byte xong rồi thôi thì dùng biến đếm. Hoặc nếu truyền theo gói thì quy định gói kết thúc nhận dữ liệu là xong...
          2.Bạn có thể nhận 1 gói byte, ghi nháp vào RAM khi nào đủ byte thì mới ghi vào EEPROM. Nên gửi dữ liệu theo khung, có cờ đầu và cuối khung, độ dài khung, chức năng...Cái sai của bạn có thể là do khi nhận 1 byte bạn lại cho VĐK làm việc gì đó hơi lâu nên mới bị như vậy, chứ tôi truyền liện tục 3000 bytes cho VĐK ( mà không có phản hối từ VĐK cho PC), VĐK nhận và ghi vào EEPROM có vấn đề gì đâu.

          email:mahaco@fpt.vn

          Comment


          • #6
            khi dùng vdk làm master, máy tính làm slave vậy làm sao máy tính đọc được bit thứ 9 đó???
            mình đang cần gấp để làm mạch ko biết dùng vb6 đọc được cái bit thứ 9 đó ko...

            thực ra mình muốn truyền 1 số 9bit hoặc 10bit từ 89 về máy tính. Nếu ko dùng rs232 thì có cách nào lập trình để đọc từng bit từ cổng COM ko??? (cổng COM thôi, máy mình ko có cổng máy in, usb thì phức tạp quá)
            Phạm Minh Tuấn

            (+84) 982006467

            Comment


            • #7
              Nguyên văn bởi mgdaubo Xem bài viết
              khi dùng vdk làm master, máy tính làm slave vậy làm sao máy tính đọc được bit thứ 9 đó???
              mình đang cần gấp để làm mạch ko biết dùng vb6 đọc được cái bit thứ 9 đó ko...

              thực ra mình muốn truyền 1 số 9bit hoặc 10bit từ 89 về máy tính. Nếu ko dùng rs232 thì có cách nào lập trình để đọc từng bit từ cổng COM ko??? (cổng COM thôi, máy mình ko có cổng máy in, usb thì phức tạp quá)
              Nghe có vẻ lạ. Thường thì 1 máy tính giao tiếp với nhiều VDK, bác lại định dùng 1 VDK giao tiep với nhiều máy tính sao?
              Thực ra dữ liệu vẫn chỉ là 8bit thôi ngoài ra còn 1bit start (1;1,5;2)bit stop còn bít thứ 9 kia là bít kiểm tra. Như bác Hoctro89xxx nói ở trên thì khi bít thứ 9=1 là chế độ truyền địa chỉ còn = 0 là truyền dữ liệu, vì thế khi truyền mà thay đổi bit này thì cũng có nghĩ bạn đã thay đổi chế độ truyền thông, trong khi đó khi cấu hình cho Mscom để nhận dữ liệu bạn chỉ định cấu hình cho nó ở 1 chế độ (hoặc địa chỉ, hoặc dữ liệu) nên việc thu bit thứ 9 một cách bị động là không được.
              Còn việc thu từng bít từ RS232 cũng không được nốt, hình như cổng COM máy tính chỉ truyền/thu từng(5->8) bít thì phải.
              Đó là theo cách hiểu của mình. Bạn tham khao thêm ý kiến của các bác khác nữa nhé.

              Comment


              • #8
                cảm ơn bạn.
                ko phải mình muốn 1 vdk giao tiếp với nhiều máy, mà chỉ muốn truyền 1 số 9bit về máy thôi. vậy chắc chỉ còn cách là truyền 2 số 8bit -> ko tối ưu chút nào
                bạn nào có sáng kiến gì ko?

                Ah nói rõ hơn là mình truyền bằng hồng ngoại, bit rate đã bị giới hạn thấp rồi, bây giờ truyền 9 bit bằng 2 số 8 bit lại càng chậm nữa. mà dùng hồng ngoại nên ko thể xài đến mấy chân RTS,... được. hix
                Phạm Minh Tuấn

                (+84) 982006467

                Comment


                • #9
                  Ah có thể đọc trạng thái của 1 vài chân cổng COM (dùng VB6), ví dụ bằng cách đọc sự kiện comEvDSR xảy ra khi chân DSR chuyển từ 0 -> 1

                  Em làm 1 mạch send từ mcu lên pc, chân TX của mcu phát vào led phát hồng ngoại, mạch thu ở cổng COM dùng 1 led thu hồng ngoại 2 chân (khoảng cách ngắn, vài cm thôi). Nhưng hình như con led thu hồng ngoại 2 chân có đáp ứng tần số rất thấp, truyền baud 1200 thì được, lên 9600 thì ko được.
                  Đã thử mua led thu ở nhiều tiệm khác nhau ở Nhật Tảo mà ko có cái nào đáp ứng nổi cả.
                  Có giải pháp nào ko???

                  hay dùng RF? có mạch nào đơn giản ko mấy bác???
                  Phạm Minh Tuấn

                  (+84) 982006467

                  Comment


                  • #10
                    co bac nao biet lap trinh truyen du lieu giua 8051 voi cong RS232 thi chi giup em voi

                    Comment


                    • #11
                      em moim vao nghe ne khing biet cach lap trinh de truyen nhan du lieu giua 8051 voi cong RS232 neu bac nao biet thi giup em voi !!!!!!!!!!!!!!!!1

                      Comment


                      • #12
                        Tôi cũng đang làm đề tài về giao tiếp máy tính với nhiều VĐK. Không biết bạn nào có Project mẫu không cho mình xin với, trên mạng cũng được. Xin cám ơn!

                        Comment


                        • #13
                          Thế thì gugờ đi bạn, còn chờ gì nữa.

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X