⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430f149-

📁 MSP430F149实验板实验代码
💻
📖 第 1 页 / 共 2 页
字号:
/****************************************************************
D1302 驱动程序--基于MSP430F149
作 者:张 暄
(c) 2008.9
┌───────┬───────────────────────┐
│硬件连接示意图│                                              │
├───────┘	         				│
│                       					│
│			  ┌───────┐			│
│			  │		  │			│
│			  │  MSP430F149  │			│
│			  │		  │			│
│	┌─────┐	  │		  │			│
│	│  ╰╯    │	  │		  │			│
│	│ DS1302   │	  │		  │			│
│	│          │	  │		  │			│
│	│	SCLK│<---│P3.6	  │			│
│	│	I/O │<-->│P3.7	  │			│
│	│	#RST│<---│P3.2	  │			│
│	└─────┘	  └───────┘			│
│								│
│								│
│※示意图仅供表示两器件间连接情况,不作为真实的硬件原理图	│
│								│
└───────────────────────────────┘
****************************************************************/
# include <msp430x14x.h>

#define sclk BIT6
#define dio BIT7
#define rst BIT2

/****************************************************************
※ 数据读函数
※ 底层函数,用户不可访问
※ 功能: 模拟数据读时序,完成基本的数据读取
※ 参数说明: dataread ( 欲访问地址 )
※ 返回值说明: 返回读出数据
****************************************************************/

unsigned char dataread (unsigned char addr)
{
  unsigned char i,dat = 0x00;
  P3DIR |= 0xc4;
  P3OUT &= ~sclk;//sclk=0;
  P3OUT |= rst;//rst=1;
  _NOP();
  for (i=0;i<8;i++)
  {
    P3OUT &= ~sclk;//sclk=0;
    if (addr & 0x01)
      P3OUT |= dio;//dio=1;
    else
      P3OUT &= ~dio;//dio=0;
    _NOP();
    P3OUT |= sclk;//sclk=1;
    _NOP();
    addr >>= 1;
  }
  P3OUT &= ~sclk;//sclk=0;
  P3DIR &= ~dio;
  for (i=0;i<8;i++)
  {
    dat >>= 1;
    if (P3IN & dio)
      dat |= 0x80;
    _NOP();
    P3OUT |= sclk;//sclk=1;
    _NOP();
    P3OUT &= ~sclk;//sclk=0;
  }
  P3OUT &= ~rst;//rst=0;
  return dat;
}

/****************************************************************
※ 数据写函数
※ 底层函数,用户不可访问
※ 功能:  模拟数据写时序,完成基本的数据写入
※ 参数说明: datawrite ( 欲写入数据的地址,欲写入的数据)
※ 返回值说明: 无返回值
****************************************************************/

void datawrite (unsigned char addr,unsigned char dat)
{
  unsigned char i;
  P3DIR |= 0xc4;
  P3OUT &= ~sclk;//sclk=0;
  P3OUT |= rst;//rst=1;
  _NOP();
  for (i=0;i<8;i++)
  {
    if (addr&0x01)
      P3OUT |= dio;//dio=1;
    else
      P3OUT &= ~dio;//dio=0;
    _NOP();
    P3OUT |= sclk;//sclk=1;
    _NOP();
    addr>>=1;
    P3OUT &= ~sclk;//sclk=0;
  }
  for (i=0;i<8;i++)
  {
    if (dat&0x01)
      P3OUT |= dio;//dio=1;
    else
      P3OUT &= ~dio;//dio=0;
    _NOP();
    P3OUT |= sclk;//sclk=1;
    _NOP();
    dat>>=1;
    P3OUT &= ~sclk;//sclk=0;
  }
  _NOP();
  P3OUT &= ~rst;//rst=0;
}

/****************************************************************
※ RAM写函数
※ 功能:  将数据写入片内的RAM中
          其中,地址范围为0x00-0x1e,数据范围为0x00-0xff。
          该函数对错误的地址将不做任何操作
※ 参数说明: rtc_ramwrite ( 欲写入数据的地址,欲写入的数据)
※ 返回值说明: 无返回值
****************************************************************/

void rtc_ramwrite (unsigned char addr,unsigned char dat)
{
  if (addr<=0x1e)
  {
    addr<<=1;
    addr|=0xc0;
    datawrite(addr,dat);
  }
}

/****************************************************************
※ RAM读函数
※ 功能:  将片内的RAM中的数据读出
          其中,地址范围为0x00-0x1e
          该函数对错误的地址将不做任何操作
※ 参数说明: rtc_ramread ( 数据的地址)
※ 返回值说明: 读出数据
****************************************************************/

unsigned char rtc_ramread (unsigned char addr)
{
  unsigned char dat;
  if (addr<=0x1e)
  {
    addr<<=1;
    addr|=0xc1;
    dat=dataread(addr);
  }
  return dat;
}

/****************************************************************
※ 写保护功能开关函数
※ 功能:  打开或关闭写保护
※ 参数说明: rtc_wp (开/关数据)
              其中0-关闭写保护,1-打开写保护
※ 返回值说明: 无返回值
****************************************************************/

void rtc_wp (unsigned char wp)
{
  if (wp)
    datawrite(0x8e,0x80);
  else
    datawrite(0x8e,0x00);
}

/****************************************************************
※ 充电器控制函数
※ 功能:  设定充电器参数
          该函数对错误的参数将不做任何操作
※ 参数说明: rtc_charger (DS,RS)
              其中DS-充电二极管数量选择,RS-充电电阻选择
              ──┬──────  ──┬──────
              DS  │  二极管数量  RS  │  电阻数量
              ──┼──────  ──┼──────
              0   │  禁止充电器  0   │  禁止充电器
              1   │  1只二极管   1   │  2kΩ电阻
              2   │  2只二极管   2   │  4kΩ电阻
              ──┴──────  3   │  8kΩ电阻
                                  ──┴──────
※ 返回值说明: 无返回值
****************************************************************/

void rtc_charger (unsigned char ds,unsigned char rs)
{
  unsigned char charger=0xa0;
  if ((ds<=2)&&(rs<=3))
  {
    ds<<=2;
    charger|=ds;
    charger|=rs;
    datawrite (0x90,charger);
  }
}

/****************************************************************
※ 时钟停止控制函数
※ 功能:  打开或关闭时钟
※ 参数说明: rtc_stop (开/关数据)
              其中0-开启时钟,1-关闭时钟,进入功耗状态
※ 返回值说明: 无返回值
****************************************************************/

void rtc_stop (unsigned char ch)
{
  unsigned char chold;
  chold=dataread (0x81);
  if (ch)
    datawrite (0x80,chold|0x80);
  else
    datawrite (0x80,chold&0x7f);
}

/****************************************************************
※ 时间格式设置函数
※ 功能:  设置时间格式
※ 参数说明: rtc_format (格式数据)
              其中0-24小时制,1-12小时制
※ 返回值说明: 无返回值
****************************************************************/

void rtc_format (unsigned char f)
{
  unsigned char formatold;
  formatold=dataread(0x85);
  if (f)
    datawrite (0x84,formatold|0x80);
  else
    datawrite (0x84,formatold&0x7f);
}

/****************************************************************
※ 读取秒函数
※ 功能:  读取秒数据
※ 参数说明: rtc_getsec () , 无参数
※ 返回值说明: 返回秒数据
****************************************************************/

unsigned char rtc_getsec ()
{
  unsigned char sec,sectemp;
  sectemp=dataread(0x81);
  sec=sectemp&0x0f;
  sectemp&=0x70;
  sectemp>>=4;
  sec=sectemp*10+sec;
  return sec;
}

/****************************************************************
※ 读取分函数
※ 功能:  读取分数据
※ 参数说明: rtc_getmin () , 无参数
※ 返回值说明: 返回分数据
****************************************************************/

unsigned char rtc_getmin ()
{
  unsigned char min,mintemp;
  mintemp=dataread(0x83);
  min=mintemp&0x0f;
  mintemp>>=4;
  min=mintemp*10+min;
  return min;
}

/****************************************************************
※ 读取时函数
※ 功能:  读取时数据
※ 参数说明: rtc_gethour () , 无参数
※ 返回值说明: 返回时数据
****************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -