2762|0

71

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

基于msp430f149的ds1302程序 [复制链接]

#ifndef __DS1302_H__
#define __DS1302_H__
#include "msp430x14x.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int

#define sclk_in P2DIR&=~BIT5
#define sclk_out P2DIR|=BIT5
#define sclk_h P2OUT|=BIT5
#define sclk_l P2OUT&=~BIT5

#define dio_in P2DIR&=~BIT6
#define dio_out P2DIR|=BIT6
#define dio_h P2OUT|=BIT6
#define dio_l P2OUT&=~BIT6

#define ce_in P2DIR&=~BIT7
#define ce_out P2DIR|=BIT7
#define ce_h P2OUT|=BIT7
#define ce_l P2OUT&=~BIT7

static uchar shi,fen,miao,nian,yue,ri,xingqi;
//写命令以及地址
void write(uchar add,uchar date)
{
 uchar temp,t;
        ce_out;
 ce_l;
        sclk_out;
        sclk_l;
 ce_h;
 temp=add;
        dio_out;
 for(t=0;t<8;t++)//写地址命令
 {
  if((temp&0x01)==1)
   dio_h;
  else
   dio_l;
  sclk_h;
  delay(5);
  sclk_l;
  temp=temp>>1;
 }
 temp=date;
 for(t=8;t>0;t--) //写数据
 {
  if((temp&0x01)==1)
   dio_h;
  else
   dio_l;
  sclk_h;
  delay(5);
  sclk_l;
  temp=temp>>1;
 }
}
uchar read(uchar add)
{
 uchar temp,t;
        ce_out;
        sclk_out;
 ce_l;
 sclk_l;
        ce_h;
 temp=add;
        dio_out;
 for(t=0;t<8;t++)
 {
  if((temp&0x01)==1)
   dio_h;
  else
   dio_l;
  sclk_h;
  sclk_l;
  temp>>=1;
 }
 temp=0;
         dio_in;      
 for(t=0;t<7;t++)
 {
  if(P2IN&BIT6)
   temp=temp|0x80;
  else
   temp=temp&0x7f;
  sclk_h;
  sclk_l;
  temp>>=1;
 }
 //传送一个字节需要16个时钟
 return temp/16*10+temp%16;//将BCD码转换成10进制码
}
void init_time()
{
 write(0x8e,0x00);//写保护,相当于初始化或者缓冲
 write(0x80,0x00); //写秒
 write(0x82,0x50);//写分
 write(0x84,0x04); //写时
 write(0x86,(ri/10<<4)|(ri%10)); //写日
 write(0x88,(yue/10<<4)|(yue%10));//写月
 write(0x8a,(xingqi/10<<4)|(xingqi%10)); //写星期
 write(0x8c,(nian/10<<4)|(nian%10));//写年 
}
//显示时间
void get_time()
{
 shi=read(0x85);//读出时间 时
 fen=read(0x83);//读出时间 分
 miao=read(0x81);//读出时间 秒
 nian=read(0x8d);//读出时间 年
 yue=read(0x89);//读出时间 月
 ri=read(0x87);//读出时间 日
 xingqi=read(0x8b);//读出时间 星期   
}
#endif

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表