打印

帮我看看HLVD模块的使用

[复制链接]
3581|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hahahaluo|  楼主 | 2008-1-29 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pic18f2480,mcc18。

void HandlerHigh ()
{
//HLVD中断--------------------------------
if(PIR2bits.HLVDIF == 1 && hlvd_intFlag == 0)
    {
    PIR2bits.HLVDIF = 0;
    hlvd_intFlag = 1;
    }
}

void init_hlvd(void)
{
TRISAbits.TRISA5 = 1; //设定RA5为输入

HLVDCONbits.HLVDEN = 0;//高低电压检测使能关闭

HLVDCONbits.HLVDL3 = 1;//高低电压检测门限值
HLVDCONbits.HLVDL2 = 1;//
HLVDCONbits.HLVDL1 = 1;//
HLVDCONbits.HLVDL0 = 0;//

HLVDCONbits.VDIRMAG = 0;//电压跌落时,事件发生

HLVDCONbits.HLVDEN = 1;//高低电压检测使能打开

INTCONbits.GIE = 1;//全局中断打开
INTCONbits.PEIE = 1;//外围设备中断打开

IPR2bits.HLVDIP = 1;//HLVD使用高中断
PIE2bits.HLVDIE = 1;//HLVD中断打开,
PIR2bits.HLVDIF = 0;//HLVD中断溢出标志位

}

void main(void) 

init_hlvd();
for(;;)
    {
    if(hlvd_intFlag)
        {
        LATCbits.LATC2 = !LATCbits.LATC2; //LED2闪烁
        while(!HLVDCONbits.IVRST);
        hlvd_intFlag = 0;
        delay(200);//约450ms
        }
    }


程序过程:
初始化后,如果电压低于4.48-4.69V,进入中断,led2闪一次。
1.mcu电源电压5V,led2不闪。
2.mcu电源电压4.3v,led2不闪。
3.将HLVDL3:0=1111,mcu电源4.5V,RA5引脚5v,led2不闪,(RA5引脚3V,led2不闪)

弄了好久,咋都进不了中断,请教版主。
沙发
499767| | 2008-1-30 17:45 | 只看该作者

是完整的中断程序么?

具体程序内容没有细看如果一直都不进不了中断,不知道你在前面是否有配置过程, 给你个例成看看,
//================================================================================
//中断入口设置。低优先级入口
//================================================================================
#pragma code low_vector=0x18   //用#pragma伪指令定义一个名字叫low_vector的段,并把这个段放到0x18地址起始的代码空间
void interrupt_at_low_vector(void) //低优先级中断向量函数
{
  _asm GOTO low_isr _endasm  //内嵌汇编指令
}
#pragma code //这里不是多余的,它是告诉连接器回到默认的代码段,如果不加的话,连接器就会傻傻地把后面的代码紧跟着上面的代码一直放下去。而LKR文件里定义了向量区最多到0x29地址,所以如果没加此行通常会报错
#pragma interruptlow low_isr    //这里使用interruptlow这个关键词来声明low_isr这个函数是低优先级中断服务函数,用了关键词后,这个函数将会由编译器自动产生基本的现场保护,并且这个函数的返回将是使用RETFIE返回的
//===========================================================
//函数:
//函数功能:中断函数
//===========================================================
void low_isr (void)
 {
    if(PIR1bits.RC1IF==1)     USART1_receive_int();
 }

使用特权

评论回复
板凳
hahahaluo|  楼主 | 2008-1-31 14:06 | 只看该作者

感谢499767,

感谢499767,单独使用芯片的串口中断,这个能够进入,只是低电压检测的HLVD中断进不去,

这些语句,程序中是有的。
#pragma code VectorHigh = 0x08
void VectorHigh (void)
{
  _asm
    goto HandlerHigh //jump to interrupt routine
  _endasm
}
#pragma code

#pragma interrupt HandlerHigh//用于接收的高中断,
void HandlerHigh ()



最后问问499767,你有没有HLVD中断的例程?让我参考参考找找原因

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

41

帖子

0

粉丝