📄 ocmprj2.c
字号:
/**********************************************************
** 功能描述: 双比较匹配模式,连续的单脉冲输出,占空比34%**
**********************************************************/
#include "p30f6014.h"
int failmemory[40];
unsigned char OC_Flag = 0; //匹配标志
/*系统初始化子程序,放在程序首部*/
void InitializeSys()
{
INTCON1 = 0x0000; //关中断
INTCON2 = 0x0000;
IEC0 = 0x0000; //IECx中断禁止
IEC1 = 0x0000;
IEC2 = 0x0000;
}
/*输出比较模块初始化子程序*/
void ConfigOC3()
{
OC3CON = 0x0000; //Timer2是比较3的时钟源
T2CON = 0x0000; //预分频1,16位定时器,使用内部时钟
TMR2 =0x0006; //TMR2初值0x0006
OC3R = 0x001a; //设置匹配值0x001a,在TMR2与此值匹配时,产生脉冲上升沿
OC3RS = 0x002a; //设置匹配值0x002a,在TMR2与此值匹配时,产生脉冲下降沿
PR2 = 0x002f; //周期寄存器赋值0x002f,TMR2在0x002f复位
IFS1bits.OC3IF = 0; //清除输出比较中断标志位
IEC1bits.OC3IE = 1; //使能输出比较中断
IPC4bits.OC3IP = 7; //设置中断优先级7
IEC0bits.T2IE = 0; //不使能Timer2定时器中断
}
/*中断子程序:输出比较3中断,比较匹配时产生中断*/
void __attribute__((__interrupt__)) _OC3Interrupt()
{
IFS1bits.OC3IF = 0; //清除输出比较3中断标志位
OC_Flag = 1; //匹配标志置1
}
main()
{
InitializeSys();
ConfigOC3();
T2CONbits.TON = 1; //打开定时器2
OC3CONbits.OCM = 4; //双比较匹配模式,单脉冲输出
while(1)
{
if(OC_Flag == 1) //若匹配产生,再次启动单脉冲模式
{
OC_Flag = 0; //匹配标志清零
OC3CONbits.OCM = 4; //双比较匹配模式,单脉冲输出
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -