最近在调试一个红外接收时遇到一个问题想请教下大家
网上资料说接收管有电平型与脉冲型怎么区分?谢谢
MSP430F413 P1.1接红外发射管。红外接收管OUT脚接P1.0
问题点1:其它程序都关闭只调试红外。全速运行行,手一遮档,P1.0有低脉冲示波器测得 不档P1.0一直为高电平。
在仿真程序时,在外部中断里设置一个断点,全速运行程序,一直可以进入中断
(为什么不用手档就可以进入)为什么?, 示波器测P1.0有脉冲产生
我把接收管P1.0脚与PCB分离,分别测PCB上面的P1.0为高电平,接收管out脚 也为高电平。当手一档,接收管脚会有脉冲。
问题点2: 为什么在主程序加一个延时,接收管脚OUT会有一个脉冲?(把接收管头遮住也有)
问题1程序:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;//关闭WDT
uchar i;
P1DIR=P1DIR|0xf2;
P1SEL=0x00;
P1IES &= ~BIT0;
P1IE|=BIT0;
P1IFG=0x00;
_EINT();//开全局中断
while(1)
{
for(i=0;i<10;i++)
{
START_TRAMIT_INFRARED;
delay_us(15);
STOP_TRAMIT_INFRARED;
delay_us(4);
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void P1_irq(void)
{
_DINT();
if(P1IFG&BIT0)
{
flagIrq++;
if(flagIrq>2) flagIrq=1;
}
P1IFG=0x00; //每个标志必须在它自己的中断服务程序中复位
_EINT();
}
问题2程序:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;//关闭WDT
P1DIR=0xf2; // 1111 0010
P1SEL=0x00;
while(1)
{
for(i=0;i<10;i++)
{
START_TRAMIT_INFRARED;
delay_us(15);
STOP_TRAMIT_INFRARED;
delay_us(4);
}
delay_ms(1000);
}
} |