📄 msp430f149-
字号:
/****************************************************************
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 + -