📄 pwm_test.c
字号:
#include<p30f4013.h>
void pwm_initial(int p)
{
//********初始化系统********//
//**************************//
INTCON1=0x0000; //使能中断嵌套,禁止陷阱,
INTCON2=0x0000; //使用默认中断向量表,外部中断4,3,2,1,0都采用正边沿处中断
IEC0=0x0000;
IEC1=0x0000;
IEC2=0x0000; //禁止所有中断请求
//****初始化输出比较模块***//
//**************************//
OC1CON=0x0000; //输出比较1器将在CPU空闲模式下继续工作,未产生PWM错误条件,使用Timer2为比较器1的时钟源,输出比较通道禁止
T2CON=0x0010; //停止16位定时器,在空闲模式定时器继续工作,禁止定时器门控时间累加,Timer2预分频设置为1:8,Timer2和Timer3为独立的16位定时器,选用内部时钟源
TMR2=0x0000; //设置timer2的初值,PWM周期为2ms,计算得到PR2的值为04E0H
OC1RS=P; //打满舵,占空比为OC1RS的值,初始化时为0x0270,对应舵机的初始位置
PR2=0x04E0; //设置PWM周期=2ms
IFS0bits.OC1IF=0; //清除输出比较1中断标志
IEC0bits.OC1IE=1; //不使能输出比较1中断
IPC0bits.OC1IP=6; //设置输出比较1中断优先级为6
IFS0bits.T2IF=0; //清除定时器2的中断标志
IPC1bits.T2IP=7; //设置定时器2的中断优先级为7
IEC0bits.T2IE=1; //使能定时器2中断
}
void __attribute__((__interrupt__)) _T2Interrupt()
{
IFS0bits.T2IF=0; //清除定时器中断标志
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -