Thông báo

Collapse
No announcement yet.

Cấu hình cho IO như thế nào?

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

  • Cấu hình cho IO như thế nào?

    Chào các bác. Khi làm việc với các chân, từ trước đến giờ em toàn cấu hình từ trước. Bây giờ đụng tới một phần là cấu hình khi đang sử dụng, em lại thấy không như ý hiểu của mình.
    Một đoạn code của em như thế này :
    void main()
    {
    while (1)
    {
    // ban đầu cho là cổng vào :
    PRT0DM0 =0xff;
    PRT0DM1 =0x00;
    // đọc cổng
    data = PRT0DR;
    .... xử lý đủ kiểu....
    // chuyển sang cổng ra
    PRT0DM0 =0x00;
    PRT0DM1 =0xff;
    // Đưa dữ liệu ra :
    PRT0DR = data;
    .....
    }
    }
    Đoạn code đơn giản như vậy, em thử cả cho Port = giá trị hẳn hoi cũng không đc. Không biết có vấn đề gì sai ở đây. mong các bác chỉ giúp
    Thực chất em làm với bài toán ma trận phím 4x4. nhưng mãi không được, nên em chuyển sang thử cho cổng trước, ấy thế mà vẫn chưa được. Chẳng hiểu sao nữa. Các bác giúp em với. Thanks
    "Tiền có thể mua được đồng hồ, nhưng không mua được thời gian. Vì vậy chúng ta hãy biết quí trọng thời gian hơn"

  • #2
    tại sao không define ca thanh ghi ben ngoai ham main roi su dung no binh thường như một ten biến ma phai lam vay, chi mat cong vay.

    Comment


    • #3
      Dòng lệnh này là sao nhỉ bạn ?
      Nguyên văn bởi Innovated Xem bài viết
      while (1)
      {
      // ban đầu cho là cổng vào :
      PRT0DM0 =0xff;
      PRT0DM1 =0x00;

      // chuyển sang cổng ra
      PRT0DM0 =0x00;
      PRT0DM1 =0xff;

      }
      }
      Bạn chỉ cần thiết lập pull_Up hoặc Pull_down ( Tôi hay dùng Pull_down ) cho cổng trước khi đọc, gởi dữ liệu ra cổng là OK mà. Đâu cần mấy dòng lệnh trên nhỉ ? Mà mình cũng không biết cụ thể các lệnh đó dùng làm gì nữa

      Or call me 0903911109

      Comment


      • #4
        to Connection: Hình như bạn không hiểu ý mình rùi. Nếu thiết lập ban đầu thì còn nói làm gì. Nó chỉ có mỗi chức năng là thế thôi. Mình lấy ví dụ lấy PORT0 làm cổng dữ liệu của LCD chẳng hạn. Ban đầu cấu hình nó làm cổng ra để out dữ liệu ra. Sau khi bạn gửi dữ liệu xong thì cần đọc cờ bận. Như thế phải cấu hình cổng làm đầu vào mới đọc được chứ. Như 8051 thì đưa cổng lên = 0xff, avr thì cho DDR = 0x00,...
        to onggia: Bạn có thể nói rõ hơn không mình chưa hiểu lắm.
        "Tiền có thể mua được đồng hồ, nhưng không mua được thời gian. Vì vậy chúng ta hãy biết quí trọng thời gian hơn"

        Comment


        • #5
          ủa. Sao chẳng thấy bác nào giúp em một tay cả. Nếu mà giúp được cả hai tay thì tốt biết mấy. Em thử vẫn chẳng được. Em có down dc file IOConfig.pdf . Nhưng lại hướng dẫn bằng ASM, vậy bằng C thì thế nào? em đọc mà chả hiểu được, nhiều từ chuyên môn với lại tiếng anh kém.
          Attached Files
          "Tiền có thể mua được đồng hồ, nhưng không mua được thời gian. Vì vậy chúng ta hãy biết quí trọng thời gian hơn"

          Comment


          • #6
            Bác thử cái này xem sao nhé.
            Với lại, hiểu được ASM thì C quá đơn giản.
            /*
            DM2 DM1 DM0
            0 0 0 PULL DOWN
            0 0 1 STRONG
            0 1 0 HIGH IMPEDENCE
            0 1 1 PULL UP
            1 0 0 OPEN DRAIN, DRIVE HIGH
            1 0 1 SLOW STRONG DRIVE
            1 1 0 HIGH IMPEDENCE ANALOG
            1 1 1 OPEN DRAIN, DRIVE LOW
            */


            /*
            Port_HZ: Setting Port for High Z Mode -> Port Use as Input
            */

            void Port_HZ(unsigned int port){
            switch(port){
            case 0:{
            M8C_SetBank1;
            PRT0DM0 = 0x00; // Config port 0's PD
            PRT0DM1 = 0xFF;
            M8C_SetBank0;
            break;}
            case 1:{
            M8C_SetBank1;
            PRT1DM0 = 0x00; // Config port 1's PD
            PRT1DM1 = 0xFF;
            M8C_SetBank0;
            break;}
            case 2:{
            M8C_SetBank1;
            PRT2DM0 = 0x00; // Config port 2's PD
            PRT2DM1 = 0xFF;
            M8C_SetBank0;
            break;}
            default:
            break;
            }
            }

            //================================================== ======
            /*
            Port_Strong: Setting Port for Strong Mode -> Port Use as OutPut
            */

            void Port_Strong(unsigned int port){

            switch(port){
            case 0:{
            M8C_SetBank1;
            PRT0DM0 = 0xFF; // Config port 0's Strong
            PRT0DM1 = 0x00;
            M8C_SetBank0;
            break;}
            case 1:{
            M8C_SetBank1;
            PRT1DM0 = 0xFF; // Config port 1's Strong
            PRT1DM1 = 0x00;
            M8C_SetBank0;
            break;}
            case 2:{
            M8C_SetBank1;
            PRT2DM0 = 0xFF; // Config port 2's Strong
            PRT2DM1 = 0x00;
            M8C_SetBank0;
            break;}
            default:
            break;
            }
            }
            /*
            Port_PD: Setting Port for Pull Down Mode -> Port Use as Input/OutPut
            Open Drain, Drives High
            */
            void Port_PD(unsigned int port){

            switch(port){
            case 0:{
            M8C_SetBank1;
            PRT0DM0 = 0x00; // Config port 0's PD
            PRT0DM1 = 0x00;
            M8C_SetBank0;
            break;}
            case 1:{
            M8C_SetBank1;
            PRT1DM0 = 0x00; // Config port 1's PD
            PRT1DM1 = 0x00;
            M8C_SetBank0;
            break;}
            case 2:{
            M8C_SetBank1;
            PRT2DM0 = 0x00; // Config port 2's PD
            PRT2DM1 = 0x00;
            M8C_SetBank0;
            break;}
            default:
            break;
            }
            }

            /*
            Port_PU: Setting Port for Pull Up Mode -> Port Use as Input/OutPut TTL
            Open Drain, Drives Low
            */
            void Port_PU(unsigned int port){

            switch(port){
            case 0:{
            M8C_SetBank1;
            PRT0DM0 = 0xFF; // Config port 0's PU
            PRT0DM1 = 0xFF;
            M8C_SetBank0;
            break;}
            case 1:{
            M8C_SetBank1;
            PRT1DM0 = 0xFF; // Config port 1's PU
            PRT1DM1 = 0xFF;
            M8C_SetBank0;
            break;}
            case 2:{
            M8C_SetBank1;
            PRT2DM0 = 0xFF; // Config port 2's PU
            PRT2DM1 = 0xFF;
            M8C_SetBank0;
            break;}
            default:
            break;
            }
            }

            Chúc vui,
            Regards.

            "Never stop thingking!"

            Comment


            • #7
              Nguyên văn bởi Trent Xem bài viết
              Bác thử cái này xem sao nhé.
              Với lại, hiểu được ASM thì C quá đơn giản.
              /*
              DM2 DM1 DM0
              0 0 0 PULL DOWN
              0 0 1 STRONG
              0 1 0 HIGH IMPEDENCE
              0 1 1 PULL UP
              1 0 0 OPEN DRAIN, DRIVE HIGH
              1 0 1 SLOW STRONG DRIVE
              1 1 0 HIGH IMPEDENCE ANALOG
              1 1 1 OPEN DRAIN, DRIVE LOW
              */


              /*
              Port_HZ: Setting Port for High Z Mode -> Port Use as Input
              */

              void Port_HZ(unsigned int port){
              switch(port){
              case 0:{
              M8C_SetBank1;
              PRT0DM0 = 0x00; // Config port 0's PD
              PRT0DM1 = 0xFF;
              M8C_SetBank0;
              break;}
              case 1:{
              M8C_SetBank1;
              PRT1DM0 = 0x00; // Config port 1's PD
              PRT1DM1 = 0xFF;
              M8C_SetBank0;
              break;}
              case 2:{
              M8C_SetBank1;
              PRT2DM0 = 0x00; // Config port 2's PD
              PRT2DM1 = 0xFF;
              M8C_SetBank0;
              break;}
              default:
              break;
              }
              }

              //================================================== ======
              /*
              Port_Strong: Setting Port for Strong Mode -> Port Use as OutPut
              */

              void Port_Strong(unsigned int port){

              switch(port){
              case 0:{
              M8C_SetBank1;
              PRT0DM0 = 0xFF; // Config port 0's Strong
              PRT0DM1 = 0x00;
              M8C_SetBank0;
              break;}
              case 1:{
              M8C_SetBank1;
              PRT1DM0 = 0xFF; // Config port 1's Strong
              PRT1DM1 = 0x00;
              M8C_SetBank0;
              break;}
              case 2:{
              M8C_SetBank1;
              PRT2DM0 = 0xFF; // Config port 2's Strong
              PRT2DM1 = 0x00;
              M8C_SetBank0;
              break;}
              default:
              break;
              }
              }
              /*
              Port_PD: Setting Port for Pull Down Mode -> Port Use as Input/OutPut
              Open Drain, Drives High
              */
              void Port_PD(unsigned int port){

              switch(port){
              case 0:{
              M8C_SetBank1;
              PRT0DM0 = 0x00; // Config port 0's PD
              PRT0DM1 = 0x00;
              M8C_SetBank0;
              break;}
              case 1:{
              M8C_SetBank1;
              PRT1DM0 = 0x00; // Config port 1's PD
              PRT1DM1 = 0x00;
              M8C_SetBank0;
              break;}
              case 2:{
              M8C_SetBank1;
              PRT2DM0 = 0x00; // Config port 2's PD
              PRT2DM1 = 0x00;
              M8C_SetBank0;
              break;}
              default:
              break;
              }
              }

              /*
              Port_PU: Setting Port for Pull Up Mode -> Port Use as Input/OutPut TTL
              Open Drain, Drives Low
              */
              void Port_PU(unsigned int port){

              switch(port){
              case 0:{
              M8C_SetBank1;
              PRT0DM0 = 0xFF; // Config port 0's PU
              PRT0DM1 = 0xFF;
              M8C_SetBank0;
              break;}
              case 1:{
              M8C_SetBank1;
              PRT1DM0 = 0xFF; // Config port 1's PU
              PRT1DM1 = 0xFF;
              M8C_SetBank0;
              break;}
              case 2:{
              M8C_SetBank1;
              PRT2DM0 = 0xFF; // Config port 2's PU
              PRT2DM1 = 0xFF;
              M8C_SetBank0;
              break;}
              default:
              break;
              }
              }
              Thử xem sao nhé.

              Chúc vui,
              Regards.

              "Never stop thingking!"

              Comment


              • #8
                Nguyên văn bởi Innovated Xem bài viết
                Chào các bác. Khi làm việc với các chân, từ trước đến giờ em toàn cấu hình từ trước. Bây giờ đụng tới một phần là cấu hình khi đang sử dụng, em lại thấy không như ý hiểu của mình.
                Một đoạn code của em như thế này :
                void main()
                {
                while (1)
                {
                // ban đầu cho là cổng vào :
                PRT0DM0 =0xff;
                PRT0DM1 =0x00;
                // đọc cổng
                data = PRT0DR;
                .... xử lý đủ kiểu....
                // chuyển sang cổng ra
                PRT0DM0 =0x00;
                PRT0DM1 =0xff;
                // Đưa dữ liệu ra :
                PRT0DR = data;
                .....
                }
                }
                Đoạn code đơn giản như vậy, em thử cả cho Port = giá trị hẳn hoi cũng không đc. Không biết có vấn đề gì sai ở đây. mong các bác chỉ giúp
                Thực chất em làm với bài toán ma trận phím 4x4. nhưng mãi không được, nên em chuyển sang thử cho cổng trước, ấy thế mà vẫn chưa được. Chẳng hiểu sao nữa. Các bác giúp em với. Thanks
                void main()
                {
                while (1)
                {
                // ban đầu cho là cổng vào :
                PRT0DM0 =0x00;
                PRT0DM1 =0xff;
                // đọc cổng
                data = PRT0DR;
                .... xử lý đủ kiểu....
                // chuyển sang cổng ra
                PRT0DM0 =0xff;
                PRT0DM1 =0x00;
                // Đưa dữ liệu ra :
                PRT0DR = data;
                .....
                }
                }

                Comment


                • #9
                  Nguyên văn bởi Innovated Xem bài viết
                  Chào các bác. Khi làm việc với các chân, từ trước đến giờ em toàn cấu hình từ trước. Bây giờ đụng tới một phần là cấu hình khi đang sử dụng, em lại thấy không như ý hiểu của mình.
                  Một đoạn code của em như thế này :
                  void main()
                  {
                  while (1)
                  {
                  // ban đầu cho là cổng vào :
                  PRT0DM0 =0xff;
                  PRT0DM1 =0x00;
                  // đọc cổng
                  data = PRT0DR;
                  .... xử lý đủ kiểu....
                  // chuyển sang cổng ra
                  PRT0DM0 =0x00;
                  PRT0DM1 =0xff;
                  // Đưa dữ liệu ra :
                  PRT0DR = data;
                  .....
                  }
                  }
                  Đoạn code đơn giản như vậy, em thử cả cho Port = giá trị hẳn hoi cũng không đc. Không biết có vấn đề gì sai ở đây. mong các bác chỉ giúp
                  Thực chất em làm với bài toán ma trận phím 4x4. nhưng mãi không được, nên em chuyển sang thử cho cổng trước, ấy thế mà vẫn chưa được. Chẳng hiểu sao nữa. Các bác giúp em với. Thanks
                  Về nguyên tắc đúng là một cổng có thể đặt được câú hình vừa vào vừa ra theo kiểu như vậy nhưng theo mình thì không nên. Bạn thử tưởng tượng rằng: Trong lúc bạn đang nhập dữ liệu vào mà bên trong VĐK đã chuyển rang chế độ xuất dữ liệu ra ==> có khả năng bị ngắn mạch đầu ra ==> Chết cổng. Thật là tai hại quá phải không. Có lẽ bạn nên tìm cách chuyển sang thiết kế cách khác rõ ràng hơn. Thân.

                  Comment


                  • #10
                    Nguyên văn bởi sau Xem bài viết
                    Về nguyên tắc đúng là một cổng có thể đặt được câú hình vừa vào vừa ra theo kiểu như vậy nhưng theo mình thì không nên. Bạn thử tưởng tượng rằng: Trong lúc bạn đang nhập dữ liệu vào mà bên trong VĐK đã chuyển rang chế độ xuất dữ liệu ra ==> có khả năng bị ngắn mạch đầu ra ==> Chết cổng. Thật là tai hại quá phải không. Có lẽ bạn nên tìm cách chuyển sang thiết kế cách khác rõ ràng hơn. Thân.
                    Thanks. Nhưng nhiều ứng dụng bắt buộc phải thế và vdk cũng hỗ trợ cho phép làm điều này mà. Mình thấy ở 8051, đang là cổng ra, muốn làm cổng vào thì cho PORT=0xff, ở AVR thì cho DDR = 0x00 - vào, =0xff - ra, PIC cũng thế TRIS=0xff hoặc 0x00;... Đó là cả một thanh ghi điều khiển hướng của chân. Và PSoC cũng vậy, tuy nhiên nó nhiều thanh ghi hơn.
                    "Tiền có thể mua được đồng hồ, nhưng không mua được thời gian. Vì vậy chúng ta hãy biết quí trọng thời gian hơn"

                    Comment


                    • #11
                      cai nay co the la chet chip, ban thu dugn module dieu khien 1 led di,coi thu co dieu khien dc ko, roi hay tinh tiep, chu minh lam (ke ca cop code cua cau vao van bth ma)

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      • dinhthuong80
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi dinhthuong80
                        Vì sản phẩm của họ dân mình có dùng, và có lẽ cũng không phải là không phổ biến, nên ĐT quyết định gởi thư điện tử tiếng Anh cho họ như sau, ( đã sửa vài từ như được góp ý, vì nếu lịch sự thì dù vòng vo cũng nên phản hồi, vì...
                        Hôm qua, 16:36
                      • 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 .
                        23-02-2025, 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....
                        23-02-2025, 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
                      Đang tải...
                      X