?? untitled.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 118 //950 //983 //高壓保護數據.18V 15V=800;
#define vmax_mal 117
#define vmax_mahk 117 //950 //983 //高壓保護數據.18V 15V=800;
#define vmax_malk 116
#define vminma 44 //瞬時減電壓關機.
#define vmin_ma 46 //48 0 //低壓保護數據. 8V
#define vmin_ma2 59 //9V還原.
#define vmin_ma3 63
#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>254) {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) {qiaotime=0; 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) {qiaotime=0; goto qiao_out;}//{qiaooff();goto qiao_out;}
if (qitim<120) {qiaotime=0; 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>25) qiaotime=0;
if (qiaotime<13) 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>adt2) {PC3=0;} else {PC3=1;};
// if (temp2>150) {temp2=0;};
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
#pragma interruptlow low_isr
void low_isr (void)
{ClrWdt();//低級中斷
if (PIR1bits.TMR2IF)
{PIR1bits.TMR2IF=0;
// if (gflag<20) {PR2=0x9c; goto fpra;}
// prm+=1; PR2-=1; if (prm>7) PR2+=2; if (prm>14) {prm=0;PR2=0x9c;};
//fpra:;
}
// PIR1=0; PIR2=0;PIR3=0;
}
//===================================================================
void vadread ()
{
ADCON0=0;
ADCON1=0;
ADCON2=0;
ADCON1bits.PCFG3=1;
ADCON1bits.PCFG1=1;
ADCON1bits.PCFG0=1; //配置AD模塊.AN0~AN3.
ADCON0=0; //選擇AD通道.
ADCON2bits.ADFM=0;
ADCON2bits.ADQT=0b100; //選擇AD采集時間.
ADCON2bits.ADCS=0b100; //選擇AD轉換時鐘.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -