?? pulseperiodmeasure.c
字號:
/*********************************************
文件名 :PulsePeriodMeasure.c **
功能描述:測量從捕捉輸入端口輸入的信號的周期**
**********************************************/
#include "p30f6014.h"
#include "PulsePeriodMeasure.h"
void InitializeSys()
{
INTCON1 = 0x0000; //關中斷
INTCON2 = 0x0000;
IEC0 = 0x0000; //IECx中斷禁止
IEC1 = 0x0000;
IEC2 = 0x0000;
}
void ConfigIO_IN()
{
TRISD = TRISD&0xfdf8;//RD0~RD2,RD9配置為輸出
TRISD = TRISD|0x0100;//RD8配置為輸入
PORTD = PORTD&0xfff8;//RD2~RD0為000,KEYA=0,選通U24
}
void InitializeIC()
{
ConfigIO_IN();
InitializeTMR3();
IC1CON = 0x0002;//捕捉Timer3,每1次捕捉事件中斷一次,每一個下降沿捕捉一次
IFS0bits.IC1IF = 0;//清IC6中斷標志
IEC0bits.IC1IE = 1;//使能中斷
IPC0bits.IC1IP = 6;//設置中斷優先級6
}
void InitializeTMR1()
{
TMR1 = 0; //定時器1計數寄存器TMR3=0
T1CON = 0x0000; //使用內部時鐘,預分頻比為1:1
PR1 = 0x4e20; //定時器Timer1周期寄存器PR1=0x4e20,10ms初值
IFS0bits.T1IF = 0; //清除TMR1的中斷標志
IPC0bits.T1IP = 7; //中斷優先級為7
IEC0bits.T1IE = 1; //使能中斷
T1CONbits.TON = 1;//打開定時器TMR1
}
void InitializeTMR3()
{
TMR3 = 0;//定時器3計數寄存器TMR3=0
T3CON = 0x0000;//使用內部時鐘,預分頻比為1:1
T3CONbits.TON = 1;//打開定時器TMR3
}
void __attribute__((__interrupt__))_IC1Interrupt(void)
{
unsigned int i = 0;
unsigned long CaptureDiffValueTemp = 0;
for(i=0; i<4; i++)//求一階差分值
{
CaptureDiffValue[i] = (CaptureValue[i+1] - CaptureValue[i]);
if(CaptureDiffValue[i] == 0)
{
CaptureDiffValueTemp = 0xffff + CaptureDiffValue[i+1] - CaptureDiffValue[i];
CaptureDiffValue[i] = CaptureDiffValueTemp;
}
CaptureValue[i] = CaptureValue[i+1];
}
CaptureValue[4] = IC1BUF;//獲取捕捉值
IFS0bits.IC1IF = 0;
}
void __attribute__((__interrupt__))_T1Interrupt(void)
{
IFS0bits.T1IF = 0;
PORTDbits.RD9 = ~PORTDbits.RD9;
}
int main()
{
InitializeSys();
InitializeIC();
InitializeTMR1();
while(1)
{
PORTD = PORTD&0xfff8;//RD2~RD0為000,KEYA=0,選通U24
PORTD = PORTD&0xfff8|0x0002;//RD2~RD0為000,LEDA=0,選通U27
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -