這是一個子程序,我不明白的就是最后的那個讀取七個字節時鐘信號的程序,明明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個字節的時鐘信號:分秒時日月周年
- }
- }
復制代碼
|