DS1302时钟芯片的MSP430程序

发布者:WhisperingWaves最新更新时间:2016-02-26 来源: eefocus关键字:DS1302  时钟芯片  MSP430程序 手机看文章 扫描二维码
随时随地手机看文章
//MSP430 Advanced Developping Components - [DS1302_430.C]

////DS1302 Trickle Charge Timekeeping Chip


//MSP430高级实验开发组件 - DS1302时钟芯片
//时钟设置:
////ACLK=N/A,MCLK=SMCLK=default(DCO~800k)
//硬件连接:
////       MSP430 MCU                   DS1302
////   ------------------         ------------------
////       P20       | ------> |     SCLK       |
////       P21       | ------> |      RST       |
////       P22       | ------> |      SDI       |
////   ------------------         ------------------
////       MSP430 MCU                   KEYS
////   ------------------         ------------------
////   ------------------         ------------------ 
//当前演示程序功能描述:
////

#include

#define DS1302_DIR  P2DIR
#define DS1302_IN  P2IN
#define DS1302_OUT  P2OUT

#define DS1302_RST  BIT1
#define DS1302_SCLK  BIT0
#define DS1302_SDI  BIT2  //定义MSP320的端口

#define DS1302_RST_LO  DS1302_OUT &= ~DS1302_RST
#define DS1302_RST_HI  DS1302_OUT |= DS1302_RST
#define DS1302_SCLK_LO  DS1302_OUT &= ~DS1302_SCLK
#define DS1302_SCLK_HI  DS1302_OUT |= DS1302_SCLK
#define DS1302_SDI_LO  DS1302_OUT &= ~DS1302_SDI
#define DS1302_SDI_HI  DS1302_OUT |= DS1302_SDI

void DS1302_Delay(unsigned int dtime);
void DS1302_Reset(void);
void DS1302_WriteOneByte(unsigned char w_dat);
void DS1302_WriteData(unsigned char addr,unsigned char w_dat);
void DS1302_SettingData(void);
void DS1302_GetData(unsigned char *str);
unsigned char DS1302_ReadOneByte(void);
unsigned char DS1302_ReadData(unsigned char addr);

unsigned char SettingData[7]={ //bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
 0x07,    //--------十位-------|-------个位--------|年份(当前07年)
 0x07,    //                        |-----个位-----|星期(当前周日)
 0x07,    //              |十位|-------个位--------|月份(当前07月)
 0x01,    //         |--十位---|-------个位--------|日期(当前01号)
 0x18,    //-12H|    |--十位---|-------个位--------|小时(当前18点)
 0x20,    //    |-----十位-----|-------个位--------|分钟(当前20分)
 0x30    //    |-----十位-----|-------个位--------|秒钟(当前30秒)
};
unsigned char ReadingData[7];  //读出来的数据,同SettingData定义与格式

 

//延时函数
void DS1302_Delay(unsigned int dtime) {
 unsigned int temp;
 for(temp=0;temp }

//DS1302复位
void DS1302_Reset(void) {
 DS1302_DIR |= (DS1302_RST + DS1302_SCLK);
 DS1302_SCLK_LO;
 DS1302_RST_LO;
 DS1302_Delay(10);
 DS1302_SCLK_HI;
}

//向DS1302写入一个字节
void DS1302_WriteOneByte(unsigned char w_dat) {
 unsigned char temp;
 
 DS1302_RST_HI;
 DS1302_DIR |= DS1302_SDI;
 
 for(temp=8;temp>0;temp--) {
  DS1302_SDI_LO;
  if(w_dat&BIT0) DS1302_SDI_HI;
  DS1302_SCLK_LO;
  DS1302_Delay(10);
  DS1302_SCLK_HI;
  DS1302_Delay(10);
  w_dat >>=1;
 }
}

//从DS1302中读取一个字节
unsigned char DS1302_ReadOneByte(void) {
 unsigned char temp,rdata;
 rdata = 0x00;
 
 DS1302_RST_HI;
 DS1302_DIR &= ~DS1302_SDI;
 
 for(temp=0;temp<7;temp++){
  DS1302_SCLK_HI;
  DS1302_Delay(10);
  DS1302_SCLK_LO;
  DS1302_Delay(10);
  if((DS1302_IN&DS1302_SDI)==DS1302_SDI)
   rdata |= BIT7;
  rdata >>= 1;
 }
 
 return(rdata);
}

//向DS1302中写入地址后写入数据
void DS1302_WriteData(unsigned char addr,unsigned char w_dat) {
 DS1302_RST_LO;
 DS1302_SCLK_LO;
 DS1302_RST_HI;
 
 DS1302_WriteOneByte(addr);  //写入地址
 DS1302_WriteOneByte(w_dat);  //写入数据
 
 DS1302_SCLK_HI;
 DS1302_RST_LO;
}

//向DS1302写入地址后,从DS1302中读取数据
unsigned char DS1302_ReadData(unsigned char addr) {
 unsigned char r_dat;
 DS1302_RST_LO;
 DS1302_SCLK_LO;
 DS1302_RST_HI;
 
 DS1302_WriteOneByte(addr);  //写入地址
 r_dat = DS1302_ReadOneByte();  //读出数据
 
 DS1302_SCLK_LO;
 DS1302_RST_LO;
 
 return(r_dat);
}

//按照SettingData的设置设置DS1302的时间
void DS1302_SettingData(void) {
 unsigned char temp;
 unsigned char addr = 0x8C;
 
 DS1302_WriteData(0x8E,0x00);  //写入控制命令,禁用写保护

 for(temp=0;temp<7;temp++) {
  DS1302_WriteData(addr,SettingData[temp]);
  addr -= 2;
 }
 
 DS1302_WriteData(0x8E,0x80);  //写入控制命令,启用写保护
}

//读取DS1302时间到ReadingData中
void DS1302_GetData(unsigned char *str) {
 unsigned char temp;
 unsigned char addr = 0x8D;

 for(temp=0;temp<7;temp++) {
  str[temp] = DS1302_ReadData(addr);//年
  addr -= 2;
 }
}

关键字:DS1302  时钟芯片  MSP430程序 引用地址:DS1302时钟芯片的MSP430程序

上一篇:MSP430 ADC12模块寄存器设置解读
下一篇:MSP430内部温度传感器测试程序

推荐阅读最新更新时间:2024-03-16 14:45

基于实时时钟芯片X1227的电源控制器设计
引言 X1228是美国XICOR公司最新推出的实时时钟(RTC)芯片。与其它RTC芯片相比,X1228除有基本的时钟和报警功能外,还有4K位E2PROM存储器和复位输出、电压监控、看门狗定时、频率输出等功能。 X1228可以准确地用秒、分、时、日、星期、月、年来显示时间和日期,具有世纪字节,解决了两千年问题,自动实现闰年调整;有2路报警,可设置为按秒、分、时、日、月和星期任意组合的定时报警;还有1个可编程的频率输出引脚(PHZ),用于输出一个固定频率的方波信号;内部的4K位E2PROM存储器,可用于存储用户的设置参数或其它数据,其内容在电源失效时不会丢失;采用I2C总线与单片机接口,一次可传送多个字节的数据,数据传送的速率为4
[电源管理]
基于单片机、DS1302、DS1602的电子时钟
这是DS1602+DS1302完整程序,其中P1口接独立键盘。 DS1602部分: # include "SYSTEM.H" //#ifndef __LCD1602_8_H__ //#define __LCD1602_8_H__ //LCD接口定义 sfr io = 0x80; //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0; sbit rs = P2^6; //LCD数据/命令选择端(H/L) sbit rw = P2^5; //LCD读/写选择端(H/L) sbit ep = P2^7; //LCD使能控制 sbit bz = io^7;
[单片机]
关于MSP430F5438程序升级介绍--防迷路
摘要:介绍了一种MSP430单片机通过串口升级程序的方法,并在MSP430F5438上得以实现。通过实验,证明此方法稳定、可靠,避免了利用仿真器更新程序的繁琐,提高了效率。 关键词:MSP430F5438;串口;程序更新 随着性能的不断提高以及成本的降低,单片机在各个领域都得到了广泛的应用。尤其在信号的控制和处理方面,单片机以其超低的功耗、简单的操作成为设计者的首选。TI公司推出的MSP430x5xx系列单片机具有低电压、低功耗、高速处理能力以及配置灵活的接口等特点,是当今主流单片机之一。 同其他处理器一样,单片机正常工作除了需要硬件电路以外,还需要相应的用户应用程序。但应用程序在调试阶段以及实际使用时往往都需要更新,常规
[单片机]
关于<font color='red'>MSP430</font>F5438<font color='red'>程序</font>升级介绍--防迷路
MSP430程序库<九>数码管显示
数码管也是单片机系统最常用的输出设备之一(还有液晶、发光二极管等)。七段(这里用的是8段,有小数点)数码管可以完成显示0-9数字和一部分的英文字符如:A、b。本文实现的程序完成显示数字和可显示的英文字符;同时完成数码管显示的printf函数的移植,以支持printf的格式化字符等好用的特点(我用的数码管8个排为一排,方便数字等的显示)。 硬件介绍: 这里所用到的硬件资源包括8个数码管、和msp430单片机的两个8位IO口(这里用的是P3和P5口,如有改变,可以通过宏定义更改)。 数码管是8个共阴的数码管,a-h 8段通过一个200Ω的电阻接到430单片机的P5口。共阴端是由单片机的P3口控制,单片机的一位IO通过一个三极管
[单片机]
MSP430G2553测试程序(呼吸灯)
//MSP430G2553 呼吸灯演示程序 - 使用Timer_A,Up Mode, DCO SMCLK // // 介绍: 该程序利用TIMER A 的 UP模式 在P1.6脚产生PWM输出 // 将CCR0设置为1500来定义PWM的周期,利用循环不断改变CCR1的值, // 实现利用改变PWM的占空比来改变LED亮度. // ACLK = na, SMCLK = MCLK = TACLK = default DCO // // MSP430G2553 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // | | // | P1.6/TA1|-- CCR1
[单片机]
MSP430看门狗程序
单片机经常工作在环境干扰比较大的环境中,容易受到各种各样的干扰而使单片机不能执行正常的程序。MSP430片内集成了看门狗定时器(WDT),具有两种功能,其一作为普通的定时器,该模式下产生正常的定时中断信号;其二作为通常意义上的看门狗,用来复位单片机,避免单片机长时间处于不正常工作状态。 鉴于看门狗的工作职责,看门狗寄存器值的读写通常采用密码字+数据的方式,以防止单片机正常执行过程中对看门狗的误写。MSP430F169简单的看门狗初始化和喂狗操作程序如下所示: #include #include wdt.h /******************************************* 函数名称:看门狗
[单片机]
MSP430G2553测试程序(状态机检测按键)
//原始状态P1.6亮,P1.0暗,利用状态机进行按键检测,按下并释放的瞬间P1.0翻转,P1.6翻转 // // MSP430G2xx3 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // P1.3|KEY P1.6|-- LED // | P1.0|-- LED // 作者 http://jiwm.blog.163.com // Built with IAR Embedded Workbench Version: 5.40 / // Timer A0 interrupt service routine #pragma vector=TIMER0_A0_
[单片机]
msp430g2553:双线12864库程序
(Display)msp430g2553:双线12864库程序 ************************************************************************************************** LCD12864.H **************************************************************** LCD12864 2线程序 rs (CS) 已经外接高电平 rw (SID) P2.0 en (SCLK) P2.1 PSB 已经外接低电平 RST 已经外接高电平 硬件电路,3号引脚接的10K电阻与地间
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved