老古开发网首页
导航:老古开发网首页文章索引索引第2105页文章分类单片机第42页→[DS1302读写一体化C51源程序 (由hotpower撰写)]
| -文章搜索 - 最新文章 - |

第2674篇:DS1302读写一体化C51源程序 (由hotpower撰写)

发布时间:2006年8月1日 点击次数:1596
来源:   作者:
 
DS1302读写一体化C51源程序 (hotpower)
 

/*----------------------------------------------
DS1302读写一体化C51源程序 
HotPower@126.com
------------------------------------------------*/
//打开DS1302
void TimeSpiOpen(void)
{
  TIMECLK = 0;
  TIMERST = 0;//禁止DS1302
  TIMEIO  = 1;//释放数据总线
  TIMERST = 1;//使能DS1302
}

//关闭DS1302
void TimeSpiClose(void)
{
  TIMERST = 0;//禁止DS1302
  TIMEIO  = 1;//释放数据总线
  TIMECLK = 1;
}
//读写DS1302
unsigned char TimeSpiReadWrite(unsigned char val)
{
unsigned char i;
  ACC = val;//取8位数据
  for (i = 8;i > 0; i--)
  {
    TIMECLK = 0;//时钟下降沿输入数据(DS1302读)
    _nop_();//延时
    CY = TIMEIO;//接收串行数据到CY
    _rrca_();//右移一位数据到CY(先存后取)
    TIMEIO = CY;//发送串行数据
    TIMECLK = 1;//时钟上升沿打入数据(DS1302写)
    TIMEIO  = 1;//释放数据总线
  }
  val = ACC;
  return val;
}

//读DS1302字节
unsigned char TimeByteRead(unsigned char address)
{
  TimeSpiOpen();//打开DS1302
  TimeSpiReadWrite(address);//写入DS1302命令
  address = TimeSpiReadWrite(0xff);//读入DS1302数据
  TimeSpiClose();//关闭DS1302
  return address;//返回数据
}

//读DS1302RAM字节
unsigned char TimeRamByteRead(unsigned char address)
{
  TimeSpiOpen();//打开DS1302
  TimeSpiReadWrite((address << 1)   0xc1);//写入DS1302命令
  address = TimeSpiReadWrite(0xff);//读入DS1302数据
  TimeSpiClose();//关闭DS1302
  return address;//返回数据
}


//写DS1302字节
void TimeByteWrite(unsigned char address, unsigned char val)
{
  TimeSpiOpen();//打开DS1302
  TimeSpiReadWrite(address);//写地址
  TimeSpiReadWrite(val);//写数据
  TimeSpiClose();//关闭DS1302
}

//写DS1302字节
void TimeRamByteWrite(unsigned char address, unsigned char val)
{
  TimeSpiOpen();//打开DS1302
  TimeSpiReadWrite((address << 1)   0xc0);//写地址
  TimeSpiReadWrite(val);//写数据
  TimeSpiClose();//关闭DS1302
}

//使能DS1302写保护
void TimeWriteEnable(void)
{
  TimeByteWrite(timewriteregall, timewriteseg);//使能DS1302写保护
}

//开放DS1302写保护
void TimeWrieDisbale(void)
{
  TimeByteWrite(timewriteregall, 0);//开放DS1302写保护
}

//DS1302工作开始
void TimeWorkStart(void)
{
unsigned char val;
  val = TimeByteRead(timereadseg);//读秒数据
  val &= 0x7f;//打开晶振
  TimeWrieDisbale();//开放DS1302写保护
  TimeByteWrite(timewriteseg, val);//打开晶振
  TimeByteWrite(tricklewrite, 0xa5);//打开充电二极管
  TimeWriteEnable();//使能DS1302写保护
}
 

欢迎进入老古论坛进行讨论
[单片机] 相关文章:
TI TLC1543 10位AD驱动程序
简介:
/*------------------------------------------------------------------------------ -- 调用方式:uint read1543(uchar port) 函数说明:read1543()返回10位AD芯片TLC1543的port通道采样值。 -------------------------------------------------------------------------------- ......

按键扫描驱动程序
430内部flash操作程序
用2051的比较器模拟AD
at89c2051串口带校验输入指令最高数率并行输出数据.
 
下一个:[单片机]高效可移植程序的一些习惯
简介:
高效可移植程序的一些习惯 这些都是本人的一些个人习惯,也许读者并不认同。 首先介绍两个大师提出的习惯,而我深感认同的。 对于一些状态的集合,尽可能使用enum而不是#define 来定义。 如: enum {OFF = 0, ON = 1}; 远比 #define OFF 0 #define ON 1 好。 两种写法编译的效果是一样的,但是写......

上一个:[单片机]1621驱动程序

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
2008-7-5 10:20:28 页面缓存:30分钟 执行时间:31毫秒