我用ATMEGA16仿照51写的DS12CR887的时钟芯片驱动程序,为何读不出数来?大家帮我分析一
DS12CR887: CS片选信号13-PC7AS地址选通输入14-PC6WR读/写输入15-PC5DS数据选通写或读输入17-PC4并行数据口-PA#include<avr/io.h>
void delay(unsigned int z);//1MS延时子函数
void mcu_init();//ATMEGA16初始化函数
void write_ds(unsigned char add,unsigned char date);//DS12CR887数据读取写入
unsigned char read_ds(unsigned char add);//DS12CR887数据读取
int main(void)
{
mcu_init();//ATMEGA16初始化函数
write_ds(0x0A,0x20);//开启内部振荡,速度选择为0000
write_ds(0x0B,0x2e);//二进制格式,24小时制,方波使能,闹钟
while(1)
{
HC_595_input(table);//读取秒
}
}
void delay(unsigned int z)//1MS延时子函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=890;y>0;y--);
}
void mcu_init()//ATMEGA16初始化函数
{
DDRA=0XFF;//定义PA口为输出
PORTA=0XFF;//PA口上拉
DDRB=0XFF;//定义PB口为输出
DDRC=0XFF;//定义PC口为输出
}
void write_ds(unsigned char add,unsigned char date)//DS12CR887数据写入
{
PORTC|=(1<<PC6);//地址选通输入14置为高电平
PORTC|=(1<<PC4);//数据选通或读输入17置为高电平
PORTC|=(1<<PC5);//读/写输入15置为高电平
PORTC&=~(1<<PC7);//片选信号13置为低电平
PORTA=add;
delay(1);
PORTC&=~(1<<PC6);//地址选通输入14置为低电平
PORTC&=~(1<<PC5);//读/写输入15置为低电平
PORTA=date;
delay(1);
PORTC|=(1<<PC5);//读/写输入15置为高电平
PORTC|=(1<<PC6);//地址选通输入14置为高电平
PORTC|=(1<<PC7);//片选信号13置为高电平
}
unsigned char read_ds(unsigned char add)//DS12CR887数据读取
{
unsigned char date;
PORTC|=(1<<PC6);//地址选通输入14置为高电平
PORTC|=(1<<PC4);//数据选通或读输入17置为高电平
PORTC|=(1<<PC5);//读/写输入15置为高电平
PORTC&=~(1<<PC7);//片选信号13置为低电平
PORTA=add;
delay(1);
PORTC&=~(1<<PC6);//地址选通输入14置为低电平
PORTC&=~(1<<PC4);//数据选通或读输入17置为低电平
date=PORTA;
delay(1);
PORTC|=(1<<PC4);//数据选通或读输入17置为高电平
PORTC|=(1<<PC6);//地址选通输入14置为高电平
PORTC|=(1<<PC7);//片选信号13置为高电平
return date;
}
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_590729AJATB2.png
(原文件名:QQ截图未命名.png)
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_590730P65M7C.png
(原文件名:2.png) 12C887?停产了吧?不推荐使用。 建议你换铁电器件。这个12c887不要用了。 回复【楼主位】atgfpeyv 董 董
-----------------------------------------------------------------------
楼主你的问题解决了吗?我现在也是遇到这问题,ds12cr887不工作,您是怎么解决的啊? 不建议使用ds12cr887,学习使用类似DS1302的RTC芯片。我的教课书中有例子。
提供你们新的方法了,为什么还要使用淘汰的DD? 楼上的那些建议换的人其实根本就是废话,楼主已经用了就肯定没想换啊
试试换个时钟芯片试试 换个新的ds12c887
页:
[1]