历史上的今天
返回首页

历史上的今天

今天是:2024年10月24日(星期四)

正在发生

2019年10月24日 | avr单片机读写时钟芯片DS3231程序(通过测试)

2019-10-24 来源:51hei

实时时钟芯片DS3231,该款芯片是目前世界上精度最高的集成,也是业内最先推出、采用简单音叉晶体和集成电路即可提供±2分钟/年时间保持精度的芯片。


//程序由AT24C系列的读写程序改写而来,不同点只在于器件地址的不同

#include

#include

#define uchar unsigned char

#define uint  unsigned int

void DelayUs(uchar i);

void CLK(uchar PD);//设置SCL的电平

void IO(uchar PD);//设置IO的电平

void SetIO(uchar i);//设置IO为输入输出

//IIC读写函数供外部main函数调用

void WriteDs3231_OneByte(unsigned char addr,unsigned char ddata);

unsigned char ReadDs3231_OneByte(unsigned char addr);

void DelayMs(uchar i)

{

uint count;

for(;i!=0;i--)for(count=100;count!=0;count--);

}

//设置SCL的电平

void CLK(uchar PD)

{if(PD==1) PORTD|=0x08;//SCL置1

else       PORTD&=~0x08;//SCL置0

}

//设置IO的电平

void IO(uchar PD)

{if(PD==1) PORTD|=0x04;//IO置1

else       PORTD&=~0x04;//IO置0

}

/////////////////////////////////

//IIC

//*******************Start条件****************//

void Start(void)

{

CLK(0);DelayMs(2);

IO(1); DelayMs(2);

CLK(1);DelayMs(2);

IO(0); DelayMs(2);

CLK(0);DelayMs(2);

}

//*******************Stop条件****************//

void Stop(void)

{

CLK(0);  DelayMs(2);

IO(0);   DelayMs(2);

CLK(1);  DelayMs(2);

IO(1);   DelayMs(2);

CLK(0);  DelayMs(2);

}

//********************发送数据************//

void SendData(uchar Xdata)  

{uchar count;

for(count=0;count!=8;count++)

  {

  CLK(0); DelayMs(2);

  if(Xdata&0x80)

   IO(1);

  else

   IO(0);

  DelayMs(2);

  CLK(1); DelayMs(2);

  Xdata<<=1;

}

//以下把SDA置1释放总线

CLK(0);DelayMs(2);

CLK(1);DelayMs(2);

CLK(0);DelayMs(2);

}

/////////////接收数据///////////////////

uchar  ReceiveData(void)  

{

uchar count;

uchar temp;

uchar value=0;

DDRD&=~0x04;//设置为输入

  for(count=0;count!=8;count++)

  {

  value<<=1;

  CLK(1); DelayMs(2);

  temp=PIND;//读引脚

  if((temp&0x04)==0x04) value++;

  DelayMs(2);

  CLK(0); DelayMs(2);

}

DDRD|=0x04;//设置为输出

//以下输出NOACK

CLK(0);DelayMs(2);

IO(1);DelayMs(2);

CLK(1);DelayMs(2);

CLK(0);DelayMs(2);

return value;

}

//////////////以下供main调用/////////////////

//向addr写一个数据

void WriteDs3231_OneByte(unsigned char addr,unsigned char ddata)

{

    Start();

SendData(0xd0);//器件寻址

SendData(addr);//存储器寻址

SendData(ddata);//写入数据

Stop();

DelayMs(2000);

}

///////////////////////////////

//从addr读一个数据

unsigned char ReadDs3231_OneByte(unsigned char addr)

{

    uchar temp;

    Start();

SendData(0xd0);//器件寻址

SendData(addr);//存储器寻址

Start();

    SendData(0xd1);   //设置读

temp = ReceiveData();//读取数据

Stop();

DelayMs(2000);

return temp;    

}



推荐阅读

史海拾趣

Antenna Factor公司的发展小趣事

随着公司实力的不断增强,Antenna Factor公司开始将目光投向国际市场。他们积极参加国际电子展会和技术交流活动,与全球各地的客户和合作伙伴建立了广泛的联系。同时,公司还加大了对海外市场的研发投入和市场推广力度,逐步实现了产品的全球化销售。这一战略不仅为公司带来了更广阔的发展空间,也提升了其在全球电子行业中的竞争力。

通过以上五个故事,我们可以看到Antenna Factor公司在电子行业中的发展历程和取得的成就。他们以技术创新为驱动,不断突破自我,积极拓展市场,加强质量管理和品牌建设,逐步实现了公司的快速发展和壮大。未来,随着无线通信技术的不断进步和应用领域的不断拓展,相信Antenna Factor公司将继续保持领先地位,为电子行业的发展做出更大的贡献。

Antelec公司的发展小趣事

为了确保产品质量的稳定性和可靠性,Antelec公司高度重视质量管理体系的建设。公司引入了国际先进的质量管理标准,建立了完善的质量管理体系,并不断加强员工的质量意识和技能培训。这些举措使得公司的产品质量得到了持续提升,赢得了客户的广泛认可。

GE Industrial Solutions公司的发展小趣事
光耦的隔离作用虽然能减少电气噪声的干扰,但光耦本身也可能引入噪声。解决方法包括选择低噪声的光耦,或在电路中加入滤波电路。
Federal Custom Cable公司的发展小趣事

在电缆产品性能和质量得到提升的同时,Federal Custom Cable也积极开拓新的市场领域。他们深入了解不同行业对电缆的需求特点,针对不同行业推出了一系列定制化的电缆产品。这些产品广泛应用于通信、医疗、航空等领域,并赢得了客户的一致好评。同时,Federal Custom Cable还加强了品牌建设和市场推广力度,提高了品牌知名度和美誉度。

绿索超容(GreenSource)公司的发展小趣事

在追求企业发展的同时,Federal Custom Cable也积极履行社会责任。他们注重绿色生产,采用环保材料和生产工艺,减少对环境的影响。同时,Federal Custom Cable还积极参与公益事业和慈善活动,回馈社会。这种关注社会责任、追求绿色发展的企业精神,使Federal Custom Cable在电缆行业中树立了良好的企业形象。

E-Switch公司的发展小趣事

随着公司的发展,E-Switch不断推出新产品,以满足不同客户的需求。从最初的轻触开关,到后来的防破坏按钮、摇杆开关、滑动开关等多种类型,E-Switch的产品线逐渐丰富起来。同时,公司也积极拓展市场,将产品销往全球各地,进一步提升了品牌影响力。

问答坊 | AI 解惑

【藏书阁】公用仪表基础教程

目录 第1 章 电子仪表的优点 1.1 可靠性和耐用性 ..............................................................................................3 1.2 高精度 .......................................................................... ...…

查看全部问答>

为什么不开设有关FPGA(CPLD)论坛?

   eeworld里面有这么多的论坛,缺少了FPGA感觉太遗憾了…

查看全部问答>

请教!avr m8 AD转换问题!

现在做了一个AD转换用Proteus仿真时就OK,但做硬件时出错!请指教! #include #include #include \"delay.h\" #define Led_1 0b11111110                  #define Led_2 ...…

查看全部问答>

300分求牛人帮我把一个VC小游戏移植到EVC

自己移..上百个错误。. 求牛人留下E-MAIL.…

查看全部问答>

请问CPropertySheet怎么加菜单啊

用VC2005的MFC智能设备程序,请问怎么才能给属性表添加菜单啊?…

查看全部问答>

求助:关于VHDL频率计计数器分档处记数的问题

本人新来社区,希望大家给予帮助。       问题是:现在用VHDL设计数字频率计,计数器在每个分档处该如何记数?请高手指教,如有程序更好,谢谢!…

查看全部问答>

GetWindowLong()return 0

函数不能成功返回要求的32位值 hCharEvent = (HANDLE)GetWindowLong( hWnd, TEST_CHAR_EVENT ); 程序就这么一句,TEST_CHAR_EVENT 值为0,hWnd有值,不是空的。 请问可能哪里还有问题?导致失败…

查看全部问答>

Raw os 内核状态机篇

现在有很多操作系统的内部任务状态机制不全,直接导致了bug的产生,具体名字就不指明了。 Raw os  的内部任务状态非常健全,以下结构体定义了任务的状态机制。 enum RAW_TASK_STATUS {     RAW_RDY = 0,     RA ...…

查看全部问答>

选择FPGA开发板

由于项目需求,现要选择一款FPGA的开发板,由于本人是菜鸟一个,之前没有接触过FPGA,不知道如何选择。具体要求就是xilinx virtex-6的主芯片,主要用于多路的信号处理,要求处理速度快,存储器容量要大。不知如何选择,有哪些可供选择。 有哪位大 ...…

查看全部问答>

求救大神啊,双闭环直流电机调速转速环数字PID调节器

救救小弟吧,给个双闭环直流电机调速转速环数字PID调节器仿真图和程序啊,感激不尽…

查看全部问答>