VC++ và COM

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • nghoang
    Thành viên chính thức
    • Sep 2007
    • 62

    #16
    cảm ơn các bác nhiều, em hiểu ý bác rồi ạ. em đang tra trong Codevision mà chưa ra gì cả bác ạ.


    hight_byte = n >> 8; // dịch phải 8 bits để làm gì ạ??? tại sao mình cần phân biệt 2 kiểu low và hight byte ạ??? đa tạ bác

    Comment

    • nghoang
      Thành viên chính thức
      • Sep 2007
      • 62

      #17
      xx // start byte
      0x00 // hi byte
      0x01 // low byte
      (yy) // có thể thêm ki tự '.' nếu muốn
      0x00 // hi byte
      0x02 // low byte
      zz // stop byte

      các dòng này em chưa hiểu ý nghĩa của nó lắm bác ạ, sao có xx, yy, zz là gì vậy ạ??

      Comment

      • encoder
        Thành viên tích cực
        • Dec 2005
        • 264

        #18
        có một cách đơn giản mà hiệu quả hơn, tôi nghĩ bạn có thể áp dụng. Đó là lấy số thực nhân với 10 (nếu muôn sau dấu , 1 chữ số có nghĩa) hoặc nhân 100 (nếu 2 chữ số có nghĩa) rồi truyền nó theo số nguyên lên máy tính. máy tinh nhận được lại chia cho 10 hay 100 thành số thực. Ví dụ 2,3 thì truyền thành 23 hoặc 230.
        Nếu là giá trị điẹn áp từ 0 - 5V thì bạn không nên truyền theo đơn vị Volt mà truyền theo mV (tức là nhân với 1000). 2.3 V thì thì truyền thành 2300.
        CUNG CẤP PSOC, MẠCH NẠP
        CHUYỂN ĐỔI USB <-> RS485 AutoBaud
        RS232 <-> RS485 MultiBaud
        MẠCH NẠP USBPPI S7-200
        Mobile: 0906076116
        Email:

        Comment

        • encoder
          Thành viên tích cực
          • Dec 2005
          • 264

          #19
          Nguyên văn bởi nghoang Xem bài viết
          xx // start byte
          0x00 // hi byte
          0x01 // low byte
          (yy) // có thể thêm ki tự '.' nếu muốn
          0x00 // hi byte
          0x02 // low byte
          zz // stop byte

          các dòng này em chưa hiểu ý nghĩa của nó lắm bác ạ, sao có xx, yy, zz là gì vậy ạ??
          cái xx, yy, zz là các byte bạn tự định nghĩa trong giao thức truyền nhận của mình. Bạn thích nó bằng bao nhiêu cũng được. Việc truyền thứ tự hi_byte hoặc low_byte trước cũng là một kiểu định nghĩa mà do bạn đặt ra để bên nhận theo giao thức đó mà nhận đúng dữ liệu
          CUNG CẤP PSOC, MẠCH NẠP
          CHUYỂN ĐỔI USB <-> RS485 AutoBaud
          RS232 <-> RS485 MultiBaud
          MẠCH NẠP USBPPI S7-200
          Mobile: 0906076116
          Email:

          Comment

          • techpro
            Moderator
            • Sep 2006
            • 394

            #20
            Nguyên văn bởi encoder Xem bài viết
            có một cách đơn giản mà hiệu quả hơn, tôi nghĩ bạn có thể áp dụng. Đó là lấy số thực nhân với 10 (nếu muôn sau dấu , 1 chữ số có nghĩa) hoặc nhân 100 (nếu 2 chữ số có nghĩa) rồi truyền nó theo số nguyên lên máy tính. máy tinh nhận được lại chia cho 10 hay 100 thành số thực. Ví dụ 2,3 thì truyền thành 23 hoặc 230.
            Nếu là giá trị điẹn áp từ 0 - 5V thì bạn không nên truyền theo đơn vị Volt mà truyền theo mV (tức là nhân với 1000). 2.3 V thì thì truyền thành 2300.
            Chia ra điện áp rồi lại nhân rồi vẫn phải chuyển sang số nguyên rồi lại chuyển thành string. Nếu làm trên CodeVision
            http://techpal.vn
            Chia sẻ công nghệ, cùng thành công

            Comment

            • nghoang
              Thành viên chính thức
              • Sep 2007
              • 62

              #21
              Chia ra điện áp rồi lại nhân rồi vẫn phải chuyển sang số nguyên rồi lại chuyển thành string. Nếu làm trên CodeVision

              nghĩa là sao vậy bác?? sao ta phải chuyển sang string a???

              Comment

              • techpro
                Moderator
                • Sep 2006
                • 394

                #22
                Nguyên văn bởi nghoang Xem bài viết
                Chia ra điện áp rồi lại nhân rồi vẫn phải chuyển sang số nguyên rồi lại chuyển thành string. Nếu làm trên CodeVision

                nghĩa là sao vậy bác?? sao ta phải chuyển sang string a???
                Mình nhớ không lầm thì trong CodeVision chỉ có hàm truyền kí tự tức là truyền một char. Để truyền một số trước hết bạn phải chuyển thành xâu kí tự sau đó truyền từng kí tự một như để truyền xau kí tự: "abc" thì bạn phải truyền lần lượt "a","b" và "c". Để truyền một số nguyên bạn đổi nó thành xâu sau đó cũng thực hiện truyền từng kí tự trong xâu. Không biết CodeVision mới nhất có hỗ trợ truyền xâu kí tự không
                http://techpal.vn
                Chia sẻ công nghệ, cùng thành công

                Comment

                • nghoang
                  Thành viên chính thức
                  • Sep 2007
                  • 62

                  #23
                  tính ra nó khó thế ạ, em đang đọc bài này, mà có nhiều lệnh ko hiểu quá, xin các bác chỉ giúp em với. đây là toàn bộ chương trình của bác gtvt45 ạ.

                  http://dientuvietnam.net/forums/show...?t=7391&page=2

                  cảm ơn các bác nhiều lắm ạ

                  Comment

                  • quoc_thaibk
                    Thành viên tích cực
                    • Mar 2006
                    • 766

                    #24
                    Sử dụng thư viện stdio chuẩn.
                    Khỏi mất time viết code chuyển đổi.
                    Nhưng nếu dùng realtime thì lời khuyên là không nên.
                    Cái này truyền dữ liệu ADC lên terminal trên máy tính.

                    PS:Mình xài GCC không xài CV.
                    Attached Files

                    Sông dài, Thuyền lớn, Biển rộng bao la.
                    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                    Comment

                    • nghoang
                      Thành viên chính thức
                      • Sep 2007
                      • 62

                      #25
                      1.Sử dụng thư viện stdio chuẩn. mình làm thế nào để sử dụng đựoc cái này bác ơi?

                      2. Nhưng nếu dùng realtime thì lời khuyên là không nên
                      realtime nghĩa là gì ạ? không nên là không nên làm gì ạ?

                      3. Cái này truyền dữ liệu ADC lên terminal trên máy tính.
                      terminal trên máy tính là gì vậy bác ơi???

                      4.PS:Mình xài GCC không xài CV.

                      GCC và CV là gì a?

                      Em mới làm quen điện tử và AVR, nên mong bác trả lời cụ thể chút ạ (cứ coi em là kẻ ngốc cũng được ạ), em biết bác đã làm rất khá các mảng này nên mới hiểu nhanh và trả lời vắn tắt như vậy.

                      Nhưng thực sự em đọc thì rất khó hiểu được nội dung ạ. đa tạ bác!!!! mong bác giúp em đêm nay.

                      cái này có

                      Comment

                      • quoc_thaibk
                        Thành viên tích cực
                        • Mar 2006
                        • 766

                        #26
                        Nguyên văn bởi nghoang Xem bài viết
                        1.Sử dụng thư viện stdio chuẩn. mình làm thế nào để sử dụng đựoc cái này bác ơi?

                        2. Nhưng nếu dùng realtime thì lời khuyên là không nên
                        realtime nghĩa là gì ạ? không nên là không nên làm gì ạ?

                        3. Cái này truyền dữ liệu ADC lên terminal trên máy tính.
                        terminal trên máy tính là gì vậy bác ơi???

                        4.PS:Mình xài GCC không xài CV.

                        GCC và CV là gì a?

                        Em mới làm quen điện tử và AVR, nên mong bác trả lời cụ thể chút ạ (cứ coi em là kẻ ngốc cũng được ạ), em biết bác đã làm rất khá các mảng này nên mới hiểu nhanh và trả lời vắn tắt như vậy.

                        Nhưng thực sự em đọc thì rất khó hiểu được nội dung ạ. đa tạ bác!!!! mong bác giúp em đêm nay.

                        cái này có

                        1)stdio là thư viên giao tiếp có các hàm giao tiếp như :"printf,scanf" hàm này có thể nhận tham số dạng số thực tự chuyển đổi sang dạng kí tự rồi truyền đi,nhưng hình như trong GCC nó bị lược giản chức năng truyền số thực,bạn cứ truyền số nguyên,miễn là truyền nhận okie là dc rồi.
                        2)realtime vì lệnh này mà chạy thì tốn rất nhiều chu kì máy của vdk.
                        3)Terminal là 1 chương trình đầu cuối giao tiếp máy tính bằng cổm COM bạn khôgn cần viết ct cho máy tính có thể lấy cái này xài
                        link cho ct này nằm ở đây
                        4)AVR GCC là bộ ct dùng để dịch C cho AVR còn CV là codevision AVR.

                        đi ngủ,mưa làm nhức cái đầu.hichic

                        Sông dài, Thuyền lớn, Biển rộng bao la.
                        Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                        Comment

                        • nghoang
                          Thành viên chính thức
                          • Sep 2007
                          • 62

                          #27
                          bác lại cũng ngủ luôn mất rồi, hichic

                          cảm ơn bác, nhưng em ko cần cái Terminal làm gì cả, em cần đọc vaò 1 chương trình console trong VC thôi mà.

                          bạn cứ truyền số nguyên,miễn là truyền nhận okie là dc rồi.

                          Tiếc là em ko hiểu câu của bác, em chưa truyền được gì (cả nguyên và thực) bác ạ.

                          Comment

                          • encoder
                            Thành viên tích cực
                            • Dec 2005
                            • 264

                            #28
                            nếu truyền số nguyên thì chỉ cần 2 lần truyền ký tự là được. Không nên convert sang string vì như vậy tốn tài nguyên và không tối ưu về tốc độ. ví dụ về cách truyền số nguyên idata:

                            từ VDK: (code tượng trưng)
                            UART_PutChar(idata >> 8); // send hight byte
                            UART_PutChar(idata); // send low byte
                            // UART_PutChar là hàm gửi 1 kí tự

                            trên PC (ngôn ngữ C#)
                            hi = serialPort.ReadByte(); // read hightByte
                            low = serialPort.ReadByte(); // read low byte
                            idata = (hi << 8) | low; // nhpa lai thanh so nguyen

                            như vậy bạn chỉ cần truyền 2 kí tự là đủ, nếu convert sang string thì bạn có thể phải truyền nhiêu hơn. Ví dụ truyền số nguyên 12345 thì phải truyền 5 kí tự liên tiếp '1', '2', '3', '4', '5'. Hơn nữa hàm biến đổi số nguyên thành string cũng khá tốn bộ nhớ và thời gian thực thi.
                            Last edited by encoder; 13-09-2007, 09:21.
                            CUNG CẤP PSOC, MẠCH NẠP
                            CHUYỂN ĐỔI USB <-> RS485 AutoBaud
                            RS232 <-> RS485 MultiBaud
                            MẠCH NẠP USBPPI S7-200
                            Mobile: 0906076116
                            Email:

                            Comment

                            • nghoang
                              Thành viên chính thức
                              • Sep 2007
                              • 62

                              #29
                              bác có thể chỉ em rõ hơn cái bytecao và byte thấp ko ạ?

                              cảm ơn bác nhiều.

                              Em dần hiểu hơn một chút rồi ạ..

                              Comment

                              • encoder
                                Thành viên tích cực
                                • Dec 2005
                                • 264

                                #30
                                cũng giống như số thập phân vậy. VD với số 23 thì số 2 là số có trọng số cao hơn số 3. thì hight byte va lowbyte cũng mang nghĩa như vậy. theo phép toán decimal thì
                                2 = (23) / 10 <-> hightByte = (int) >> 8;
                                3 = (23) % 10 <-> lơbyte = (int) & 0xff;
                                sự khác nhau chỉ là phép tính trong hệ thập phân và hệ nhị phân thôi.
                                CUNG CẤP PSOC, MẠCH NẠP
                                CHUYỂN ĐỔI USB <-> RS485 AutoBaud
                                RS232 <-> RS485 MultiBaud
                                MẠCH NẠP USBPPI S7-200
                                Mobile: 0906076116
                                Email:

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                There are no results that meet this criteria.

                                Đang tải...