📄 time_a.c
字号:
//****************************************************************************
//文件名: Time_A.c
//描述:定时器A程序。使用TimeA。
// 晶体振荡器 XT2:8MHz LFXT1:32.768kHz
// SMCLK :2MHz
// 定时周期 = R_cycle / 2MHz
//****************************************************************************
#include <msp430x14x.h>
#include "Time_A.h"
#include "Ctrl_Temp.h"
#include "ds18b20.h"
#include "Receiver.h"
#include "pwm_timer_b.h"
void TskTimCh0(void);
void TskTimCh1(void);
void TskTimCh2(void);
void TskTimCh3(void);
void TskTimCh4(void);
unsigned int TimCh0; //加热制冷延时2S
unsigned int TimCh1; //DS18B20温度转换延时
unsigned int TimCh2; // 接收超时200ms
unsigned int TimCh3; //制冷模式下形成 PWM波占空比
unsigned int TimCh4; //
volatile unsigned char Ctrl_Temp_Flag = STOP_HEAT_COOL;
volatile unsigned char SetHigh = 0;
volatile unsigned char SetLow = 0;
volatile unsigned char PWMFLAG = 0;
//****************************************************************************
//定时器初始化函数
//描述:设置定时器A为10mS中断,作为系统时钟
//调用:其他外设初始化函数
//****************************************************************************
void InitTimeA(void)
{
TACTL = TASSEL_2 + TACLR + ID_0; // SMCLK, clear TAR
CCTL0 = CCIS_0 + CM_3 + CAP;
CCTL1 = CM_0;
CAPSEL |= CAPIO; /*选择第二功能*/
CAPDIR &= ~CAPIO; /*置为输入方式*/
}
///////////////////////////////////////////////////////////////////////////////
/// 启动定时器
/// @param[in] doit 0: 停止, 非0值: 启动
///////////////////////////////////////////////////////////////////////////////
void GoTimer(unsigned char doit)
{
if(doit==0)
{TACTL &= ~MC1; CCTL1 &= ~CCIE;}
else
{TACTL |= MC_2+TACLR; CCTL1 |= CCIE; CCR1 = R_cycle;}
}
//#pragma vector=TIMERA0_VECTOR
//__interrupt void TimeA0()
//{
//// if((TAIFG & BIT0) == 1)
//// TAIFG &= ~BIT0; //清除中断标志
//
// if(++CapTime==CNT)
// ctrl_temp_flag = 1; //每2秒把标志位置1
//}
#pragma vector=TIMERA1_VECTOR
__interrupt void TimeA1()
{
switch(TAIV)
{
case 2:
/*定时处理函数*/
{
if(TimCh0)
{
TimCh0--;
if(TimCh0==0) TskTimCh0();
}
if(TimCh1)
{
if (FRAME_OK())
HandleCommand();
TimCh1--;
if(TimCh1==0) TskTimCh1();
}
if(TimCh2)
{
TimCh2--;
if(TimCh2==0) TskTimCh2();
}
if(TimCh3)
{
TimCh3--;
if(TimCh3==0) TskTimCh3();
}
if(TimCh4)
{
TimCh4--;
if(TimCh4==0) TskTimCh4();
}
}
CCR1 += R_cycle; /*MC_2:continuous mode*/
break;
case 4:
break;
case 10:
break;
}
}
void TskTimCh0(void)
{
Ctrl_Temp_Flag = START_HEAT_COOL;
TimCh0 = HEAT_COOL_INTERVAL;
}
void TskTimCh1(void)
{
ConverFlag = 1;
}
void TskTimCh2(void)
{
}
void TskTimCh3(void)
{
if(PWMFLAG)
{
TimCh4 = GetMsValue(PF1*iScale); //PWM高电平输出
P4OUT |= BIT1;
}
}
void TskTimCh4(void)
{
if(PWMFLAG)
{
TimCh3 = GetMsValue(PF1*(1-iScale)); //PWM低电平输出
P4OUT &= ~BIT1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -