|
這是一個(gè)子程序,我不明白的就是最后的那個(gè)讀取七個(gè)字節(jié)時(shí)鐘信號(hào)的程序,明明TIME數(shù)組已經(jīng)定義了,為什么還要給他賦值,并且給它賦的這是一個(gè)什么值,求指教
單片機(jī)源程序如下
- #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是最低位,假設(shè)為(0000 000)1,他和0000 0001想與,為1的話就傳1給DSIO,為0的話就傳0給DSIO
- addr>>=1; //addr右移一位,讓倒數(shù)第二位變?yōu)樽畹臀,以便下次循環(huán)
- SCLK=1; //SCLK位上升沿時(shí),ds1302才能寫入數(shù)據(jù),當(dāng)SCLK為下降沿時(shí),DS1302將寫入的數(shù)據(jù)放到IO口上
- _nop_();
- SCLK=0;
- _nop_();
- }
- for(n=0;n<8;n++)
- {
- DSIO=dat&&0x01;
- dat>>=1;
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- RST=0; //傳數(shù)據(jù)結(jié)束
- _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是最低位,假設(shè)為(0000 000)1,他和0000 0001想與,為1的話就傳1給DSIO,為0的話就傳0給DSIO
- addr>>=1; //addr右移一位,讓倒數(shù)第二位變?yōu)樽畹臀,以便下次循環(huán)
- SCLK=1; //SCLK位上升沿時(shí),ds1302才能寫入數(shù)據(jù),當(dāng)SCLK為下降沿時(shí),DS1302將寫入的數(shù)據(jù)放到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); //關(guān)閉寫保護(hù),我們才能寫入程序
- for(n=0;n<7;n++)
- {
- Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); //寫入7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年
- }
- Ds1302Write(0x8e,0x80); //寫完后打開寫保護(hù)
- }
- void Ds1302ReadTime()
- {
- uchar n;
- for(n=0;n<7;n++)
- {
- TIME[n]=Ds1302Read(READ_RTC_ADDR[n]); //讀取7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年
- }
- }
復(fù)制代碼
|
|