只是写了一 个简单的测试程序,上电就直接读取时间,程序如下:
void start(void)
{
sda=1;
Delay_us(10);
scl=1;
Delay_us(10);
sda=0;
Delay_us(10);
}
void stop(void)
{
sda=0;
Delay_us(10);
scl=1;
Delay_us(10);
sda=1;
Delay_us(10);
}
void ack(void)
{
unsigned char i=200;
scl=1;
Delay_us(10);
while ((sda==1)&&(i>0))i--;
scl=0;
Delay_us(10);
}
void iicinit(void)
{
sda=1;
scl=1;
}
void iicwr_byte(unsigned char dat)
{
unsigned char i;
scl=0;
for(i=0;i<8;i++)
{
if(dat&0x80)
{
sda=1;
}
else
{
sda=0;
}
dat=dat<<1;
Delay_us(10);
scl=1;
Delay_us(10);
scl=0;
Delay_us(10);
}
}
void READ_TIM(void)
{
start(); //1
iicwr_byte(0x64); //2
ack(); //3
iicwr_byte(0x00); //4
ack(); //5
start(); //6
iicwr_byte(0x65); //7
ack(); //8
TIM_Second=iicre_byte();//9 读秒
ack(); //10
TIM_Minute=iicre_byte();//9 读分钟
ack(); //10
TIM_Hour=iicre_byte();//9 读小时
ack(); //10
stop(); //13
}
出来的实际波形图:
1111111.png (124.25 KB, 下载次数: 0)
下载附件
2019-5-8 03:27 上传
首先检查硬件是否有上拉,另外,您这个模拟IIC程序大有问题
一般来说,完整的模拟IIC软件需要6个基本函数:启动信号,停止信号,主机发送应答信号,主机接收应答信号,主机发送字节数据,主机接收字节数据。
一周热门 更多>