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

📄 main.c

📁 MSP430单片机常用模块与综合系统实例精讲
💻 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 + -