给大家共享一下我的学习经验新唐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);
//
//}
|