if (!Ir_Pin)//有红外信号时,Ir_Pin为低,非0为1,
{
TIM1_ARRH = 0xff;
TIM1_ARRL = 0xff;
TIM1_CNTRH=0x00; //初值 向上计数时取默认值0x00;
TIM1_CNTRL=0x00;
TIM1_CR1 |=0x01;//开启计时
while(!Ir_Pin && TIM1_CNTRH&0x80==0); //判断,在32767US"(TIM1_CNTRH&0x80)"范围内,并且 检测IR_Pin,当IR_Pin为低电平时一直循环,否则退出WHILE
TIM1_CR1 =0x00;//关闭计时
return TIM1_CNTRH*256+TIM1_CNTRL; //返回定时器时间
}else return 0;
系统设置:时钟:内部16M. TIM1: 时钟16分频输入,向上计数.
原理:当红外接收头接收到红外信号时,输出低电平,当检测到Ir_Pin端口为低电平时,开启定时器并计数,当检测到红外编码中一个脉冲结束时(Ir_Pin端口为为电平时),停止计时,返回计数器寄存器的值,并以此值计算红外编码脉冲的时间.此代码在STC单片机上实验成功.
问题:返回定时器时间不正确,可以检测到IR_Pin的状态,但一直返回 32782,不知道为什么,是不是IO口的检测方式和普通51单片机检测方式不一样?我是刚接触STM8,请大家帮忙.谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>