Thông báo

Collapse
No announcement yet.

Lập trình ghép nối

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

  • Lập trình ghép nối

    :shock:
    Cậu nào có code phần lập trình ghép nối kit có chip 8051 với PC bằng VB or VC or Delphi có thể send cho mình được ko, hay một bản hướng dẫn về nó cũng được.
    liên hệ email: carnaval_xd@yahoo.com
    hoangocn

  • #2
    Giao tiếp vi xử lý với PC

    Bạn đã nghiên cứu mạch phần cứng ghép nối 89c51 với PC chưa. Để viết được phần mềm truyền thông giữa vxl và PC thì phải lập trình cho cả 89c51 và PC.

    Bạn nên đưa thử sơ đồ mạch thiết kế để mọi người góp ý, phần code chương trình cho vi xử lí và PC.

    Ít nhất bạn phải có phần cứng chuẩn thì mới nói đến viết phần mềm.

    Có thể bạn cho biết nội dung cụ thể bạn cần, và bạn đã nắm được đến đâu.
    Càng biết nhiều càng thấy mình biết ít.

    Comment


    • #3
      Bài này của Microduyphi:

      Với VB thì tôi có làm qua:
      Giả sử giao tiếp thiết bị qua cổng LPT .
      1) Trước hết nói về sự quản lý chuyện giao tiếp PC với các thiết bị bên ngoài: Ddeens thời điểm nỳ mà nói thì mọi sự giao tiếp, điều khiển thiết bi ngoại vi thông qua PC sẽ được kiểm soát hết sức chwtj chẽ bởi hệ thống Widows nhằm tránh xung đột và gây lỗi, vì lý do này mà khi tiến lên windows 2000 hay XP thì gần như các cách điều khiển thông thường bó tay hết;Chẳng hnj như trong Delphi thì trước đây sẽ chèn hợp ngữ ASM vào, trong C hay C++ thì dùng lệnh như _Outportb_ hay _inport_ hay trong QBASIC mà các bạn xem trong quyển đo lường điều khiển của thâỳ NGÔ thì xin chịu thua. Do khi lên hệ Win2000 và WinXP thie sự quản lý của hệ thống trở nên rất gắt gao.
      Để giải quyết vấn đề này cần phải có tệp đệm hay các file dll thư viện liên kết động mà việc tạo ra cái file không phải là việc dễ dàng như chuyện tước đây dùng C++tạo cái dll cho VB, hoàn toàn không đơn giản thế, còn cách tạo file dll tôi xin để lại mục khác còn bây giời vào lại vấn đề với cái file inpOut32.dllcho đơn giản;

      2) Quy trình giao tiếp:

      1} Có 2 cách đặt file này vào hệ thống trước khi giao tiếp:
      cách 1; C:windows\system\
      cách 2: Prọect của bạn nằm đâu thì đặt nó ở đó

      2} Khai báo một hàm inp và một thủ tục OUTP cái này cung co 2 cach:
      cach1: Khai bao truc tiep sau dong Ôptin Eplicit
      cach2: Khai bao gian tiếp qua một Modul voi ten vi dụ là inpout32.bas nhá

      3} Cú pháp lệnh:Nhập data: *****************************
      * bien = inp(diachiport) *
      *****************************
      Xuat data:
      *****************************
      * Outp diachiport,data *
      *****************************

      4} Ví dụ: ----------
      Buoc1: Dat file dll vao C:windows\System\
      Buoc2:Add Modul inportOut32.Bas vao
      --->Menu Prọect-->Add Modul-->tro duong dan den file .BAS
      Buoc3: Lap trình

      Dim as diachi,data integer
      diachi = &H378
      data = 255
      Outp diachi,data

      Xong ! Complished
      Chúc mọi nguoi vui vẻ !
      Có gì thắc mắc xin gởi Post lên diễn đàn nhé ! DuyPhi xin lắng nghe và học hỏi

      Comment


      • #4
        Bài này của ANE:

        Tớ xài Keil, làm như thế này mà sao không chạy được, nhờ các bác tư vấn giúp:

        #include <reg52.h>

        void delay1(int c)
        {
        unsigned char i;
        for (i = 0; i < c; i++)
        {
        continue;
        }
        }

        void delay(unsigned int c)
        {
        unsigned int i;
        for (i = 0; i < c; i++)
        {
        delay1(100);
        }
        }

        void out_char(char chr)
        {
        TI = 0;
        SBUF = chr;
        while(!TI)
        {
        }
        TI = 0;
        }

        char get_char()
        {
        char chr;
        while(!RI)
        {
        }
        chr = SBUF;
        RI = 0;
        return chr;
        }

        void serial_init (void)
        {
        TMOD = 0x20; /* timer 1 mode 2: 8-Bit reload */
        TH1 = 0xFD; /* reload value 9600 baud */
        SCON = 0x50; /* mode 1: 8-bit UART, enable receiver */
        TR1 = 1; /* timer 1 run */
        ES = 1; /* enable serial port
        }


        main()
        {
        unsigned char i
        while(1)
        {
        for(i = 'A'; i < 'Z'; i++)
        out_char(i);
        delay(2000);
        }

        }


        Khi gởi bên PC chẳng nhận được gì cả !
        Xin hỏi các bác là nếu SCON = 0x50(8 bit trong đó có một bit stop) thì bên PC phải chọn data bit là 7 hay 8 ? Tớ chọn 7 hay 8 gì cũng không chạy.Tớ dùng tụ 10microfara cho con max232.
        Attached Files

        Comment


        • #5
          Bài này của blackmoon

          Trích dẫn:
          Khi gởi bên PC chẳng nhận được gì cả !

          Tất nhiên, vì trong main() có khởi tạo cho serial port đâu . Bác có hàm serial_init() nhưng chỉ định nghĩa mà không gọi trong main() thì đâu có ích gì đúng không?

          Trích dẫn:
          Xin hỏi các bác là nếu SCON = 0x50(8 bit trong đó có một bit stop) thì bên PC phải chọn data bit là 7 hay 8 ? Tớ chọn 7 hay 8 gì cũng không chạy.

          Bác chọn Mode 1 (M0 = 0, M1 = 1) thì là chế độ dị bộ, khung dữ liệu gồm 8bit (8bit này là 8 bit data cả, bit stop là riêng) do đó bên PC bác phải chọn data bit là 8. Đã chọn 7 hay 8 đều không chạy là vì lý do ở trên đó

          Trích dẫn:
          Tớ dùng tụ 10microfara cho con max232.

          Không phải sai do cái này nhé.

          Có vài góp ý với bác về code:
          1 - Dùng while() để đợi, bác chỉ cần viết ví dụ như là while(!TI);, không cần phải thêm bộ {} làm gì cho rối mắt.

          2 - Khi định nghĩa các hàm, bác nên làm thống nhất theo một kiểu, không nên viết ở chỗ này là function1(void), chỗ khác lại viết là function2() dù đều là void cả. Theo tôi nếu hàm không có đối số, tất cả nên viết là function(void) cho nó chính tắc.

          3 - Cái hàm nhận dữ liệu get_char(), bên trong không cần khai báo thêm một ông "char chr" làm gì. Ở cuối chỉ cần "return SBUF" thay vì phải đọc SBUF vào chr (chr = SBUF, rồi lại trả về chr (return chr. Mà nên làm phần này bằng ngắt, đỡ phải đợi chờ thằng khác.

          4 - Bit ES là bit cho phép ngắt cổng nối tiếp (đầy đủ là Enable Serial Port Interrupt) chứ không phải là bit cho phép cổng nối tiếp hoạt động (là Enable Serial) như bác hiểu. Cái cổng nối tiếp của bác chỉ liên quan đến một bit cho phép nhận dữ liệu (bit REN) trong thanh ghi SCON thôi. Ở đây bác không dùng ngắt nên cũng không cần phải cho ES = 1 làm gì. Mà nếu có dùng ngắt thì ngoài ES bác phải làm cả với EA nữa nhé.

          Hết rồi. Trưa rồi, đói quá, mệt quá!

          Comment


          • #6
            Bài này của Microduyphi

            Trong sự kỹ thuật giao tiếp thông thường chialàm 2 loại là phg pháp POLLING và Interrupt.
            Với Polling ta chỉ đặt vòng lặp không dụng gì tới ngắt.
            Nếu chỉ xuất data ta lên PCthì chỉ cần đặt tốc độ baud và chọn Mod cho cổng nối tiếp là được .
            Thường thì Mod ẢT 8bit data,No bit páty va 1bit Stop sẽ được chọn, tuy và như thế PC sẽ nhận đủ 8 bit data cho nên trên PC ta sẽ đặt:
            Mscomm1.settings= "96,N,8,1" đôi khi có người còn set 2 bit stop khi đó sẽ là: Mscomm1.settings= "96,N,8,2"
            Và chúng ta sẽ nhận byte data như sau:

            Dim as data interger
            data=Val(Mscomm1.input)
            Text1.tetx=data

            Comment


            • #7
              Bài này của ANE

              Cảm ơn bác nhiều !

              Sorry bác, tớ paste vào nhầm, tớ vẫn gọi serial_init() nhưng cũng không ăn thua gì !
              Mà tớ thấy lạ. Trong sách, chân số 2 của MAX232 nối với chân (+) của tụ trong khi mạch nạp(tớ mua mạch EZ ấy) lại nối với chân (-), không biết phải làm theo ông nào đây ?
              Một điều nữa là khi tớ bật ngắt serial lên(cho EA = 1) thì nó không chạy được, khi đến out_char(i) là nó đứng luôn, không chạy các lệnh bên dưới như delay(),... (tớ thêm mấy lệnh xuất ra led để biết nó chạy đến đâu).
              À, tớ còn phát hiện ra một điều nữa là, nếu SCON = 0x50 thì khi gọi hàm putchar() của Keil thì nó bị treo, nhưng khi SCON = 0x52 thì lại được !

              Mấy cái hàm tớ viết để test thôi nên làm lụi

              Comment


              • #8
                Tớ đã thử nghiệm thành công rồi, giờ thì có thể ngồi ngay trên PC mà bật đèn hay mở mái hiên di động !
                Vấn đề nó nằm ở chỗ cái Monitoring trên PC:

                if Len(MSComm1.Input) > 0 then
                ...
                end if

                ==>> Cái này sai

                Phải là :
                Dim v as Variant
                v=MSComm1.Input
                if Len(v) > 0 then
                ...
                end if

                Cảm ơn các bro rất nhiều, đặc biệt là mod blackmoon đã tận tình chỉ dẫn. Giờ tớ lại tiếp tục nâng cấp...

                Comment


                • #9
                  không thấy các bác nói về lập trình giao tiếp dùng VC++ nhẩy
                  ngôn ngữ này cũng khá ngon mừ
                  SHARE KHO PHIM LỚN

                  Comment


                  • #10
                    Cac bac co ai biet truy xuat cong noi tiep bang .Net(C# hoac VB.Net deu duoc) kg?Neu ai biet chi em voi.Em dang tim gap.Xin cam on!

                    Comment


                    • #11
                      ..............

                      Comment


                      • #12
                        Chào anh, em là lính mới, em đang làm một cái mạch ma trận led, và em muốn hiển thị dòng chữ chạy trên ma trận đó thông qua một chương trình viết trên vb6, anh có thể chỉ rõ hơn cho em về cách đẩy dữ liệu ra cỏng LPT đc ko ạ. Nếu có ví dụ minh họa thì càng hay.
                        Cám ơn anh, anh có thể gửi cho em theo address mail: buratino0905@yahoo.com

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X