Microcontroller › 8051 › I got header file for DS1302 on a website, i dont understand the some of the c code! Need help with it!
- This topic has 0 replies, 1 voice, and was last updated 13 years, 7 months ago by Ang wei qiang.
Viewing 1 post (of 1 total)
-
AuthorPosts
-
May 3, 2011 at 6:00 am #903Ang wei qiangParticipant
I got a header file of DS1302 on a website..
I am trying to understand the c code of the header file, so i can make changes in order to coordinate with my protoboard.
As im currently programming c code of interface an 8051 with this DS1302 and i face some problem there.
Those comments for the code are in chinese,so i cant understand.
can someone pls guide me and explain to me the code.There are some parts of it which i do not understand.
Below is the header file code
#ifndef _REAL_TIMER_DS1302_2003_7_21_#define _REAL_TIMER_DS1302_2003_7_21_sbit DS1302_CLK = P1^7; //ʵʱʱÖÓʱÖÓÏßÒý½Åsbit DS1302_IO = P1^6; //ʵʱʱÖÓÊý¾ÝÏßÒý½Åsbit DS1302_RST = P1^5; //ʵʱʱÖÓ¸´Î»ÏßÒý½Åsbit ACC0 = ACC^0;sbit ACC7 = ACC^7;typedef struct __SYSTEMTIME__{unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString[9];unsigned char TimeString[9];}SYSTEMTIME; //¶¨ÒåµÄʱ¼äÀàÐÍ#define AM(X) X#define PM(X) (X+12) // ת³É24СʱÖÆ#define DS1302_SECOND 0x80#define DS1302_SECOND_READ 0x81#define DS1302_MINUTE 0x82#define DS1302_MINUTE_READ 0x83#define DS1302_HOUR 0x84#define DS1302_HOUR_READ 0x85#define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8C#define DS1302_RAM(X) (0xC0+(X)*2) //ÓÃÓÚ¼ÆËã DS1302_RAM µØÖ·µÄºêvoid DS1302InputByte(unsigned char d) //ʵʱʱÖÓдÈëÒ»×Ö½Ú(ÄÚ²¿º¯Êý){unsigned char i;ACC = d;for(i=8; i>0; i–){DS1302_IO = ACC0; //Ï൱ÓÚ»ã±àÖÐµÄ RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC >> 1;}}unsigned char DS1302OutputByte(void) //ʵʱʱÖÓ¶ÁÈ¡Ò»×Ö½Ú(ÄÚ²¿º¯Êý){unsigned char i;for(i=8; i>0; i–){ACC = ACC >>1; //Ï൱ÓÚ»ã±àÖÐµÄ RRCACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;}return(ACC);}void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302µØÖ·, ucData: ҪдµÄÊý¾Ý{DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); // µØÖ·£¬ÃüÁîDS1302InputByte(ucDa); // д1ByteÊý¾ÝDS1302_CLK = 1;DS1302_RST = 0;}unsigned char Read1302(unsigned char ucAddr) //¶ÁÈ¡DS1302ijµØÖ·µÄÊý¾Ý{unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); // µØÖ·£¬ÃüÁîucData = DS1302OutputByte(); // ¶Á1ByteÊý¾ÝDS1302_CLK = 1;DS1302_RST = 0;return(ucData);}void DS1302_SetProtect(bit flag) //ÊÇ·ñд±£»¤{if(flag)Write1302(0x8E,0x10);elseWrite1302(0x8E,0x00);}void DS1302_SetTime(unsigned char Address, unsigned char Value) // ÉèÖÃʱ¼äº¯Êý{DS1302_SetProtect(0);Write1302(Address, ((Value/10)<<4 | (Value%10)));}void DS1302_GetTime(SYSTEMTIME *Time){unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND_READ);Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE_READ);Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR_READ);Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);}void DateToStr(SYSTEMTIME *Time){Time->DateString[0] = Time->Year/10 + ‘0’;Time->DateString[1] = Time->Year%10 + ‘0’;Time->DateString[2] = ‘-‘;Time->DateString[3] = Time->Month/10 + ‘0’;Time->DateString[4] = Time->Month%10 + ‘0’;Time->DateString[5] = ‘-‘;Time->DateString[6] = Time->Day/10 + ‘0’;Time->DateString[7] = Time->Day%10 + ‘0’;Time->DateString[8] = ‘