⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pulseperiodmeasure.c

📁 《dsPIC通用数字信号控制器原理及应用》源码
💻 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 + -