这是一个子程序,我不明白的就是最后的那个读取七个字节时钟信号的程序,明明TIME数组已经定义了,为什么还要给他赋值,并且给它赋的这是一个什么值,求指教
单片机源程序如下
- #include <ds1302.h>
- uchar code READ_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //ds1302读入地址命令
- uchar code WRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //ds1302写入地址命令
- uchar TIME[7]={0,0,0x12,0x07,0x05,0x06,0x16};
- void Ds1302Write(uchar addr,uchar dat)
- {
- uchar n;
- RST=0;
- _nop_();
- SCLK=0;
- _nop_();
- RST=1;
- _nop_();
- for(n=0;n<8;n++)
- {
- DSIO=addr&&0x01; //dat是最低位,假设为(0000 000)1,他和0000 0001想与,为1的话就传1给DSIO,为0的话就传0给DSIO
- addr>>=1; //addr右移一位,让倒数第二位变为最低位,以便下次循环
- SCLK=1; //SCLK位上升沿时,ds1302才能写入数据,当SCLK为下降沿时,DS1302将写入的数据放到IO口上
- _nop_();
- SCLK=0;
- _nop_();
- }
- for(n=0;n<8;n++)
- {
- DSIO=dat&&0x01;
- dat>>=1;
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- RST=0; //传数据结束
- _nop_();
- }
- uchar Ds1302Read(uchar addr)
- {
- uchar n,dat,dat1;
- RST=0;
- _nop_();
- SCLK=0;
- _nop_();
- RST=1;
- _nop_();
- for(n=0;n<8;n++)
- {
- DSIO=addr&&0x01; //dat是最低位,假设为(0000 000)1,他和0000 0001想与,为1的话就传1给DSIO,为0的话就传0给DSIO
- addr>>=1; //addr右移一位,让倒数第二位变为最低位,以便下次循环
- SCLK=1; //SCLK位上升沿时,ds1302才能写入数据,当SCLK为下降沿时,DS1302将写入的数据放到IO口上
- _nop_();
- SCLK=0;
- _nop_();
- }
- for(n=0;n<8;n++)
- {
- dat1=DSIO;
- dat=(dat>>1)|(dat1<<7);
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- RST=0;
- _nop_();
- SCLK=1;
- _nop_();
- DSIO=0;
- _nop_();
- DSIO=1;
- _nop_();
- return dat;
- }
- void Ds1302Init()
- {
- uchar n;
- Ds1302Write(0x8e,0x00); //关闭写保护,我们才能写入程序
- for(n=0;n<7;n++)
- {
- Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); //写入7个字节的时钟信号:分秒时日月周年
- }
- Ds1302Write(0x8e,0x80); //写完后打开写保护
- }
- void Ds1302ReadTime()
- {
- uchar n;
- for(n=0;n<7;n++)
- {
- TIME[n]=Ds1302Read(READ_RTC_ADDR[n]); //读取7个字节的时钟信号:分秒时日月周年
- }
- }
复制代码
|