PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 03-01-2010, 06:58 PM   #1
motu
Đệ tử 4 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 79
:
Đồ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ẻ!
motu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-01-2010, 11:17 PM   #2
nghia_tdh21
Đệ tử 3 túi
 
nghia_tdh21's Avatar
 
Tham gia ngày: Oct 2006
Bài gửi: 46
:
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
__________________
http://www.hieunghia.info
Lướt web thoải mái với USB3G của Viettel
http://www.hieunghia.info/tin-cong-n...3g-vietel.html
-----------------------------------------------------------------------------------
Một chút giận,hai chút tham,lận đận cả đời ri cũng khổ.
Trăm điều lành,ngàn điều nhịn,thong dong tấc dạ rứa mà vui
nghia_tdh21 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-01-2010, 02:56 PM   #3
thientaisodo
Đệ tử 4 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Tĩnh - Hà Nội
Bài gửi: 61
:
Send a message via Yahoo to thientaisodo
Trích:
Nguyên văn bởi motu View Post
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ó
thientaisodo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2010, 12:18 AM   #4
thuong008
Nhập môn đệ tử
 
thuong008's Avatar
 
Tham gia ngày: Apr 2009
Bài gửi: 6
:
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.
thuong008 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-01-2010, 10:32 AM   #5
motu
Đệ tử 4 túi
 
Tham gia ngày: Oct 2007
Bài gửi: 79
:
Đã giải quyết được vấn đề. THk mọi người rất nhiều.
motu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam