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

📄 test.c

📁 C51编写的DS1302时钟芯片驱动程序
💻 C
字号:
/*********************************************************************************************/
/*                                            SED1520                                        */
/*********************************************************************************************/
#include <reg52.h>
/*===========================================================================================*/
#define uchar unsigned char
#define uint  unsigned int
/*-------------------------------------------------------------------------------------------*/
#define ctc0_tl 0xf8
#define ctc0_th 0x4b
#define ctc1_th 0xfa
/*===========================================================================================*/
sbit lamp=P3^5;           //signal lamp
/*===========================================================================================*/
uchar status=0;
uchar count=0;
uchar idata date[6];

extern void reset_ds1302(void);
extern void read_ds1302(uchar *);
extern void write_ds1302(uchar *);
/*********************************************************************************************/
void send_data(uchar type)          //send data to GSM
{
   TI=0;
   SBUF=type;
   do
   {}
   while (TI==0);
   TI=0;
}
/*========================================================================================================*/
void send_string(uchar *address)    //send string to GSM
{
   while ((*address>=0x0a)&&(*address<0x80)) 
   {
      send_data(*address);
      address++;
   }
   send_data('\r');
   send_data('\n');
}
/*========================================================================================================*/
void ctc0() interrupt 1 using 1     //50mS/loop(verified) 
{
     TR0=0;                  
     TL0=ctc0_tl;
     TH0=ctc0_th;
     TR0=1;
     /*==============================================================================*/
     count++;
}
/*===========================================================================================*/
void cut_reset()       //all interrupt reset
{
      EA=0;         
      TMOD=0X21;       //ctc1 is 9600bps,ctc0 is mod1(16bits)
      TL0=ctc0_tl;    
      TH0=ctc0_th;     //ctc0 start value(50mS)
      TH1=ctc1_th;     //9600bps(11.0592MHz)
      TCON=0x50;       //ctc0 and ctc1 start work,int0 is edge trigger
      SCON=0x50;       //UART is 8bits(mod1),receive allow.
      PCON=0x80;       //SMOD=1
      ET0=1;           //open ctc0 interrupt
      EA=1;            //open all interrupt
}
/*********************************************************************************************/
main()
{
   uchar idata sum[20]="2000.12.18 21:16:37\0";
 
   status=0;
   reset_ds1302();
   cut_reset();
   date[0]=26;date[1]=59;date[2]=23;date[3]=31;date[4]=12;date[5]=9;      //2009.12.31 23:59:26
   write_ds1302(date);
   /*========================================================================================*/
   while(1)
   {		  uint ii;
       if (count>=20)
       {
          read_ds1302(date);
          sum[17]=date[0]/10+0x30;sum[18]=date[0]%10+0x30;  //second
          sum[14]=date[1]/10+0x30;sum[15]=date[1]%10+0x30;  //minute
          sum[11]=date[2]/10+0x30;sum[12]=date[2]%10+0x30;  //hour
          sum[8]=date[3]/10+0x30;sum[9]=date[3]%10+0x30;    //day
          sum[5]=date[4]/10+0x30;sum[6]=date[4]%10+0x30;    //month

		  ii= date[5]+2000;

          sum[0]=ii/1000+0x30;ii%=1000;
          sum[1]=ii/100+0x30;ii%=100;
          sum[2]=ii/10+0x30;ii%=10;
          sum[3]=ii+0x30;

          send_string(sum);
          count=0;
          lamp=~lamp;
       }
       /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
   }
}
/*********************************************************************************************/

⌨️ 快捷键说明

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