amobbs.com 阿莫电子技术论坛

标题: BL9148(BN9148)红外解码程序,接受头用HS0038B [打印本页]

作者: mahui625    时间: 2006-12-26 13:38
标题: BL9148(BN9148)红外解码程序,接受头用HS0038B
菜鸟的作品,请DX指点。硬件:atmega48 ,红外接收头HS0038B。这个接收头效果超级好,建议阿莫能采购一批。软件环境:winavr(gcc).

元件规格书:

点击此处打开armok01139128.pdf

点击此处打开armok01139129.pdf

source code:

点击此处下载armok01139130.rar
作者: mahui625    时间: 2006-12-26 13:39
使用串口来调试的,可以很方便看到结果
作者: mahui625    时间: 2006-12-26 13:43
有点疑惑,采用阿莫新手入门那个外部中断范例中检测int0管脚电平的办法,检测到的电平一直是0。这个写法if ((PIND&(1<<PD2))==0),结果不正确。而用这样的if (PIND&(1<<PD2))就完全正确。请问是什么原因了。注意:我是在int0的中断程序检测int0管脚电平的。
作者: lrzxc    时间: 2006-12-26 13:45
我顶一下
作者: onorg    时间: 2006-12-26 21:41
if (PIND&(1<<PD2))

在判断语句里面用“&”操作不会警告?

要用逻辑与“&&”

或者因该把if ((PIND&(1<<PD2))==0)

改为i = PIND&(1<<PD2) ; if (i==0);
作者: bozai    时间: 2006-12-26 21:48
if ((PIND&(1<<PD2))==0)

if (PIND&(1<<PD2))

这两句话又不是一个意思,怎么做起比较了。

两个完全相反,当然是一个正确一个错了。



if ((PIND&(1<<PD2))==0) 是判断当PD2等于0时执行

而if (PIND&(1<<PD2))则是判断当PD2等于1时执行
作者: mahui625    时间: 2006-12-28 09:29
原来是用的PIND&(1<<PD2))==1来做的,但是奇怪不能得到正确的结果,改用PIND&(1<<PD2)就没有问题了
作者: AVR-MEGA128    时间: 2006-12-28 09:41
PIND&(1<<PD2))==1 当然不等于1拉
作者: bozai    时间: 2006-12-28 09:43
没什么好奇怪的,0xXX & 0x04 能得到 0x01的结果吗?
作者: mahui625    时间: 2006-12-28 12:41
是哦。所以那个范例是不是有问题。搞的我郁闷一天.
作者: mahui625    时间: 2006-12-28 12:44
理解了,小问题搞的。现在知道怎么搞了。
作者: manmaxiaowei    时间: 2023-5-8 22:34
厉害了楼主!
作者: manmaxiaowei    时间: 2023-5-8 22:35
厉害了楼主!!!!!!!!!!!!!!!




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4