Tình hình là em đa sử dụng WINAVR để nạp cho AVR. Và em cũng đa nghiên cứu con DS1307. Search google thì thấy có thư viện DS1307.h có sẵn các hàm thao tác với Chip này. Nhưng mà tìm hoài trong thư mục chứa thư viện của WINAVR ko thấy có. Hình như là phải dùng trình nạp Codevision AVR mới có thư viện này đúng ko ạ. Cho em hỏi là em nếu em chép thư viện này qua WINAVR có chạy dc ko ạ. Nếu được thì bác nào cho em xin thư viện này nhá
Thông báo
Collapse
No announcement yet.
Thư viện DS1307.h
Collapse
X
-
có thể viết một thư viện co nó rồi add vào mục cài đặt đo, sau này code thì add vào và thao tác thôi, có thể tham khảo thư viện ds1307 của codevision rồi viết theo đúng cú pháp của winavr
đây là lib của nó trong cv
bạn dùng cv thì bản 2.5 trở lên phải ***** mới có hỗ trợ ds1307
chúc thành công
Code:/* CodeVisionAVR C Compiler (C) 1998-2010 Pavel Haiduc, HP InfoTech S.R.L. Dallas Semiconductors DS1307 I2C Bus Real Time Clock functions */ #include <bcd.h> #ifdef _ATXMEGA_DEVICE_ #include <twix.h> static TWI_MASTER_INFO_t *ptwi_master; void ds1307_twi_init(TWI_MASTER_INFO_t *ptwim) { ptwi_master=ptwim; } unsigned char rtc_read(unsigned char address) { unsigned char r; twi_master_trans(ptwi_master,0xd0>>1,&address,1,&r,1); return r; } void rtc_write(unsigned char address,unsigned char data) { unsigned char w[2]; w[0]=address; w[1]=data; twi_master_trans(ptwi_master,0xd0>>1,w,2,NULL,0); } void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out) { unsigned char w[2]; rs&=3; if (sqwe) rs|=0x10; if (out) rs|=0x80; w[0]=7; w[1]=rs; twi_master_trans(ptwi_master,0xd0>>1,w,2,NULL,0); } void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec) { unsigned char w=0,r[3]; twi_master_trans(ptwi_master,0xd0>>1,&w,1,r,3); *sec=bcd2bin(r[0]); *min=bcd2bin(r[1]); *hour=bcd2bin(r[2]); } void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec) { unsigned char w[4]; w[0]=0; w[1]=bin2bcd(sec); w[2]=bin2bcd(min); w[3]=bin2bcd(hour); twi_master_trans(ptwi_master,0xd0>>1,w,4,NULL,0); } void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year) { unsigned char w=4,r[3]; twi_master_trans(ptwi_master,0xd0>>1,&w,1,r,3); *date=bcd2bin(r[0]); *month=bcd2bin(r[1]); *year=bcd2bin(r[2]); } void rtc_set_date(unsigned char date,unsigned char month,unsigned char year) { unsigned char w[4]; w[0]=4; w[1]=bin2bcd(date); w[2]=bin2bcd(month); w[3]=bin2bcd(year); twi_master_trans(ptwi_master,0xd0>>1,w,4,NULL,0); } #else #include <i2c.h> unsigned char rtc_read(unsigned char address) { unsigned char data; i2c_start(); i2c_write(0xd0); i2c_write(address); i2c_start(); i2c_write(0xd1); data=i2c_read(0); i2c_stop(); return data; } void rtc_write(unsigned char address,unsigned char data) { i2c_start(); i2c_write(0xd0); i2c_write(address); i2c_write(data); i2c_stop(); } void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out) { rs&=3; if (sqwe) rs|=0x10; if (out) rs|=0x80; i2c_start(); i2c_write(0xd0); i2c_write(7); i2c_write(rs); i2c_stop(); } void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec) { i2c_start(); i2c_write(0xd0); i2c_write(0); i2c_start(); i2c_write(0xd1); *sec=bcd2bin(i2c_read(1)); *min=bcd2bin(i2c_read(1)); *hour=bcd2bin(i2c_read(0)); i2c_stop(); } void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec) { i2c_start(); i2c_write(0xd0); i2c_write(0); i2c_write(bin2bcd(sec)); i2c_write(bin2bcd(min)); i2c_write(bin2bcd(hour)); i2c_stop(); } void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year) { i2c_start(); i2c_write(0xd0); i2c_write(4); i2c_start(); i2c_write(0xd1); *date=bcd2bin(i2c_read(1)); *month=bcd2bin(i2c_read(1)); *year=bcd2bin(i2c_read(0)); i2c_stop(); } void rtc_set_date(unsigned char date,unsigned char month,unsigned char year) { i2c_start(); i2c_write(0xd0); i2c_write(4); i2c_write(bin2bcd(date)); i2c_write(bin2bcd(month)); i2c_write(bin2bcd(year)); i2c_stop(); } #endif
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi bqvietBqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
-
Channel: Thiết bị điện tử cá nhân
06-12-2025, 17:17 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
05-12-2025, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -

Comment