新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PIC单片机读写DS1302

PIC单片机读写DS1302

作者:时间:2018-08-01来源:网络收藏

本文介绍了读写DS1302程序

本文引用地址:http://www.amcfsurvey.com/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;//设置为输入

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;

}

}

}



关键词: PIC单片机

评论


相关推荐

技术专区

关闭