本帖最后由 hegspring 于 2013-2-25 11:04 编辑
用Keil单步运行程序时,往DS1302里写数据正常,但是读数据时IO口一直保持高电平不变,主要代码如下:
求助!!! 在线等……QQ:137223811
#include "reg51.h"
#include "intrins.h"
sbit rst=P2^5;
sbit sck=P2^6;
sbit io=P2^7;
sbit acc7=ACC^7;
typedef unsigned char uchar;
typedef unsigned int uint;
void write_ds1302_byte(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
sck=0;
io=dat&0x01;
dat=dat>>1;
sck=1;
}
}
/*写多字节到DS1302*/
void write_ds1302(uchar add,uchar dat)
{
rst=0;
_nop_();
sck=0;_nop_();
rst=1;_nop_();
write_ds1302_byte(add);
write_ds1302_byte(dat);
rst=0;_nop_();
io=1;
sck=1;
}
/*读DS1302的1Byte*/
uchar read_ds1302(uchar add)
{
uchar i;
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
sck=1;
sck=0;
acc7=io;
ACC>>=1;
}
rst=0;
_nop_();
sck=0;
_nop_();
sck=1;
io=1;
ACC=(ACC/16*10)+ACC%16;
return ACC;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>