amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 568|回复: 1

HR7P169B捕捉功能

[复制链接]
发表于 2017-12-7 17:07:12 | 显示全部楼层 |阅读模式

例程:采用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 = 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)
{
;
}
}



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

发表于 2017-12-7 17:14:31 来自手机 | 显示全部楼层
16M,2T,执行8条指令用1微秒,你提到最小测2us,我看见中断中那个for(100)的循环清数组,怎么感觉很悬?
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-9-15 14:57

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表