Thông báo

Collapse
No announcement yet.

sử dụng vi điều khiển 8051\52 thiết kết đồng hồ thời gian thực với ds1307

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

  • sử dụng vi điều khiển 8051\52 thiết kết đồng hồ thời gian thực với ds1307

    e chao các anh chị !
    e thì hok chuyên ngành công nghệ thông tin, đợt này e phải hoc cái món vi xử lý, đợt này thầy em bắt làm cái chủ đề trên khoai quá, cả nhóm loay hoay cả mấy tuần rồi mà mãi ko biết nguyên lý hoạt đong của nó ntn,
    đây là mạch bọn em copy trên mag về, bác nào pro có thể giải thích mạch hộ em với đk kp?
    Dong ho thoi gian thuc(1).pdf

  • #2
    Nguyên văn bởi cntt Xem bài viết
    e chao các anh chị !
    e thì hok chuyên ngành công nghệ thông tin, đợt này e phải hoc cái món vi xử lý, đợt này thầy em bắt làm cái chủ đề trên khoai quá, cả nhóm loay hoay cả mấy tuần rồi mà mãi ko biết nguyên lý hoạt đong của nó ntn,
    đây là mạch bọn em copy trên mag về, bác nào pro có thể giải thích mạch hộ em với đk kp?
    [ATTACH]77103[/ATTACH]
    Công nghệ tt cũng hc cái này cơ ah, hay nhỉ.

    Comment


    • #3
      Nguyên văn bởi cntt Xem bài viết
      e chao các anh chị !
      e thì hok chuyên ngành công nghệ thông tin, đợt này e phải hoc cái món vi xử lý, đợt này thầy em bắt làm cái chủ đề trên khoai quá, cả nhóm loay hoay cả mấy tuần rồi mà mãi ko biết nguyên lý hoạt đong của nó ntn,
      đây là mạch bọn em copy trên mag về, bác nào pro có thể giải thích mạch hộ em với đk kp?
      [ATTACH]77103[/ATTACH]
      Bắt buộc phải 89x5x à bạn? Mình thấy 89xx với ds1307 nản lắm. nguồn mà không ổn định là chết với nó đấy, kể mà được chọn thì dùng atmega8a con đó có RTC luôn mà tổng giá linh kiện chắc cũng tuơng đuơng với 89x5x+ds1307.

      Comment


      • #4
        dùng 89s52 nhé bác.
        // Chuc nang cua chuong trinh: Dung DS1307 dem thoi gian va hien thi tren text LCD, chinh gio bang SW1, SW2 va SW3
        // Ket noi day:
        // LCD :
        // Port data cua LCD (D1-D7) ----> Port 2 cua 8051
        // RS cua LCD ----> P3.7 cua 8051
        // RW cua LCD ----> P3.6 cua 8051
        // EN cua LCD ----> P3.5 cua 8051
        // DS1307 :
        // SCL cua DS1307 ----> P1.0 cua 8051
        // SDA cua DS1307 ----> P1.1 cua 8051
        // Nut nhan don (khi nhấn thì output từ nút nhần chuyển từ 1 sang 0 nhé):
        // SW1 ----> P3.0 cua 8051: chinh giam
        // SW2 ----> P3.1 cua 8051: chinh tang
        // SW3 ----> P3.2 cua 8051: chinh mode

        #include <AT89X51.H>
        #include <INTRINS.H>


        #define sda P1_1
        #define scl P1_0
        #define rs P3_7
        #define rw P3_6
        #define en P3_5
        #define menu P3_2
        #define tang P3_1
        #define giam P3_0
        #define congLCD P2
        #define D7 P2_7

        unsigned char *rtc[]={"0","1","2","3","4","5","6","7","8","9"};
        unsigned char *day[]={"CNhat","Thu 2","Thu 3","Thu 4","Thu 5","Thu 6","Thu 7"};
        unsigned char giatrikhoitao_rtc[8];


        void busy()
        {
        D7=1;
        rs=0;
        rw=1;
        while(D7!=0)
        {
        en=0;
        en=1;
        }
        }

        void ghilenhLCD(unsigned char x)
        {
        busy();
        congLCD=x;
        rs=0;
        rw=0;
        en=1;
        en=0;
        }

        void khoitaoLCD(void)
        {
        ghilenhLCD(0X38);
        ghilenhLCD(0X0C);
        ghilenhLCD(0X01);
        ghilenhLCD(0X06);
        }

        void ghi_kytu(unsigned char value)
        {
        busy();
        congLCD=value;
        rs=1;
        rw=0;
        en=1;
        en=0;
        }

        void ghi_chuoi(unsigned char *string)
        {
        unsigned char i;
        for(i=0;string[i]!='\0';i++)
        ghi_kytu(string[i]);
        }


        void ghiso(unsigned char a)
        {
        unsigned char i;
        i=a/10;
        ghi_chuoi(rtc[i]);
        i=a%10;
        ghi_chuoi(rtc[i]);
        }

        void hienthi_dulieu_rtc(unsigned char x)
        {
        unsigned char temp;
        temp = x/16;
        ghi_chuoi(rtc[temp]);
        temp = x%16;
        ghi_chuoi(rtc[temp]);
        }



        void start_rtc(void)
        {
        scl=1;
        sda=1;
        _nop_();
        _nop_();
        sda=0;
        scl=0;
        }

        void stop_rtc(void)
        {
        sda=0;
        scl=1;
        _nop_();
        _nop_();
        sda=1;
        }

        void gui_rtc(unsigned char x)
        {
        unsigned char i;
        for(i=0;i<8;i++)
        {
        sda=(x&0x80)? 1:0;
        scl=1;
        _nop_();
        _nop_();
        scl=0;
        x<<=1;
        }
        scl=1;
        _nop_();
        _nop_();
        scl=0;
        }

        unsigned char nhan_rtc(void)
        {
        unsigned char Data,i;
        for(i=0;i<8;i++)
        {
        scl=1;
        Data<<=1;
        Data=Data|sda;
        scl=0;
        }
        sda=1;
        scl=1;
        _nop_();
        scl=0;
        _nop_();
        return Data;
        }

        char docdulieu(unsigned char diachi)
        {
        unsigned char Data;
        start_rtc();
        gui_rtc(0xd0);
        gui_rtc(diachi);
        start_rtc();
        gui_rtc(0xd1);
        Data=nhan_rtc();
        stop_rtc();
        return Data;
        }

        void ghivaoDS1307(void)
        {
        unsigned char t;
        for(t=0;t<9;t++)
        {
        start_rtc();
        gui_rtc(0xd0);
        gui_rtc(t);
        gui_rtc(giatrikhoitao_rtc[t]);
        stop_rtc();
        }

        }



        void hienthi_rtc(void)

        {
        ghilenhLCD(0xca);
        hienthi_dulieu_rtc(docdulieu(0));
        ghilenhLCD(0xc7);
        hienthi_dulieu_rtc(docdulieu(1));
        ghi_kytu(':');
        ghilenhLCD(0xc4);
        hienthi_dulieu_rtc(docdulieu(2));
        ghi_kytu(':');
        ghilenhLCD(0x80);
        ghi_chuoi(day[docdulieu(3)-1]);
        ghi_kytu(',');
        ghilenhLCD(0x86);
        hienthi_dulieu_rtc(docdulieu(4));
        ghi_kytu('-');
        hienthi_dulieu_rtc(docdulieu(5));
        ghi_chuoi("-20");
        hienthi_dulieu_rtc(docdulieu(6));
        }


        void delay(long time)
        {
        while(time--)
        {
        TMOD=0x01;
        TH0=0xFC;TL0=0x67;
        TR0=1;
        while(TF0!=1){};
        TF0=0;
        TR0=0;}
        }


        unsigned char bcd_dec(unsigned char bcd)
        {
        return((bcd/16)*10+(bcd%16));
        }

        unsigned char dec_bcd(unsigned char dec)
        {
        return((dec/10)*16+(dec%10));
        }

        void caidat_rtc()
        {
        unsigned char giay,phut,gio,thu,ngay,thang,nam;
        giay = bcd_dec(docdulieu(0)&0x7f);
        phut = bcd_dec(docdulieu(1));
        gio = bcd_dec(docdulieu(2)& 0x3f);
        thu = bcd_dec(docdulieu(3));
        ngay = bcd_dec(docdulieu(4));
        thang = bcd_dec(docdulieu(5));
        nam = bcd_dec(docdulieu(6));

        ghilenhLCD(1);
        ghi_chuoi("CHINH");
        ghi_chuoi(" GIO :");
        ghilenhLCD(0x0e);
        ghilenhLCD(0xc4);
        ghiso(gio);
        ghi_kytu(':');
        ghiso(phut);
        ghi_kytu(':');
        ghiso(giay);

        ghilenhLCD(0xC5);
        while(menu==0);
        caidatgio:while(tang!=0 && giam!=0 && menu!=0);
        if(tang==0)
        {
        gio++;
        if(gio==24) gio=0;
        ghilenhLCD(0xC4);
        ghiso(gio);
        ghilenhLCD(0xC5);
        delay(300);
        goto caidatgio; }
        if(giam==0)
        {
        gio--;
        if(gio==0xff) gio=23;
        ghilenhLCD(0xC4);
        ghiso(gio);
        ghilenhLCD(0xC5);
        delay(300);
        goto caidatgio;}


        while(menu==0);
        ghilenhLCD(0xC8);
        caidatphut: while(tang!=0 && giam!=0 && menu!=0);
        if(tang==0)
        {
        phut++;
        if(phut==60) phut=0;
        ghilenhLCD(0xC7);
        ghiso(phut);
        ghilenhLCD(0x10);
        delay(300);
        goto caidatphut;}
        if(giam==0)
        {
        phut--;
        if(phut==0xff) phut=59;
        ghilenhLCD(0xC7);
        ghiso(phut);
        ghilenhLCD(0x10);
        delay(300);
        goto caidatphut;
        }


        while(menu==0);
        ghilenhLCD(0xCB);
        caidatgiay: while(tang!=0 && giam!=0 && menu!=0);
        if(tang==0)
        {
        giay++;
        if(giay==60) giay=0;
        ghilenhLCD(0xCA);
        ghiso(giay);
        ghilenhLCD(0xCB);
        delay(100);
        goto caidatgiay;
        }
        if(giam==0)
        {
        giay--;
        if(giay==0xff) giay=59;
        ghilenhLCD(0xCA);
        ghiso(giay);
        ghilenhLCD(0xCB);
        delay(100);
        goto caidatgiay;
        }



        while(menu==0);
        ghilenhLCD(1);
        ghi_chuoi("CHINH NGAY :");
        ghilenhLCD(0xc4);
        ghiso(ngay);
        ghi_kytu('-');
        ghiso(thang);
        ghi_chuoi("-20");
        ghiso(nam);

        ghilenhLCD(0xc5);
        caidatngay:while (tang!=0 && giam!=0 && menu!=0);
        if(tang==0)
        {
        ngay++;
        if(ngay==32) ngay=1;
        ghilenhLCD(0xC4);
        ghiso(ngay);
        ghilenhLCD(0x10);
        delay(300);
        goto caidatngay;
        }

        if(giam==0)
        {
        ngay--;
        if(ngay==0) ngay=31;
        ghilenhLCD(0xC4);
        ghiso(ngay);
        ghilenhLCD(0x10);
        delay(300);
        goto caidatngay;
        }


        while(menu==0);
        ghilenhLCD(0xC8);
        caidatthang:while(tang!=0 && giam!=0 && menu!=0);
        if(tang==0)
        {
        thang++;
        if(thang==13) thang=1;
        ghilenhLCD(0xC7);
        ghiso(thang);
        ghilenhLCD(0x10);
        delay(300);
        goto caidatthang;
        }
        if(giam==0)
        {
        thang--;
        if(thang==0) thang=12;
        ghilenhLCD(0xC7);
        ghiso(thang);
        ghilenhLCD(0x10);
        delay(300);
        goto caidatthang;
        }


        while(menu==0);
        ghilenhLCD(0xCD);
        caidatnam:while(tang!=0 && giam!=0 && menu!=0);
        if(tang==0)
        {
        nam++;
        if(nam==100) nam=0;
        ghilenhLCD(0xCC);
        ghiso(nam);
        ghilenhLCD(0xCD);
        delay(300);
        goto caidatnam;
        }

        if(giam==0)
        {
        nam--;
        if(nam==0xff) nam=99;
        ghilenhLCD(0xCC);
        ghiso(nam);
        ghilenhLCD(0xCD);
        delay(300);
        goto caidatnam;
        }



        while(menu==0);
        ghilenhLCD(1);
        ghi_chuoi("CHINH THU :");
        ghilenhLCD(0xc4);
        ghi_chuoi(day[thu-1]);
        caidatthu:while(tang!=0 && giam!=0 && menu!=0);
        if(tang==0)
        { thu++;
        if(thu==8) thu=1;
        ghilenhLCD(0xC4);
        ghi_chuoi(day[thu-1]);
        delay(300);
        goto caidatthu;
        }

        if(giam==0)
        { thu--;
        if(thu==0) thu=7;
        ghilenhLCD(0xC4);
        ghi_chuoi(day[thu-1]);
        delay(300);
        goto caidatthu;
        }

        while(menu==0);
        ghilenhLCD(1);
        ghilenhLCD(0x0C);

        giatrikhoitao_rtc[0] = dec_bcd(giay);
        giatrikhoitao_rtc[1] = dec_bcd(phut);
        giatrikhoitao_rtc[2] = dec_bcd(gio);
        giatrikhoitao_rtc[3] = dec_bcd(thu);
        giatrikhoitao_rtc[4] = dec_bcd(ngay);
        giatrikhoitao_rtc[5] = dec_bcd(thang);
        giatrikhoitao_rtc[6] = dec_bcd(nam);
        giatrikhoitao_rtc[7] = 0x00;
        giatrikhoitao_rtc[8] = 'c';

        ghivaoDS1307();
        ghilenhLCD(1);


        }



        void kiemtra_rtc(void)
        {
        unsigned char temp;
        start_rtc();
        gui_rtc(0xd0);
        gui_rtc(0x08);
        start_rtc();
        gui_rtc(0xd1);
        temp=nhan_rtc();
        stop_rtc();
        if(temp!='c')
        {
        giatrikhoitao_rtc[0]=0x50;
        giatrikhoitao_rtc[1]=0x59;
        giatrikhoitao_rtc[2]=0x09;
        giatrikhoitao_rtc[3]=0x04;
        giatrikhoitao_rtc[4]=0x04;
        giatrikhoitao_rtc[5]=0x05;
        giatrikhoitao_rtc[6]=0x11;
        giatrikhoitao_rtc[7]=0x00;
        giatrikhoitao_rtc[8]='c';
        ghivaoDS1307();
        }
        }

        void doccacdulieu(void){ int i;
        for(i=0;i<=6;i++){docdulieu(i);} }


        bit co=0;
        void caidatco() interrupt 0
        {
        co=1;
        }
        void main()
        {
        khoitaoLCD();
        ghilenhLCD(0x80);
        ghi_chuoi("TEST RTC DS1307");
        ghilenhLCD(0xc0);
        ghi_chuoi("BY LEKTEKNIK COR");
        delay(4000);

        ghilenhLCD(1);
        kiemtra_rtc();
        IE=0x81;
        doccacdulieu();
        while(1)
        { doccacdulieu();
        hienthi_rtc();
        if(co==1)
        {
        caidat_rtc();
        co=0;
        }

        }
        }

        Comment


        • #5
          đề tài báo cáo mà bạn,đề thầy cho thì sử dụng khác làm sao dl

          Comment


          • #6
            trên 4rum này có mấy bác làm cái ds1307 rồi. mà sơ đồ mạch của bác có vấn đề đấy
            1. chân scl và sda phải có trở 4.7k tro nguồn
            2. dùng a1015 để kích nguồn cho led 7 đoạn, sẽ hay hơn dùng c1815

            Comment


            • #7
              Nguyên văn bởi condonhan Xem bài viết
              trên 4rum này có mấy bác làm cái ds1307 rồi. mà sơ đồ mạch của bác có vấn đề đấy
              1. chân scl và sda phải có trở 4.7k tro nguồn
              2. dùng a1015 để kích nguồn cho led 7 đoạn, sẽ hay hơn dùng c1815
              Dùng tran thuận hay ngược là tùy người viết chứ bạn.

              Comment


              • #8
                Nguyên văn bởi jqk1234 Xem bài viết
                Dùng tran thuận hay ngược là tùy người viết chứ bạn.
                mình thấy dùng a1015 dễ hơn. kích mức 0 so với VCC (có thể xem là mức 1) dễ hơn là kích mức 1 so với mức 1. sau này nếu làm việc với việc dùng trans kích nguồn lớn thì dùng c1815 kiểu đó hên xui lắm.

                Comment


                • #9
                  Nguyên văn bởi jqk1234 Xem bài viết
                  Dùng tran thuận hay ngược là tùy người viết chứ bạn.
                  Do các các chân out của họ 89 "cấp dòng" rất yếu so với "hút dòng" nên khi thiết kế người ta thường dùng Transistor loại PNP hơn, nếu sử dụng NPN bạn phải thêm điện trở treo chân B lên mức cao để tăng cường thêm dòng kích Transistor, tuỳ theo dòng cần cung cấp cho tải ta có thể tính điện trở treo cho phù hợp.
                  Last edited by pctcom; 01-11-2013, 08:52.
                  PCT COMPUTER
                  (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                  Comment


                  • #10
                    Nguyên văn bởi pctcom Xem bài viết
                    Do các các chân out của họ 89 "cấp dòng" rất yếu so với "hút dòng" nên khi thiết kế người ta thường dùng Transistor loại PNP hơn, nếu sử dụng NPN bạn phải thêm điện trở treo chân B lên mức cao để tăng cường thêm dòng kích Transistor, tuỳ theo dòng cần cung cấp cho tải ta có thể tính điện trở treo cho phù hợp.
                    tốt nhất là port nào cũng treo như port 0 cho khỏe

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    • vi van pham
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi vi van pham
                      Cám ơn những lời chúc tốt đẹp của em.

                      Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                      Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                      hôm nay, 02:00
                    • nhathung1101
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi nhathung1101
                      Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                      Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                      Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                      Hôm qua, 22:18
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                      Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                      Hôm qua, 14:51
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                      Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                      Hôm qua, 14:39
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                      Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                      Hôm qua, 14:28
                    • bqviet
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi bqviet
                      Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                      21-02-2025, 20:26
                    • mèomướp
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi mèomướp
                      Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                      21-02-2025, 12:32
                    • vi van pham
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi vi van pham
                      Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                      Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                      20-02-2025, 21:31
                    • bqviet
                      Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                      bởi bqviet
                      Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                      20-02-2025, 17:22
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.

                      Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...
                      20-02-2025, 11:52
                    Đang tải...
                    X