RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

Giao Tiếp Máy Tính Với PIC6F877A

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • RaulBlanco
    Thành viên mới
    • Nov 2007
    • 5

    #1

    Giao Tiếp Máy Tính Với PIC6F877A

    Chào các huynh.Đệ hiện đang làm Đồ án và có phần giao tiếp máy tính,dùng PIC6F877A.Đệ dùng chương trình VB gửi kí tự xuống cho VĐK PIC và cho xuất giá trị nhận được ra portd (portd Đệ nối với các LED đơn).Nhưng Đệ gửi các ký tự chữ xuống thì kết quả xuất như nhau,ký tự số thì kết quả như nhau.
    -Khi Đệ gửi các kí hiệu chữ như a,b,m,h.... thì các chân D7(MSB),D6,D5,D4,D3 ở mức cao ,các chân còn lại ở mức thấp và giá trị trả về trên VB là ÿ
    -Khi Đệ gửi các kí hiệu số 1,2,3,4.... thì chân D7 sáng,các chân còn lại ở mức thấp và giá trị trả về trên VB là þ
    Như Đệ biết thì VB gửi xuống là gửi mã ASCII.Vậy thì mình gửi các ký tự khác nhau thì kết quả xuất LED phải khác nhau.Nếu Đệ gửi giá trị cần yêu cầu xuống,ví dụ Đệ gửi từ VB xuống giá trị 300 thì làm sao để PIC cũng nhận được giá trị là 300 vậy các huynh?Đệ thực sự bị vướng ở chỗ này.Đệ up đoạn code chương trình VB và code CCS nhờ các huynh xem giúp và hướng giùm Đệ hướng giải quyết để Đệ có thể hoàn thành Đồ Án thật tốt.Đệ cám ơn các huynh nhiều.
    Code CCS C:
    #include <16F877a.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7)
    #include <def_877a.h>
    unsigned char data;
    #INT_RDA
    void data_receive(void)
    {
    delay_us(10);
    data = getc();
    }
    void main()
    {
    set_tris_d(0);
    ENABLE_INTERRUPTS(GLOBAL);
    ENABLE_INTERRUPTS(INT_RDA);
    while(true)
    {
    portd=data;
    putc(data);
    }
    }
    (Đệ ko bik cách chèn code như mấy huynh làm trong diễn đàn nên cứ up lên,mong MOD thông cảm)
    Attached Files
  • david
    Thành viên tích cực
    • Sep 2006
    • 210

    #2
    Bạn đang có nhiều vấn đề cần giải quyết !
    Thứ nhất :
    Trước khi test RS232 trên VĐK bạn cần test xem con Max232 đã hoạt động đúng chưa? Bằng cách nối tắt 2 chân 11,12 (nếu bạn dùng 2 chân 13,14 của Max để kết nối máy tính) rồi truyền ký tự bất kỳ từ máy tính xem nó có nhận đúng không, sau đó thì mới ghép Max232 với VĐK
    Thứ hai:
    Trong ngắt nhận dữ liệu bạn để delay_us(10) là không ổn,trong ngắt bạn cần nhận dữ liệu ngay
    Thứ ba:
    Gủi 300 từ VB và để PIC nhận ra 300 thì bạn cần đọc hàm atoi trong help của CCS C

    Comment

    • RaulBlanco
      Thành viên mới
      • Nov 2007
      • 5

      #3
      Cám ơn huynh đã cho đệ hướng.Mà huynh ơi,đoạn Code CCS C đệ sửa lại như sau
      #include <16F877a.h>
      #fuses HS,NOWDT,NOPROTECT,NOLVP
      #use delay(clock=20000000)
      #use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7)
      #include <def_877a.h>
      #INT_RDA
      void data_receive(void)
      {
      portd=getc();
      }
      void main()
      {
      set_tris_d(0);
      ENABLE_INTERRUPTS(GLOBAL);
      ENABLE_INTERRUPTS(INT_RDA);
      while(true)
      {
      putc(portd);
      delay_ms(2000);
      }
      }
      Đệ gửi nhạn giá trị qua thẳng portd lun,ko wa biến data nữa thì thấy có khả wan hơn.Đệ gửi xuống chữ a(mã ASCII 61H) thì kết quả theo led là 60H và nhận về "`",b(62H) kết quả vẫn là 60H và vẫn nhân về "`" nhưng chữ c(63H) thì kết quả led xuất đúng và nhận đúng chữ c,chữ d vẫn đúng.đệ thử gửi tiếp số thì số 1,2 kết quả xuất led và nhận sai.Đệ nghi ngờ 2 chân D1 và Do nên lấy đồng hồ ra đo thì mức Vôn chỉ được 2 V,chính vì thế nên kết quả sai.Huynh góp ý giùm đệ với được không?

      Comment

      • david
        Thành viên tích cực
        • Sep 2006
        • 210

        #4
        Tức là bạn đã test được con Max232 rồi đúng không ?
        Lệnh putc(portd) trong hàm While(true) có trả lại đúng ký tự bạn gửi không ?
        Tốt nhất là bạn đừng xuất ra port nữa, mà hãy xuất ra LCD (ko có LCD giống như bị mù vậy! )

        Comment

        • RaulBlanco
          Thành viên mới
          • Nov 2007
          • 5

          #5
          việc gửi nhận như đệ nói là chương trình VB đã gửi xuống đc cho PIC và PIC cũng trả về được giá trị cho máy tính.Nhưng 2 chân D0 và D1 mức Vôn thấp chỉ là 2 Vôn khi máy tính gửi về giá trị mà ứng với D0=1 hay D1=1 nên khi trả lại máy tính thì chỉ hiểu là mức 0.đệ gửi chữ a(61H) hay b(62h) thì máy trả về chỉ là `(60H) nhưng khi gửi chữ c (63H) thì nhận đúng c hay d(64H) thì vẫn nhận đúng.
          Đệ đang muốn kiểm tra phần giao tiếp vì đệ làm về điều khiển động cơ giao tiếp máy tính,mình gửi vận tốc xuống để ra giá trị encoder cần,sau đó hiệu chỉnh và xuất ra duty cho động cơ chạy.
          Thực sự đệ mới chuyển sang xài PIC được 2 3 tuần nay nên còn nhiều chỗ vướng mắc.Mong huynh và các anh trên diễn đàn giúp đỡ.Còn về xuất LCD để đệ wa bạn lấy cái mạch về xuất thử.mà huynh có code về xuất cho LCD không,send cho đệ với vì đệ mới tập tành viết CCS à.Thanks huynh rất nhiều.

          Comment

          • Brilliant
            Thành viên chính thức
            • Dec 2007
            • 39

            #6
            Trước hết để biết chính xác bạn đã làm đúng chưa thì hãy đừng dùng vội với VB, vì biết đâu ngay chính cái code VB của bạn cũng có vấn đề. Bạn nên dùng chương trình này nhé: http://dientuvietnam.net/forums/showthread.php?t=5077

            Lật lại với vấn đề này, mình thì chưa dùng CCS nhưng đã dùng qua soft của hãng Mikro và chạy rất ngon lành với nhiều project.

            Góp ý 1 chút.
            |

            Comment

            • david
              Thành viên tích cực
              • Sep 2006
              • 210

              #7
              Nguyên văn bởi RaulBlanco Xem bài viết
              việc gửi nhận như đệ nói là chương trình VB đã gửi xuống đc cho PIC và PIC cũng trả về được giá trị cho máy tính.Nhưng 2 chân D0 và D1 mức Vôn thấp chỉ là 2 Vôn khi máy tính gửi về giá trị mà ứng với D0=1 hay D1=1 nên khi trả lại máy tính thì chỉ hiểu là mức 0.đệ gửi chữ a(61H) hay b(62h) thì máy trả về chỉ là `(60H) nhưng khi gửi chữ c (63H) thì nhận đúng c hay d(64H) thì vẫn nhận đúng.
              Đệ đang muốn kiểm tra phần giao tiếp vì đệ làm về điều khiển động cơ giao tiếp máy tính,mình gửi vận tốc xuống để ra giá trị encoder cần,sau đó hiệu chỉnh và xuất ra duty cho động cơ chạy.
              Thực sự đệ mới chuyển sang xài PIC được 2 3 tuần nay nên còn nhiều chỗ vướng mắc.Mong huynh và các anh trên diễn đàn giúp đỡ.Còn về xuất LCD để đệ wa bạn lấy cái mạch về xuất thử.mà huynh có code về xuất cho LCD không,send cho đệ với vì đệ mới tập tành viết CCS à.Thanks huynh rất nhiều.
              Vào đây để down Terminal để test nhé ! Vì không chắc chương trình VB của bạn đã chuẩn
              Từ C, Java, Basic, Pascal, Fortran, Foxpro... đến .... đâu luôn. Chuyên sâu hơn, xin tham khảo tại www.diendantinhoc.net


              Để viết cho LCD khi sử dụng CCS C là rất đơn giản ! Bạn hãy vào trong foder Driver và đọc cái LCD.C

              Comment

              • RaulBlanco
                Thành viên mới
                • Nov 2007
                • 5

                #8
                Em cám ơn 2 anh Brilliant và anh david.Quả thật chương trình VB của em có vấn để thật rồi,em dùng terinal như các anh nói thì kết quả xuất ra thật chính xác.nhưng em vẫn thắc mắc về chương trình VB của em,em không biết phải sửa lại sao đây cho chính xác.Mong các anh tham khảo và góp ý giúp em
                Private Sub cmdExit_Click()
                MSComm1.PortOpen = False
                End
                End Sub
                Private Sub cmdSend_Click()
                Dim out As String
                out = txtTransmit.Text
                MSComm1.Output = out
                End Sub

                Private Sub Form_Load()
                MSComm1.CommPort = 3
                MSComm1.Settings = "4800,n,8,1"
                MSComm1.PortOpen = True

                MSComm1.RThreshold = 1
                End Sub

                Private Sub MSComm1_OnComm()
                If (MSComm1.CommEvent = comEvReceive) Then
                txtReceive.Text = txtReceive.Text + MSComm1.Input
                End If
                End Sub

                Comment

                • diode1
                  Thành viên mới
                  • May 2011
                  • 3

                  #9
                  Em đang làm về Đếm và phân loại SP trắng và đen Giao tiếp PIC 16F877A voi PC sử dụng VB. Em đã truyền được dữ liệu lên PC nhưng hiển thị không đúng ,xin mấy huynh chỉ em hướng giải quyết. Đây là file gồm Chương trình , mô phỏng bàng proteus và VB. http://www.mediafire.com/?195d8sza5tcjubg
                  Huynh nào rảnh xem và chỉ em hướng giải quyết Mail của em : vuhoan_vu@yahoo.com
                  Last edited by diode1; 23-07-2011, 22:34.

                  Comment

                  • vanhieugn
                    Thành viên mới
                    • Mar 2011
                    • 3

                    #10
                    mấy pro ơi cho mình hỏi..mình muốn giao tiếp píc6f877a mà qua ft232 để giao tiếp cổng usb thì cũng chỉ cần khai báo
                    #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=9) như giao tiếp rs232 qua mx232 ak..

                    Comment

                    • thelaxong
                      Thành viên tích cực
                      • May 2009
                      • 198

                      #11
                      Nguyên văn bởi vanhieugn Xem bài viết
                      mấy pro ơi cho mình hỏi..mình muốn giao tiếp píc6f877a mà qua ft232 để giao tiếp cổng usb thì cũng chỉ cần khai báo
                      #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=9) như giao tiếp rs232 qua mx232 ak..
                      đúng vậy bạn chỉ cần khai báo cổng RS232 thôi vì pic 16f877a ko có cổng USB, nếu bạn muốn sử dụng cổng USB thì bạn phải mua 1 sợi dây chuyển đổi cổng RS232 thành USB ( lúc này trên pc bạn sử dụng 1 cổng COM ảo ) và giao tiếp bình thường.

                      P/s: cần driver cho sợi dây này.
                      Last edited by thelaxong; 12-04-2012, 15:08.

                      Comment

                      • vanhieugn
                        Thành viên mới
                        • Mar 2011
                        • 3

                        #12
                        bạn thelaxong oi..bạn có thể share cho mình mạch mô phỏng và code ko..thanks

                        Comment

                        • cescvan
                          Thành viên mới
                          • Apr 2011
                          • 9

                          #13
                          chp mình hỏi là mình giao tiếp PIC với máy tính qua RS232, giao diện PC bằng VB , khi pic gửi tín hiệu, ví dụ xuất ra giá trị 1 port B1 chẳng hạn, thì trong CCS mình dùng hàm gì, và để trên máy tính nhận được giá trị 1, mình dùng hàm gì?

                          Comment

                          • bachckm
                            Thành viên mới
                            • Aug 2012
                            • 13

                            #14
                            dạ mấy a cho e hỏi,chúng ta giao tiếp nhu thế nào ạ.e nghe mơ hồ quá.làm xong mạch,nối dây ok hết ùi.mà ko bít làm sao gửi tín hiệu từ máy xún vdk.gửi bằng cách nào,như thế nào,và bằng cái gì.mấy a chỉ giáo giúp e với

                            Comment

                            • kidteam
                              Thành viên tích cực
                              • Nov 2010
                              • 1633

                              #15
                              đầu tiên ban dùng terminal để test
                              gửi nhận ngon lành rồi thì mới tính đến việc viêts giao diện giao tiếp

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...