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

📄 time_a.c

📁 MSP430开发的使用PID算法温度控制程序 本程序通过485总线与上位机通信发送和接受命令
💻 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 + -