打印
[DemoCode下载]

新唐M051 BOD设置程序

[复制链接]
1285|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大苏牙|  楼主 | 2015-10-11 08:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
给大家共享一下我的学习经验新唐M051单片机 BOD设置程序成功版:
#include "SmartM_M0.h"
/****************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主体
******************************************/
VOID BODInit(UINT32 unVoltage)
{
    PROTECT_REG
(
  switch(unVoltage)
  {
      case 4500:BODCR|=3<<1;
             break;
      case 3800:BODCR|=2<<1;
             break;
      case 2700:BODCR|=1<<1;
             break;      
      case 2200:BODCR|=0<<1;
             break;
   default:break;         
  }
  BODCR|=1<<4;
  BODCR|=0x01;
)
NMI_SEL=0x01;
NVIC_ISER |= BOD_OUT_INT;
}
/****************************************
*函数名称:BODDeinit
*输    入:无
*输    出:无
*功    能:BOD
******************************************/
VOID BODDeinit(VOID)
{
  BODCR = 0x00;
}
/****************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主体
******************************************/
INT32 main(VOID)
{
  PROTECT_REG
  (
   PWRCON |= XTL12M_EN;      //默认时钟源为外部晶振
   while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz时钟稳定
  
   CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
  
   P2_PMD=0x5555;          //GPIO设置为输出模式
  )
  BODInit(4500);
  while(1);
}
VOID BOD_IRQHandler(void)
{
     if(BODCR & ((1<<4)|(1<<6)))
  {
     P2_DOUT = 0xFF;
  Delayms(100);
  P2_DOUT = 0x00;
  Delayms(100);
  }
  else
  {
     P2_DOUT = 0x00;  
  }

  BODDeinit();
  Delayms(500);
  BODInit(2700);
}
//VOID NMI_Handler(void)
//{
//  printf("Hi, BOD has become NMI Int\n");
//
//     if(BODCR & ((1<<4)|(1<<6)))
//  {
//     P2_DOUT = 0xFF;
//  Delayms(100);
//  P2_DOUT = 0x00;
//  Delayms(100);
//  }
//  else
//  {
//     P2_DOUT = 0x00;  
//  }
//
//  Delayms(500);
//
//}


沙发
IversonCar| | 2015-10-11 08:27 | 只看该作者
BOD是个什么概念啊?

使用特权

评论回复
板凳
598330983| | 2015-10-11 14:51 | 只看该作者
电源检测功能,应该就是。对于单片机5V系统,设置BOD电平为4.0V;对于3V系统,设置BOD电平为2.7V。然后允许BOD检测。
这样,一旦单片机的供电电压低于BOD电平,单片机进入RESET(不执行程序了)。而当电源恢复到BOD电平以上,单片机才正式开始从头执行程序。保证了系统的可靠性!
当电压跌至2.5V,系统程序还能工作。这时有2个可怕的现象可能出现:
1、外围芯片工作已经混乱,单片机读到的东西不正确,造成程序的执行发生逻辑错误(不是单片机本身的原因)。
2

使用特权

评论回复
地板
598330983| | 2015-10-11 14:51 | 只看该作者
、当电源低到临界点,如2.4V时,并且在此忽上忽下的,单片机本身的程序执行也不正常,取指令、读数据都可能发生错误,或程序乱飞、不稳定,非常容易造成EEPROM、FALSH的破坏。有人问51怎么不会?实际上51也是这样,只是51内部没有直接写EEPROM、FLASH的指令,它的程序乱飞留不下痕迹。还有人有疑问:外挂EEPROM,掉电时怎么不会改写?实际是外挂EEPROM,当电压低于4V(2.7V)时,它已经不工作了,程序去改内容也改不了。

使用特权

评论回复
5
598330983| | 2015-10-11 14:52 | 只看该作者
因此bod在单片机的稳定性上是很必要的所以,bod还是可以学学的

使用特权

评论回复
6
C洛达尔多| | 2015-10-12 08:35 | 只看该作者
598330983 发表于 2015-10-11 14:51
电源检测功能,应该就是。对于单片机5V系统,设置BOD电平为4.0V;对于3V系统,设置BOD电平为2.7V。然后允许 ...

原来是这个功能,学习了,很有必要啊

使用特权

评论回复
7
598330983| | 2015-10-12 15:58 | 只看该作者
BOD这个在超低功耗里也是有应用的。

使用特权

评论回复
8
跟屁虫| | 2015-10-12 20:51 | 只看该作者
BOD对系统的稳定性有很大的帮助

使用特权

评论回复
9
稳稳の幸福| | 2015-10-12 21:17 | 只看该作者
当电源恢复到BOD电平以上,单片机才正式开始从头执行程序。保证了系统的可靠性

使用特权

评论回复
10
wilyinshuai| | 2016-1-25 11:53 | 只看该作者
避免低电压导致MCU运行异常的两个方法:在电源上加个大电容或使能BOD中断。

使用特权

评论回复
11
ideafor| | 2016-1-28 09:14 | 只看该作者
BOD主要是用在低功耗产品上面的,能够检测电源的稳定性

使用特权

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

本版积分规则

27

主题

278

帖子

4

粉丝