大家好,还想请高手帮我看看。程序重新改过了,读到的数不一定是地址值,但仍是0~9之间的数,这显然是不对的。时序图也看过,没有问题,找过例程也都这么写的。有谁做过或了解的还请赐教,在此拜谢。
/*DS12CR887初始化函数*/
void InitDS12CR887(void)
{
DS12CR887_AD_C=0; //AD0~7口初始化为输出口
DS12CR887_AD=0xFF; //AD0~7口初始化为高电平
/*定义PIC的这些I/O口为输出口*/
DS12CR887_RD_C=0; //数据选通信号端 (即DS,读使能)
DS12CR887_WR_C=0; //读写输入信号端(即WR,写使能)
DS12CR887_AS_RTC_C=0; // 地址选通信号端(即AS)
DS12CR887_CS_RTC_C=0; //片选信号,低电平有效(即CS)
/*初始化DS、WR、AS*/
DS12CR887_RD=0; //数据选通信号端
DS12CR887_WR=0; //读写输入信号端
DS12CR887_AS_RTC=0 ; // 地址选通信号端
Ds12CR887_write(control_A, 0x20); //2A
}
/*DS12CR887写函数*/
void Ds12CR887_write(unsigned char DSAdree, unsigned char DSData)
{
unsigned char write_data;
unsigned char write_DSAdree;
DS12CR887_CS_RTC=0; //片选信号,低电平有效
DS12CR887_RD=1; //数据选通信号端,DS置高
DS12CR887_WR=1; //读写输入信号端,WR置高
DS12CR887_AS_RTC=1; // 地址选通信号端,AS置高
DS12CR887_AD=DSAdree;
DS12CR887_AS_RTC=0; //AS下降沿将地址存入DS12887
DS12CR887_WR=0; //写使能
DS12CR887_AD=DSData;
DS12CR887_WR=1; //上升沿锁存数据,将数据发到数据总线上
DS12CR887_AS_RTC=1;
DS12CR887_CS_RTC=1;
}
/*DS12CR887读函数*/
unsigned char Ds12CR887_read(unsigned char DSAdree)
{
unsigned char DSData;
unsigned char read_DSAdree;
DS12CR887_CS_RTC=0;
DS12CR887_WR=1;
DS12CR887_RD=1;
DS12CR887_AS_RTC=1;
DS12CR887_AD=DSAdree;
DS12CR887_AS_RTC=0; //AS下降沿将地址存入DS12887
DS12CR887_RD=0; //读使能
DSData=DS12CR887_AD;
DS12CR887_RD=1;
DS12CR887_AS_RTC=1;
DS12CR887_CS_RTC=1;
return(DSData);
}
|