View Single Post
Old 18-07-2008, 10:30 AM   #68
minhsondaklak
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 96
:
Khởi tạo ds1307

Trích:
Nguyên văn bởi tinhthanthep View Post
Ban đầu, ds1307 chưa có giá trị nào cả trong các thanh ghi. Vì vậy, việc đầu tiên là phải nạp một giá trị bất kỳ cho các thanh ghi. Chương trình sau sẽ thực hiện công việc này. Sau này , bạn có thể dùng 4 nút bấm để hiệu chỉnh lại thời gian cho đúng với thực tế.

Code:
void INIT_MAIN() {
// Khoi tao truyen thong I2C
  I2C_Init(100000);       // Kích hoạt môddun truyền thông i2c với tốc độ baud là 100kHz
// Khoi tao DS1307
  I2C_Start();    // điều kiện start
  I2C_Wr(0xD0); // truyền địa chỉ của ds1307 và chọn ghi dữ liệu lên ds1307
  I2C_Wr(0x00); // Truyền địa chỉ ô nhớ đầu tiên của ds1307
  I2C_Wr(0x13); // Khoi tao gia tri ban dau cho  thanh ghi giây
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi phút
  I2C_Wr(0x02); // Khoi tao gia tri ban dau cho  thanh ghi giờ
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi thứ
  I2C_Wr(0x05); // Khoi tao gia tri ban dau cho  thanh ghi ngày
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi tháng
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi năm
  I2C_Wr(0x90); // đặt cấu hình cho thanh ghi điều khiển, sử dụng xung 1Hz.
  I2C_Stop();    // Điều kiện stop
}
Chương trình chính
Code:
void MAIN() {
  INIT_MAIN();
}
Chào các huynh !
Theo "lịch vạn niên" của Bác Thép, mình còn thắc mắc 1 điều, nhờ các Huynh xem giúp:
Trong hàm INIT_MAIN() có đoạn khởi tạo cho ds1307 như trên. Như thế cứ mỗi lần con PIC được cấp điện lại (mất điện lưới rồi có lại ấy !) thi đồng hồ lại bị Reset theo giá trị mình khởi tạo ban đầu cho nó. Thế hoá ra mỗi lần như vậy phải đi chỉnh lại giờ cho đồng hồ à !
Hay phải xử lý thế nào đây ? mong các Huynh chỉ giúp, xin cám ơn !

thay đổi nội dung bởi: minhsondaklak, 18-07-2008 lúc 10:43 AM. Lý do: lỗi chính tả
minhsondaklak vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn