我现在做的一个热释电红外模块,没接单片机的时候输出是5V的电压,但是接了单片机没法检测到他的高电平.用万用表测那个接热释电红外模块的那个管脚却只输出低电平了?请高手指教如何用单片机检测到高电平以后使另外一个管教实时输出高电平(就是当热释电红外模块输出高电平时,另外一个管教输出高电平,当热释电红外模块输出高电平时另外一个管脚输出低电平)
你是说,当 你的模块接了单片机之后,输出就只有低电平了?那俺怀疑电路的接法有问题。
顶。。。。不过真绕。。。。没明白想问什么。。。。。
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
这个要好好考虑你的内部结构,不行就加上外控电路保证好点了
'没接单片机的时候输出是5V的电压',表示这是一个输出脚,当把他接到单片机IO口时,你要把单片机的口设置为I输入,而不能是输出,否则2个输出端接一起会怎样?这要看谁输出能力大了。
用个一个while()检测高电平,然后在其内部给你想要高电平的那个管脚置1,C语言的话,先用bit声明一个为变量,初始化为1,然后赋值给那个管脚。
用汇编的话,就直接给此管脚赋值1就行了
引用: 引用 8 楼 yueliren 的回复:
用个一个while()检测高电平,然后在其内部给你想要高电平的那个管脚置1,C语言的话,先用bit声明一个为变量,初始化为1,然后赋值给那个管脚。
用汇编的话,就直接给此管脚赋值1就行了
我看行
你是说 连接单片机引脚之后 就不是高电平了? 看看 是不是 没有加上拉电阻 造成的 你可以 用一个led灯进行调试啊 有while 函数 和if 函数 查询接 红外模块的引脚 如果高的话 让灯亮 如果低的话 led 不亮 我这里随便设 红外模块接在PA5上 ,并设置PA5为输入口 。
while(1)
{
if(PA5==0)
LED_off();
else
LED_on;
}
如果你接的口被你的程序一直输出低电平的话,检测的就是低电平,首先确定管脚被你设置成输入口,然后用程序读取,输出的时候使用位操作,或者使用与(或)操作,保证输入口不被误操作!
例如输入接在P0^1上,输出接在P0^2上,
使用
- #define P01 P0^1
- #define P02 P0^2
- if (P01){//高电平
- P02=1;//输出高电平
- }
- else {
- P02=0;//输出低电平
- }
单片机默认管脚电平是高电平,当前面要接的红外模块低电平管脚(你测得红外……)不足以将单片机管脚的电平拉低时,那个管脚反而会被单片机拉高,就会出现高电平,加一个NPN三极管就可以办到,C级通过1K电阻接电源,C级再接到如P1口,E级接地,B级接红外模块的输出,也就是用三极管当做开关管使用。
楼主说你的热释电红外模块在没有接单片机时输出高电平,但是你用万用表测量确实低电平,既然你测的是低电平那你怎么知道模块在没有接单片机时输出高电平,是热释电红外模块的手册上说的么?你先看看电路吧。
1.首先看下接到单片机的管脚是否是普通IO口,如果是普通IO口,则确定要设置为输入,如果是可扩展的IO口,在使用之前要配置为IO口,再设置为输入,这样,如果外部电路没问题,应该就能检测到高低电平了。
2.检测的时候,用while循环去检测这个IO口就行了。
引用: 引用 8 楼 yueliren 的回复:
用个一个while()检测高电平,然后在其内部给你想要高电平的那个管脚置1,C语言的话,先用bit声明一个为变量,初始化为1,然后赋值给那个管脚。
用汇编的话,就直接给此管脚赋值1就行了
这个正解,是你的单片机将模块的电平拉低了。
引用: 引用 16 楼 corner_qxc 的回复:
1.首先看下接到单片机的管脚是否是普通IO口,如果是普通IO口,则确定要设置为输入,如果是可扩展的IO口,在使用之前要配置为IO口,再设置为输入,这样,如果外部电路没问题,应该就能检测到高低电平了。
2.检测的时候,用while循环去检测这个IO口就行了。
我觉得最好不要用循环来做,如果有可能改成中断最好。
我现在做的一个热释电红外模块,没接单片机的时候输出是5V的电压,但是接了单片机没法检测到他的高电平.用万用表测那个接热释电红外模块的那个管脚却只输出低电平了?请高手指教如何用单片机检测到高电平以后使另外一个管教实时输出高电平(就是当热释电红外模块输出高电平时,另外一个管教输出高电平,当热释电红外模块输出高电平时另外一个管脚输出低电平)
是不是你没说明白(就是当热释电红外模块输出高电平时,另外一个管教输出高电平,当热释电红外模块输出高电平时另外一个管脚输出低电平)这是什么逻辑。是不是这个模块有三个脚、检测到高电平时另外二个脚一个高一个低这样要你做什么?