新聞中心

PIC單片機讀寫DS1302

作者: 時間:2018-08-01 來源:網(wǎng)絡(luò) 收藏

本文介紹了讀寫DS1302程序

本文引用地址:http://m.butianyuan.cn/article/201808/384819.htm

#i nclude

#define uchar unsigned char

#define T_CLK RC3

#define T_IO RC4

#define T_RST RC5

unsigned char TDATA;

int js;

int Order[3];

bit sci_sign=0;

int buf[2];

void Get1302(uchar *);

void RTInputByte(uchar);

uchar RTOutputByte(void) ;

void W1302(uchar , uchar );

uchar R1302(uchar);

void Set1302(uchar*);

void sciint(void);

void sci(int);

void int_to_asc(int);

//*SCI部件接收初始化子程序*/

void sciint()

{

TRISC7= 1 ;// |= 0xc0;//設(shè)置為輸入

TRISC6= 0 ;

BRGH = 1 ; //高波特率選擇位

SPBRG = 25 ; //((20000000/9600)/16)-1

SYNC = 0 ;//異步

SPEN = 1 ;//串口使能

RCIE = 1 ;// USART數(shù)據(jù)接收中斷使能位

TXIE = 0 ;//USART數(shù)據(jù)發(fā)送中斷使能位

TXEN = 1 ;//發(fā)送

CREN = 1 ;//連續(xù)接收使能位

RCIF=0;

PEIE= 1 ; //開中斷

GIE=1;

}

void sci(int tran)

{

while(!TXIF);

TXREG=tran; //*發(fā)出一個字符*/

TXIF=0;

}

void RTInputByte(uchar d)

{

uchar i;

TDATA = d;

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

{

T_IO =(bit)(TDATA0X80); //*相當于匯編中的 RRC

T_CLK = 1;

T_CLK = 0;

TDATA = TDATA >> 1;

}

}

uchar RTOutputByte(void)

{

uchar i;

TRISC4=1;

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

{

TDATA = TDATA >>1;

if(T_IO)

{

TDATA=0X80;

}

T_CLK = 1;

T_CLK = 0;

}

TRISC4=0;

return(TDATA);

}

void W1302(uchar ucAddr, uchar ucDa)

{

T_RST = 0;

T_CLK = 0;

T_RST = 1;

RTInputByte(ucAddr); //* 地址,命令

RTInputByte(ucDa); //* 寫1Byte數(shù)據(jù)

T_CLK = 1;

T_RST = 0;

}

uchar R1302(uchar ucAddr)

{

uchar ucData;

T_RST = 0;

T_CLK = 0;

T_RST = 1;

RTInputByte(ucAddr); //* 地址,命令

ucData = RTOutputByte(); //* 讀1Byte數(shù)據(jù)

T_CLK = 1;

T_RST = 0;

return(ucData);

}

void Set1302(uchar *pClock)

{

uchar i;

uchar ucAddr = 0x80;

W1302(0x8e,0x00); //* 控制命令,WP=0,寫操作?

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

{

W1302(ucAddr,*pClock); //* 秒 分 時 日 月 星期 年

pClock++;

ucAddr +=2;

}

W1302(0x8e,0x80); //* 控制命令,WP=1,寫保護

}

void Get1302(uchar *ucCurtime)

{

uchar i;

uchar ucAddr = 0x81;

for (i=0; i7; i++)

{

ucCurtime[i] = R1302(ucAddr);//*格式為: 秒 分 時 日 月 星期 年

ucAddr += 2;

}

}

void interrupt SCI_Admit(void)

{

if(RCIFRCIE) //判斷是否是接收中斷

{

if(Order[0]=='$')

{

js++;

Order[js]=RCREG;

if(js==2)

sci_sign=1;

}

else

{

Order[0]=RCREG;

sci_sign=0;

js=0;

}

}

}

void int_to_asc(int dat)

{

buf[0]=(dat/10)+'0';

buf[1]=(dat%10)+'0';

}

void main()

{

uchar str[]={30,10,9,20,8,1,7};

uchar dtime[]={0,0,0,0,0,0,0};

TRISC3=1;

TRISC4=1;

TRISC5=1;

sciint();

ei();

// Get1302(st);

// sci('E');

while(1)

{

if(sci_sign)

{

Get1302(dtime);

if(Order[1]=='R'Order[2]=='T')

{

sci('Y');

int_to_asc(dtime[6]);

sci(buf[0]);

sci(buf[1]);

sci('M');

int_to_asc(dtime[4]);

sci(buf[0]);

sci(buf[1]);

sci('T');

int_to_asc(dtime[3]);

sci(buf[0]);

sci(buf[1]);

sci('h');

int_to_asc(dtime[2]);

sci(buf[0]);

sci(buf[1]);

sci('m');

int_to_asc(dtime[1]);

sci(buf[0]);

sci(buf[1]);

sci('s');

int_to_asc(dtime[0]);

sci(buf[0]);

sci(buf[1]);

sci('W');

int_to_asc(dtime[5]);

sci(buf[0]);

sci(buf[1]);

sci(' ');

}

else if(Order[1]=='R'Order[2]=='S')

{

Set1302(str);

}

Order[0]=0;

Order[1]=0;

Order[2]=0;

sci_sign=0;

}

}

}



關(guān)鍵詞: PIC單片機

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉