xs128TIM之脉冲累加



 脉冲累加

原理分析:

XS128的脉冲累加如同字面一样,对外部给予的脉冲加以在16位的计数寄存器里累计,当寄存器溢出时可以产生中断。在智能车里用于点击的闭环控制。另外脉冲累加也可以用于事件时间累计,累计脉冲为时钟分频后的脉冲。脉冲累加的外部引脚为T7脚。

寄存器介绍

控制寄存器

xs128TIM之脉冲累加_第1张图片

PAEN脉冲累加使能。PAMOD模式选择,计外部脉冲时设为1,对时间进行累加设为0

PEDGE为触发控制位,为外部脉冲时1表示上升沿计数,0表示下降沿计数,计时间时,1表示高电平计数,0表示低电平计数。计时间时的分频系数。PAOVI为溢出中断使能,在计数器溢出的时候会产生中断。PAI为输入中断,当有脉冲的时候就会产生中断。

标志寄存器

xs128TIM之脉冲累加_第2张图片

PAOVF为溢出中断表示位,在中断函数后面要写1清零。PAIF为输入中断。

脉冲累加计数寄存器

xs128TIM之脉冲累加_第3张图片

该寄存器可读可写。

代码参考:

 溢出中断:

#include 
#include "derivative.h"    
void IO_Init(void){
    DDRB = 0xff ;       // 设置LED口为输出
    PORTB = 0xff ;      // LED初始为灭
    DDRA_DDRA4 = 1 ;    // 设置A0脚为输出模拟输入捕捉信号
    PORTA_PA4 = 1 ;     // A0初始为高电平 
}
void PA_Init(void)
{
    PACTL= 0x52 ;      // 使能脉冲累加,事件计数,上升沿计数,使能溢出中断
    PAFLG_PAOVF = 1 ;   // 清楚溢出中断标志位
    PACNT = 0x0000 ;    // 计数器清零
    EnableInterrupts    // 开总中断
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt VectorNumber_Vtimpaaovf void PAI(void) { //17
    static uint count1,count2;
    count1=count2;
    count2=PACNT;   //计算一定时间内采集的脉冲个数
    PORTB_PB1=~PORTB_PB1;
    PAFLG_PAOVF = 1 ;           // 清中断标志位
}
#pragma CODE_SEG DEFAULT
void Delay(void) 
{
    word i , j ;
    for(i = 0 ; i < 200 ; i++)
        for(j = 0 ; j < 2000 ; j++) ;
}

void main(void) 
{
    IO_Init();
    PA_Init() ;
    for(;;) 
    {
        PORTA_PA4 = ~PORTA_PA4 ;
    }
}

输入中断:

/************************************
*   TIM 脉冲累加 Paulse Accumulator
*   线路连接:对应引脚为PT7 应将PT7与中断源相连(本程序将PT7与PA4相连)
*   2014/7/8 by Quex
************************************/
#include  
#include "derivative.h"    
void Delay_ms(uint ms){
    
   uint i,j;
   if (ms<1) ms=1;
   for(i=0;i



你可能感兴趣的:(飞思卡尔)