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

📄 nnn.c

📁 HID汽车大灯安定器,应用现在的安定器上,有多种保护功能
💻 C
📖 第 1 页 / 共 2 页
字号:
 
#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 + -