Chia sẻ bộ khống chế nhiệt độ

Thảo luận trong 'Họ 8051'

Đang xem chủ đề này ( Thành viên: 0, Khách: 1)

  1. thai duong

    thai duong Học sinh trung cấp

    Tham gia ngày:
    2/12/14
    Bài viết:
    85
    Đã được thích:
    20
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Chào bạn tdm.
    Mình đang tập viết code và đang làm mạch giống bạn nhưng đến đây ko biết bị gì, nhờ bạn xem giúp mình, mình gửi file code và mô phỏng. thanks bạn.
     

    Các file đính kèm:

  2. tdm

    tdm Kỹ sư

    Tham gia ngày:
    1/9/12
    Bài viết:
    459
    Đã được thích:
    428
    Điểm thành tích:
    63
    Giới tính:
    Nam
    bạn gửi thẳng code lên đây.
     
  3. thai duong

    thai duong Học sinh trung cấp

    Tham gia ngày:
    2/12/14
    Bài viết:
    85
    Đã được thích:
    20
    Điểm thành tích:
    8
    Giới tính:
    Nam
    CODE :
    Mã:
    #include<reg52.h>
    #include<stdio.h>
    #include<math.h>
    sbit den_do=P2^3;
    sbit den_vang=P2^1;
    sbit den_xanh=P2^2;
    sbit DQ = P3^7;
    sbit led1 = P2^4;
    sbit led2 = P2^5;
    sbit led3 = P2^6;
    sbit led4 = P2^7;
    
    unsigned int temp,i;
    unsigned int set_t=30;
    unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
    unsigned char donvi,chuc ;
    
    void tre(unsigned int t)
      {
    for(i=1;i<=t;++i);
      }
    void delay_18B20(unsigned int i)
    {
        while(i--);
    }
    //========================
    //=KHOI TAO CAM BIEN
    void Init_DS18B20()
    {
         unsigned char x=0;
         DQ = 1;
         delay_18B20(8);
         DQ = 0;
         delay_18B20(80);
         DQ = 1;
         delay_18B20(14);
         x=DQ;
         delay_18B20(20);
    }
    //=DOC MOT BYTE 
    ReadOneChar(void)
    {
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
         {
              DQ = 0; //CHO DUONG DQ XUONG MUC THAP
              dat>>=1;
              DQ = 1; //CHO DUONG DQ LEN MUC CAO
              if(DQ)
              dat|=0x80;
              delay_18B20(4);
         }
         return(dat);
    }
    //========================
    //=CHUONG TRINH GHI 1BYTE
    void WriteOneChar(unsigned char dat)
    {
    unsigned char i=0;
    for (i=8; i>0; i--)
    {
      DQ = 0;
      DQ = dat&0x01;
      delay_18B20(5);
      DQ = 1;
      dat>>=1;
    }
    }
    //========================
    //=CHUONG TRINH DOC NHIET DO TU CAM BIEN
    ReadTemperature(void)
    {
        unsigned char a=0;
        unsigned char b=0;
        unsigned int  t=0;
       
        Init_DS18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0x44);
        delay_18B20(100);
        Init_DS18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0xBE);
        a=ReadOneChar();
        b=ReadOneChar();
        t = (b*256+a)*25;   
        return( t >> 2  );
    }
    //========================
    void hienthi(void)
      {     temp=ReadTemperature();
      chuc=(temp)/10;  // tach lay hang chuc
      donvi=(temp)%10;  // tach lay hang don vi
      led1=1;
      P0=M[chuc];
      tre(800);
      led1=0;
      P0=0xFF;
      led2=1;
      P0=M[donvi];
      tre(800);
      led2=0;
      P0=0xFF;
      }
    
    void ht_dat()
    {
      chuc=(set_t)/10;  // nt
      donvi=(set_t)%10;  //nt
      led3=1;
      P0=M[chuc];
      tre(800);
      led3=0;
      P0=0xFF;
      led4=1;
      P0=M[donvi];
      tre(800);
      led4=0;
      P0=0xFF;
        }
    
    void so_sanh_temp()  // ham so sanh nhiet do
    {
    if(temp==set_t)
    {
    den_vang=0;
    den_do=den_xanh=1;
    }
    else
    if(temp>set_t)
    {
    den_xanh=0;
    den_do=den_vang=1;
    }
    else
    if (temp<set_t)
    {
    den_do=0;
    den_vang=den_xanh=1;
    }
    }
    
    void main ()
    {
    IE=0x85;  // cho phep ngat ngoai 0 va ngat ngoai 1
    IP=0;    // uu tien ngat bang nhau
    IT1=IT0=1;  // ngat theo suon am
    //++++++++++++++++//
    
    den_do=den_vang=den_xanh=1;// tat toan bo den
    while(1)
    {
    temp=ReadTemperature(); // gan gia tri chuyen doi vao bien temp
    hienthi();
    ht_dat();
    so_sanh_temp();
    }
    }
    
    void ngat_int0() interrupt 0  // ham ngat ngoai 0
    {
    tre(50); // chong rung phim
    set_t++;
    }
    
    void ngat_int1() interrupt 2  // ham ngat ngoai 1
    {
    tre(50);  // chong rung phim
    set_t--;
    }
     
  4. tdm

    tdm Kỹ sư

    Tham gia ngày:
    1/9/12
    Bài viết:
    459
    Đã được thích:
    428
    Điểm thành tích:
    63
    Giới tính:
    Nam
    code còn nhiều vấn đề ,trước mắt sửa tạm cho bạn như vậy đã.
    bạn viết thêm chỗ gợi ý trong code.

    Mã:
    #include<reg52.h>
    #include<stdio.h>
    #include<math.h>
    sbit den_do=P2^3;
    sbit den_vang=P2^1;
    sbit den_xanh=P2^2;
    sbit DQ = P3^7;
    sbit led1 = P2^4;
    sbit led2 = P2^5;
    sbit led3 = P2^6;
    sbit led4 = P2^7;
    
    unsigned int temp,i;
    unsigned int set_t=30;
    unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
    unsigned char donvi,chuc ;
    
    void tre(unsigned int t)
      {
    for(i=1;i<=t;++i);
      }
    void delay_18B20(unsigned int i)
    {
        while(i--);
    }
    //========================
    //=KHOI TAO CAM BIEN
    void Init_DS18B20() 
    {
         unsigned char x=0;
         DQ = 1;
         delay_18B20(8); 
         DQ = 0;
         delay_18B20(80);
         DQ = 1;
         delay_18B20(14);
         x=DQ; 
         delay_18B20(20);
    }
    //=DOC MOT BYTE  
    ReadOneChar(void)
    {
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
         {
              DQ = 0; //CHO DUONG DQ XUONG MUC THAP
              dat>>=1;
              DQ = 1; //CHO DUONG DQ LEN MUC CAO
              if(DQ)
              dat|=0x80;
              delay_18B20(4);
         }
         return(dat);
    }
    //========================
    //=CHUONG TRINH GHI 1BYTE 
    void WriteOneChar(unsigned char dat)
    {
     unsigned char i=0;
     for (i=8; i>0; i--)
     {
      DQ = 0;
      DQ = dat&0x01;
      delay_18B20(5);
      DQ = 1;
      dat>>=1;
     }
    }
    //========================
    //=CHUONG TRINH DOC NHIET DO TU CAM BIEN
     unsigned int ReadTemperature(void)
    {
        unsigned char a=0;
        unsigned char b=0;
        unsigned int  t=0;
       
        Init_DS18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0x44);
      //  delay_18B20(100);
        Init_DS18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0xBE);
        a=ReadOneChar();
        b=ReadOneChar();
        t = b ;    t<<=8;    t=t|a;     //????????????????
              t =t/16;           //???????????????? lay phan nguyen
        return t ;
    }
    //========================
    void hienthi(void)
      {    temp=ReadTemperature();
      chuc=(temp)/10;  // tach lay hang chuc
      donvi=(temp)%10;  // tach lay hang don vi
      led1=1;
      P0=M[donvi];    //????????????????
      tre(800);
      led1=0;
      P0=0xFF;
      led2=1;
      P0=M[chuc];    //??????????????????
      tre(800);
      led2=0;
      P0=0xFF;
      }
    
    void ht_dat()
    {
      chuc=(set_t)/10;  // nt
      donvi=(set_t)%10;  //nt
      led3=1;
      P0=M[chuc];
      tre(800);
      led3=0;
      P0=0xFF;
      led4=1;
      P0=M[donvi];
      tre(800);
      led4=0;
      P0=0xFF;
        }
    
    void so_sanh_temp()  // ham so sanh nhiet do
    {
    if(temp==set_t)
    {
    den_vang=0;
    den_do=den_xanh=1;
    }
    else
    if(temp>set_t)
    {
    den_xanh=0;
    den_do=den_vang=1;
    }
    else
    if (temp<set_t)
    {
    den_do=0;
    den_vang=den_xanh=1;
    }
    }
    
    void main ()
    {
    IE=0x85;  // cho phep ngat ngoai 0 va ngat ngoai 1
    IP=0;    // uu tien ngat bang nhau
    IT1=IT0=1;  // ngat theo suon am
    //++++++++++++++++//
    
    den_do=den_vang=den_xanh=1;// tat toan bo den
    while(1)
    {
    temp=ReadTemperature(); // gan gia tri chuyen doi vao bien temp
    hienthi();
    ht_dat();
    so_sanh_temp();
    }
    }
    
    void ngat_int0() interrupt 0  // ham ngat ngoai 0
    {
    tre(50); // chong rung phim
    set_t++;
    ///phai gioi han gia tri tang 
    
    }
    
    void ngat_int1() interrupt 2  // ham ngat ngoai 1
    {
    tre(50);  // chong rung phim
    set_t--;
    //phai gioi han gia tri giam
    }
     
    thai duong thích bài này.
  5. thai duong

    thai duong Học sinh trung cấp

    Tham gia ngày:
    2/12/14
    Bài viết:
    85
    Đã được thích:
    20
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Thanks bạn đã xem qua, để mình thử rồi trả lời bạn sau.
     
  6. thai duong

    thai duong Học sinh trung cấp

    Tham gia ngày:
    2/12/14
    Bài viết:
    85
    Đã được thích:
    20
    Điểm thành tích:
    8
    Giới tính:
    Nam
    thanks bạn tdm nhiều, mạch đã chạy ok, và nhờ bạn chỉ cho mình cách lưu nhiệt độ cài đặt vào chip 24c04 được ko?
     
  7. phongk9a1

    phongk9a1 Học sinh phổ thông

    Tham gia ngày:
    20/10/14
    Bài viết:
    28
    Đã được thích:
    4
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    sinh viên
    Nơi ở:
    -tiên lãng-hải phòng
    không biết em hỏi câu này có ngu không
    anh cho em hỏi mạch này áp dụng vào việc gì vậy
     
  8. thai duong

    thai duong Học sinh trung cấp

    Tham gia ngày:
    2/12/14
    Bài viết:
    85
    Đã được thích:
    20
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Không biết do mạch hay do code mà cho mạch chạy khoảng 4 ngày là con 24c04 bị chết, mình thay con này lần thứ 3 rồi, ko biết như thế nào nhờ bạn tdm k.tra giùm mình được ko? thanks bạn.
     
  9. tdm

    tdm Kỹ sư

    Tham gia ngày:
    1/9/12
    Bài viết:
    459
    Đã được thích:
    428
    Điểm thành tích:
    63
    Giới tính:
    Nam
    1:nạp thử file này cứu mấy con 24xx đã nhé.
    2:nạp lại file cũ chạy thử.
     

    Các file đính kèm:

    • 24xx.rar
      Kích thước:
      1.5 KB
      Đọc:
      50
    thai duong thích bài này.
  10. thai duong

    thai duong Học sinh trung cấp

    Tham gia ngày:
    2/12/14
    Bài viết:
    85
    Đã được thích:
    20
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Nạp file hex này vào con 24c04 hả bạn, mình nạp vào ko được bạn à ... bạn hướng dẫn lại giùm nha.
     

Chia sẻ trang này