Thông báo

Collapse
No announcement yet.

Lập trình cho DS1307 băng C18

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

  • Lập trình cho DS1307 băng C18

    Em đang học lập trình bằng C18, em muốn lập trình cho ds1307 nhưng chưa biết phải làm sao, để có thể ghi data vào DS1307 và lấy dữ liệu ra nữa !

    Mong các anh chị giúp cho, nếu được thì xin anh chị cho em 1 số code đơn giản để em tham khảo thêm.

    Chân thành cảm ơn các anh chị thật nhiều !!!
    Last edited by alone76816; 01-04-2010, 01:02.

    ------------------------------------------------

  • #2
    mình nghĩ đầu tiên bạn nên đọc datasheet trước đã. trong đó nó có ghi rõ dùng chuẩn giao tiếp nào, đọc ghi ra làm sao. bộ nhớ con đó thế nào.
    còn code thì có rất nhiều trong diễn đàn rồi. bạn chỉ cần search 1 tý là có hàng tá luôn.
    |

    Comment


    • #3
      Nguyên văn bởi ubuntu7 Xem bài viết
      mình nghĩ đầu tiên bạn nên đọc datasheet trước đã. trong đó nó có ghi rõ dùng chuẩn giao tiếp nào, đọc ghi ra làm sao. bộ nhớ con đó thế nào.
      còn code thì có rất nhiều trong diễn đàn rồi. bạn chỉ cần search 1 tý là có hàng tá luôn.
      Cảm ơn bạn, nhưng mình cũng đã đọc datasheet của con pic, cũng như DS1307 rồi, và cũng có tham khảo 1 số code mẫu nhưng mình viết chưa có cái nào chạy được, mình xin được post sơ đồ và code lên đây mong được sự giúp đỡ. Đây là sơ đồ trong proteus :



      Code như sau,mình cài đặt giờ cho DS1307, xong mình lấy month (biến mes) để hiển thị ra PORTD :

      #include"p18f4520.h"
      #include"delays.h"
      #include"i2c.h"

      #pragma config OSC = HS, FCMEN=OFF, IESO=OFF
      #pragma config PBADEN = OFF
      #pragma config WDT = OFF,WDTPS=512
      #pragma config LVP = OFF
      #pragma config PWRT = OFF , BOREN=OFF
      #pragma config MCLRE = ON,CCP2MX = PORTC

      #define databus PORTD

      unsigned char sec,min,hrs,day,wkd,mes,yer;

      void main(void)
      {
      ADCON1=0x0f;
      TRISD=0;
      databus=0x0f;
      TRISC=0;
      Delay10KTCYx(50);
      OpenI2C(MASTER, SLEW_OFF);
      SSPADD=0x09;

      EEByteWrite(0xd0, 0x00, 0x00);
      EEByteWrite(0xd0, 0x01, 0x59);
      EEByteWrite(0xd0, 0x02, 0x13);
      EEByteWrite(0xd0, 0x03, 0x01);

      EEByteWrite(0xd0, 0x04, 0x08);
      EEByteWrite(0xd0, 0x05, 0x01);
      EEByteWrite(0xd0, 0x06, 0x09);
      EEByteWrite(0xd0, 0x07, 0x10);
      EEByteWrite(0xd0, 0x00, 0x00);

      while(1)
      {


      sec=EERandomRead(0xd0,0x00);
      min=EERandomRead(0xd0,0x01);
      hrs=EERandomRead(0xd0,0x02);
      wkd=EERandomRead(0xd0,0x03);
      day=EERandomRead(0xd0,0x04);
      mes=EERandomRead(0xd0,0x05);
      yer=EERandomRead(0xd0,0x06);


      databus=mes;
      Delay10KTCYx(50);
      }

      }


      Mong các anh chị chỉ giùm em !!!
      Attached Files
      Last edited by alone76816; 01-04-2010, 14:17.

      ------------------------------------------------

      Comment


      • #4
        Nguyên văn bởi alone76816 Xem bài viết
        Em đang học lập trình bằng C18, em muốn lập trình cho ds1307 nhưng chưa biết phải làm sao, để có thể ghi data vào DS1307 và lấy dữ liệu ra nữa !

        Mong các anh chị giúp cho, nếu được thì xin anh chị cho em 1 số code đơn giản để em tham khảo thêm.

        Chân thành cảm ơn các anh chị thật nhiều !!!
        cau timtren dien dan day! cac bai viet cua nguyen quang nam ve pic giao tiep voi ds1307 rat hay! cau tham khao nhé! tren dian dan pic viet nam day! minh chi viet chuong trinh cho ds1307 giao tiep voi 8051 thoi con pic minh chua lam bao gio! mac qua! ma pic co ho tro cac ham giao tiep voi ds roi do cau chi can goi ra ma dung thoi! chuc thanh cong! dttcong88@gmail.com

        Comment


        • #5
          Nguyên văn bởi dttcong Xem bài viết
          cau timtren dien dan day! cac bai viet cua nguyen quang nam ve pic giao tiep voi ds1307 rat hay! cau tham khao nhé! tren dian dan pic viet nam day! minh chi viet chuong trinh cho ds1307 giao tiep voi 8051 thoi con pic minh chua lam bao gio! mac qua! ma pic co ho tro cac ham giao tiep voi ds roi do cau chi can goi ra ma dung thoi! chuc thanh cong! dttcong88@gmail.com
          Đúng như bạn nói, mình cũng đã tìm rồi, và có xem rồi, đa số là viết bằng CCS thôi, còn cái mình muốn là C18.

          Và mình đã tham khảo 1 số code viết bằng C18, nhưng cũng không được gì nữa.

          ------------------------------------------------

          Comment


          • #6
            Ngoài ra còn có những code như sau :


            #include"p18f4520.h"
            #include"delays.h"
            #include"i2c.h"

            #pragma config OSC = HS, FCMEN=OFF, IESO=OFF
            #pragma config PBADEN = OFF
            #pragma config WDT = OFF,WDTPS=512
            #pragma config LVP = OFF
            #pragma config PWRT = OFF , BOREN=OFF
            #pragma config MCLRE = ON,CCP2MX = PORTC

            unsigned char t,u;

            void main(void)
            {
            TRISD=0;
            PORTD=0x0f;

            SSPADD = 0x09; // SSPADD = 09 for 100K;
            OpenI2C(MASTER, SLEW_OFF); // 19 for 50K


            while(1){

            StartI2C();
            IdleI2C();

            WriteI2C(0xD0); // Write mode and clock in Ack
            IdleI2C();

            WriteI2C(0x00); // Control reg adress);
            IdleI2C();

            WriteI2C(0x10); // sec [0]
            IdleI2C();

            WriteI2C(0x03); // min [1]
            IdleI2C();

            WriteI2C(0x04); // Hour [2]
            IdleI2C();

            WriteI2C(0x05); // Day [3]
            IdleI2C();

            WriteI2C(0x06); // Date [4]
            IdleI2C();

            WriteI2C(0x07); // Month [5]
            IdleI2C();

            WriteI2C(0x00); // Year [6]
            IdleI2C();

            StopI2C();


            //read data from DS1307

            StartI2C();

            IdleI2C();
            WriteI2C(0xD0); // Write mode
            IdleI2C();
            WriteI2C(0x00); // Pointer=Start of Ram
            IdleI2C();

            RestartI2C();
            IdleI2C();
            WriteI2C(0xD1);
            IdleI2C();
            t = ReadI2C();
            AckI2C();
            u = ReadI2C();
            NotAckI2C();
            StopI2C();

            PORTD=t;
            Delay10KTCYx(50);
            }
            }

            ------------------------------------------------

            Comment


            • #7
              bạn thử thêm mấy cái này xem.
              TRis_scl = 0;
              tris_sda = 1;
              code mình cũng có viết bằng c18 rồi. nếu vẫn k chạy thì để mình tìm rồi pót lên cho bạn.
              |

              Comment


              • #8
                bạn thử thêm mấy cái này xem.
                TRis_scl = 0;
                tris_sda = 1;
                code mình cũng có viết bằng c18 rồi. nếu vẫn k chạy thì để mình tìm rồi pót lên cho bạn.
                |

                Comment


                • #9
                  thank you.

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X