pwm_test.c

来自「16位单片机dsPIC30F4013的PWM初始化及起的飞行控制系统中的应用」· C语言 代码 · 共 28 行

C
28
字号
#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 + =
减小字号Ctrl + -
显示快捷键?