以下是一些M453寄存器编程示例:
1. 设置GPIO输出
```c
#include "M453.h"
int main()
{
GPIO_SetMode(PC, BIT0, GPIO_MODE_OUTPUT); //将PC0设置为输出模式
while(1)
{
PC0=1; //PC0管脚输出高电平
Delay(1000); //延时1s
PC0=0; //PC0管脚输出低电平
Delay(1000); //延时1s
}
}
```
2. 设置外部中断
```c
#include "M453.h"
void EINT0_IRQHandler(void)
{
PA0=PA0^1; //PA0管脚翻转输出
Delay(100);
EINT0->EINTSRC &= ~BIT0; //清除EINT0中断标志
}
int main()
{
GPIO_SetMode(PA, BIT0, GPIO_MODE_INPUT); //将PA0设置为输入模式
GPIO_EnableEINT0(PA, 0, GPIO_INT_FALLING); //配置EINT0中断在PA0管脚下降沿触发
NVIC_EnableIRQ(EINT0_IRQn); //使能EINT0中断
while(1);
}
```
3. 设置定时器输出PWM波形
```c
#include "M453.h"
#define CCR2_InitCnt (480-1)
#define CCR2_DutyCyc (CCR2_InitCnt/2)
#define CCR3_InitCnt (480-1)
#define CCR3_DutyCyc (CCR3_InitCnt/4)
void TMR0_IRQHandler(void)
{
if (TIMER_GetIntFlag(TIMER0) == 1)
{
TIMER_ClearIntFlag(TIMER0);
}
}
int main()
{
PWM_ConfigOutputChannel(PA, BIT2, 1000, 50); //将PA2设置为PWM输出模式,频率为1000Hz,占空比为50%
PWM_EnableOutput(PWM0, PWM_CH_2_MASK); //使能PWM输出通道2
TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000); //将TIMER0设置为自动重载模式,1ms重载
TIMER_EnableCapture(TIMER0, TIMER_CH2); //TIMER0捕获CH2转换结果
TIMER_EnableCapture(TIMER0, TIMER_CH3); //TIMER0捕获CH3转换结果
TIMER_SET_CMP_VALUE(TIMER0, TIMER_CH2, CCR2_InitCnt); //将TCMPR2寄存器设置为CCR2_InitCnt
TIMER_SET_CMP_VALUE(TIMER0, TIMER_CH3, CCR3_InitCnt); //将TCMPR3寄存器设置为CCR3_InitCnt
TIMER_Start(TIMER0); //启动TIMER0
NVIC_EnableIRQ(TMR0_IRQn); //使能TIMER0中断
while(1);
}
```
希望这些示例代码对你有所帮助。
以下是一些M453寄存器编程示例:
1. 设置GPIO输出
```c
#include "M453.h"
int main()
{
GPIO_SetMode(PC, BIT0, GPIO_MODE_OUTPUT); //将PC0设置为输出模式
while(1)
{
PC0=1; //PC0管脚输出高电平
Delay(1000); //延时1s
PC0=0; //PC0管脚输出低电平
Delay(1000); //延时1s
}
}
```
2. 设置外部中断
```c
#include "M453.h"
void EINT0_IRQHandler(void)
{
PA0=PA0^1; //PA0管脚翻转输出
Delay(100);
EINT0->EINTSRC &= ~BIT0; //清除EINT0中断标志
}
int main()
{
GPIO_SetMode(PA, BIT0, GPIO_MODE_INPUT); //将PA0设置为输入模式
GPIO_EnableEINT0(PA, 0, GPIO_INT_FALLING); //配置EINT0中断在PA0管脚下降沿触发
NVIC_EnableIRQ(EINT0_IRQn); //使能EINT0中断
while(1);
}
```
3. 设置定时器输出PWM波形
```c
#include "M453.h"
#define CCR2_InitCnt (480-1)
#define CCR2_DutyCyc (CCR2_InitCnt/2)
#define CCR3_InitCnt (480-1)
#define CCR3_DutyCyc (CCR3_InitCnt/4)
void TMR0_IRQHandler(void)
{
if (TIMER_GetIntFlag(TIMER0) == 1)
{
TIMER_ClearIntFlag(TIMER0);
}
}
int main()
{
PWM_ConfigOutputChannel(PA, BIT2, 1000, 50); //将PA2设置为PWM输出模式,频率为1000Hz,占空比为50%
PWM_EnableOutput(PWM0, PWM_CH_2_MASK); //使能PWM输出通道2
TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000); //将TIMER0设置为自动重载模式,1ms重载
TIMER_EnableCapture(TIMER0, TIMER_CH2); //TIMER0捕获CH2转换结果
TIMER_EnableCapture(TIMER0, TIMER_CH3); //TIMER0捕获CH3转换结果
TIMER_SET_CMP_VALUE(TIMER0, TIMER_CH2, CCR2_InitCnt); //将TCMPR2寄存器设置为CCR2_InitCnt
TIMER_SET_CMP_VALUE(TIMER0, TIMER_CH3, CCR3_InitCnt); //将TCMPR3寄存器设置为CCR3_InitCnt
TIMER_Start(TIMER0); //启动TIMER0
NVIC_EnableIRQ(TMR0_IRQn); //使能TIMER0中断
while(1);
}
```
希望这些示例代码对你有所帮助。
举报