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

📄 cputimerb.c.bak

📁 原创的msp430单片机的整套编码 包括通信,红外检测,软件计时等多种功能
💻 BAK
字号:
/**********************************************************
*文件名称:time.c
*当前版本:1.0
*作    者:szb
*编写日期:2006.11.1
*摘    要:为系统提供时钟,并负责键盘扫描
***********************************************************/
#ifndef _TIMEB
#define	_TIMEB
#include	"datastru.h"
#include	"func.h"
#endif

void TBinit(void)	//定时器初始化
{
	TBCCTL1 = CCIE;                         // CCR1 interrupt enabled
	TBCCR1 = 40960;//32771;							// 100ms中断一次
	TBCCTL2 = CCIE;							// CCR2 interrupt enabled
	TBCCR2 = 819;//6554;//16384;							// 2ms中断一次

	TBCTL = TBSSEL_2 + ID_0 + TBCLR;		// SMCLK(3.2768M/8), devider = 1, clear TBR
	TBCTL |= MC1;							// 以连续计数模式启动TimerB
	
	Degree = 0;
	
}

interrupt [TIMERB1_VECTOR] void TimerB_ISR(void)
{
    
  _DINT(); //关闭中断
	switch (TBIV)
	{
		case 2: 	//100ms
			/*采用中断方式进行进行时钟计数,现在的写法 有可能产生错误数据例如month=13,调试时应该注意*/
		 Clocktime[6] = Clocktime[6] + 1;

		 if (Clocktime[6] == 10)  //毫秒进位
		 {
			 Clocktime[6] = 0;
			 Clocktime[5] = Clocktime[5] +1;
		 }

         if (Clocktime[5] == 60) //秒进位
		 {
			 Clocktime[5] = 0;
			 Clocktime[4] = Clocktime[4]+1;
		 }

		 if (Clocktime[4] == 60)//分钟进位
		 {
			 Clocktime[4] = 0;
			 Clocktime[3] = Clocktime[3] + 1;
		 }

		 if (Clocktime[3] == 24)//小时进位
		 {
			 Clocktime[3] = 0;
			 Clocktime[2] = Clocktime[2] + 1;
		 }

		 if (((Clocktime[1] == 1 || Clocktime[1] == 3 || Clocktime[1] == 5 || Clocktime[1] == 7 || Clocktime[1] == 8 ||
			 Clocktime[1] == 10 || Clocktime[1] == 12) && Clocktime[2] == 32) 
			 ||((Clocktime[1] == 4 || Clocktime[1] == 6 || Clocktime[1] == 9 || Clocktime[1] == 11) && Clocktime[2] == 31)
			 || (!(Clocktime[0] % 4) && Clocktime[1] == 2 && Clocktime[2] == 30 )
			 || (Clocktime[0] % 4 && Clocktime[1] == 2 && Clocktime[2] == 29 )) //日进位
		 {
			 Clocktime[2] = 1;
			 Clocktime[1] = Clocktime[1]+1;
		 }
		
		 if (Clocktime[1] == 13) //月进位
		 {
			 Clocktime[1] = 1;
			 Clocktime[0] = Clocktime[0]+1;
		 }

				if (BeeCount)//售烟定时器
					BeeCount--;
				
				TBCCR1 = TBCCR1 + 40960;//32771;
				break;
				
				
		case 4: //2ms
			if(FilterEnable == OFF)//加入FilterEnable == OFF条件为了防止在率波过程中,数组中的数据被改动
				{
					MotorVdetect[Degree] = ADC12MEM0;
			    PowerVdetect[Degree] = ADC12MEM1;
			    Degree++;
			    
			    if (Degree >= 3)
			    	{
			    		Degree = 0;  //开始新的一组计数
					    FilterEnable = ON;  //允许滤波
			    	}
				}
				ADC12CTL0 |= ADC12SC;  //检测电压开始新一轮转换
				
				if (MotorRunEnable)
					{	
						BeeNum++;
						if(!(P1IN & BIT7) && BeeNum >= 5000)//烟道正转等待时延10s	
							{
								BeeAlarmEnable = BEEALARMCN;
								MotorStopEnable = ON;
								BeeNum = 0;
							}
						 if(P1IN & BIT7 && BeeNum >= 15000)//烟道反转等待时延30s
							{
							 BeeAlarmEnable = BEEALARMCN;
							 MotorStopEnable = ON;
							 BeeNum = 0;			
					        }
							
						TBCCR2 = TBCCR2 + 819;//6554;//16384;
			      break;
					}
			
					BeeNum = 0;
					
			TBCCR2 = TBCCR2 + 819;//819;//6554;//16384;
			break;
		
		default:break;
	}
	_EINT();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -