1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

[Help] Về chuẩn I2C trong DS1307

Thảo luận trong 'ĐỒ ÁN' bắt đầu bởi OhMyGod, 11 Tháng mười hai 2012.

  1. OhMyGod New Member

    Số bài viết: 122
    Đã được thích: 0
    Điểm thành tích: 0
  2. lovespkt Member

    Số bài viết: 85
    Đã được thích: 0
    Điểm thành tích: 8
  3. OhMyGod New Member

    Số bài viết: 122
    Đã được thích: 0
    Điểm thành tích: 0
  4. lovespkt Member

    Số bài viết: 85
    Đã được thích: 0
    Điểm thành tích: 8
    Mình ko có nhiều thời gian nên chỉ hướng dẫn bạn thôi. Chuẩn I2C cho con này được trình bày rất đầy đủ ở trang hocavr.com, phần giao tiếp với ds1307, bạn đọc đi!
  5. pro_and_brao Moderator

    Số bài viết: 484
    Đã được thích: 8
    Điểm thành tích: 18
    Re: [Help] Về chuẩn I2C trong DS1307

    Mã:
    DS1307_INIT:
          CALL  I2C_START
          MOV   A,#0D0H           ;DIA CHI DS1307
          LCALL I2C_WRITE   ;
          ;JC   $-5   
          MOV   A,#00H            ;DIA CHI THANH GHI 0
          LCALL I2C_WRITE
          MOV   A,#00H            ;ENABLE     THE oscillator (CH bit = 0)
          LCALL I2C_WRITE
          CALL  I2C_STOP
          RET
    DS1307_OUTPUT:
          CALL  I2C_START
          MOV   A,#0D0H           ;DIA CHI DS1307
          CALL  I2C_WRITE   ;
          MOV   A,#07H            ;DIA CHI THANH GHI 0
          CALL  I2C_WRITE
          MOV   A,#10H            ;ENABLE     THE OUTPUT oscillator F=1HZ 
          CALL  I2C_WRITE
          CALL  I2C_STOP
          RET
    DS1307_WRITE_TIME:
          CALL  I2C_START
          MOV   A,#0D0H           ;DIA CHI DS1307
          CALL  I2C_WRITE   ;
          MOV   A,#00H            ;DIA CHI THANH GHI 0
          CALL  I2C_WRITE
          MOV   A,SECONDS   ;
          CALL  I2C_WRITE
          MOV   A,MINUTES   ;
          CALL  I2C_WRITE
          MOV   A,HOUR            ;
          CALL  I2C_WRITE
          CALL  I2C_STOP
          RET
    DS1307_WRITE_DATE:
          CALL  I2C_START
          MOV   A,#0D0H           ;DIA CHI DS1307
          CALL  I2C_WRITE   ;
          MOV   A,#03H            ;DIA CHI THANH GHI 3
          CALL  I2C_WRITE
          MOV   A,DAY       ;THU  
          CALL  I2C_WRITE
          MOV   A,DATE            ;NGAY
          CALL  I2C_WRITE
          MOV   A,MONTH           ;THANG
          CALL  I2C_WRITE   
          MOV   A,YEAR            ;NAM
          CALL  I2C_WRITE
          CALL  I2C_STOP
          RET
    DS1307_READ_TIME:
          CALL  I2C_START
          MOV   A,#0D0H           ;DIA CHI DS1307 VA WRITE
          CALL  I2C_WRITE   ;
          MOV   A,#00H            ;DIA CHI THANH GHI 0
          CALL  I2C_WRITE
          CALL  I2C_RESTART
          MOV   A,#0D1H           ;DIA CHI DS1307 VA READ
          CALL  I2C_WRITE
          CALL  I2C_READ_ACK
          MOV   SECONDS,A
          CALL  I2C_READ_ACK
          MOV   MINUTES,A
          CALL  I2C_READ_NACK
          MOV   HOUR,A
          CALL  I2C_STOP
          RET
    DS1307_READ_DATE:
          CALL  I2C_START
          MOV   A,#0D0H           ;DIA CHI DS1307 VA WRITE
          CALL  I2C_WRITE   ;
          MOV   A,#03H            ;DIA CHI THANH GHI 3
          CALL  I2C_WRITE
          CALL  I2C_RESTART
          MOV   A,#0D1H           ;DIA CHI DS1307 VA READ
          CALL  I2C_WRITE
          CALL  I2C_READ_ACK
          MOV   DAY,A
          CALL  I2C_READ_ACK
          MOV   DATE,A
          CALL  I2C_READ_ACK
          MOV   MONTH,A
          CALL  I2C_READ_NACK
          MOV   YEAR,A
          CALL  I2C_STOP
          RET
    I2C_WRITE:
          PUSH  07H
          MOV   R7,#8
       ___LOOP_I2C_WRITE:
          CLR   SCL
          RLC   A
          MOV   SDA,C
          NOP
          NOP
          SETB  SCL
          NOP
          NOP
          DJNZ  R7,___LOOP_I2C_WRITE
          CLR   SCL
          NOP
          NOP
          NOP
          NOP
          SETB  SDA         ;CAU HINH NGO VAO SDA DOC ACK
          SETB  SCL
          NOP
          MOV   C,SDA       ;KIEM TRA CO "C" DE XAC DINH LOI 
          NOP
          NOP
          CLR   SCL
          POP   07H
          RET
    I2C_READ_ACK:
          PUSH  07H
          MOV   R7,#8
          SETB  SDA         ;CAU HINH NGO VAO SDA
       ___LOOP_I2C_READ_ACK:
          SETB  SCL
          NOP
          MOV   C,SDA
          RLC   A           ;BYTE DOC VE LUU TRONG THANH GHI "A"
          NOP
          CLR   SCL
          NOP
          NOP
          NOP
          DJNZ  R7,___LOOP_I2C_READ_ACK
          CLR   SDA
          NOP
          SETB  SCL
          NOP
          NOP
          NOP
          NOP
          CLR   SCL
          POP   07H
          RET
    I2C_READ_NACK:
          PUSH  07H
          MOV   R7,#8
          SETB  SDA         ;CAU HINH NGO VAO SDA
       ___LOOP_I2C_READ_NACK:
          SETB  SCL
          NOP
          MOV   C,SDA
          RLC   A           ;BYTE DOC VE LUU TRONG THANH GHI "A"
          NOP
          CLR   SCL
          NOP
          NOP
          NOP
          DJNZ  R7,___LOOP_I2C_READ_NACK
          SETB  SDA
          NOP
          SETB  SCL
          NOP
          NOP
          NOP
          NOP
          CLR   SCL
          POP   07H
          RET
    I2C_INIT:
          SETB  SCL
          SETB  SDA
          RET
    I2C_START:
          SETB  SDA
          SETB  SCL
          NOP         ;DELAY 4.7US
          NOP         ;Bus Free Time Between a STOP and START Condition
          NOP   
          NOP
          NOP
          CLR   SDA
          NOP         ;DELAY 4US
          NOP         ;Hold Time (Repeated) START Condition
          NOP   
          NOP
          CLR   SCL
          RET
    I2C_STOP:
          CLR   SDA
          SETB  SCL
          NOP         ;DELAY      4.7US
          NOP         ;Setup Time for STOP Condition
          NOP
          NOP   
          NOP
          SETB  SDA
          RET
    I2C_RESTART:
          SETB  SDA
          SETB  SCL
          NOP         ;DELAY 4.7US
          NOP         ;Setup Time for a Repeated START Condition
          NOP   
          NOP
          NOP
          CLR   SDA
          NOP         ;DELAY 4US
          NOP         ;Hold Time (Repeated) START Condition
          NOP   
          NOP
          CLR   SCL
          NOP
          NOP
          RET
    SCL_HIGH:
          NOP         ;DELAY 4US
          NOP         ;HIGH Period of SCL Clock
          SETB  SCL
          NOP
          NOP
          RET
    SCL_LOW:
          NOP         ;DELAY 4.7US
          NOP         ;LOW Period of SCL Clock
          CLR   SCL
          NOP
          NOP
          NOP
          RET
    Trong đoạn code trên có thêm phần truyền ACK để kiểm tra lỗi. việc của bạn bây giờ là viết chương trình chính và gọi các hàm trên thôi.
    - đoạn code này là do sư huynh nào trên dientuvietnam.net viết nhưng lâu quá rồi không nhớ rõ.!

Chia sẻ trang này