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

📄 c程序.txt

📁 1302时钟芯片的pic程序
💻 TXT
字号:
//===================================================================================//
//                      程序所用到的头文件
//===================================================================================//
#include <pic.h>
#include <stdlib.h>
#include <pic1687x.h> 
#define TrIO_CLDATA TRISC1
#define CLOCK_SCLK  RC0      //时钟芯片SCLK脚
#define CLOCK_DATA  RC1      //时钟芯片I/O脚
#define CLOCK_RST   RC2      //时钟芯片RST脚

//===================================================================================//
//                      系统初始化子程序 RC0(SCLK),RC1(I/O),RC2(RST)
//===================================================================================//     
void initportb(void)
{ 
    INTCON=0x00;                            
    OPTION=0x08;                                               
    TRISC0=0;                                               //设置相应口的输出方式 
    TRISC1=1;                                               //设置相应口的输入方式    
    TRISC2=0;                                               //设置相应口的输出方式  
    TRISB=0x00;                                             //设置相应口的输入输出方式                                             
    PORTB=0x00;                                               
    RC0=0;                                                                                         
    RC1=0;                                                 
    RC2=0;                                                        
} 
//===================================================================================//
// 单字节写子程序 RC0(SCLK),RC1(I/O),RC2(RST)
//名称:inputdata
//说明:先写地址,后写数据
//功能: 往DS1302写入时钟数据
//===================================================================================//    
void inputdata(unsigned char tmaddr,unsigned char tmdata) 
{ 
   unsigned char loop; 
   TrIO_CLDATA=0;                   //设置为输出; 
   CLOCK_RST=0; 
   CLOCK_SCLK=0; 
   CLOCK_RST=1;   
   for(loop=8;loop>0;loop--)        //送地址
     {CARRY=0;      
      tmaddr=tmaddr>>1;      
      CLOCK_DATA=CARRY;     
      CLOCK_SCLK=1;  asm("nop");      
      CLOCK_SCLK=0;
     }  
   for(loop=8;loop>0;loop--)        //送数据
     {CARRY=0;      
      tmdata=tmdata>>1;      
      CLOCK_DATA=CARRY;
      CLOCK_SCLK=1;  asm("nop"); 
      CLOCK_SCLK=0;
     }  
   CLOCK_SCLK=1; 
   CLOCK_RST=0; 
   TrIO_CLDATA=1;                   //设置为输出; 
}
//===================================================================================//
//单字节读子程序 RC0(SCLK),RC1(I/O),RC2(RST)
//名称:outputdata
//说明:读数据
//功能: 从DS1302读取1Byte数据
//===================================================================================//
unsigned char outputdata(unsigned char tmaddr) 
{  
   unsigned char loop;
   unsigned char tmdata=0; 
   inputdata(0x8F,0x00);
   TrIO_CLDATA=0; asm("nop");       //设置为输                                     
   CLOCK_RST=0; 
   CLOCK_SCLK=0; 
   CLOCK_RST=1;    
   for(loop=8;loop>0;loop--)        //送地址
     {CARRY=0;      
      tmaddr=tmaddr>>1;      
      CLOCK_DATA=CARRY;
      CLOCK_SCLK=1;  asm("nop");  
      CLOCK_SCLK=0;
     }     
   TrIO_CLDATA=1;    asm("nop");    //设置为输入;  
   CLOCK_DATA=1; 
   CLOCK_SCLK=1; 
   CLOCK_SCLK=0;    
   for(loop=8;loop>0;loop--)        // 读数据
      {tmdata=tmdata>>1;       
       if(CLOCK_DATA==1)
          tmdata=tmdata|0x80;
       CLOCK_SCLK=1;
       CLOCK_SCLK=0;
      } 
   tmdata=tmdata<<1;                //由于在开始读是已经是第二个时钟下降延所以要进行左移处理  
   if(CARRY==1)
        tmdata=tmdata|0x01;
   CLOCK_SCLK=1; 
   CLOCK_RST=0; 
  return(tmdata); 
}
//===================================================================================//
//               主程序(上电后仪器处于关机状态,即MCU处于休眠状态),3.6864MHz的晶振
//===================================================================================//
void main(void)
{ unsigned char miao;
  unsigned char fen;
  initportb();                                                                   
  delay5();                                                         //延时5ms      
  inputdata(0x8E,0x00);                                     //控制命令,WP=0,写操作    
  inputdata(0x90,0x06);                                     //禁止充电

  inputdata(0x8C,0x04);                                     //初始化年,并启动时钟 04年
  inputdata(0x8A,0x02);                                     //初始化周,并启动时钟 周2
  inputdata(0x88,0x05);                                     //初始化月,并启动时钟 5月
  inputdata(0x86,0x25);                                     //初始化日,并启动时钟 25号
  inputdata(0x84,0x02);                                     //初始化时,并启动时钟 2点
  inputdata(0x82,0x02);                                     //初始化分,并启动时钟 50分
  inputdata(0x80,0x00);                                     //初始化秒,并启动时钟

  inputdata(0x8E,0x80);                                     //控制命令,WP=1,写保护                 
  while(1)
      {
       miao=outputdata(0x81);                               //读秒 
       fen=outputdata(0x83);                                 //读分
       display(fen,miao);
       delay250(); 
      }
}

⌨️ 快捷键说明

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