View Single Post
Old 27-09-2010, 08:08 PM   #3
xungba22
Đệ tử 1 túi
 
Tham gia ngày: Dec 2009
Bài gửi: 11
:
Smile 16f877a

Ngôn ngữ viết là CCS.
Bài lập trình bạn poss lên đậy rất dài, khộng thể giải thích hết được, chỉ có thể giải thích phần nào bạn chưa hiểu thôi.
Mình có làm một bài giống hệt bài của bạn rồi, nhưng cách lập trình của mình khác với bài bạn poss ở đây.
Mình có một số gợi ý cho bạn như sau:
-Tìm hiểu về CCS.
-Tìm hiểu về DS1307.
-Lập trình thì phải chia nhỏ ra mà viết. Trong main chỉ để khai báo I/O với lải gọi các chương trình con thôi. Muốn làm gì thì viết chương trình con rồi gọi là ok. Viết như vậy thì dễ sửa, nhìn phần cứng(protech) chạy là biết sai ở đâu rồi.

-Cơ bản của bài bạn đưa ở đây gồm những bước sau:
+Khai báo sử dụng giao tiếp I2C:
#USE I2C(MASTER,FAST,SDA=PIN_C4,SCL=PIN_C3)
+Đặt giá trị ban đầu cho DS1307:
VOID INIT_TIME(){
i2c_start();//bắt đầu sử dụng giao tiếp I2C
i2c_write(0xd0);//chọn giao tiếp với ds1307(D0)
i2c_write(0x00);//Bắt đầu ghi từ địa chỉ 0x00
i2c_write(0x00);//giay
i2c_write(0x59);//phút
i2c_write(0x06);//giờ
i2c_write(0x02);//thứ
i2c_write(0x31);//ngày
i2c_write(0x07);//thàng
i2c_write(0x10);//năm
I2C_write(0x90);//tạo tần số 1hz tại chân số 7 của ds1307
i2c_stop();//dòng này ko giải thix chắc bạn cũng biết.
}

+Đọc giá trị từ ds1307 về:
VOID CLOCK()
{
I2C_start();
I2C_write(0xd0);
I2C_write(0x00);
I2C_start();
I2C_write(0xd1);
giay=I2C_read(1);//đọc giá trị giây về thanh ghi Giay//thanh ghi Giay tự khai báo//
phut=I2C_read(1);
gio=I2C_read(1);
thu=I2C_read(1);
ngay=I2C_read(1);
thang=I2C_read(1);
nam=I2C_read(1);
I2C_stop();
+Tách giá trị ra:giá trị đọc về là giá trị BCD.

VOID TACH_LED()
{
Led1=nhietdo/10;
Led2=nhietdo%10;

Led3=giay&0x0f;//hàng đơn vị của giây
Led4=(giay&0xf0)>>4;//Hàng chục của giây

Led5=phut&0x0f;
Led6=(phut&0xf0)>>4;

Led7=gio&0x0f;
Led8=(gio&0xf0)>>4;
}
+Quét led:delay_ms(2)
+Quay về làm lại như cũ nhưng không có cài giờ nha!(đặt chương trình cài giờ ngoài Main).
-Muốn hẹn giờ hay cài lại giờ hẹn thì tự viết thêm. Nếu không viết được pm mail Laivantuynhcddt@gmail.com mình chỉ cho.
xungba22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn