Thông báo

Collapse
No announcement yet.

DS1307 của 16F877A, viết bằng CCS HELP!!!

Collapse
This topic is closed.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • DS1307 của 16F877A, viết bằng CCS HELP!!!

    Em đang thử test cái IC thời gian thực qua giao tiếp I2C với 16f877a mà viết CCS sao nó không chạy ấy, viết theo đúng cách các bác bảo rồi mà vẫn không đc.EM chỉ thử hiển thị 2 chữ ssố của giây ra thôi mà vẫn không đc, led hàng chục ở PORTD, led hàng đơn vị ở PORT B, có cả điện trở kéo lên rôi, các bác giúp em với nha, chắc là chỉ sai phần mêm thôi,sợ phần thiết lập giờ sai,hàm thiietlap() ấy,thanks các bác nha
    Code:
    #include <16f877a.h>
    #include <def_877a.h>
    #use delay(clock=20000000)
    #use i2c(Master,Slow,sda=pin_c3,scl=pin_c4)
    #FUSES  NOWDT, HS, NOPROTECT,NOLVP
    
    // khai bao bien
    int8 sec,min,hour,day,date,month,year;
    int8 const a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//dung de ma hoa led 7 doan
    int8 sec1, sec2, min1, min2,hour1, hour2 ,day1,date1,date2,month1,month2,year1,year2,year3,year4;
    void hien_thi();
    void update_time();
    void thiet_lap();
    //Chuong trinh con
    void hien_thi()
    {
    portb=a[sec1];
    portd=a[sec2];
    }
    
    
      void update_time()
    {
    i2c_start();
    i2c_write(0xD0);//thiet lap che do truyen du lieu vao ds1307
    i2c_write(0x00);//thiet lap vi tri con tro
    i2c_stop();
    i2c_start();
    i2c_write(0xd1);//gui lenh doc du lieu
    sec =i2c_read(1);
    min=i2c_read(1);
    hour=i2c_read(1);
    day=i2c_read(1);
    date=i2c_read(1);
    month=i2c_read(1);
    year=i2c_read(0);//so khong o day de vi dieu khien biet day la du lieu cuoi cung doc trong dot nay
    i2c_stop();
    //tach du lieu duoi dang ma bcd tu du lieu nhan duoc tu i2c
    sec1=sec & 0x0F;//hang don vi cua giay nam o 4 ibt thap
    sec2=(sec & 0x70)>>4;//hang chuc nam o 3 bit cao0>5
    min1=min & 0x0F;//hang don vi cua min nam o 4 bit thap
    min2=(min & 0x70)>>4;
    hour1=hour & 0x0F;
    hour2=(hour &0x30)>>4;//hang chuc cua hour=0>>2 nen o 2 bit 4 5
    day1=day & 0x07;
    date1= date & 0x0F;
    date2 = (date & 0x30)>>4;
    month1=month &0x0F;
    month2=(month&0x10)>>4;
    year1=year& 0x0F;
    year2=(year&0xF0)>>4;
    }
    
    
    void thiet_lap()
    {
    int8 data=0;
    i2c_start();
    i2c_write(0xd0);
    i2c_write(0x00);
    
    data=sec1+(sec2<<4);
    data=data&0b01111111;//bit dau =0 la bit CH
    i2c_write(data);
    
    data=min1+(min2<<4);
    i2c_write(data);
    
    data=hour1+(hour2<<4);
    i2c_write(data);
    
    data=day1;
    i2c_write(data);
    
    data=date1+(date2<<4);
    i2c_write(data);
    
    data=month1+(month2<<4);
    i2c_write(data);
    
    data=year1+(year2<<4);
    i2c_write(data);
    
    data=0x00;
    i2c_write(data);
    
    i2c_stop();//ket thuc truyen du lieu cho ds1307
    }
    
    //Chuong trnih chinh
    void main()
    {
    trisb=0x00;
    trisd=0x00;
    sec1=3;sec2=4;min1=1;min2=3;hour1=6;hour2=1;day1=3;date1=3;date2=1;month1=5;month2=0;year1=8;year2=0;
    thiet_lap();
    while(1)
    {
    update_time();
    hien_thi();
    }
    }

  • #2
    Thử xem code này xem. Dùng 876A hiển thị thời gian trong HyperTeminal trên PC qua RS232 chạy tốt nhé.
    Attached Files
    “If you create your own electricity, heating and water systems, you create your own politics. Maybe that’s what they’re afraid of.” –– Michael Reynolds

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    Đang tải...
    X