Thông báo

Collapse
No announcement yet.

8051, 18b20

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

  • 8051, 18b20

    em đang làm bài tập đo nhiệt độ dung 18b20 mà không biết làm thế nào. bác nào có sơ đồ nguyên lý và code C thì cho em tham khảo với ạ.

  • #2
    Nguyên văn bởi banhcay12345 Xem bài viết
    em đang làm bài tập đo nhiệt độ dung 18b20 mà không biết làm thế nào. bác nào có sơ đồ nguyên lý và code C thì cho em tham khảo với ạ.
    Sơ đồ nguyên lý cho bạn : DS18B20 voi AT89C52.pdf

    Code C cho bạn, nhưng mình chỉ viết cho 1 con DS18B20 trên BUS, viết nhiều con bạn tham khảo thêm trên datasheet nhé !


    #define uint unsigned int

    sbit DQ = P2^2;

    unsigned char temp1,chucnhiet, dvnhiet;
    unsigned int temp;

    //----------------------------------------------
    //##################DELAY#######################
    //----------------------------------------------
    void delay1(unsigned char time8us)
    {
    while(time8us--);
    }
    //----------------------------------------------
    //++++++++++++++DS18B20++++++++++++++++++++++++
    //------------------------------------------
    void reset_ds18b20()
    {
    laplai:
    DQ=1;
    delay1(5);
    DQ=0;
    delay1(149); /* 300us */
    delay1(149); /* 300us */
    DQ=1;
    delay1(29);/* 60us */
    delay1(29);
    //if(DQ==1)
    //goto INIT;
    //delay1(119); /* 240us */
    if(DQ==0)
    {
    delay1(119);
    goto laplai;
    }
    delay1(119);
    delay1(119);
    }

    void write_ds18b20(unsigned char j)
    {
    unsigned char k;
    for(k=0;k<8;k++)
    {
    DQ=1;
    delay1(5);
    DQ=0;
    DQ=0;
    DQ=j&0x01;
    delay1(29); /*60us*/
    j=j>>1;
    }
    delay1(4);
    }

    uint read_ds18b20()
    {
    unsigned char j,k=0;
    for(j=0;j<8;j++)
    {
    DQ=0;
    k=k>>1;
    DQ=1; /* male D is input*/
    delay1(6);/* 15us*/
    if(DQ)
    k=k|0x80;
    delay1(22); /*45us*/
    }
    return k;
    }
    void hieu_chinh()//(uint j)
    {
    temp<<=8;
    temp=temp|temp1;
    temp=temp/16;
    //tramnhiet=temp/100;
    chucnhiet=(temp%100)/10;
    dvnhiet=temp%10;
    }
    void xulynhiet_do()
    {
    reset_ds18b20(); //reset DS18b20 de bat dau qua trinh nhan lay nhiet do tu DS18B20
    write_ds18b20(0xcc); //- SKIP ROM (CCh) : Lenh này cho phép thiet bi dieu khien truy nhap thang den các lenh bo nho cua DS1820 mà không can gui chuoi mă 64 bit ROM. Nhu vay se tiet kiem duoc thoi gian cho doi nhung chi mang hieu qua khi trên bus chi có mot cam bien.
    write_ds18b20(0x44); //- CONVERT T (44h) : Lenh này khoi dong mot quá tŕnh do và chuyen doi giá tri nhiet do thành so (nhi phân). Sau khi chuyen doi giá tri ket qua do nhiet do duoc luu tru trên thanh ghi nhiet do 2 byte trong bo nho nháp Thoi gian chuyen doi không quá 200 ms, trong thoi gian dang chuyen doi neu thuc hien lenh doc th́ các giá tri doc ra deu bang 0.
    reset_ds18b20(); //reset DS18b20
    write_ds18b20(0xcc); //- CONVERT T (44h)
    write_ds18b20(0xbe); //- READ SCRATCHPAD (BEh) : Lenh này cho phép thiet bi chu doc noi dung bo nho nháp. Quá tŕnh doc bat dau tu bit có ư nghia nhat cua byte 0 và tiep tuc cho den byte thu 9 (byte 8 - CRC). Thiet bi chu có the xuat ra mot xung reset de làm dung quá tŕnh doc bat ky lúc nào neu nhu chi có mot phan cua du lieu trên bo nho nháp can duoc doc.
    temp1=read_ds18b20();
    temp=read_ds18b20();
    hieu_chinh();
    }
    Last edited by tramng; 21-02-2014, 18:43.

    Comment


    • #3
      thank bạn. để mình thử.bây h mình muốn hiển thị nhiệt độ lên led 7 thanh thì làm thế nào hả bạn.
      Nguyên văn bởi tramng Xem bài viết
      Sơ đồ nguyên lý cho bạn : [ATTACH]82904[/ATTACH]

      Code C cho bạn, nhưng mình chỉ viết cho 1 con DS18B20 trên BUS, viết nhiều con bạn tham khảo thêm trên datasheet nhé !
      Last edited by banhcay12345; 24-02-2014, 12:05.

      Comment


      • #4
        thì ngồi tìm tài liệu mà làm, người ta đã cho đến thế rồi. cho luôn cái tên đề tài lên xin cả cụm cho đỡ mệt....haiz
        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 banhcay12345 Xem bài viết
          thank bạn. để mình thử.bây h mình muốn hiển thị nhiệt độ lên led 7 thanh thì làm thế nào hả bạn.
          Các giá trị nhiệt độ mình đã đưa ra các biến : tramnhiet, chucnhiet, dvnhiet. Bước tiếp theo bạn lập 1 bảng mã 7 đoạn (CA hay CC tùy theo bạn). rồi đưa các giá trị tramnhiet, chucnhiet, dvnhiet này vào bảng mã 7 đoạn, xong xuất chúng ra hiển thị (bằng 7447, 74138, hay 74595 hay quét port tùy theo bạn) !

          Comment


          • #6
            thank bạn.

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X