Thông báo

Collapse
No announcement yet.

truyền thông qua cổng COM

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

  • truyền thông qua cổng COM

    Mình đang làm đồ án nhưng gặp rắc rối ở việc truyền và nhận 1 số 10bit qua cổng COM, giao tiếp với Pic 16f877a bạn nào có cách giải quyết xin giúp đỡ mình nhe!??

  • #2
    sao bạn không chia nó thành phần chục và phần đơn vị để truyền, hoặc chia nó thành byte cao và byte thấp để truyền, sau đó PC sẽ xử lí dữ liệu truyền lên

    Comment


    • #3
      trước hết bạn phải truyền, nhận được gói dữ liệu qua cổng COM. Sau đó với số 10 bit thì đơn giản nhất là chia thành bit thấp và bit cao. Quy luật truyền, nhận do bạn tự lựa chọn. Sau đó lại ghép bit thấp, bit cao lại thì sẽ nhận được số đã truyền, nhận
      Rễ của sự học tập thì đắng
      Quả của sự học tập thì ngọt

      Comment


      • #4
        Nguyên văn bởi trimen Xem bài viết
        sao bạn không chia nó thành phần chục và phần đơn vị để truyền, hoặc chia nó thành byte cao và byte thấp để truyền, sau đó PC sẽ xử lí dữ liệu truyền lên
        Mình cũng có nghĩ sẽ tách số 10bit ra, mình chỉ cần truyền số <=500 thôi, mình có viết đoạn code truyền như sau các bạn xem và góp ý cho mình nhe!

        Private Sub cmdsend_Click()
        Dim bytestosend(0 To 2) As Byte
        Dim buffer As Variant
        bytestosend(0) = Val(TXTCAIDAT.Text) \ 100
        bytestosend(1) = (Val(TXTCAIDAT.Text) \ 10) Mod 10
        bytestosend(2) = Val(TXTCAIDAT.Text) Mod 10
        buffer = bytestosend()
        MSComm1.Output = buffer
        End Sub

        Private Sub Form_Load()
        Form1.Caption = "DO AN TOT NGHIEP 2009 - 2012"
        MSComm1.CommPort = 3
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InBufferSize = 1024
        MSComm1.InputLen = 0
        MSComm1.RThreshold = 1
        MSComm1.SThreshold = 0
        MSComm1.OutBufferSize = 512
        MSComm1.InputMode = comInputModeBinary
        MSComm1.PortOpen = True

        Comment


        • #5
          bạn nhầm khúc này :
          Nguyên văn bởi thanhtung914 Xem bài viết
          bytestosend(0) = Val(TXTCAIDAT.Text) \ 100
          bytestosend(1) = (Val(TXTCAIDAT.Text) \ 10) Mod 10
          bytestosend(2) = Val(TXTCAIDAT.Text) Mod 10
          phải như vầy thì nó mới lấy đúng số hàng chục và hàng đơn vị:
          Nguyên văn bởi thanhtung914 Xem bài viết
          bytestosend(0) = Val(TXTCAIDAT.Text) \ 100
          bytestosend(1) = (Val(TXTCAIDAT.Text) Mod 100) / 10
          bytestosend(2) = (Val(TXTCAIDAT.Text) Mod 100)Mod 10
          hoặc bạn có thể truyền byte cao và byte thấp của số đó vậy bạn chỉ phải truyền 2 byte.Ví dụ:
          bytetosend(0)=(Val(TXTCAIDAT.Text)&(0xf0))>>8 //byte cao
          bytetosend(1)=(Val(TXTCAIDAT.Text))&(0x0f)
          Mình ko rành VB lắm bạn xem rồi sửa lại nha.

          Comment


          • #6
            Nguyên văn bởi trimen Xem bài viết
            bạn nhầm khúc này :

            phải như vầy thì nó mới lấy đúng số hàng chục và hàng đơn vị:

            hoặc bạn có thể truyền byte cao và byte thấp của số đó vậy bạn chỉ phải truyền 2 byte.Ví dụ:
            bytetosend(0)=(Val(TXTCAIDAT.Text)&(0xf0))>>8 //byte cao
            bytetosend(1)=(Val(TXTCAIDAT.Text))&(0x0f)
            Mình ko rành VB lắm bạn xem rồi sửa lại nha.
            Cảm ơn bạn trimen nhiều nhe, mình sẽ kế nối thử xem, nếu có vấn đề khác mình sẽ tham khảo ý kiến của các bạn nữa nha!

            Comment


            • #7
              Bạn trimen ơi làm thế nào PIC nhận được 1 mảng byte từ VB gửi xuống, mình chỉ nhận được 1 byte thôi, mình còn yếu CCS lắm mong các bạn giúp mình với!

              Comment


              • #8
                bạn đưa dữ liệu nhận vào 1 mảng, với 1 biến i khi có dữ liệu đến xảy ra ngắt, khi đó đưa dữ liệu vào phần tử thứ i của mảng và tăng i lên. Sau đó chuơng trình chính chỉ cần truy xuất vào mảng để lấy dữ liệu từ máy tính thôi. Ví dụ như sau:
                int i=0;
                byte buffer[100];
                void nhan(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
                {
                if(RI)
                {
                RI=0;

                buffer[i]=SBUF;
                i=i+1;
                }}

                Comment


                • #9
                  các bạn oi giúp mình vấn đề này nhe!
                  trong ccs mình có đoạn code như sau:

                  doc_adc();
                  tam = read_adc();
                  tam = tam/2.048;
                  tram = tam/100;
                  tram = tram + 48;

                  tam = tam%100;
                  chuc = tam/10;
                  chuc = chuc + 48;
                  donvi = tam%10;
                  donvi = donvi + 48;

                  portb = tram;
                  hienthi();
                  portb = chuc;
                  hienthi();
                  portb = donvi;
                  hienthi(); //hthi LCD

                  giờ mình muốn ghép biến tram,chuc,donvi đưa vào một mảng để gửi lên máy tính (VB6), mình đã truyền từng byte nhưng khi VB6 nhận được thì 3byte bị chồng lên nhau (vd tram=1,chuc=2,donvi=3 thi khi lên VB nó hiển thị ra lable thì 1 chồng lên 2 chồng lên 3 giống mình quét led z đó)
                  đây là code VB6 của mình:

                  Private Sub Form_Load()
                  Form1.Caption = "DO AN TOT NGHIEP 2009 - 2012"
                  MSComm1.CommPort = 6
                  MSComm1.Settings = "9600,n,8,1"
                  MSComm1.InBufferSize = 1024
                  MSComm1.InputLen = 0
                  MSComm1.RThreshold = 3
                  MSComm1.SThreshold = 0
                  MSComm1.OutBufferSize = 512
                  MSComm1.InputMode = comInputModeBinary
                  MSComm1.PortOpen = True
                  End Sub

                  Private Sub MSComm1_OnComm()
                  Dim bytetoread() As Byte
                  Dim buffer2 As Variant
                  If MSComm1.CommEvent = comEvReceive Then
                  buffer2 = MSComm1.Input
                  bytetoread() = buffer2
                  LBLHIENTHI.Caption = Val(bytetoread())
                  End If
                  End Sub

                  Các bạn xem giúp mình nha??!!

                  Comment


                  • #10
                    Số <=500 thì không cần 2 Byte đâu (9-bit đã được 0..511 rồi).
                    Truyền khung 9-bit là ngon lành nhất. Hoặc dùng bit chẵn lẻ làm bit thứ 9 cũng được.

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    • tuyennhan
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi tuyennhan
                      Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                      Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                      Hôm qua, 07:44
                    • vi van pham
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi vi van pham
                      Cám ơn những lời chúc tốt đẹp của em.

                      Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                      Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                      Hôm qua, 02:00
                    • nhathung1101
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi nhathung1101
                      Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                      Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                      Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                      22-02-2025, 22:18
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                      Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                      22-02-2025, 14:51
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                      Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                      22-02-2025, 14:39
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                      Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                      22-02-2025, 14:28
                    • bqviet
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi bqviet
                      Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                      21-02-2025, 20:26
                    • mèomướp
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi mèomướp
                      Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                      21-02-2025, 12:32
                    • vi van pham
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi vi van pham
                      Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                      Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                      20-02-2025, 21:31
                    • bqviet
                      Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                      bởi bqviet
                      Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                      20-02-2025, 17:22
                    Đang tải...
                    X