您的位置 首页 5G

PIC单片机读写DS1302

本文介绍了PIC单片机读写DS1302程序

本文介绍了PIC单片机读写DS1302程序

#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;//设置为输入

TRISC6= 0 ;

BRGH = 1 ; //高波特率挑选位

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

SYNC = 0 ;//异步

SPEN = 1 ;//串口使能

RCIE = 1 ;// USART数据接纳中止使能位

TXIE = 0 ;//USART数据发送中止使能位

TXEN = 1 ;//发送

CREN = 1 ;//接连接纳使能位

RCIF=0;

PEIE= 1 ; //开中止

GIE=1;

}

void sci(int tran)

{

while(!TXIF);

TXREG=tran; //*宣布一个字符*/

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数据

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数据

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;

}

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/150880.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部