你好,期望的功能,一段脉冲输入到2530的P1.7脚,用定时器3的通道1去捕获,
上下边沿都捕获,捕获周期1us,把测量的脉冲宽度存到数组里,然后分析,请问如下的代码有什么问题?
数组里测量的时间和示波器测量的不符合,请帮忙分析一下原因,谢谢!
void irCaptureGpioInit(void)
{
P1SEL |= 0x80; P1DIR &= ~0x80;
P1_7 = 1;
PERCFG |= 0x20;//定时器3的备用位置2,必须设置
P2SEL |= 0x20;//设置定时器3优先
//P1IEN |= 0x80;
}
void timer3CaputureInit(void)
{
T3CTL &= 0x00; //T3溢出中断屏蔽
T3CTL |= 0xA0; //标记频率/32 1MHz
T3CTL |= 0x04; //清除计数器
T3CTL |= 0x08; //溢出中断使能
T3CTL |= 0x10; //启动定时器T3
T3CCTL1 &= ~0x04; //捕获模式
T3CCTL1 |= 0x03; //上升、下降沿都捕获
T3CCTL1 |= 0x40; //T2的通道1中断使能
IRCON = 0; //清除中断标志
//IEN1 |= 0x08; //T3中断使能 T3IE = 1; //使能定时器3中断
//IEN0 |= 0x80;//使能所有中断
}
void timer3CaptureConfig(void)
{
irCaptureGpioInit();
timer3CaputureInit();
}
__interrupt void T3_ISR(void)
{
unsigned char a;
if(TIMIF & (~0xFB)) //边沿触发中断
{
a = T3CC1;
if(a > 5
{
rec1[signle++] = T3CC1;
//setFlag = 1;
}
T3CC1 = 0;
IRCON = 0x00; //清中断标志,也可由硬件自动完成
}
if(TIMIF & (~0xFE)) //溢出中断
{
/*if(setFlag)
{
signle = 0;
setFlag = 0;
}*/
IRCON = 0x00; //清中断标志,也可由硬件自动完成
}
}
Susan Yang:
user5367314数组里测量的时间和示波器测量的不符合
具体表现是怎样的?
您的代码我感觉没什么问题
user5367314:
回复 Susan Yang:
数据帧格式:
1ms 高电平 + 10us 低电平 + 7bit 数据
其中1bit数据格式为:
1bit数据0: 10us 高电平+25us 低电平
1bit数据1: 25us 高电平+10us 低电平
抓取的波形如下,我想实现的是捕获下面的波形的高低电平宽度,
并把宽度(即时间长度)存在数组里,这样的话数组的前面两个数据应该是1000左右,10左右,
可是仿真的时候差距很大,感觉是乱码,请帮忙分析一下原因?
Susan Yang:
回复 user5367314:
请问您现在是示波器接P1.7脚的波形吗?您是在示波器内设置了边沿捕捉吗?
若是在线看rec1[signle++] = T3CC1;中数组的值呢?
Susan Yang:
回复 user5367314:
另外若是可以的话,请给出完整代码,谢谢