Thông báo

Collapse
No announcement yet.

Giúp code RTC 1307 !!!!

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

  • Giúp code RTC 1307 !!!!

    mình là dân cơ khí nhưng say mê 8051 nên tìm hiểu, bây gio đang lam Đồng hồ số + DS1307 + 8 led7seg. cũng tìm nhiều code trên mạng nhưg vẫn hưa hiểu lắm. mình post lên, bạn nào biết thì giúp mình với nha !!

    unsigned char I2C_RD(bit ack) tại sao ko phải là void mà là unsigned char ????
    {
    unsigned char c=0;
    bit a;
    char i;
    for (i=7;i>=0;i--)
    {
    SDA=1;
    SCL=1;
    a=SDA;
    SCL=0;
    c=c<<1;
    if (a) c++; ko hiểu câu lệnh này
    }
    SDA=ack;
    CLK;
    return (c); ko hiểu câu lệnh này
    }
    " Muốn biết phải hỏi, muốn giỏi phải học "

  • #2
    sao ko ai giup minh voi vay ?
    " Muốn biết phải hỏi, muốn giỏi phải học "

    Comment


    • #3
      Hi,
      Hàm này thực hiện nhiệm vụ đọc 1 byte data.
      1. if(a) c++; /* nếu trạng thái chân SDA == 1 thì dựng bit thứ i trong biến c lên 1. câu lệnh này kết hợp với câu c=c<<1 để làm việc này. */
      2. return c; /* trả lại byte data nhận được. c chứa giá trị nhận đc về trên chân sda. */
      ví dụ:
      mình gửi giá trị 0x50 qua i2c. như vậy hàm này sẽ trả về 0x05 và quá trình thực hiện như sau:
      1.
      - i = 7; c = 0; SDA = 1-> c = (c << 1) = 0b00000000;
      - i = 6; c = 0; SDA = 1-> c = (c << 1) +1 = 0b00000001;
      - i = 5; c = 1; SDA = 0 -> c = (c << 1) = 0b00000010;
      - i = 4; c = 2; SDA = 1 -> c = (c << 1) + 1 = 0b00000101;
      - i = 3; c = 5; SDA = 0 -> c = (c << 1) = 0b0001010;
      - i = ..
      - i = 0; c = x; SDA = 0 -> c = (c << 1) = 0b01010000;
      2. return c ; /* 0x50 */;
      k biết mình viết vậy ổn chưa. bạn xem có j thì pm lại nhé.
      |

      Comment

      Về tác giả

      Collapse

      fan.8051 Say mê Điện tử Tìm hiểu thêm về fan.8051

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

      Collapse

      Đang tải...
      X