?? 1302.c
字號:
#include <msp430x14x.h>
#define CE 0x20
#define SCLK 0x40
#define DATA 0X80
void CE_Enable(void);
void CE_Disable(void);
void SCLK_HI(void);
void SCLK_LO(void);
void WriteByte(unsigned char nVal);
unsigned char ReadByte(void);
void WriteTo1302(unsigned char nAddr,unsigned char nVal);
unsigned char ReadFrom1302(unsigned char nAddr);
void BurstWriteTime(unsigned char *pClock);
void BurstReadTime(unsigned char *qClock);
void GetTime(unsigned char qTime[10]);
void SetTime(unsigned char *pClock);
void delay(unsigned int j);
unsigned char SetTimer[10] = {0x26,0x13,0x10,0x06,0x09,0x07,0x04,0x00};
unsigned char GetTimer[10];
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P5DIR |= CE+SCLK;
BurstWriteTime(SetTimer);
while(1)
{
delay(5000); //n=1時20時鐘周期,每加1增加9個時鐘周期
_NOP();
GetTime(GetTimer);
}
}
void CE_Enable(void)
{
P5OUT |= CE;
}
void CE_Disable(void)
{
P5OUT&=~CE;
}
void SCLK_HI(void)
{
P5OUT |= SCLK;
}
void SCLK_LO(void)
{
P5OUT&=~SCLK;
}
void WriteByte(unsigned char nVal)
{
char i,j;
unsigned char nTemp = nVal;
unsigned char nSend;
SCLK_LO();
P5DIR |= DATA;
_NOP();
_NOP();
_NOP();
_NOP();
for(i=0;i<8;i++)
{
SCLK_LO();
for(j=20;j>0;j--);
nSend = (nTemp & 0x01);
if(nSend == 1)
{
P5OUT |= DATA;
}
else
{
P5OUT&=~DATA;
}
SCLK_HI();
for(j=20;j>0;j--);
nTemp >>= 1;
}
}
unsigned char ReadByte(void)
{
unsigned char nTemp = 0;
int i;
int j;
P5DIR&=~DATA;
SCLK_HI();
_NOP();
_NOP();
_NOP();
_NOP();
for(i=0;i<8;i++)
{
SCLK_LO();
if(P5IN & DATA)
{
nTemp |= (0x01<<i);
}
for(j=20;j>0;j--);
SCLK_HI();
}
return nTemp;
}
void WriteTo1302(unsigned char nAddr,unsigned char nVal)
{
CE_Disable();
CE_Enable();
SCLK_LO();
WriteByte(nAddr);
WriteByte(nVal);
SCLK_LO();
CE_Disable();
}
unsigned char ReadFrom1302(unsigned char nAddr)
{
unsigned char nData;
CE_Disable();
CE_Enable();
SCLK_LO();
WriteByte(nAddr);
nData = ReadByte();
SCLK_LO();
CE_Disable();
return(nData);
}
void SetTime(unsigned char *pClock)
{
char i;
unsigned char nAddr = 0x80;
WriteTo1302(0x8e,0x00);
for(i=7;i>0;i--)
{
WriteTo1302(nAddr,*pClock);
pClock++;
nAddr += 2;
}
WriteTo1302(0x8e,0x80);
}
void GetTime(unsigned char qTime[6])
{
char i;
unsigned char nAddr = 0x81;
for(i=0;i<7;i++)
{
qTime[i] = ReadFrom1302(nAddr);
nAddr += 2;
}
}
void BurstWriteTime(unsigned char *pClock)
{
char i;
WriteTo1302(0x8e,0x00);
CE_Disable();
SCLK_LO();
CE_Enable();
WriteByte(0xbe);
for(i=8;i>0;i--)
{
WriteByte(*pClock);
pClock++;
}
SCLK_LO();
CE_Disable();
}
void BurstReadTime(unsigned char *qClock)
{
char i;
CE_Disable();
SCLK_LO();
CE_Enable();
WriteByte(0xbf);
for(i=8;i>0;i--)
{
*qClock = ReadByte();
qClock++;
}
SCLK_LO();
CE_Disable();
}
void delay(unsigned int j)
{
while(j>0)
j--;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -