Thông báo

Collapse
No announcement yet.

Mấy anh cho em hỏi cái này!!

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

  • Mấy anh cho em hỏi cái này!!

    Em học bên ô tô nhưng cũng phải học ứng dụng VXL,thầy em mới dạy lần đầu nên khó hiểu quá.Mấy anh xem giùm em bài này với,thầy bắt em viết bằng C,nạp thử trên proteus luôn:
    Port A kết nối switchs, Port B kết nối leds. Viết chương trình đọc giá trị switchs và gán ra leds.
    Mấy anh viết hộ em cái code với,giải thích hộ em luôn,em mới học C nên còn gà lắm,cảm ơn các anh!!

  • #2
    quá căn bản

    Nguyên văn bởi luckystart Xem bài viết
    Em học bên ô tô nhưng cũng phải học ứng dụng VXL,thầy em mới dạy lần đầu nên khó hiểu quá.Mấy anh xem giùm em bài này với,thầy bắt em viết bằng C,nạp thử trên proteus luôn:
    Port A kết nối switchs, Port B kết nối leds. Viết chương trình đọc giá trị switchs và gán ra leds.
    Mấy anh viết hộ em cái code với,giải thích hộ em luôn,em mới học C nên còn gà lắm,cảm ơn các anh!!

    thân gởi bạn, nếu được thanks cái nhé
    mô phỏng bằng proteus 7.5sp3 nhé bạn
    //code c
    #include "regx51.h"
    void main()
    {
    while(1){
    P0_1=1;
    while(P0_0==1) ;
    P0_1=0;
    while(P0_0==0) ;
    }
    }

    ;code asm:
    org 0000h
    main:
    loop:
    setb p0.1
    jb p0.0,$
    clr p0.1
    jnb p0.0,$
    sjmp loop
    end
    Attached Files

    Email:
    Tel: 0983.497.310

    Comment


    • #3
      thank anh nha,để em test phát!!
      vui quá anh em trên diễn đàn nhiệt tình ghê

      Comment


      • #4
        Nguyên văn bởi tienhuypro Xem bài viết
        thân gởi bạn, nếu được thanks cái nhé
        mô phỏng bằng proteus 7.5sp3 nhé bạn
        //code c
        #include "regx51.h"
        void main()
        {
        while(1){
        P0_1=1;
        while(P0_0==1) ;
        P0_1=0;
        while(P0_0==0) ;
        }
        }

        ;code asm:
        org 0000h
        main:
        loop:
        setb p0.1
        jb p0.0,$
        clr p0.1
        jnb p0.0,$
        sjmp loop
        end
        Giải thuật của bạn mới chỉ giành cho một chân đầu vào (switch) và một chân đầu ra (led). Nếu nâng cấp lên 2, 3 hoặc nhiều hơn thì làm thế nào nhỉ?
        GTH sản xuất mạch in PCB 1 mặt:
        -phủ xanh: 40.000 đ/dm2
        -không phủ xanh: 30.000 đ/dm2
        -Cung cấp mực cảm quang để làm mạch in
        email:

        Comment


        • #5
          Mình xin viết chương trình cả 8 chân của port A và B như sau:

          void main()
          {
          char tg; //chứa giá trị trung gian
          while(1)
          {
          while (tg == PortA); //trong khi giá trị tg = giá trị cổng A thì ko làm gì
          // ngược lại khi giá trị PortA thay đổi (ko còn bằng giá trị tg) thì chạy tiếp
          PortB = PortA; //gán giá trị PortA cho đầu ra là PortB
          tg = PortA; //gán giá trị PortA cho tg và quay về dòng đầu chờ đợi cho đến khi portA thay đổi giá trị
          }
          }
          GTH sản xuất mạch in PCB 1 mặt:
          -phủ xanh: 40.000 đ/dm2
          -không phủ xanh: 30.000 đ/dm2
          -Cung cấp mực cảm quang để làm mạch in
          email:

          Comment


          • #6
            Nguyên văn bởi gth_pcb Xem bài viết
            Mình xin viết chương trình cả 8 chân của port A và B như sau:

            void main()
            {
            char tg; //chứa giá trị trung gian
            while(1)
            {
            while (tg == PortA); //trong khi giá trị tg = giá trị cổng A thì ko làm gì
            // ngược lại khi giá trị PortA thay đổi (ko còn bằng giá trị tg) thì chạy tiếp
            PortB = PortA; //gán giá trị PortA cho đầu ra là PortB
            tg = PortA; //gán giá trị PortA cho tg và quay về dòng đầu chờ đợi cho đến khi portA thay đổi giá trị
            }
            }
            bạn viết thì thêm chương trình mô phỏng nữa nhé.
            tôi viết như thế là căn bản, còn muốn mở rộng thêm thì lấy ý tưởng thế phát triển lên. Còn bạn có cái nào hay hơn nữa thì cứ port lên cho anh em tham khảo, đừng đi nhận xét ảo người ta như thế

            Email:
            Tel: 0983.497.310

            Comment


            • #7
              Muốn đọc gì thì đọc cũng phải cho các PORT biến thành các PIN rồi đọc nếu ko thì đọc dc những cái không mong muốn

              Comment


              • #8
                Nguyên văn bởi enter88 Xem bài viết
                Muốn đọc gì thì đọc cũng phải cho các PORT biến thành các PIN rồi đọc nếu ko thì đọc dc những cái không mong muốn
                xem lại phần cứng 8051 đi bạn, lúc khởi động thì các port 8051 điều ở trạng thái
                0ffh chứ không như AVR phải khởi động PIN,PORT .

                Email:
                Tel: 0983.497.310

                Comment


                • #9
                  các bác ơi! giúp với...có bác nào biết sơ đồ mạch đếm điểm môn cầu lông không, đếm từ 0-30 bằng led7 vậy. có nút tăng điểm. giảm điểm và reset không vậy . mong các bác giúp đỡ.

                  Comment


                  • #10
                    Nguyên văn bởi tienhuypro Xem bài viết
                    xem lại phần cứng 8051 đi bạn, lúc khởi động thì các port 8051 điều ở trạng thái
                    0ffh chứ không như AVR phải khởi động PIN,PORT .
                    Trước đây mình cũng làm như bạn, ko đặt PIN, POUT cho các cổng, thấy nó hoạt động có lúc được, có lúc ko, mô phỏng thì có lần nó báo là chập mạch

                    Mình cũng đã đọc 1 tài liệu (hình như của thầy Nguyễn Tăng Cường thì phải) cũng nói là cần phải cấu hình PIN, POUT cho em 8051.

                    Theo mình thì tốt nhất là cứ đặt cho an toàn. Vì cũng chẳng mất gì mà !

                    Comment


                    • #11
                      Mình xin viết chương trình cả 8 chân của port A và B như sau:

                      void main()
                      {
                      char tg; //chứa giá trị trung gian
                      while(1)
                      {
                      while (tg == PortA); //trong khi giá trị tg = giá trị cổng A thì ko làm gì
                      // ngược lại khi giá trị PortA thay đổi (ko còn bằng giá trị tg) thì chạy tiếp
                      PortB = PortA; //gán giá trị PortA cho đầu ra là PortB
                      tg = PortA; //gán giá trị PortA cho tg và quay về dòng đầu chờ đợi cho đến khi portA thay đổi giá trị
                      }
                      }
                      Anh gth_pcb à,em viết thử cái code như anh bày nhưng lúc build target thì nó báo lỗi anh ah,code của em đây,anh xem sai ở chỗ nào hộ em nhá,cảm ơn anh trước
                      #include"regx51.h"
                      void main()
                      DDRB=0xff;//portB output
                      DDRA=0;//portA input
                      DDRA=0xff//Dien tro keo len
                      {
                      char tg;
                      while(1)
                      {
                      while(tg==PortA);
                      PortB=PortA;
                      tg=PortA;
                      }
                      }

                      Comment


                      • #12
                        Nguyên văn bởi luckystart Xem bài viết
                        Anh gth_pcb à,em viết thử cái code như anh bày nhưng lúc build target thì nó báo lỗi anh ah,code của em đây,anh xem sai ở chỗ nào hộ em nhá,cảm ơn anh trước
                        #include"regx51.h"
                        void main()
                        DDRB=0xff;//portB output
                        DDRA=0;//portA input
                        DDRA=0xff//Dien tro keo len
                        {
                        char tg;
                        while(1)
                        {
                        while(tg==PortA);
                        PortB=PortA;
                        tg=PortA;
                        }
                        }
                        lạ nhể !!!! ông này viết cho họ 8051 như viết cho AVR ý nhỉ:
                        DDRB=0xff;
                        DDRA=0;
                        DDRA=0xff;
                        con nào của họ 8051 viết như thế này vậy bạn ?????????????????

                        Comment


                        • #13
                          trích:
                          tôi cũng không biết, nếu thích ffh ghi thêm vô:
                          MOV P0,# 0FFH
                          MOV P1,# 0FFH
                          ......
                          KHÔNG BIẾT CÓ ĐÚNG KHÔNG NỬA MONG CÁC BẠN CHỈ GIÁO

                          Comment


                          • #14
                            Nguyên văn bởi luckystart Xem bài viết
                            Anh gth_pcb à,em viết thử cái code như anh bày nhưng lúc build target thì nó báo lỗi anh ah,code của em đây,anh xem sai ở chỗ nào hộ em nhá,cảm ơn anh trước
                            #include"regx51.h"
                            void main()
                            DDRB=0xff;//portB output
                            DDRA=0;//portA input
                            DDRA=0xff//Dien tro keo len
                            {
                            char tg;
                            while(1)
                            {
                            while(tg==PortA);
                            PortB=PortA;
                            tg=PortA;
                            }
                            }
                            Hi lucky star,
                            Mình viết như trên chỉ mang tính giải thuật thôi. Còn áp dụng cụ thể cho 8051 hay AVR thì các bạn phải đọc chân cẳng của nó. Ví dụ bạn định nghĩa cái cổng A của bạn là PORTA thì bạn phải thêm cái dòng
                            //Cho 8051 nhé
                            #define 0x80 PORTA //bạn xem lại 8051 xem có đúng là địa chỉ la 0x80 hay không;
                            //Sau đó thì bạn dùng PORTA bình thường. Nếu bạn cài RIDE hoặc Keil thì xem cái file include xem nó định nghĩa các địa chỉ, chân cẳng thế nào rồi từ đó mà đặt tên theo cách của mình.

                            //Đối với AVR thì nó quy định chân ra chân vào. Khai báo như bạn thì cổng A là đầu vào, cổng B là đầu ra,ok, giờ viết lại bài toán như sau:
                            {
                            char tg;
                            while(1)
                            {
                            while(tg==PINA);
                            PortB=PINA;
                            tg=PINA;
                            }
                            }
                            //lưu ý: PINA là chỉ giá trị của cổng A khi cổng A được coi là đầu vào. Vì bạn đặt DDRA=0;//portA input

                            Hi vọng bạn thành công!
                            GTH sản xuất mạch in PCB 1 mặt:
                            -phủ xanh: 40.000 đ/dm2
                            -không phủ xanh: 30.000 đ/dm2
                            -Cung cấp mực cảm quang để làm mạch in
                            email:

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X