📄 ect.c
字号:
#include <mc9s12dg128.h> /* derivative information */
#include "ECT.h"
#include "AD.h"
#include "RTI.h"
extern word IOC0_wData; //输入捕捉通道的两个下降沿之间间隔-脉冲周期
extern word IOC1_wData;
extern word IOC2_wData;
extern word IOC3_wData;
//*******************************************************
//* 通道0-3为输入捕捉
//* 分频系数16,每计一个数相当于1us
//* 当保持和捕捉寄存器中的值都被更新时,产生中断
//* 输入脉冲的周期应该在65.535ms-2us之间(500KHz-15Hz)
//*******************************************************
void ECT_Init(void)
{
TIOS = 0x00; //通道0-7为输入捕捉
TCTL4 = 0xAA; //通道0-3下降沿捕捉
ICOVW = 0xFF; //禁止覆盖以前的值
ICSYS = 0xA0; //当保持和捕捉寄存器中的值都被更新时,产生中断
TSCR2 = 0x04; //分频系数16,每计一个数相当于1us
TFLG1 = 0xFF; //中断标志位清零
TIE = 0x0F; //使能捕捉中断
TSCR1 = 0x80; //使能定时器模块
}
#pragma CODE_SEG NON_BANKED
interrupt void IOC0_ISR(void)
{
word oldValue, newValue;
TFLG1_C0F = 1;
oldValue = TC0H; //保持寄存器中的值为第一次下降沿的时刻
newValue = TC0; //输入捕捉寄存器中的值为第二次下降沿的时刻
if(newValue>=oldValue) //如果两次下降沿均发生在计数器从0-0xFFFF之间
{
IOC0_wData = newValue - oldValue; //两次下降沿的时间间隔(微秒)
}
else //两次下降沿中间计数器溢出
{
IOC0_wData = 0xFFFF - oldValue + newValue; //两次下降沿的时间间隔(微秒)
}
}
interrupt void IOC1_ISR(void)
{
word oldValue, newValue;
TFLG1_C1F = 1;
oldValue = TC1H; //保持寄存器中的值为第一次下降沿的时刻
newValue = TC1; //输入捕捉寄存器中的值为第二次下降沿的时刻
if(newValue>=oldValue) //如果两次下降沿均发生在计数器从0-0xFFFF之间
{
IOC1_wData = newValue - oldValue; //两次下降沿的时间间隔(微秒)
}
else //两次下降沿中间计数器溢出
{
IOC1_wData = 0xFFFF - oldValue + newValue; //两次下降沿的时间间隔(微秒)
}
}
interrupt void IOC2_ISR(void)
{
word oldValue, newValue;
TFLG1_C2F = 1;
oldValue = TC2H; //保持寄存器中的值为第一次下降沿的时刻
newValue = TC2; //输入捕捉寄存器中的值为第二次下降沿的时刻
if(newValue>=oldValue) //如果两次下降沿均发生在计数器从0-0xFFFF之间
{
IOC2_wData = newValue - oldValue; //两次下降沿的时间间隔(微秒)
}
else //两次下降沿中间计数器溢出
{
IOC2_wData = 0xFFFF - oldValue + newValue; //两次下降沿的时间间隔(微秒)
}
}
interrupt void IOC3_ISR(void)
{
word oldValue, newValue;
TFLG1_C3F = 1;
oldValue = TC3H; //保持寄存器中的值为第一次下降沿的时刻
newValue = TC3; //输入捕捉寄存器中的值为第二次下降沿的时刻
if(newValue>=oldValue) //如果两次下降沿均发生在计数器从0-0xFFFF之间
{
IOC3_wData = newValue - oldValue; //两次下降沿的时间间隔(微秒)
}
else //两次下降沿中间计数器溢出
{
IOC3_wData = 0xFFFF - oldValue + newValue; //两次下降沿的时间间隔(微秒)
}
}
#pragma CODE_SEG DEFAULT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -