打印
[应用方案]

N79E715的BOD中断演示

[复制链接]
1201|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technology Corp.
//  E-mail: MicroC-8bit@nuvoton.com
//***********************************************************************************************************

bit EA_Save_bit;
#include <stdio.h>
#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "ISR.h"
#include "wdt.h"
#include "Version.h"

#define set_BODEN\
        EA_Save_bit=EA;\
        EA=0;\
        TA=0xAA;\
        TA=0x55;\
        PMCR |= SET_BIT7;\
        EA=EA_Save_bit;
#define clr_BODEN\
        EA_Save_bit=EA;\
        EA=0;\
        TA=0xAA;\
        TA=0x55;\
        PMCR &= CLR_BIT7;\
        EA=EA_Save_bit;
#define set_BOV\
        EA_Save_bit=EA;\
        EA=0;\
        TA=0xAA;\
        TA=0x55;\
        PMCR |= SET_BIT6;\
        EA=EA_Save_bit;
#define clr_BOV\
        EA_Save_bit=EA;\
        EA=0;\
        TA=0xAA;\
        TA=0x55;\
        PMCR &= CLR_BIT6;\
        EA=EA_Save_bit;
#define set_BORST\
        EA_Save_bit=EA;\
        EA=0;\
        TA=0xAA;\
        TA=0x55;\
        PMCR |= SET_BIT4;\
        EA=EA_Save_bit;
#define clr_BORST\
        EA_Save_bit=EA;\
        EA=0;\
        TA=0xAA;\
        TA=0x55;\
        PMCR &= CLR_BIT4;\
        EA=EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
UINT8 CounterBOF = 0;
void main()
{
    InitialUART0_Timer1(9600);      // 9600 Baud Rate [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz
    printf ("\n*===================================================================");
    printf ("\n*  Name: N79E715 BOD Sample Code.");
    printf ("\n*===================================================================");
    set_BODEN        //Enable BOD
    set_BOV          //Select BOD38
    clr_BORST        //Disable BOD reset when VDD drops below VBOD
    EBO = 1;         //Enable BOD Interrupt
    EA = 1;

    while(1)
    {
        if(PMCR & 0x01)       //BOS = 1: VDD is higher than VBOD
        {
            P0 = PMCR;
            printf ("\nVDD is higher than VBOD");
        }
        else                  //BOS = 0: VDD is lower than VBOD
        {
            P0 = PMCR;
            printf ("\nVDD is lower than VBOD");
        }
        Delay1ms(2000);
    }
}
//-----------------------------------------------------------------------------------------------------------
void BOD_ISR(void)  interrupt 8             // Vector @  0x43
{
    clr_BOF;//Two conditions will assert BOF,
            //One is "VDD rise above VBOD";
            //Another is "VDD fall below VBOD"
    CounterBOF++;
    P2 = CounterBOF;
}
//-----------------------------------------------------------------------------------------------------------


沙发
dongnanxibei|  楼主 | 2017-1-14 20:07 | 只看该作者
电源检测(BOD):
  对于单片机5V系统,设置BOD电平为4.0V;对于3V系统,设置BOD电平为2.7V。然后允许BOD检测。
  这样,一旦单片机的供电电压低于BOD电平,单片机进入RESET(不执行程序了)。而当电源恢复到BOD电平以上,单片机才正式开始从头执行程序。保证了系统的可靠性!
  当电压跌至2.5V,系统程序还能工作。这是有2个可怕的现象可能出现,
  1。外围芯片工作已经混乱,单片机读到的东西不正确,造成程序的执行发生逻辑错误(不是单片机本身的原因)。
  2。当电源低到临界点,如2.4V时,并且在此互上互下的,单片机本身的程序执行也不正常,取指令、读数据都可能发生错误,或程序乱飞、不稳定,非常容易造成EEPROM、FALSH的破坏。有人问51怎么不会?实际上51也是这样,只是51内部没有直接写EEPROM、FLASH的指令,它的程序乱飞留不下痕迹。还有人有疑问:外挂EEPROM,掉电时怎么不会改写?实际是外挂EEPROM,当电压低于4V(2.7V)时,它已经不工作了,程序去改内容也改不了。

使用特权

评论回复
板凳
heisexingqisi| | 2017-1-15 16:34 | 只看该作者
实用那个宏没想到可以让程序看起来这么美观。

使用特权

评论回复
地板
734774645| | 2017-1-15 22:44 | 只看该作者
如果能弄个可以传递函数进去设置这个BOV值的就给力了。

使用特权

评论回复
5
yiyigirl2014| | 2017-1-16 13:51 | 只看该作者
中断后是不是就关机了。

使用特权

评论回复
6
玛尼玛尼哄| | 2017-1-16 21:55 | 只看该作者

使用特权

评论回复
7
玛尼玛尼哄| | 2017-1-16 21:57 | 只看该作者
看了用户手册,发现还是51单片机简单啊。

使用特权

评论回复
8
dongnanxibei|  楼主 | 2017-1-23 20:03 | 只看该作者
51确实用起来简单,但是硬件实现起来复杂,用的是复杂指令集。

使用特权

评论回复
9
zhuomuniao110| | 2017-1-26 18:04 | 只看该作者
当电压低于4V(2.7V)时,它已经不工作了,程序去改内容也改不了

使用特权

评论回复
10
734774645| | 2017-1-26 19:02 | 只看该作者
对于单片机5V系统,设置BOD电平为4.0V;对于3V系统,设置BOD电平为2.7V。然后允许BOD检测。

使用特权

评论回复
11
dongnanxibei|  楼主 | 2017-1-26 19:42 | 只看该作者
实际上51也是这样,只是51内部没有直接写EEPROM、FLASH的指令,它的程序乱飞留不下痕迹。

使用特权

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

本版积分规则

210

主题

3657

帖子

16

粉丝