⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.c

📁 读DS1302时钟芯片数据
💻 C
字号:
//寄存器宏定义

#define WRITE_SECOND              0x80

#define WRITE_MINUTE              0x82

#define WRITE_HOUR                0x84

#define READ_SECOND               0x81

#define READ_MINUTE               0x83

#define READ_HOUR                 0x85

#define WRITE_PROTECT             0x8E

#define WRITE_UNER                0x90 

//位寻址寄存器定义

sbit ACC_7 = ACC^7;

//管脚定义

sbit SCLK = P1^5;                   // DS1302时钟信号         7脚

sbit DIO= P1^6;                     // DS1302数据信号         6脚

sbit CE = P1^7;                     // DS1302片选             5脚

 

//地址、数据发送子程序

void Write1302 ( unsigned char addr,dat )     

{

       unsigned char i,temp;

       CE=0;                         //CE引脚为低,数据传送中止

       SCLK=0;                    //清零时钟总线

       CE = 1;                       //CE引脚为高,逻辑控制有效

       //发送地址

       for ( i=8; i>0; i-- ) //循环8次移位

       {     
              
              _nop_(); 
              
              _nop_(); 
              
              DIO = 0;      //注意
              
              SCLK = 0;

              temp = addr;

              DIO = (bit)(temp&0x01);          //每次传输低字节

              addr >>= 1;                //右移一位
              
              SCLK = 1;

       }

       

//发送数据

       for ( i=8; i>0; i-- ) 

       {     
              _nop_(); 
              
              _nop_(); 
              
              DIO = 0;      //注意
              
              SCLK = 0;

              temp = dat;

              DIO = (bit)(temp&0x01);          

              dat >>= 1;                   
              
              SCLK = 1;

       }

       CE = 0;         

}

 

//数据读取子程序

unsigned char Read1302 ( unsigned char addr )

{

       unsigned char i,temp,dat1,dat2;

       CE=0;           

       SCLK=0;             

       CE = 1;  

       //发送地址

       for ( i=8; i>0; i-- )                      //循环8次移位

       {     
              _nop_(); 
              
              _nop_(); 
              
              DIO = 0;      //注意
              
              SCLK = 0;

              temp = addr;

              DIO = (bit)(temp&0x01);          //每次传输低字节

              addr >>= 1;                              //右移一位
              
              SCLK = 1;

       }

       //读取数据
       
       for ( i=8; i>0; i-- ) 

       {      
              DIO=1;      //注意
              
              ACC_7=DIO;
              
              ACC>>=1;
              
              SCLK = 1;
              
              _nop_(); 
              
              _nop_(); 
              
              SCLK = 0;
              
              
              
              
       }     

       CE=0;

       dat1=ACC;

       dat2=dat1/16;                           //数据进制转换

       dat1=dat1%16;                         //十六进制转十进制

       dat1=dat1+dat2*10;

       return (dat1);

}

 

//初始化DS1302

void Initial(void)    

{ 

       Write1302 (WRITE_PROTECT,0X00);           //禁止写保护

       Write1302 (WRITE_UNER,0XA9);              //电池充电
       
       //Write1302 (WRITE_SECOND,0x00);          //秒位初始化

       //Write1302 (WRITE_MINUTE,0x00);          //分钟初始化

       //Write1302 (WRITE_HOUR,0x12);            //小时初始化

       Write1302 (WRITE_PROTECT,0x80);         //允许写保护

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -