mahui625 发表于 2006-12-26 13:38:44

BL9148(BN9148)红外解码程序,接受头用HS0038B

菜鸟的作品,请DX指点。硬件:atmega48 ,红外接收头HS0038B。这个接收头效果超级好,建议阿莫能采购一批。软件环境:winavr(gcc).

元件规格书:

点击此处打开armok01139128.pdf

点击此处打开armok01139129.pdf

source code:

点击此处下载armok01139130.rar

mahui625 发表于 2006-12-26 13:39:43

使用串口来调试的,可以很方便看到结果

mahui625 发表于 2006-12-26 13:43:55

有点疑惑,采用阿莫新手入门那个外部中断范例中检测int0管脚电平的办法,检测到的电平一直是0。这个写法if ((PIND&(1<<PD2))==0),结果不正确。而用这样的if (PIND&(1<<PD2))就完全正确。请问是什么原因了。注意:我是在int0的中断程序检测int0管脚电平的。

lrzxc 发表于 2006-12-26 13:45:46

我顶一下

onorg 发表于 2006-12-26 21:41:26

if (PIND&(1<<PD2))

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

要用逻辑与“&&”

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

改为i = PIND&(1<<PD2) ; if (i==0);

bozai 发表于 2006-12-26 21:48:52

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:19

原来是用的PIND&(1<<PD2))==1来做的,但是奇怪不能得到正确的结果,改用PIND&(1<<PD2)就没有问题了

AVR-MEGA128 发表于 2006-12-28 09:41:45

PIND&(1<<PD2))==1 当然不等于1拉

bozai 发表于 2006-12-28 09:43:18

没什么好奇怪的,0xXX & 0x04 能得到 0x01的结果吗?

mahui625 发表于 2006-12-28 12:41:51

是哦。所以那个范例是不是有问题。搞的我郁闷一天.

mahui625 发表于 2006-12-28 12:44:46

理解了,小问题搞的。现在知道怎么搞了。

manmaxiaowei 发表于 2023-5-8 22:34:38

厉害了楼主!

manmaxiaowei 发表于 2023-5-8 22:35:30

厉害了楼主!!!!!!!!!!!!!!!
页: [1]
查看完整版本: BL9148(BN9148)红外解码程序,接受头用HS0038B