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

    • Andrea14
      Vấn đề về tốc độ quay
      bởi Andrea14
      Chào mọi người,

      Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
      Hôm qua, 12:42
    • bqviet
      Trả lời cho Đấu tắt điện cho máy tính bảng
      bởi bqviet
      Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
      06-12-2025, 17:17
    • nguyendinhvan
      Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
      bởi nguyendinhvan
      Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
      05-12-2025, 19:59
    • afrendly
      Trả lời cho Đấu tắt điện cho máy tính bảng
      bởi afrendly
      Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
      04-12-2025, 01:27
    Đang tải...
    X