Thông báo

Collapse
No announcement yet.

MCC18 và kiểu khai báo dữ liệu

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

  • MCC18 và kiểu khai báo dữ liệu

    Tôi có gặp 1 kiểu khai báo như sau trong MCC18:
    Code:
    typedef union _WORD_VAL
    {
        WORD Val;
        BYTE v[2];
        struct
        {
            BYTE LB;
            BYTE HB;
        } byte;
        struct
        {
            unsigned char b0:1;
            unsigned char b1:1;
            unsigned char b2:1;
            unsigned char b3:1;
            unsigned char b4:1;
            unsigned char b5:1;
            unsigned char b6:1;
            unsigned char b7:1;
            unsigned char b8:1;
            unsigned char b9:1;
            unsigned char b10:1;
            unsigned char b11:1;
            unsigned char b12:1;
            unsigned char b13:1;
            unsigned char b14:1;
            unsigned char b15:1;
        } bits;
    } WORD_VAL;
    Bạn nào giải thích giúp tôi với tôi không hiểu kiểu khai báo như thế này lắm. Tôi có một nhận xét thế này: nếu ta thay đổi giá trị trong v[0],v[1] thì giá trị của Val cũng thay đổi. XIn các bạn giải thích giúp, cảm ơn trước.

  • #2
    Đây là kiểu union trong C, ở đây mỗi biến thành phần của nó là kiểu dữ liệu16bits(WORD). Khác với struct, kiểu union chỉ có thể lưu giữa giá trị của duy nhất một biến thành phần, nếu bạn cố tình gán giá trị cho 1 biến trong kiểu union thì các biến còn lại sẽ tự động cập nhật lại theo giá trị 16bits này.
    Code:
    Ví dụ
         WORD_VAL wVal;
         wVal.Val=0x1234; 
         /*
         wVal.v[0]=0x34
         wVal.v[1]=0x12
         wVal.bytes.LB=0x34
         wVal.bytes.HB=0x12
         wVal.bits.b0=0
         wVal.bits.b1=0
         wVal.bits.b2=1
         ...

    Email:
    Phone: 0905.034.086

    Comment


    • #3
      Tôi đã hiểu kiểu Union rồi, bây giờ lại có thêm 1 cái khó hiểu nữa của MCC18đó là dòng lệnh dưới đây:
      Code:
      	#define LED_IO (*((volatile unsigned char*)(&PORTD)))
      Trong trường hợp nào thì ta dùng định nghĩa này. xin mọi người giải thích giúp

      Comment


      • #4
        Trong C nói chung từ khóa volatile để chỉ những biến mà giá trị có thể bị thay đổi bất cứ lúc nào(không nhất thiết tại thời điểm gán). Cho nên trong các khai báo thanh ghi SFR của vi điều khiển thường sử dụng volatile cho các thanh ghi, đặc biệt là cho IO, vì các giá trị này có thể sẽ bị thay đổi bởi môi trường ngoài hay tương tác hardware trong lúc hoạt động.

        #define LED_IO (*((volatile unsigned char*)(&PORTD)))
        Trong định nghĩa trên thanh ghi PORTD sẽ được chuyển kiểu thành con trỏ unsigned char là (volatile unsigned char*) với tên truy cập là LED_IO.
        Sau khai báo này, lệnh gán LED_IO=X; sẽ gán giá trị của PORTD bằng X, nhưng lệnh đọc Y=LED_IO(đọc PORTD); chưa chắc trả về đúng giá trị mà lần cuối trước đó ta đã gán cho nó(tức Y có thể khác với X).

        Thân chào.

        Email:
        Phone: 0905.034.086

        Comment

        Về tác giả

        Collapse

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

        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
        • nick22
          Trả lời cho Máy điện châm ?
          bởi nick22
          Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
          01-12-2025, 13:23
        Đang tải...
        X