打印

DS1302+PIC16F877A

[复制链接]
1886|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fushaowei|  楼主 | 2010-4-26 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS1302接晶振不接电容可以吗?据说是会有一点误差的?
然后就是在PROTEUS里面仿真一直通不过?
下面是我的程序,我只是想先写进时间?
程序如下:#include<pic.h>
#define  rst  RD0
#define  sclk  RD1
#define  io_data  RD2
unsigned char count,flag,key;
unsigned int w,i,j;
const char table[]={0x00,0x00,0x12,0x23,0x10,0x05,0x09,0x00};
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:void initial()
//输入:时间
//输出:无
//功能描述:各输入输出口初始化程序
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
void initial()
{
TRISD=0X00;              //端口为输出
di();                         //关闭所有中断
}
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:unsigned char senddata()
//输入:时间
//输出:无
//功能描述:发送数据
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
void senddata(unsigned char data)
{
TRISD=0X00;  //RD口为输出IO口
rst=0;
rst=1;
for(int j=0;j<8;j++)
{
sclk=0;            //清时钟线
if(data&0x01){io_data=1;}
else{io_data=0;}
data=data>>1;
sclk=1;            //时钟上升沿
}
sclk=0;            //清时钟线
}
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:unsigned char receivedata(unsigned char data)
//输入:时间
//输出:无
//功能描述:接收数据
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
unsigned char receivedata(void)
{
unsigned char data;
TRISD2=1;          //RE口为输出IO口,其中data为输入口
rst=0;
rst=1;
for(int j=0;j<8;j++)
{ sclk=0;
  data=data>>1;
  if(io_data==1){data=data|0x80;}
  sclk=1;          //时钟下降沿有效
}
TRISD2=0;          //RE口为输出IO口,其中data为输入口
sclk=0;
return(data);
}
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:void write_ds1302(unsigned char add,unsigned char code)
//输入:时间
//输出:无
//功能描述:接收数据
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
void write_ds1302(unsigned char add,unsigned char code)
{
rst=0;
sclk=0;
rst=1;
senddata(add);
senddata(code);
sclk=0;
rst=1;
}
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:void read_ds1302(unsigned char add,unsigned char code)
//输入:时间
//输出:无
//功能描述:接收数据
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
void read_ds1302(unsigned char add)
{
rst=0;
sclk=0;
rst=1;
senddata(add);
sclk=1;
rst=0;
}
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:void set_time()
//输入:时间
//输出:无
//功能描述:主函数
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
void set_time()
{
rst=0;
rst=1;
senddata(0xbe);  //发送多字节命令
for(int j=0;j<8;j++)
{senddata(table[j]);}
rst=0;
}
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:void ds1302_init()
//输入:时间
//输出:无
//功能描述:各输入输出口初始化程序
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
void ds1302_init()
{
sclk=0;
rst=0;
rst=1;
write_ds1302(0x8e,0);
rst=0;
}
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
//函数名:void main()
//输入:时间
//输出:无
//功能描述:主函数
//×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××//
void main()
{
initial();
di();
ds1302_init();
set_time();
while(1)
{
RD3=1;
}
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

5

帖子

1

粉丝