📄 main.c
字号:
#include <msp430x16x.h>
#include "i2c.h"
int v_flag;
void InitSVS(void);
void Init_TimerB(void);
void alarm(void);
void main(void)
{
int i;
volatile unsigned char Data[6];
//停止看门狗
WDTCTL = WDTPW+WDTHOLD;
//初始化端口
Init_Port();
//初始化时钟
Init_CLK();
//I2C初始化
InitI2C();
//电压监控模块初始化
InitSVS();
//定时器初始化
Init_TimerB();
v_flag = 0;
//打开中断
_EINT();
for(;;)
{
//检测到低电压发生
if(v_flag == 1)
{
v_flag = 0;
//保存数据处理
//测试目的,保存的假的数据
//实际应用中需要修改
//写入数据
for(i = 0;i < 10;i++)
{
EEPROM_ByteWrite((unsigned char)i,(unsigned char)i);
//等待写操作完成
EEPROM_AckPolling();
}
//发出告警信号
alarm();
}
}
}
void alarm(void)
{
int i = 0;
int j = 0;
//发出10次单音信号
for(i = 0;i < 10;i++)
{
//高电平
P1OUT |= BIT2;
//持续一段时间
for(j = 100;j > 0;j--) ;
//低电平
P1OUT &= ~(BIT2);
//持续一段时间
for(j = 100;j > 0;j--) ;
}
}
void InitSVS()
{
//VLDx的值设置为0101,门限电压为2.4V
//低电压产生时,不产生复位信号
SVSCTL = VLD2 + VLD0;
}
void Init_TimerB(void)
{
//选择ACLK,清除TAR
TBCTL = TBSSEL0 + TBCLR;
//TBCCR0 中断允许
TBCCTL0 = CCIE;
//时间间隔为 1 s
TBCCR0 = 32768;
//增记数模式
TBCTL |= MC0;
}
#if __VER__ < 200
interrupt [TIMERB0_VECTOR] void TimerB_ISR(void)
#else
#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB_ISR(void)
#endif
{
int res = 0;
//取处标志
res = SVSCTL & BIT0;
if(res == 1)
{
v_flag = 1;
SVSCTL &= ~(BIT0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -