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

📄 cleanset.c

📁 HID汽车大灯安定器,应用现在的安定器上,有多种保护功能
💻 C
字号:

//=============================================================
void intconl_set (void)
{   OSCCONbits.IDLEN=0;
  //OSCTUNEbits.PLLEN=0;  //PLL 使能. 
//==============================================================
//T0定时器设计..用做桥驱动.
   T0CON=0;            //T0配置
   TMR0L=0;            //低位时间
   TMR0H=0;             //高位时间  //3.25mS/次.
   T0CONbits.T08BIT=1; 
   T0CONbits.T0CS=0;     //外部时钟选择1/内部时钟选择0.
   T0CONbits.T0SE=0;     //
   T0CONbits.PSA=0;     //T0振荡使能位.
   T0CONbits.T0PS2=0;   //预分频比选择位.
   T0CONbits.T0PS1=1;   //预分频比选择位.
   T0CONbits.T0PS0=1;   //预分频比选择位. 
   T0CONbits.TMR0ON=1;   //TMR0使能位.
    //   INTCON2bits.TMR0IP=1;     //IPR1bits.TMR0IP=1;    //T1优先.
   INTCONbits.TMR0IF=0;
   INTCONbits.TMR0IE=1; 
//==============================================================
//T1定时器设计
   T1CON=0;        //T1配置
   TMR1L=20;        //低位时间
   TMR1H=20;        //高位时间  //8.5mS/次.
   T1CONbits.RD16=0;
   T1CONbits.T1RUN=0;
   T1CONbits.T1CKPS1=0;      //
   T1CONbits.T1CKPS0=0;   //
   T1CONbits.T1OSCEN=0;  //T1振荡使能位.
   T1CONbits.T1SYNC=0;   //时钟选择位.
   T1CONbits.TMR1CS=0;   //外部时钟选择1/内部时钟选择0.
   T1CONbits.TMR1ON=1;   //TMR1使能位. 
     //   IPR1bits.TMR1IP=1;    //T1优先.
   PIR1bits.TMR1IF=0;
   PIE1bits.TMR1IE=1; 
//==============================================================
//PWM设计  在CCP1输出.
   PR2=0xa0;  //PR2=0xa5;//80;//uchar类型  //最大PWM=500.=80    最大PWM=500.=80   //B6
   CCPR1L=1;            //周期
   CCP1CONbits.CCP1X=0;  //
   CCP1CONbits.CCP1Y=0;  //占空比
   CCP1CONbits.CCP1M3=1; 
   CCP1CONbits.CCP1M2=1;
   CCP1CONbits.CCP1M1=0;
   CCP1CONbits.CCP1M0=0;  //PWM模式选择
   TRISCbits.TRISC2=0; 
   LATCbits.LATC2=0;
//T2定时器设计作用于PWM
   T2CON=0;        //T2配置
   TMR2=20;        //
   T2CONbits.T2OUTPS3=0;
   T2CONbits.T2OUTPS2=0;
   T2CONbits.T2OUTPS1=1;
   T2CONbits.T2OUTPS0=0;
   T2CONbits.T2CKPS1=0;    //预分频
   T2CONbits.T2CKPS0=0;    //预分频
   T2CONbits.TMR2ON=1;   //TMR2使能位. 
   //IPR1bits.TMR2IP=0;    //T2优先.
   PIR1bits.TMR2IF=0;
   PIE1bits.TMR2IE=0;  
//==============================================================
//AD取样设计.
    
   ADCON0=0;
   ADCON1=0;
   ADCON2=0;
   ADCON1bits.VCFG=0b00; //ADCON1bits.PCFG3=1;   ADCON1bits.PCFG1=1;   ADCON1bits.PCFG0=1;   //配置AD模块.AN0~AN3.
   ADCON1bits.PCFG=0b1001;
   ADCON0=0;   //选择AD通道.
   ADCON2bits.ADFM=0;   //选择AD采集时间. 
   ADCON2bits.ADQT=0b110;   //选择AD采集时间.   
   ADCON2bits.ADCS=0b110;   //选择AD转换时钟. 
     _ADMUX=0;
            // IPR1bits.ADIP=1;    //AD优先处理.
   PIR1bits.ADIF=0;   
                
   PIE1bits.ADIE=1;    //允许AD中断
   ADCON0bits.ADON=1;  //AD模块启动
   ADCON0bits.GO=1;    //AD启动
//============================================================== 
//中断启动.   
   PIR2bits.OSCFIF=0; 
   PIE2bits.OSCFIE=1;   

   RCONbits.IPEN=1;    //高级中断优先使能位.
   INTCONbits.PEIE=0;   //外部中断开.  
   INTCONbits.GIE=1;   //全局中断开. 
   OSCTUNEbits.PLLEN=1;  //PLL 使能. 
}
//=============================================================


//=============================================================
void clean (void)
{ 
//--------------------------------------------------------
//采用外部晶振10M.不采用内部晶振.防止温度影响.
   //OSCCON=0;
   OSCCONbits.IDLEN=0;
   OSCCONbits.IRCF=0b111;
//   OSCCONbits.IOFS=0;   
   OSCCONbits.SCS=0b10; 
//   OSCCONbits.OSTS=1; 
  //OSCCON=0b11110000;   //主时钟设计.
//  OSCCONbits.OSTS=0; 
//         RCONbits.POR=1; //上电复位 
   PIR2bits.OSCFIF=0; 
   PIE2bits.OSCFIE=0;   

   RCONbits.IPEN=0;    //高级中断优先使能位.
   INTCONbits.PEIE=0;   //外部中断开.  
   INTCONbits.GIE=0;   //全局中断开. 
   OSCTUNEbits.PLLEN=0;  //PLL 使能.
dgg:; 
//  ClrWdt();
//  if  (!(OSCCONbits.IOFS))  goto dgg;  
    OSCCONbits.SCS=0b00; 
hlk:; 
  ClrWdt();
      TRISA=0;
    PORTA=LATA=0; 
 //   TRISB=00;  //TRISB=0Xc0;//00;//0xdf;
 //  PORTB=LATB=0;// PORTB=LATB=0Xc0;//00;//0xdf; 
 //   TRISC=0x00;
 //   PORTC=LATC=0x00; 
    qiaooff(); 
 //   T2CON=0;   //TMR2使能位. 
   //IPR1bits.TMR2IP=0;    //T2优先.  
 //   CCP1CON =0;  //PWM模式选择         
  if (!(OSCCONbits.OSTS)) {goto hlk;}//晶振未稳定. 
//dgj:;
//  PIR2bits.OSCFIF=0;
//  ClrWdt();
//  if  (PIR2bits.OSCFIF) goto dgj; 
   INTCON=0; INTCON2=0; INTCON3=0;   
   PIE1=0;   PIE2=0;    
   PIR1=0;   PIR2=0; 
   qiaotime=0;inmantime;error=0;pass=0;vad=0;
 //  OSCTUNEbits.PLLEN=1;  //PLL 使能FOSC *4.  
  pwmold=0;    pwmdata=0;     pwmdatat=0;     pwmdatatb=0;   pwmdatak=0;
 adt0=0; adt1=0;  adt2=0;  imintime=0;     power=0;   power2=0;
  powerold=0;     tou100ms=0;  tpms=0;  tim2=0;
 ClrWdt(); pt50ms=0;  pass=0; error=0; flag=0; t2ms=0; 
   qiaotime=0;   uatim=0;   inmantime=0;   pwmtemp=0;   front=0;  
    temp1=0; qitim=0;  prm=0;   fmm=0; adt0=0;   adt1=0; 
  adt10=0;  adt11=0;   adt12=0;   adt13=0;  adt14=0;  
  adt15=0;   adt16=0;   adt2=0;   adt20=0;  adt21=0; adt22=0;
    adt23=0; adt24=0;  adt25=0;  adt26=0; 
  adt3=0;     time200=0;  time3S=0;   gflag=0;    
  advm=0;  in400V=0;   adim=0; 
  koutc=0;    qiad=0;  qvad=0;   qvado=0;  adtime=0;  
  vad=0;  vadtc=0;   vadtemp=0;  pow_data=0;   pwmcm=0;   pwmbit=0;
//--------------------------------------------------------
}
void ioset(void)
{   
       TRISA=0;
    PORTA=LATA=0; 
    TRISB=0Xc0;//00;//0xdf;
    PORTB=LATB=0Xc0;//00;//0xdf; 
    TRISC=0x00;
    PORTC=LATC=0x00;  
} 

⌨️ 快捷键说明

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