89C52单片机红外循迹小车Keil程序:中断控制PWM调速

需积分: 24 11 下载量 144 浏览量 更新于2024-09-07 2 收藏 4KB TXT 举报
"89C52单片机三路红外循迹小车的Keil源程序使用中断输出可调PWM波,实现差速控制,能够顺利通过急弯。" 这个项目是基于89C52单片机设计的一个红外循迹小车,使用了Keil开发环境编写程序。89C52是经典的8位微控制器,广泛应用于嵌入式系统设计,具有8KB闪存、256B RAM和32个输入/输出引脚,适合这种小型自动化车辆的控制需求。 程序中包含了多个关键定义和函数,如: 1. **红外传感器定义**:LeftIR、RightIR和MidIR分别对应小车左侧、右侧和中间的红外传感器。这些传感器用于检测小车在行驶过程中是否偏离路径,通过读取传感器返回的信号,小车可以判断当前的位置并调整方向。 2. **PWM波输出**:PWM(脉宽调制)波用于控制小车马达的转速,进而控制小车的速度。pwma和pwmb定义为P1口的第四位和第五位,用于输出PWM波。PWM波的占空比可调,通过改变高电平的时间比例,可以实现速度的连续变化。 3. **差速控制**:通过独立控制左右两侧马达的转速,可以实现小车的差速转向,即通过调整左右两侧马达的PWM波形来改变它们的转速,从而实现小车的转弯。在描述中提到,该程序设计使得小车能顺利通过急弯。 4. **中断服务函数**:中断是单片机编程中的重要机制,它可以实时响应外部事件。Time0Init()函数用于初始化定时器0,设置其工作在模式1,开启中断,并设定初始计数值以产生特定频率的时基。定时器中断可以用来控制PWM波的周期,以及更新红外循迹算法的执行。 5. **IRLaunch函数**:此函数负责处理红外发射,根据输入参数IR('L'、'R'或'M')控制左、右或中间发射器发射红外脉冲。这里的80次循环和15微秒的延迟是为了生成特定频率的红外信号,以便于小车识别路径标记。 6. **delay_nus函数**:这是一个延时函数,用于在执行过程中添加微秒级别的延时,对于精确控制电机动作和红外发射时间非常重要。 这个89C52单片机的红外循迹小车程序充分利用了单片机的中断、定时器和PWM输出功能,结合红外传感器和马达控制,实现了智能化的循迹和转向。它是一个典型的嵌入式系统实例,展示了8位单片机在控制领域的应用能力。