之前使用易码魔盒测试了移植DS1302,效果还可以的。既然已经连接好了模块了,还是看看直接IO口驱动DS1302。这里移植的是51单片机的测试代码,看看51代码和新定义代码兼容性怎么样?
还是在之前的生成的工程文件上进行测试。
就是把生成的DS1302文件删除掉。加入要使用的DS1302库文件。
首先是要配置IO口为输出。
使用宏定义配置三个口。
- #define RST P53
- #define SCLK P55
- #define DSIO P54
在Ds1302Init加入初始化IO口。
- GPIO_Init(GPIO5, GPIO_PIN_4,GPIO_MODE_OUT_PP);
- GPIO_Init(GPIO5, GPIO_PIN_5,GPIO_MODE_OUT_PP);
- GPIO_Init(GPIO5, GPIO_PIN_3,GPIO_MODE_OUT_PP);
跟51代码不一样的地方,就是需要配置IO为输出或者输入。赋值的时候还是跟51一样的。
这个是写入数据的时候。
- void Ds1302Write(uchar addr,uchar dat)
- { uint n;
- GPIO_Init(GPIO5, GPIO_PIN_4,GPIO_MODE_OUT_PP);
- RST=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=0;
- RST=1;
- _nop_();
- _nop_();
- _nop_();
- for(n=0; n<8; n++)
- {
- DSIO=addr&0x01;
- addr>>=1;
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- SCLK=0;
- _nop_();
- _nop_();
- _nop_();
- }
- for(n=0; n<8; n++)
- {
- DSIO=dat&0x01;
- dat>>=1;
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- SCLK=0;
- _nop_();
- _nop_();
- _nop_();
- }
- RST=0;
- _nop_();
- _nop_();
- _nop_();
- }
这是读取数据的时候。需要配置IO为输入。
- uchar Ds1302Read(uchar addr)
- {
- uchar dat,dat1,i;
- RST=0;
- _nop_();
- SCLK=0;
- _nop_();
- RST=1;
- _nop_();
- for(i=0; i<8; i++)
- {
- DSIO=addr&0x01;
- addr>>=1;
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- GPIO_Init(GPIO5, GPIO_PIN_4,GPIO_MODE_IN_PU);
- for(i=0; i<8; i++)
- {
- dat1=DSIO;
- dat=(dat>>1)|(dat1<<7);
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- GPIO_Init(GPIO5, GPIO_PIN_4,GPIO_MODE_OUT_PP);
- RST=0; //复位稳定程序
- _nop_();
- SCLK = 1;
- _nop_();
- DSIO = 0;
- _nop_();
- DSIO = 1;
- _nop_();
- return dat;
- }
这个还是使用的串口输出时间。
- Ds1302ReadTime();
- send_one(TIME[2]/16+'0');
- send_one(TIME[2]%16+'0');
- send_one(':');
- send_one(TIME[1]/16+'0');
- send_one(TIME[1]%16+'0');
- send_one(':');
- send_one(TIME[0]/16+'0');
- send_one(TIME[0]%16+'0');
- send_one('\r');
- send_one('\n');
- delay(500);
看看效果的。
这个附上源代码
User.rar
(1.38 KB, 下载次数: 2)
|