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

📄 ect.c

📁 ABS防抱死功能
💻 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 + -