📄 ds1302.c
字号:
/* DS1302 驱动程序 2005/08/17整理 */
/* DS1302 驱动程序 2006/12/06整理AVR_AFA */
//接口定义
// PD5: RST
// PD6: I/O
// PD7: CLK
unsigned char AA;
/********************************************************************
函 数 名:RTInputByte()
功 能:实时时钟写入一字节
说 明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无
***********************************************************************/
void RTInputByte(unsigned char x) {
unsigned char i;
for (i = 0; i < 8; i ++) {
if (x&(1<<i)) {
PORTD |= (1<<6);
}
else {
PORTD &= ~(1<<6);
}
PORTD |= (1<<7);
PORTD &= ~(1<<7);
}
}
/********************************************************************
函 数 名:RTOutputByte()
功 能:实时时钟读取一字节
说 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无
返 回 值:ACC
***********************************************************************/
unsigned char RTOutputByte(void) {
unsigned char i,k;
DDRD &= ~(1<<6);
for (i = 0; i < 8; i ++) {
k = (PIND & (1<<6)); /*读数据,从低位开始 */
if (k) {
AA|=(1<<i);
}
else {
AA&=~(1<<i);
}
}
PORTD |= (1<<7);
PORTD &= ~(1<<7);
DDRD |= (1<<6);
return AA;
}
/********************************************************************
函 数 名:W1302()
功 能:往DS1302写入数据
说 明:先写地址,后写命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
***********************************************************************/
void W1302(unsigned char ucAddr, unsigned char ucDa) {
PORTD &= ~(1<<5); /* RST to L */
PORTD &= ~(1<<7); /* CLK to L */
PORTD |= (1<<5); /* RST to H */
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucDa); /* 写1Byte数据*/
PORTD |= (1<<7); /* CLK to H */
PORTD &= ~(1<<5); /* RST to L */
}
/********************************************************************
函 数 名:R1302()
功 能:读取DS1302某地址的数据
说 明:先写地址,后读命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
***********************************************************************/
unsigned char R1302(unsigned char ucAddr) {
unsigned char ucData;
PORTD &= ~(1<<5); /* RST to L */
PORTD &= ~(1<<7); /* CLK to L */
PORTD |= (1<<5); /* RST to H */
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
PORTD |= (1<<7); /* CLK to H */
PORTD |= (1<<7);
PORTD &= ~(1<<5); /* RST to L */
return ucData;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -