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

📄 pulse_prc.c

📁 电磁流量计的源程序。将流体流量用电磁转换方式变换成弱电信号
💻 C
字号:

/******************************/
/***    pulse danlan precess **/
/******************************/

#include "MATH.H"
#include "reg52.h"
#include "typedef.h"
#include "function.h"
#include "define.h"
#include "varible.h"

sbit DA_CS = P2^0  ;
sbit DA_CLK = P2^1  ;
sbit DA_DATA = P2^2  ;
sbit PULSE_OUT = P2^3 ;       

void Pulse_prc(void);
void Pulse_init(void);

/***********************************/
/***********************************/

void Pulse_init(void)
{
	PULSE_OUT = 1 ;              // no output
	send_pulse_number = 0 ;
   pulse_send_F = 0;
   pulse_out_en_F = 0;
	return;
}


/****************************/
/****************************/ 

void Pulse_prc(void)
{  
    
    if(net_cha <= 0.0)
    {
    	pulse_out_en_F = 0;
        return ;
    }
    	
   	else
    	{
   		    pulse_out_en_F = 0;
            send_pulse_number = (unsigned int)(net_cha*1000.0/pulse_danlan);
            
            if((send_pulse_number >= 1)&&(send_pulse_number < MAX_SEND_NUMBER))   
           {
       //    	  net_cha *= 100000 ;
         
              net_cha = net_cha - (send_pulse_number * pulse_danlan/1000.0 );   //get remain net liuliang
              pulse_out_en_F = 1 ;
         //    TF1 = 0 ;
          //   TH1 = 0xfd ;
	      //   TL1 = 0xe1; 
         //    TR1 = 1 ;            //start counter
         //    ET1 = 1 ;            //enable interrupt
           } 
      /*     else
           {
           	//net_cha = 0.0 ;
           	net_cha = net_cha - (float)send_pulse_number * pulse_danlan/1000.0 ;
       //    	send_pulse_number = 0;
          }  */
        }
    
  
}  



/*********************************/
/*********************************/

bit next_F ;
/**********************************/
/**** timer1 interrupt         ****/
/***  1ms ***********************/

void Pulse_out(void) interrupt 3
{
	EA = 0;
	TF1 = 0 ;                              //clear interrupt flag 
	TH1 = 0xf8;
	TL1 = 0xcc;   
 //  TH1 = 0xf0 ;                           //test
 //  TL1 = 0xf0 ;                           //test
	/********************************/
	/****** da convert data send ****/
	if(da_send_F == 1)                     //need send da convert data
	{
		if(send_bit_count < 16)
		{
			if(DA_CLK == 0)
			{
				if(next_F == 0)
				{
					DA_DATA = (bit)(da_send_data&0x8000) ;
				    da_send_data <<= 1 ;
				    
				    next_F = 1 ;
			    }
			   else
			      {
				     send_bit_count++;
			       	 DA_CLK = 1 ;
			       	 
			       	 next_F = 0  ;
			       }
			}
		    else
		     {
		     	DA_CLK = 0 ;
		     	
		     }
		}
	    else if(send_bit_count == 16)
	    {
		     da_send_F = 0 ;
		     send_bit_count = 0 ;
		     next_F = 0 ;
		     DA_CLK = 0 ;
		     DA_CS = 1 ;
	    }
    }

/**   PULSE PRECESS **/
 if(pulse_out_en_F == 1)
 {
 	  if(send_pulse_number >= 1)             //continue pulse out
      {
    	 if(PULSE_OUT == 0)                 //if out level is high
    	    PULSE_OUT = 1;                  //out low level
    	 else if(PULSE_OUT == 1)            //out level is low
    	 {
    	   	PULSE_OUT = 0 ;                //out level changed high
    	   	send_pulse_number--;
    	  }
      }
      else if(send_pulse_number == 0)                               //pulse out is over
      {
   
    	PULSE_OUT = 1 ;                    //out low level
        pulse_out_en_F = 0 ;
    
    //	TR1 = 0 ;    
    //	ET1 = 0 ;                       
      }
  }
    EA = 1 ;
}
    	

⌨️ 快捷键说明

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