Thông báo

Collapse
No announcement yet.

Sử dụng struct trong lập trình avr

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

  • Sử dụng struct trong lập trình avr

    Xin hỏi các cao thủ. Em đang lập trình điều khiển động cơ DC. Em viết kiểu dữ liệu cho động cơ như sau:
    struct Motor
    {
    unsigned char speed;
    bit direction;
    bit active;
    } LeftMotor;

    Nếu em muốn gắn giá trị của LeftMotor.direction vào một chân nào đó ví như "PORTD.4" chằng hạn vậy thì làm thế nào để khi em thay đổi giá trị của LeftMotor.direction trong bài lập trình của em thì giá trị của PORTD.4 tự động thay đổi ?

  • #2
    Ví dụ muốn khai báo PD4 là direction thì có thể dùng
    #define PORTD.4 direction

    Còn dùng struct thì chưa nghĩ ra.
    AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
    Xem thêm tại Online Store ---> Click here
    Mob: 0982.083.106

    Comment


    • #3
      #define PORTD.4 LeftMotor.direction

      Sông dài, Thuyền lớn, Biển rộng bao la.
      Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

      Comment


      • #4
        Nguyên văn bởi dinhquang Xem bài viết
        Xin hỏi các cao thủ. Em đang lập trình điều khiển động cơ DC. Em viết kiểu dữ liệu cho động cơ như sau:
        struct Motor
        {
        unsigned char speed;
        bit direction;
        bit active;
        } LeftMotor;

        Nếu em muốn gắn giá trị của LeftMotor.direction vào một chân nào đó ví như "PORTD.4" chằng hạn vậy thì làm thế nào để khi em thay đổi giá trị của LeftMotor.direction trong bài lập trình của em thì giá trị của PORTD.4 tự động thay đổi ?
        struct Motor
        {
        unsigned char speed:4;
        unsigned char direction:1;
        unsigned char active:1;
        } LeftMotor @ Địa chỉ PORTD;
        Như vậy khi nào thay đổi speed là thay đổi PORTD.0...3, direction là PORTD.4, active là PORTD.5
        Last edited by hightech_uc; 19-12-2008, 13:28.
        |

        Comment


        • #5
          cảm ơn các bác. nhưng nếu như em muốn dành cả byte để chứa biến speed( ví dụ như thanh ghi OCRA1L chẳng hạn) còn các biến direction và active là các biến bit thế thì cách của bác hitech_us không dùng được rồi. còn cách của bác VNarmy và bác quoc_thaibk thì nếu mỗi lần em khai báo thêm một biết kiểu motor em lại phải khai báo #define cho từng biến một. thế thì bất tiện quá

          Comment


          • #6
            Nguyên văn bởi dinhquang Xem bài viết
            cảm ơn các bác. nhưng nếu như em muốn dành cả byte để chứa biến speed( ví dụ như thanh ghi OCRA1L chẳng hạn) còn các biến direction và active là các biến bit thế thì cách của bác hitech_us không dùng được rồi. còn cách của bác VNarmy và bác quoc_thaibk thì nếu mỗi lần em khai báo thêm một biết kiểu motor em lại phải khai báo #define cho từng biến một. thế thì bất tiện quá
            Sài union.Ví dụ:
            Union{
            Unsigned char BYTE;
            Struct{
            Unsigned char NAME_VAR1:1; //1 là 1 bit
            unsigned char NAME_VAR2:2;//2 là 2 bit
            ...
            }BIT;
            }NAME_PORT;
            vậy là có thể vừa sài dc BYTE vừa sài dc BIT.
            The goal of power electronics is control the flow of energy from an electrical source to an electrical load with high efficiency, high availability, high reliability, light weight and low cost.

            Comment


            • #7
              Ngay trong code của bạn cũng phải khởi tạo sự liên kết lúc đầu
              bạn đang lập trình trên C chứ không phải lập trình hướng đối tượng mà yêu cầu có sự initialization.

              Bản thân người lập trình cấu trúc quản lý khá nhiều so với viết chươgn trình trên các nền như .NET hay VStudio.

              Sông dài, Thuyền lớn, Biển rộng bao la.
              Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

              Comment


              • #8
                Nguyên văn bởi chestnut Xem bài viết
                Sài union.Ví dụ:
                Union{
                Unsigned char BYTE;
                Struct{
                Unsigned char NAME_VAR1:1; //1 là 1 bit
                unsigned char NAME_VAR2:2;//2 là 2 bit
                ...
                }BIT;
                }NAME_PORT;
                vậy là có thể vừa sài dc BYTE vừa sài dc BIT.
                Em đang nghiên cứu cách này. Em chưa hiểu lắm. Theo em biết thì union là cho các biến share cùng một địa chỉ ô nhớ vậy thì khi em khai báo nhiều biến liệu có xảy ra tranh chấp không nhỉ.

                Comment


                • #9
                  Nguyên văn bởi dinhquang Xem bài viết
                  Em đang nghiên cứu cách này. Em chưa hiểu lắm. Theo em biết thì union là cho các biến share cùng một địa chỉ ô nhớ vậy thì khi em khai báo nhiều biến liệu có xảy ra tranh chấp không nhỉ.
                  Tại sao lại xảy ra tranh chấp?Tranh chấp cái gì?Bạn có hiểu vấn đề không vậy?
                  The goal of power electronics is control the flow of energy from an electrical source to an electrical load with high efficiency, high availability, high reliability, light weight and low cost.

                  Comment


                  • #10
                    Em nhầm. Nhưng mà dùng union thì cái trường bít của mình nhất thiết phải là các bit 0,1... theo thứ tự của cái port mình gán. Nhưng nếu em muốn gán các bít này vào các chân bất kì thì không được.

                    Cho em hỏi thêm là khi mình muốn truyền các giá trị kiểu bít cho các hàm thì làm thế nào nhỉ. Em viết chương trình trong codevision mà nó báo lỗi là biết kiểu bit không hỗ trợ...

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    • bqviet
                      Trả lời cho Đấu tắt điện cho máy tính bảng
                      bởi bqviet
                      Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                      06-12-2025, 17:17
                    • nguyendinhvan
                      Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                      bởi nguyendinhvan
                      Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                      05-12-2025, 19:59
                    • afrendly
                      Trả lời cho Đấu tắt điện cho máy tính bảng
                      bởi afrendly
                      Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                      04-12-2025, 01:27
                    Đang tải...
                    X