BL9148(BN9148)红外解码程序,接受头用HS0038B
菜鸟的作品,请DX指点。硬件:atmega48 ,红外接收头HS0038B。这个接收头效果超级好,建议阿莫能采购一批。软件环境:winavr(gcc).元件规格书:
点击此处打开armok01139128.pdf
点击此处打开armok01139129.pdf
source code:
点击此处下载armok01139130.rar 使用串口来调试的,可以很方便看到结果 有点疑惑,采用阿莫新手入门那个外部中断范例中检测int0管脚电平的办法,检测到的电平一直是0。这个写法if ((PIND&(1<<PD2))==0),结果不正确。而用这样的if (PIND&(1<<PD2))就完全正确。请问是什么原因了。注意:我是在int0的中断程序检测int0管脚电平的。 我顶一下 if (PIND&(1<<PD2))
在判断语句里面用“&”操作不会警告?
要用逻辑与“&&”
或者因该把if ((PIND&(1<<PD2))==0)
改为i = PIND&(1<<PD2) ; if (i==0); if ((PIND&(1<<PD2))==0)
if (PIND&(1<<PD2))
这两句话又不是一个意思,怎么做起比较了。
两个完全相反,当然是一个正确一个错了。
if ((PIND&(1<<PD2))==0) 是判断当PD2等于0时执行
而if (PIND&(1<<PD2))则是判断当PD2等于1时执行 原来是用的PIND&(1<<PD2))==1来做的,但是奇怪不能得到正确的结果,改用PIND&(1<<PD2)就没有问题了 PIND&(1<<PD2))==1 当然不等于1拉 没什么好奇怪的,0xXX & 0x04 能得到 0x01的结果吗? 是哦。所以那个范例是不是有问题。搞的我郁闷一天. 理解了,小问题搞的。现在知道怎么搞了。 厉害了楼主! 厉害了楼主!!!!!!!!!!!!!!!
页:
[1]