tag 标签: ds3234

相关博文
  • 热度 27
    2013-1-16 10:12
    3743 次阅读|
    6 个评论
    前段时间做了一个小东西,设计要求系统精确计时且体积要小,最后选择了以前没有接触过的一款时钟芯片——DS3234SN。系统所用的MCU为ATmega8,与3234之间通过SPI总线通信。此款芯片应用极为方便。先将部分使用心得整理出来。   首先焊接电路时,一定要仔细,以防虚焊,本人当初就以为3234的DIN脚虚焊折腾了将近半个月。   ————————SPI初始化   void Init_SPI(){ DDRB |= _BV(PB5) | _BV(PB3) | _BV(PB2);//单片机的PB5连芯片的SCK,PB3(MOSI)                连芯片的DIN,PB2(MISO)连芯片的CS SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0) | _BV(CPOL) | _BV(CPHA); //SPI使能,主机模式,16分频,模式3(也可设置为模式1),MSB首发 } ————————发送 INT8U SPI_Send(INT8U dat){//主机向芯片发送一个字节,同时主机接收到芯片交换回来的一个字节 SPDR=dat;//启动数据传输 while(!(SPSR _BV(SPIF)));//等待结束 SPSR |= _BV(SPIF);//清中断标志 return SPDR;//返回接收缓冲器中的数据 } ——————向3234写入一个字节 void DS3234_write_byte(INT8U addr,INT8U date){ SPDR=addr; while(!(SPSR _BV(SPIF))); SPSR |= _BV(SPIF); SPI_Send(date); } —————从3234读出一个字节 INT8U DS3234_read_byte(INT8U addr){ INT8U date; SPDR=addr; date=SPI_Send(0XFF); return date; } —————设置时间 void Set_DS3234(){//需要一次依次写入所有时间位 ...... SPI_EN(); SPI_Send(0X80); SPI_Send(Time );//s SPI_Send(Time );//m SPI_Send(Time );//h SPI_Send(0X02);//dow 星期位未用到 一直设置为2 SPI_Send(Time );//d SPI_Send(Time );//m SPI_Send(Time );//y SPI_DS(); } ————读时间 void ReadTime(){//这两个函数功能相同,只是为了方便后面的操作 ...... SPI_EN(); Time =DS3234_read_byte(0X00); SPI_DS(); SPI_EN(); Time =DS3234_read_byte(0X01); SPI_DS(); SPI_EN(); Time =DS3234_read_byte(0X02); SPI_DS(); SPI_EN(); Time =DS3234_read_byte(0X04); SPI_DS(); SPI_EN(); Time =DS3234_read_byte(0X05); SPI_DS(); SPI_EN(); Time =DS3234_read_byte(0X06); SPI_DS(); }  
相关资源