給大家共享一下我的學(xué)習(xí)經(jīng)驗(yàn)新唐M051單片機(jī) BOD設(shè)置程序成功版:
#include "SmartM_M0.h"
/****************************************
*函數(shù)名稱:main
*輸 入:無(wú)
*輸 出:無(wú)
*功 能:函數(shù)主體
******************************************/
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;
}
*函數(shù)名稱:main
*輸 入:無(wú)
*輸 出:無(wú)
*功 能:函數(shù)主體
******************************************/
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;
}
/****************************************
*函數(shù)名稱:BODDeinit
*輸 入:無(wú)
*輸 出:無(wú)
*功 能:BOD
******************************************/
VOID BODDeinit(VOID)
{
BODCR = 0x00;
}
/****************************************
*函數(shù)名稱:main
*輸 入:無(wú)
*輸 出:無(wú)
*功 能:函數(shù)主體
******************************************/
INT32 main(VOID)
{
PROTECT_REG
(
PWRCON |= XTL12M_EN; //默認(rèn)時(shí)鐘源為外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz時(shí)鐘穩(wěn)定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設(shè)置外部晶振為系統(tǒng)時(shí)鐘
P2_PMD=0x5555; //GPIO設(shè)置為輸出模式
)
NVIC_ISER |= BOD_OUT_INT;
}
/****************************************
*函數(shù)名稱:BODDeinit
*輸 入:無(wú)
*輸 出:無(wú)
*功 能:BOD
******************************************/
VOID BODDeinit(VOID)
{
BODCR = 0x00;
}
/****************************************
*函數(shù)名稱:main
*輸 入:無(wú)
*輸 出:無(wú)
*功 能:函數(shù)主體
******************************************/
INT32 main(VOID)
{
PROTECT_REG
(
PWRCON |= XTL12M_EN; //默認(rèn)時(shí)鐘源為外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz時(shí)鐘穩(wěn)定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設(shè)置外部晶振為系統(tǒng)時(shí)鐘
P2_PMD=0x5555; //GPIO設(shè)置為輸出模式
)
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);
}
{
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);
//
//}
//{
// 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);
//
//}