HR7P169B捕捉功能 8-bit MCU

admin 2021-6-30 762

例程:采用T11捕捉信号脉宽,主频16MHz,设定捕捉时钟分频1:32,则时钟周期2us,按12位计数值计算,可捕捉的时间范围为2us~8ms。

#include <hic.h>
#define CaptureOffset 2        //捕捉补偿值,进入中断后清定时计数器值,实际指令执行的时间,以弥补下次捕捉

unsigned int PluseWidth[100];    //捕捉数组
unsigned char count;                 //捕捉数据计数

void isr(void) interrupt
{
unsigned char i;
if(T11IE && T11IF)        //捕捉定时器中断标志
{
T11H = 0 ;                 //清定时计数器值
T11L = 0 ;
PluseWidth[count] = ((unsigned int)(T11PH<<4) & 0xFF00) + (unsigned int)T11RL + CaptureOffset;    // 读取捕捉数据

count++;
if(count>100)           //若连续捕捉个数超过100
{
for(i=0;i<100;i++)
{
PluseWidth[i] = 0;    //数组清0
}
count = 0;                   //个数清0
}

T11CAP0 = ~T11CAP0;        //修改沿方向
T11IF = 0 ;        //清中断标志
}
}

void main(void)
{
// 初始化PB1为输入捕捉端口
PBPD1 = 1 ;        //使能下拉电阻
PBPU1 = 0 ;
PBOD1 = 0 ;
ANSH1 = 1;        //设置PB1为数字I/O
PBT1 = 1;          //设置PB1为输入口

count = 0;          //个数清0

// 初始化定时器
T11CH = 0x80 ;        //配置T11为捕捉模式(T11M2=1),使能预分频器1(PRS1=0)
T11C = 0x06 ;          //使能T11(T11EN=1),预分频器1的分频值1:32(T11PR1S<1:0>=10)
//PRS1 = 1;               //使能预分频器2,预分频器1或2只能选用其中1个,由PRS1位选择
T11CAPC = 0x10 ;    //捕捉每1个脉冲上升沿(T11CAP<1:0>=01)

T11H = 0  ;        //清T11定时计数器
T11L = 0 ;

T11IE = 1 ;        //使能T11定时器中断
GIE = 1 ;           //使能全局中断

while(1)
{
;
}
}


最新回复 (1)
  • admin 2021-6-30
    引用 2

    以某编码协议为例,捕捉数据如下:

返回