求单片机编程高手指点啊~~以下是部分程序 用的是红外传感器模块 这个模块遇见障碍物输出低电平,没有则高

2025-03-04 20:08:03
推荐回答(2个)
回答1:

个人觉得、开启红外应该放在while外面;只需要开一次就OK、
其次,在你的中断函数中、开中断是应该在赋初值语句后的、当然你的初值是0;因为初始化也是0,不知是否可以不用赋,这个没试过!但理论上是先赋初值、在开始定时!
个人方案建议:
其实啊你这个方案的目的,要解决的根本问题就是计算低电平的时间! 这个好办!在TMOD中、有个GATE位、一般我们都没有用、当GATE为1时、是INT0或INT1引脚为高电平且TR0/1为1才启动计数;只是要在红外模块输出加个反相器;

回答2:

你用外部中断测量障碍物经过的时间应该这样(顺便在主函数定义一个外部中断0 IO口的位变量,sbit exter0=P3^2;)
void outside() interrupt 0 //一旦进入中断函数,说明红外模块检测到有障碍物进入
{
TH0=TL0=0;//初值装入0
TR0=1;//启动定时器0
while(!exter0);//等待障碍物消失
time=TH0*256+TL0;//得出障碍物经过的时间,单位为us
}