PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Đồng hồ dùng DS1307 cầu cứu... (http://www.picvietnam.com/forum/showthread.php?t=5678)

motu 03-01-2010 06:58 PM

Đồng hồ dùng DS1307 cầu cứu...
 
Mình đang test mạch đồng hồ chạy DS1307 theo tut trên PICVIETNAM nhưng không hiểu ý nghĩa đoạn mã sau:
Code:

#INT_EXT
void khoitao()             
  {         
      /*--------- khoi tao hien thi ban dau : SAT, 21-06-2008, 02:25:00 AM --------*/
      second = 0;                  //giay:  00.
      minute = 25;                  //phut:  25.
      hour  = 2;                  //gio:  02 (che do 24h).
      day    =  6;                  //thu 7:  SAT (SATUDAY).
      date  = 21;                  //ngay:  21.
      month  =  6;                  //thang: 06.
      year  =  8;                  //nam:  08.
     
      i2c_start();
      i2c_write(0xD0);              //den dia chi ds1307.
      i2c_write(0x00);              //den dia chi thanh ghi 00H.
      i2c_write(write(second));     
      i2c_write(write(minute));     
      i2c_write(write(hour));       
      i2c_write(write(day));       
      i2c_write(write(date));       
      i2c_write(write(month));     
      i2c_write(write(year));       
      i2c_start();
      i2c_write(0xD0);
      i2c_write(0x07);              //den thanh ghi dieu khien.
      i2c_write(0x10);              //tao xung vuong 1Hz.
      i2c_stop();
  }

để đoạn mã trên thì lúc dịch CCS báo:
>>>Warning 216 "code.c" Line210(0,1):Interrupts disabled during call to prevent re-entrancy: (@MUL88)
>>>Warning 216 "code.c" Line210(0,1):Interrupts disabled during call to prevent re-entrancy: (@DIV88)
>>>Warning 216 "code.c" Line210(0,1):Interrupts disabled during call to prevent re-entrancy: (@2C_WRITEU_1)

Mạch không chạy, bỏ đoạn mã đi thì CCS không báo gì, mạch chạy mới chết chứ, anh e nào từng viết code cho DS1307 giúp mình với.
Nhân tiện cho mình hỏi, mình đang làm cái đồng hồ hẹn giờ tắt mở đèn cho hồ cá, không biết các giá trị thời gian tắt, mở đèn có thể lưu ở đâu để cúp điện không mất dữ liệu, mình thấy trong con DS1307 từ địa chỉ 08h trở đi là RAM không biết sử dụng nó được không.
Chúc cả nhà cuối tuần vui vẻ!

nghia_tdh21 05-01-2010 11:17 PM

CCS hiển thị thông báo như vậy là do có một số hàm vừa dùng trong ngắt vừa dùng trong hàm main.
Bạn có thể lưu giá trị thời gian tắt mở trong bộ nhớ EEPROM của pic, hoặc lưu trong bộ nhớ ram của ds1307 (từ địa chỉ 08h trở đi) với điều kiện bạn phải có nguồn nuôi cho ds1307

thientaisodo 06-01-2010 02:56 PM

Trích:

Nguyên văn bởi motu (Post 32792)
Mình đang test mạch đồng hồ chạy DS1307 theo tut trên PICVIETNAM nhưng không hiểu ý nghĩa đoạn mã sau:
Code:

#INT_EXT
void khoitao()             
  {         
      /*--------- khoi tao hien thi ban dau : SAT, 21-06-2008, 02:25:00 AM --------*/
      second = 0;                  //giay:  00.
      minute = 25;                  //phut:  25.
      hour  = 2;                  //gio:  02 (che do 24h).
      day    =  6;                  //thu 7:  SAT (SATUDAY).
      date  = 21;                  //ngay:  21.
      month  =  6;                  //thang: 06.
      year  =  8;                  //nam:  08.
     
      i2c_start();
      i2c_write(0xD0);              //den dia chi ds1307.
      i2c_write(0x00);              //den dia chi thanh ghi 00H.
      i2c_write(write(second));     
      i2c_write(write(minute));     
      i2c_write(write(hour));       
      i2c_write(write(day));       
      i2c_write(write(date));       
      i2c_write(write(month));     
      i2c_write(write(year));       
      i2c_start();
      i2c_write(0xD0);
      i2c_write(0x07);              //den thanh ghi dieu khien.
      i2c_write(0x10);              //tao xung vuong 1Hz.
      i2c_stop();
  }

để đoạn mã trên thì lúc dịch CCS báo:
>>>Warning 216 "code.c" Line210(0,1):Interrupts disabled during call to prevent re-entrancy: (@MUL88)
>>>Warning 216 "code.c" Line210(0,1):Interrupts disabled during call to prevent re-entrancy: (@DIV88)
>>>Warning 216 "code.c" Line210(0,1):Interrupts disabled during call to prevent re-entrancy: (@2C_WRITEU_1)

Mạch không chạy, bỏ đoạn mã đi thì CCS không báo gì, mạch chạy mới chết chứ, anh e nào từng viết code cho DS1307 giúp mình với.
Nhân tiện cho mình hỏi, mình đang làm cái đồng hồ hẹn giờ tắt mở đèn cho hồ cá, không biết các giá trị thời gian tắt, mở đèn có thể lưu ở đâu để cúp điện không mất dữ liệu, mình thấy trong con DS1307 từ địa chỉ 08h trở đi là RAM không biết sử dụng nó được không.
Chúc cả nhà cuối tuần vui vẻ!

Đó là ngắt từ phím bấm bên ngoài để setup time cho ds, nhưng mà khai báo sai rồi, ví dụ
second = 0x00; //giay: 00.
minute = 0x25; //phut: 25.
hour = 0x02; //gio: 02 (che do 24h).
day = 0x07; //thu 7: SAT (SATUDAY).
date = 0x21; //ngay: 21.
month = 0x06; //thang: 06.
year = 0x08; //nam: 08.

nếu muốn khai báo kiểu như bạn thì phải convert từ số DEC sang số BCD.
Còn khi dịch chương trình, bạn chỉ cần quan tâm đến errers thôi, còn các warning thì kệ nó

thuong008 10-01-2010 12:18 AM

bạn có thể lưu trong thanh ghi của DS đó. Còn không cần lưu cũng được cứ đặt trong chương trình lệnh so sánh với thời gian bạn cần tắt bật đó thi vdk đọc tới thời gian đó no sẽ tắt bật cho bạn.

motu 10-01-2010 10:32 AM

Đã giải quyết được vấn đề. THk mọi người rất nhiều.


Múi giờ GMT. Hiện tại là 07:44 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam