📄 sd2003.h
字号:
#ifndef _DF_SD2003_C
#define _DF_SD2003_C
sbit SDA_SD2003 = P1^6;
sbit SCL_SD2003 = P1^7;
#define FIRMWARE_SR 0x61
#define FIRMWARE_SW 0x60
//COMMAND BYTE
#define RE_STRAT 00
#define READ_STATUS 01
#define READ_YEAR 02
#define READ_TIME 03
#define INT1_DATA 04
#define INT2_DATA 05
#define TEST_START 06
#define TEST_END 07
extern void ini_SD2003(void);
extern bit mend_scl_SD2003(void);
extern bit start_bit_SD2003(void);
extern void stop_bit_SD2003(void);
extern void ack_SD2003(void);
extern void no_ack_SD2003(void);
extern void mast_ack_SD2003(void);
extern void write_8bit_SD2003(UCHAR ch);
extern UCHAR Read_8bit_SD2003(void);
extern void write_8bit_SD2003_R(UCHAR ch);
extern UCHAR Read_8bit_SD2003_R(void);
extern bit Readblock_SD2003(UCHAR ucommand,UCHAR *p);
extern bit Writeblock_SD2003(UCHAR ucommand,UCHAR *p);
#endif
/*
(1) 实时数据寄存器
实时数据寄存器是一个56 位的存储器,它以BCD 码方式存贮,包括年、月、日、
星期、时、分、秒的数据。实时数据的读/写操作都通过发送或接收年(实时数据读写方式
1)或小时(实时数据读写方式2)数据的第一位“LSB”开始执行的。
年数据(00~99):设置最后两位数字
(00~99),通过自动日历功能计至2099
年。
月数据(01~12)每月包含天数通过自
动日历功能来更改。
1,3,5,7,8,10,12: 1~31
4,6,9,11: 1~30
2(闰年):1~29
2(普通):1~28
日数据(01~31)
星期数据(00~06):七进制计数器, 00
对应星期天,01 对应星期一,依次类推.
小时数据(00~23 或00~11) 12 小时
进制0:AM,1:PM 对于24
小时进制,这一位没有意义但芯片内部
必须将其设置为“0”或”1”
分数据(00~59)
秒数据(00~59)与测试标志
TEST 位:在测试模式变为”1”
图6 实时时钟实时数据寄存器
特别注意:在24 小时制式下,读取实时数据时一定要屏蔽小时的最高位(MSB)至0.
深圳市兴威帆电子技术有限公司 http://www.whwave.com.cn TEL:0755-83220794 FAX:83225561
(2) 状态寄存器
状态寄存器是一个8 位寄存器,它允许你用来显示和设置不同的模式,其中“Power”
是只读位,其它均可读/写。
图7 实时时钟状态寄存器
B7 Power 在上电时或在电源电压改变时(小于VDET),电源电压检测电路工作,此位置为”1”。该
位一旦置为 “1”,即使电源电压达到或超过检测电压,此位也不会变为“0”,而必须通过操作指
令中的复位命令才能使之复“0”。本标志位为只读位。
B6 12/24:本标志用于设置12 小时制或24 小时制:
0:(12 小时制);
1:(24 小时制)
B5 INT1AE;B4 INT2AE:此位用于设置从INT1 脚(或INT2 脚)输出的报警中断的状态。通过INT1
(INT2)寄存器来设置报警时间。
0:报警中断输出禁止;
1:报警中断输出允许。
B3 INT1ME;B2 INT2ME:此位用于设置从INT1 脚(或INT2 脚)的输出为每分钟边沿中断或每分
钟固定中断。如设为每分钟固定中断输出,需将INT1ME 和INT1FE(或INT2ME 和INT2FE)均
置为1。
0:报警中断或可选频率的固定中断输出;
1:每分钟边沿中断或每分钟固定中断输出
B1 INT1FE;B0 INT2FE:此位用于设定INT1 脚(或INT2 脚)的输出为每分钟固定中断(周期一分钟,
占空比50%)或可选频率的固定中断。如果可选频率的固定中断输出被允许时,INT1 寄存器(或INT2
寄存器)是用来存放频率数据的寄存器。
0:报警中断或每分钟边沿中断输出;
1:每分钟固定中断输出或可选频率的固定中断输出
(3)两组报警时间/可选频率设置寄存器
有两组16 位报警时间/可选频率设置寄存器,用于设置报警时间或可选频率,它们由
INTxAE 与INTxFE 控制。其中寄存器上的AM/PM 标志位必须同12 小时制或24 小时制
相对应,否则设定的小时数将与报警数据不匹配。该寄存器为只写寄存器。
A. INTxAE=1 时,
INT1 和INT2 寄存器用来存放报警时间数据,其格式用BCD 码代表小时与分钟,与实时
数据寄存器中的小时和分钟寄存器设置相同。同样,数据设置必须与在状态寄存器中的12
小时制或24 小时制一致,不要设置任何不存在的时间。
*/
#ifdef _DF_SD2003_
UCHAR idata untimes[8];
UCHAR code sd2003commandstring[] = {0,1,7,3,2,2,0,0};
//void ini_SD2003(void);
//bit mend_scl_SD2003(void);
//bit start_bit_SD2003(void);
//void stop_bit_SD2003(void);
//void ack_SD2003(void);
//void no_ack_SD2003(void);
//void mast_ack_SD2003(void);
//void write_8bit_SD2003(UCHAR ch);
//UCHAR Read_8bit_SD2003(void);
//void write_8bit_SD2003_R(UCHAR ch);
//UCHAR Read_8bit_SD2003_R(void);
////UCHAR Read_SD2003(UCHAR ucommand);
////UINT Readint_SD2003(UCHAR ucommand);
//bit Readblock_SD2003(UCHAR ucommand,UCHAR *p);
//bit Writeblock_SD2003(UCHAR ucommand,UCHAR *p);
////bit Write_SD2003(UCHAR ucommand,UCHAR ddata);
////bit Writeint_SD2003(UCHAR ucommand,UINT ddata);
#else
extern UCHAR idata untimes[8];
extern UCHAR code sd2003commandstring[];
#endif
//表3 实时时钟指令表
//C2 C1 C0 操作 ACK数目
//0 0 0 复位(00(年),01(月),01(天),0(星期)00(分),
//00(秒)(*1)
//1
//0 0 1 状态寄存器存取 2
//0 1 0 实时数据读写方式1(从年数据开始) 8
//0 1 1 实时数据读写方式2(从小时数据开始) 4
//1 0 0 报警中断/频率设置1(INT1 脚) 3
//1 0 1 报警中断/频率设置2(INT2 脚) 3
//1 1 0 测试模式开始(*2) 1
//1 1 1 测试模式结束(*2) 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -