这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机STC8A硬件IIC总线驱动RTC芯片DS3231M出现异常,不知道问题出

共12条 1/2 1 2 跳转至

单片机STC8A硬件IIC总线驱动RTC芯片DS3231M出现异常,不知道问题出在哪里?

工程师
2021-08-20 22:57:27     打赏

大家好!我的小板上用的是DS3231M的sop8芯片,调试了很多天STC8A单片机始终无法与DS3231M通讯,最多只能读取一秒的时间就卡死的IIC应答上。但奇怪的是,某宝上买的模块DS3231(sop16封装的IC之前测试是OK能用的)


不知道问题出在哪里?


原理图和源码如下:


image.png

void Wait(){//I2C应答

unsigned char a=0;

while(!(I2CMSST&0x40)&&++a);

I2CMSST&=~0x40;

}

void Start(){//发送START命令

I2CMSCR=0x01;

Wait();

}

void SendData(unsigned char dat){//发送数据

I2CTXD=dat;

I2CMSCR=0x02;

Wait();

}

void RecvACK(){//接收ACK

I2CMSCR=0x03;

Wait();

}

void SendACK(){//设置ACK信号

I2CMSST=0x00;

I2CMSCR=0x05;

Wait();

}

void SendNAK(){//设置NAK信号

I2CMSST=0x01;

I2CMSCR=0x05;

Wait();

}

char RecvData(){//接收数据

I2CMSCR=0x04;

Wait();

return I2CRXD;

}

void Stop(){//发送STOP命令

I2CMSCR=0x06;

Wait();

}

unsigned char DS3231_read(unsigned char site){//DS3231读取

P_SW2|=B(1000,0000);

Start();

SendData(0xD0);

RecvACK();

SendData(site);

RecvACK();

Start();

SendData(0xD1);

RecvACK();

site=RecvData();

SendNAK();

Stop();

P_SW2&=B(0111,1111);

return site;

}

void DS3231_wirte(unsigned char site,unsigned char dat){//DS3231写入

P_SW2|=B(1000,0000);

Start();

SendData(0xD0);

RecvACK();

SendData(site);

RecvACK();

SendData(dat);

RecvACK();

Stop();

P_SW2&=B(0111,1111);

}





关键词: STC8A     DS3231M     RTC     IIC    

工程师
2021-08-20 23:03:48     打赏
2楼

需要上拉电阻 4k7 在SDA和SCL  IIC接口!


工程师
2021-08-20 23:07:35     打赏
3楼

楼主解决了吗,看楼主代码上拉电阻是使能了的,问题出在哪呢。难道是内部上拉电阻只有4.1k造成的吗?


工程师
2021-08-20 23:12:51     打赏
4楼
在下载器那设定单片机的时钟为6MHZ试一下!



专家
2021-08-21 00:02:42     打赏
5楼

感谢楼主的分享,很实用了。


专家
2021-08-21 08:26:35     打赏
6楼

谢谢提供学习了,谢谢。


工程师
2021-08-21 14:25:09     打赏
7楼

感谢提供


工程师
2021-08-21 14:29:35     打赏
8楼

感谢分享


工程师
2021-08-21 14:32:53     打赏
9楼

谢谢学习到了


工程师
2021-08-21 14:36:27     打赏
10楼

感谢分享学习学习


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]