|
时钟芯片DS1302的C语言驱动 天涯过客 发表于 2005-10-31 9:11:56
作者评论:本程序为时钟芯片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); /* 打开晶振*/
}
|