📄 pulse_prc.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 + -