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

📄 cs_zs.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
sys_data_type	TIM_FLAGS;
#define		zs_flag		TIM_FLAGS.Bit.BIT0	//转速信号有信号标志
#define		cs_flag		TIM_FLAGS.Bit.BIT1
#define		pulse_flag	TIM_FLAGS.Bit.BIT2
unsigned char	zs_count=0;			//转速脉冲计数器
unsigned int	zs_temp=0;
unsigned int	zs[21],zs_c[21];

unsigned char	cs_count=0;			//车速脉冲计数器
unsigned int	cs_temp=0;
unsigned int	cs[11],cs_c[11];

unsigned char	lch_count=0;
unsigned long licheng;


void Init_TIM(void)
{
	//车速
	T1SC=0x46;							//64分频		524280us
	T1SC1=0x48;							//下降沿捕捉中断
	//转速

	T2SC=0x46;	//0x43						//8分频			65535us
  T2SC1=0x48;							//下降沿捕捉中断
}
//***********************定时器1中断服务函数***********************************
void interrupt 6 TIM1_INTSVR(void)
{
	T1SC_TOF=0;							//清溢出中断标志
	if(cs_flag)
	{
		cs_c[cs_count]=0;
		cs_count++;
		if(cs_count==11)  cs_count=0;
	}
	cs_flag=1; 
	LED=!LED;
}
//***********************车速(T1CH1)中断服务函数*****************************
void interrupt 5 Capture_chesu(void)
{
	unsigned char	csh,csl;
	T1SC1_CH1F=0;						//清捕捉中断标志
	csh=T1CH1H;
	csl=T1CH1L;

	cs_c[cs_count]=csh*0x100+csl;
	cs_c[cs_count]=cs_c[cs_count]-cs_temp;
	cs_temp=csh*0x100+csl;

	cs_count++;
	if(cs_count==11) cs_count=0;
	
	
	lch_count++;
	if(lch_count==8)
	{
	  lch_count=0;
	  licheng++;
	}
	
	cs_flag=0;
}


//////////////////////////////////////////////////////////////
//定义:	 void  sub_chesu(void)								//
//描述:	 计算车速值,结果Km/h/byte,填写报文				//
//////////////////////////////////////////////////////////////

unsigned int cs_step=0;
void sub_chesu(void)
{
	unsigned char	i;
	unsigned char	break_count=11;
	unsigned int	cstemp;
	unsigned long	data_temp;
	
	for(i=0;i<11;i++) cs[i]=cs_c[i];
	
		pulse_flag=1;											//排序,小--》大
		while(pulse_flag)
		{
			pulse_flag=0;
			break_count--;
			if(break_count!=0)
			{
				for(i=0;i<10;i++)
				{
					if(cs[i]>cs[i+1])
					{
						pulse_flag=1;
						cstemp=cs[i];
						cs[i]=cs[i+1];
						cs[i+1]=cstemp;
					}
				}
			}
		}
		data_temp=cs[4]+cs[5];							
		data_temp=data_temp/2;							//取中间两个的平均作为车速信号周期
		cstemp=(unsigned int)data_temp;
		if(cstemp==0) cs_step=0;
		else if(cstemp<330)	cs_step=2863;					//频率不大于378HZ
		else
		{
			  data_temp=945000/data_temp;
			  cs_step=(unsigned int)data_temp;
		}		
}

//***********************定时器2中断服务函数***********************************
//100ms

void interrupt 9 TIM2_INTSVR(void)
{
	T2SC_TOF=0;							//清溢出中断标志
	/*
	if(zs_flag)
	{
		zs_c[zs_count]=0;
		zs_count++;
		if(zs_count==21)  zs_count=0;
	}
	zs_flag=1;
	*/
} 

//***********************转速(T2CH1)中断服务函数*****************************
unsigned char zscount=0;
void interrupt 8 Capture_zhuansu(void)
{
	unsigned char	zsh,zsl;
	T2SC1_CH1F=0;						//清捕捉中断标志
	zsh=T2CH1H;
	zsl=T2CH1L;
  /*
	zs_c[zs_count]=zsh*0x100+zsl;
	zs_c[zs_count]=zs_c[zs_count]-zs_temp;
	zs_temp=zsh*0x100+zsl;
	zs_count++;
	if(zs_count==21) zs_count=0;
	zs_flag=0;
	*/
	zscount++; zs_flag=0;
}
//////////////////////////////////////////////////////////////
//定义:	 void  sub_zhuansu(void)							//
//描述:	 计算转速值,结果20rpm/byte,填写报文				//
//////////////////////////////////////////////////////////////

unsigned int zs_step=0;
/*void sub_zhuansu(void)
{
	unsigned char	i;
	unsigned char	break_count=21;
	unsigned int	zstemp;
	unsigned long	data_temp;
	for(i=0;i<21;i++) zs[i]=zs_c[i];
	
	pulse_flag=1;											//排序,小--》大
		while(pulse_flag)
		{
			pulse_flag=0;
			break_count--;
			if(break_count!=0)
			{
				for(i=0;i<19;i++)
				{
					if(zs[i]>zs[i+1])
					{
						pulse_flag=1;
						zstemp=zs[i];
						zs[i]=zs[i+1];
						zs[i+1]=zstemp;
					}
				}
			}
		}
		data_temp=zs[8]+zs[9]+zs[10]+zs[11];//data_temp=zs[9]+zs[10];//
		data_temp=data_temp/4;///4取平均值
		zstemp=(unsigned int)data_temp;
		if(zstemp==0)     zs_step=0;
		else if(zstemp<138)		zs_step=2536;		//3019转
		else
		{
		 data_temp=350000/(data_temp);
		  zs_step=(unsigned int)data_temp;
		}
}
*/

⌨️ 快捷键说明

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