📄 nnn.c
字号:
#include "E:\HID18F24j10\p18f24J10.h"
#include "E:\HID18F24J10\cpuset.c" //配置位文件
#include "E:\HID18F24J10\PWM.h"
#include "E:\HID18F24J10\stdlib.h"
#include "E:\HID18F24J10\string.h"
#include "E:\HID18F24J10\portb.h"
#include "E:\HID18F24J10\timers.h"
#include "E:\HID18F24J10\stdio.h"
#include "E:\HID18F24J10\ADC.h"
#include "E:\HID18F24J10\marco.c"
//===================================================================================
//===================================================================================
#define vmax_mah 120 //950 //983 //高压保护数据.18V 15V=800;
#define vmax_mal 119
#define vmax_mahk 119 //950 //983 //高压保护数据.18V 15V=800;
#define vmax_malk 118
#define vmin_ma 50 //48 0 //低压保护数据. 8V
#define vmin_ma2 62 //9V还原.
#define vminma 46 //瞬时减电压关机.
#define vmin_ma3 66
#define qvmax_ma 140
//#define qimax_ma 250
#define imax_ma 100 //灯短路保护.
#define pwmmax 2000000 //PWM最大值限制. PDC=(MAX,MIN)(PWM*VAD)
//#define imin_ma 120000 //灯开路保护.(外部分中断计算) //140 000次中断最佳.
//===================================================================================
#define vmaxf bit0 //高压错误标志(可恢复)
#define vminf bit1 //低压错误标志.(可恢复)
#define imaxf bit2 //短路或者过流错误标志.(不可恢复)
//#define iminf bit3 //开路或者轻载错误标志.(不可恢复)
#define qvmaxf bit4 //桥高压错误标志(不可恢复)
#define qimaxf bit5 //桥过流错误标志(不可恢复)
//===================================================================================
//ID2转用.
//float ldd0 ;
//float ldd1 ;
//float ldd2 ;
//float ldd3 ;
//float ldd4 ;
//float ldd5 ;
//float ldd6 ;
//float ldd7 ;
//float ldd8 ;
//float ldd9 ;
//float ldd10 ;
//float ldd11 ;
//float ldd12 ;
unsigned char ffb;
unsigned char yh;
unsigned int temp2;
//=================================================================
//HID转用.
unsigned int pwmold; //PWM旧直,不能改.
unsigned int pwmdata; //PWM旧直,不能改.
unsigned int pwmdatat;
unsigned int pwmdatatb;
unsigned int pwmdatak;
//static unsigned char s_count = 0;
union uinthl ad0,ad1,ad2,ad3; //AD取样值3.
unsigned char imintime;
unsigned int power;
unsigned int power2;
unsigned int powerold;
unsigned int t1s;
unsigned char tou100ms;
unsigned char tpms;
unsigned int tim2;
unsigned int pt50ms;
unsigned char pass;
unsigned char error;
unsigned char flag;
unsigned int t2ms;
unsigned char qiaotime;
unsigned int uatim;
//unsigned int yuretim;
unsigned char inmantime;
unsigned int pwmtemp;
unsigned int pwmma;
unsigned int pwmb;
unsigned int front;
union uinthl pwmw;
unsigned short long slong;
unsigned char temp1;
unsigned char qitim;
//...........................................
unsigned char prm;
unsigned char adc0;
unsigned char adc1;
unsigned char adc2;
unsigned char adc3;
unsigned int fmm;
unsigned char adt0;
unsigned char adt1;
unsigned char adt10;
unsigned char adt11;
unsigned char adt12;
unsigned char adt13;
unsigned char adt14;
unsigned char adt15;
unsigned char adt16;
unsigned char adt2;
unsigned char adt20;
unsigned char adt21;
unsigned char adt22;
unsigned char adt23;
unsigned char adt24;
unsigned char adt25;
unsigned char adt26;
//unsigned int pwmcnt;
unsigned char adt3;
unsigned char sh;
unsigned char time200;
unsigned char time3S;
unsigned char gflag;
unsigned char advm;
unsigned char in400V;
unsigned char adim;
unsigned char adimb;
union uinthl adimm;
unsigned char prm;
unsigned char kout;
unsigned char koutb;
unsigned char koutc;
#define frnb bit1 //桥过流错误标志(不可恢复)
//...........................................
unsigned char qiad;
unsigned char qvad;
unsigned char qvado;
unsigned char adtime;
//...........................................
unsigned char vad;
unsigned char vadtc;
unsigned int vadtemp;
unsigned char pow_data;
unsigned char pwmcm;
unsigned char pwmbit;
#define powup3() adim=(unsigned char)(((unsigned int)adt22+(unsigned int)adt21+(unsigned int)adt20+(unsigned int)adt2)>>2); advm=(unsigned char)(((unsigned int)adt12+(unsigned int)adt11+(unsigned int)adt10+(unsigned int)adt1)>>2); adt22=adt21; adt21=adt20; adt20=adt2; adt12=adt11; adt11=adt10; adt10=adt1; qiad=adim;qvad=advm; power=qiad*qvad;pwmw.hl[0]=PRODL;pwmw.hl[1]=PRODH; power=pwmw.m;
#define powup() adim=(unsigned char)(((unsigned int)adt22+(unsigned int)adt21+(unsigned int)adt20+(unsigned int)adt2)>>2); advm=(unsigned char)(((unsigned int)adt12+(unsigned int)adt11+(unsigned int)adt10+(unsigned int)adt1)>>2); adt22=adt21; adt21=adt20; adt20=adt2; adt12=adt11; adt11=adt10; adt10=adt1; qiad=adim;qvad=advm; power=qiad*qvad;pwmw.hl[0]=PRODL;pwmw.hl[1]=PRODH; power=pwmw.m;
#define powup2() adim=(unsigned char)(((unsigned int)adt26+(unsigned int)adt25+(unsigned int)adt24+(unsigned int)adt23+(unsigned int)adt22+(unsigned int)adt21+(unsigned int)adt20+(unsigned int)adt2)>>3); advm=(unsigned char)(((unsigned int)adt16+(unsigned int)adt15+(unsigned int)adt14+(unsigned int)adt13+(unsigned int)adt12+(unsigned int)adt11+(unsigned int)adt10+(unsigned int)adt1)>>3); adt26=adt25; adt25=adt24; adt24=adt23; adt23=adt22; adt22=adt21; adt21=adt20; adt20=adt2; adt16=adt15; adt15=adt14; adt14=adt13; adt13=adt12; adt12=adt11; adt11=adt10; adt10=adt1; power=adim*advm;pwmw.hl[0]=PRODL;pwmw.hl[1]=PRODH; power=pwmw.m;
//***********************************************************************
#include "E:\HID18F24J10\cont_power.c" //功率表格
//***********************************************************************
void main(void);
void low_isr(void);
void high_isr(void);
//***********************************************************************
#include "E:\HID18F24J10\cortrol.c"
//===================================================================
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm
}
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{
_asm GOTO low_isr _endasm
}
#pragma code
//***********************************************************************
#pragma interrupt high_isr
void high_isr (void)
{ClrWdt();//高级中断 flag
if (PIR1bits.ADIF) //AD转换完成中断. //每一次采样完成3次时为12 .67uS. //adt2=ADRESH;
{PIR1bits.ADIF=0;
if (_ADMUX==2)
{adt2=ADRESH; _ADMUX=1; setb1(flag,bit0)
powup()
power=adt2*adt1;pwmw.hl[0]=PRODL;pwmw.hl[1]=PRODH; power=pwmw.m;
if (pass<10) goto rtrf; //未开过.
if (adim>252) {pwmdata=0;inputpwm() setb1(error,qimaxf)}
if (power<(pwmma-5)) {pwmdata+=1;}
else if (power>(pwmma+5)) {pwmdata-=1;}
if (power<(pwmma-50)) {pwmdata+=1;}
else if (power>(pwmma+50)) {pwmdata-=1;}
if (pwmdata<10) {pwmdata=10;}
if (pwmdata>pwmdatat) {pwmdata=pwmdatat;}
inputpwm()
rtrf:;
powerold=power;
goto adcon_out;};
if (_ADMUX==1) { adt1=ADRESH; setb1(flag,bit1) _ADMUX=2; };
adcon_out:;
_ADGO=1;
}
//--------------------------------------------------------------
//if (PIR1bits.TMR2IF)
// {PIR1bits.TMR2IF=0;
// if (pass==0) {PR2=0x9c; goto fpra;}
// prm+=1; PR2-=1; if (prm>6) PR2+=2; if (prm>12) {prm=0;PR2=0x9c;};
// fpra:;
// }
if (PIR2bits.CMIF) //400V有中断.
{PIR2bits.CMIF=0;
in400V+=1; if (in400V<10) pass=0; ///if (PC3==1) {PC3=0;} else {PC3=1;};
if (in400V>10) in400V=11;
}
//--------------------------------------------------------------
if (INTCONbits.TMR0IF) //T0时间中断//400Hz产生.;200us一次.
{INTCONbits.TMR0IF = 0;
TMR0H=200;TMR0L=26; //高位时间
//------------------------------------------------------------------------------------------------------
//条件测试.
// if (PC3==1) {PC3=0;} else {PC3=1;};
//if (PC3==1) {PC3=0;} else {PC3=1;};
//------------------------------------------------------------------------------------------------------
t2ms+=1;//PWM更新时间.
fmm+=1;
adtime+=1;
//------------------------------------------------------------------------------------------------------
//桥动作.
// qiaotime=0;
if (pass==0) {qiaooff();goto qiao_out;}
if (qitim<120) goto qiao_out; // qiaotime=0;
// if ((adt2>170)||(adim>160)) goto qiao_out; //160 /140
// if (adt1>qvmax_ma) goto qiao_out;
// if (adt1>180) goto qiao_out; // {PC0=0;nop();nop();PC1=1;qiaotime=0;};//150
qiaotime+=1; if (qiaotime>12) qiaotime=0;
if (qiaotime<6) qiaol()
else qiaoh();
qiao_out:;
//------------------------------------------------------------------------------------------------------
}
//--------------------------------------------------------------
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
if (PIR1bits.TMR1IF) //T1时间中断 //1mS/次.
{ PIR1bits.TMR1IF = 0; TMR1H=217; // TMR1L=200; //高位时间
t1s+=1;
//------------------------------------------------------------------------------------------------------
inmantime+=1;//进入时间静等待.
pt50ms+=1; //功率递加时间.
tou100ms+=1; //全桥开.
front+=1;
tpms+=1;
uatim+=1;qitim+=1;
time200+=1;
// if (PC3==1) {PC3=0;} else {PC3=1;};
// temp2+=1;
// if (temp2>adt) {PC3=0;} else {PC3=1;};
// if (temp2>120) {temp2=0;};
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
#pragma interruptlow low_isr
void low_isr (void)
{ClrWdt();//低级中断
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -