作者 主题:HLVD在PIC18F27J53上中断每次事件4次 (Read 283 times)

0会员和1位客人正在查看此主题。

离线 旋转运动员

  • 常规贡献者
  • *
  • 帖子:52
HLVD在PIC18F27J53上中断每次事件4次
« on: 2019年3月22日,晚上11:39:12»
我有一个pic18f27j53,它有hlvd。   我有一切努力的方式 除了每个事件中断4次。    That doesn't seem right.   我已经能够在它周围编码,但似乎并不是我要要的。

有人使用HLVD吗?

代码: [选择]
#include <xc.h>
#define LOW_POWER_SETPOINT 0b1001
#define NORMAL_POWER_SETPOINT 0b1010
#define _XTAL_FREQ 8000000

unsigned interruptCount = 0;

#define DETECT_LOW_POWER 0
#define DETECT_NORMAL_POWER 1

unsigned char  detectPowerMode = 0;

unsigned char enterSleep = 0;


void main(void)
{
   OSCCONbits.IRCF0 = 1;
   OSCCONbits.IRCF1 = 1;   
   OSCCONbits.IRCF2 = 1;   
   
   TRISAbits.TRISA0 = 0;
   TRISAbits.TRISA1 = 0;
     
   LATAbits.LATA0 = 1;
   
 
   
   OSCCONbits.IDLEN = 0;
   
    HLVDCONbits.HLVDEN = 0;                 // Disable HLDV
    HLVDCONbits.HLVDL = LOW_POWER_SETPOINT;             // Set point to low value   
    HLVDCONbits.VDIRMAG = detectPowerMode;     // Interrupt when voltage drops   
    PIR2bits.HLVDIF = 0;                    // Clear the HLVD interrupt flag   
    HLVDCONbits.HLVDEN = 1;                 // Enable HLDV                 
    RCONbits.IPEN = 1;
    INTCONbits.GIEH = 1;                    // Enable general interrupts high
    PIE2bits.HLVDIE = 1;                    // Enable low voltage detect interrupt   
   
   
   
     
   
   while(1)
   {
       
       LATAbits.LATA1 = 0;
       __delay_ms(100);
       LATAbits.LATA1 = 1;
       __delay_ms(100);

       if (enterSleep)
           Sleep();

       
   }
    return;
}


__interrupt(high_priority) void interrupts_highPriority(void)
{
    if (PIR2bits.HLVDIF == 1)       
    {
        PIR2bits.HLVDIF = 0;


        interruptCount++;

        if (interruptCount<4)
            return;

       interruptCount=0;

        if (detectPowerMode == 1)
        {

            LATAbits.LATA0 = 1;   
            detectPowerMode = DETECT_LOW_POWER;
            HLVDCONbits.HLVDEN = 0;                 
            HLVDCONbits.HLVDL = LOW_POWER_SETPOINT;           
            HLVDCONbits.VDIRMAG = detectPowerMode;                                   
            HLVDCONbits.HLVDEN = 1;
            enterSleep=0;


        }
        else
        {

            LATAbits.LATA0 = 0;     
            detectPowerMode = DETECT_NORMAL_POWER;           
            HLVDCONbits.HLVDEN = 0;       
            HLVDCONbits.HLVDL = NORMAL_POWER_SETPOINT;
            HLVDCONbits.VDIRMAG = detectPowerMode;
            HLVDCONbits.HLVDEN = 1;
            enterSleep =1;
        }         


   
    }
   
}





« 上次编辑:2019年3月23日,12:08:49 AM由Spinnaker »
 


分享我

掘客  Facebook  诽谤  可口的  Technorati.  推特  谷歌  雅虎
SMF.