?? 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 + -