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

📄 main.c

📁 在89S52上运行的一个测量频率的并且利用串口通信的程序
💻 C
字号:
#include "main.h"
#include "init.h"
#include "x5045.h"
#include "flux.h"
#include "comuni.h"
#include "filter.h"


void       set_freq(uint  fre)         ;
static     uchar    time_H,  time_L    ;               //存放计时时间  
static     uint     time_enter         ;

void  main(void)
{
	static    uint     time ,time_av                ;
	static    uint     time1 ,time2         ;
	static    uint     data_send            ;
	static    uint     i                    ;
	static    uchar    eleven               ;

	init()    ;
	wr_sr(0)  ;                                //设置1.4秒的看门狗,不保护数据
	TR2 = 1   ;                                //启动定时器 2
	dog()     ;
	eleven = 11 ;


	while(1)                                     //循环一周的时间大约是7.5ms
	{
		
		time_enter += 1 ;  
	
		if(time_enter >= 5) 
		{

			time = 5730 ;
			eleven = 11 ;
			time_enter = 10 ; 
		}else
		{
			for(i =999 ; i <= 10000 ; i ++) 
  		   	{
				if(i == 1000) 
				{
					time1 = time_H  ;
					time1 <<= 8     ;
					time1 = time1 + (uint)time_L ;
				} 
				if(i == 9000) 
				{
					time2 = time_H  ;
					time2 <<= 8     ;
					time2 = time2 + (uint)time_L ;
				} 

				
		
			}  
			if(time1 == time2)
			{
				time = time1 ;
			}  
		} 
//		if(eleven != 11)
//		{
			time_av = filte(time) ; 	
//		}else
  /*	    {
			for( i = 0 ;i <= 9 ;i ++)
			{
				time_av = filte(time) ;
			}
			eleven = 0 ;	
		}  

*/
 		
		dog() ;
		data_send = press(time_av) ;                              //计算压力 

 	    comuni(data_send)  ; 
//		comuni(time_av) ;
		set_freq(data_send) ;

		dog()  ;

	}		
}





void   measure_freq(void)   interrupt   0       //外部中断 0   压频输入  
{   
	static uchar ss = 0 ;
	if(ss == 0)                            //注意是双等号 == 
	{
		TH1 = 0 ;                          //16位定时器1测量频率的周期  
		TL1 = 0 ;
		TR1 = 1 ;
		ss  = 1 ;
		time_enter = 0 ;   
		return  ;
	}		
	if(ss == 1) 
	{	
		TR1 = 0 ;
		time_H = TH1 ;
		time_L = TL1 ;
		ss = 0 ;
		time_enter = 0 ;
		return  ;
	}
	
}





/*
void   measure_freq(void)   interrupt   2       //外部中断 1   流量输入中断 
{   
	static uchar ss=0;
	if(ss == 0)                    //注意是双等号 == 
	{
		TH1=0;                   //16位定时器1测量频率的周期  
		TL1=0;
		TR1=1;
		ss=1;
		time_inter = 0 ;
		return ;
	}		
	else
	{	
		TR1=0;
		flux_H=TH1;
		flux_L=TL1;
		ss=0;
		time_inter = 0 ;
		return ;
	}
	
}

*/
void  timer2_isr (void)   interrupt   5
{
	TF2 = 0;
	OUT4 = !OUT4 ;
	return ;
}



void set_freq(uint  fre)  
{   
    uint  rcap_press , press_set; 
	uint  press ;
	press  =  fre ;
   	press_set = press * 0.8 + 200  ;                      //转换成频率输出 
	rcap_press  = 65536 - 1000000 / (press_set * 2);  
	RCAP2H = rcap_press >> 8 ;              
	RCAP2L = rcap_press ;

    
}

	



/*x5045复位看门狗函数~~~~~~~~~~~~~*/
void dog(void)
{
    CS=0;
    CS=1;
}


⌨️ 快捷键说明

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