马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
作者评论:本程序为时钟芯片DS1302的C语言驱动,任何单片机,MCU都适用,只要修改下
RTC_SCLK,RTC_IO,RTC_CS等位的高低电平的,以及中断禁止、使能的定义即可。
void SendByte_DS1302(char SendData)
{
char clkserialbyte=7;
RTC_SCLK=LOW;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
do
{
if(SendData&0x01)
RTC_IO=HIGH;
else
RTC_IO=LOW;
SendData=SendData>>1;
RTC_SCLK=HIGH;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
RTC_SCLK=LOW;
}while(clkserialbyte--);
}
RecByte_DS1302()
{
char clkserialbyte=7;
char ReadData=0;
RTC_SCLK=LOW;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
do
{
ReadData=ReadData>>1;
if(RTC_IO==1)
RTC_SCLK=HIGH;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
RTC_SCLK=LOW;
}while(clkserialbyte--); // 接收一字节
return(ReadData);
}
char Read_DS1302(char clk_command)
{
_DINT();
RTC_CS=LOW;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
RTC_SCLK=LOW;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
SendByte_DS1302(clk_command);
clk_command=RecByte_DS1302();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
RTC_CS=HIGH;
return(clk_command);
}
void Write_DS1302(char clk_command,char clk_data)
{
_DINT();
RTC_CS=LOW;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
RTC_SCLK=LOW;
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
SendByte_DS1302(clk_command);
SendByte_DS1302(clk_data);
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
RTC_CS=HIGH;
}
// 初始化DS1302芯片
void IniDS1302()
{
Write_DS1302(CmdWrControl,0);
Write_DS1302(CmdWrSec,0);
}
|