Giup!!!!
xoa doan khoi tao nap vao chay binh thuong.Nhung tat nguon wa ngay sao cap nguon lai no laj nhay lun tung lai fai khoi tao lai thi no moi chay.minh co su dung pin cmos lam nguon nuoi rui.
Co ban noi the nay:
bẫy DS : Đặt lệnh ghi vào d/c 0x08 ngay trong hàm khởi tạo DS.
Trong hàm Main() thì kiểm tra lại d/c 0x08 xem có còn duy trì giá trị đó không. Nếu không còn tức là các thông số thời giờ trong DS cũng đã sai, phải cho khởi tạo lại DS. Nếu còn thì bỏ qua bước khởi tạo
READ_DS(); //Đọc ds1307, có đọc X = giá trị lưu tại 0x08 (0x08 chứa 0xff)
if (X != 0xff) SET_DS(); //Nếu khác 0xff thì Khởi tạo DS1307, có ghi vào 0x08 giá trị 0xff
---------------------------------------------------------------------
VD:
void RTC_init()
{
unsigned char i,RTC_flag;
// dat ba^~y DS1307
RTC_flag = RTC_get(0x08); // doc gia tri tại địa chỉ 0x08 của DS1307 .
if(RTCflag!=0xFF) // neu ko phai 0xFF
{
RTC_setdate(0x21,0x07,0x08); // thi khoi tao gia tri cho DS1307
RTC_settime(0x14,0x30,0x00);
Soft_I2C_Start(); // dat cau hinh cho DS
Soft_I2C_Write(RTC_ID);
Soft_I2C_Write(0x07); //dat con tro tai vi tri nay
Soft_I2C_Write(0x10); // tao xung 1Hz tai chan so 7.
Soft_I2C_Write(0xFF); // ghi giá trị 0xFF vào ô nhớ có địa chỉ 0x08;
Soft_I2C_Stop();
}
}
với các hàm do người dùng tự định nghĩa (nếu nắm được nguyên tắc I2C thì thật dễ dàng):
unsigned char RTC_get(unsigned char addr);
RTC_settime(unsigned char hh, unsigned char mm, unsigned char ss);
RTC_setdate(unsigned char dd, unsigned char mm, unsigned char yy);
- khi đó, trong hàm main():
void main()
{
// thiet lap PORT cho PIC
// thiet lap gia tri cho cac thanh ghi chuc nang khac, v.v...
RTC_init(); // goi ham khoi tao DS1307 - da co "trap".
// cac ham khac ....
while (1)
{
// hien thi hoac cac cong viec khac....
}
}
minh k hieu lam co ai giup minh voi!!!!!!!!!!!!!!!!!!!!
|