Thông báo

Collapse
No announcement yet.

Giao tiếp I2C

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

  • Giao tiếp I2C

    void I2C_Write(unsigned char Data)
    {
    unsigned char i;
    for(i=0;i<8;i++)
    {
    SDA= ( (Data<<i) & 0x80);
    SCL=1;
    I2C_Delay(720);
    SCL=0;
    I2C_Delay(720);
    }
    }

    Giả sử Data = 11000011. Vậy với i=0 thì SDA = (11000011 & 10000000) = 10000000. Nhưng SDA là 1bit, vậy sao truyền được mọi người. Giúp em với.

  • #2
    Nguyên văn bởi thanhlonguit Xem bài viết
    void I2C_Write(unsigned char Data)
    {
    unsigned char i;
    for(i=0;i<8;i++)
    {
    SDA= ( (Data<<i) & 0x80);
    SCL=1;
    I2C_Delay(720);
    SCL=0;
    I2C_Delay(720);
    }
    }

    Giả sử Data = 11000011. Vậy với i=0 thì SDA = (11000011 & 10000000) = 10000000. Nhưng SDA là 1bit, vậy sao truyền được mọi người. Giúp em với.
    Người ta truyền từng bit một,theo trọng số,bit 7 được truyền đầu tiên,việc and từng bit với mặt nạ 0x80 chỉ để kiểm tra bit 7 xem nó bằng 1 (kết quả phép and sẽ là 0x80 ) hay bằng 0 (kết quả phép and là 0x00) để đưa cái giá trị ấy ra chân SDA -_-
    vanduc0211@gmail.com

    Comment


    • #3
      Nguyên văn bởi viboyth.haui Xem bài viết
      Người ta truyền từng bit một,theo trọng số,bit 7 được truyền đầu tiên,việc and từng bit với mặt nạ 0x80 chỉ để kiểm tra bit 7 xem nó bằng 1 (kết quả phép and sẽ là 0x80 ) hay bằng 0 (kết quả phép and là 0x00) để đưa cái giá trị ấy ra chân SDA -_-
      Nhưng kết quả có thể là 0x00 hoặc 0x80, dây là một số 8bit mà. Còn SDA thì chỉ có 1bit thôi, sao truyền được.

      Comment


      • #4
        đầy đủ ra nó phải là thế này cho chú dễ hiểu
        SDA= ( (Data<<i) & 0x80)?1:0;
        Website chính thức đổi địa chỉ website thành
        Mời các bạn ghé thăm !!!

        Comment


        • #5
          Nguyên văn bởi mast090 Xem bài viết
          đầy đủ ra nó phải là thế này cho chú dễ hiểu
          SDA= ( (Data<<i) & 0x80)?1:0;
          Nhưng kết quả phép "&" là một số 8bit mà anh.

          Comment


          • #6
            Nguyên văn bởi thanhlonguit Xem bài viết
            Nhưng kết quả phép "&" là một số 8bit mà anh.
            là 1 số 8 bit nhưng chỉ xét tới bit 7 chính là bit cần truyền thôi,sau mỗi lần truyền lại đẩy bit kế tiếp lên vị trí bit 7,tới đủ 8 bit,1 số Data bất kì and với 0x80 thì kết quả luôn là 0x80 hoặc 0x00,nếu bằng 0x80 => bit 7 bằng 1 còn nếu bằng 0x00 thì bit 7 bằng 0.
            vanduc0211@gmail.com

            Comment


            • #7
              Nguyên văn bởi thanhlonguit Xem bài viết
              void I2C_Write(unsigned char Data)
              {
              unsigned char i;
              for(i=0;i<8;i++)
              {
              SDA= ( (Data<<i) & 0x80);
              SCL=1;
              I2C_Delay(720);
              SCL=0;
              I2C_Delay(720);
              }
              }

              Giả sử Data = 11000011. Vậy với i=0 thì SDA = (11000011 & 10000000) = 10000000. Nhưng SDA là 1bit, vậy sao truyền được mọi người. Giúp em với.
              Trong datasheet của chip có giải thích rất rõ chỗ này, em xem thêm sẽ hiểu ngay cấu trúc truyền và cách truyền I2C
              Tư vấn thiết kế hệ thống điện-điện tử theo yêu cầu.
              Tel: 0903 702 417. Email: web:

              Comment


              • #8
                Nguyên văn bởi viboyth.haui Xem bài viết
                là 1 số 8 bit nhưng chỉ xét tới bit 7 chính là bit cần truyền thôi,sau mỗi lần truyền lại đẩy bit kế tiếp lên vị trí bit 7,tới đủ 8 bit,1 số Data bất kì and với 0x80 thì kết quả luôn là 0x80 hoặc 0x00,nếu bằng 0x80 => bit 7 bằng 1 còn nếu bằng 0x00 thì bit 7 bằng 0.
                Vậy nghĩa là khi gán số 8bit vào biến 1bit thì sẽ lấy bit có trọng số cao nhất đưa vào phải không anh.
                VD: Chọn mặt nạ không phải là 0x80. Ví dụ ta có: SDA = (00000001 & 10000001) = 00000001. Vậy theo anh nói thì SDA = bit thứ 7 (tức là 0) phải không vậy.

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X