声控小车
一、实验目的
本实验利用声音检测电路检测声音,当有较大声音时产生中断信号,控制小车的起、
停。通过实验要求掌握以下知识点:
1.掌握与外中断相关的特殊功能寄存器的设置方法。
2.了解声音检测电路的电路原理和使用方法。
3.掌握查询方式和中断方式的却别。
二、实验预备知识
1.程序中有多个中断的程序编写格式
在单片机的实际运用中,很多情况下在一个程序中会用到多个中断。下面以同时使用
两个外部中断为例,说明多中断的程序结构。
ORG 0000H
SJMP MAIN
ORG 0003H ;INT1 中断入口
SJMP INT1IN
ORG 0013H ;定时器T0 中断入口
SJMP T1 IN
ORG 0030H
MAIN: MOV IE ,# ;允许T1 、INT1 中断
MOV IP ,# ;设置中断优先级
……
……
INT0IN:…… ;INT1 中断服务程序
……
RETI
INT1IN:…… ;T1 中断服务程序
……
RETI
END
程序中如果需要更多的中断,可以按照以上程序的方法添加即可。但是要考虑如果两
个(或多个)中断优先级的问题,可以通过设置特殊功能寄存器IP 来设置各中断的优先级。
2.声音检测电路使用
主电路板上的声音检测电路在没有检测到声音时其输出端为高电平,当麦克风接收到
一定强度的声音时其输出端变为低电平。用跳线冒短接JP17 的2、3 脚就可以把声音检测
电路的输出接到单片机的INT0(P3.2)端。
调节RP1 电位器可以调节声音检测电路的灵敏度,环境噪声比较大是,应降低灵敏度,
在环境噪声较小时可以提高灵敏度。
3.小车的电机控制
小车由两个电机分别驱动左右两面的车轮转动。要实现小车原地顺时针旋转,需要左
面电机正转,右面电机反转。如果右面电机正转,而左面电机反转,则小车逆时针转动。
小车电机的正反转由P1.4~P1.7 控制,对它们进行操作就可以实现电机的控制,例如:要
实现左电机正转和右电机反转需执行下列程序:
SETB P1.5
SETB P1.6
LCALL DELAY1 ;延时0.5 秒
CLR P1.4
CLR P1.7
由于电机是电感性负载,并且有机械惯性,因此在电机运转方向变化时需要过度时间,
以上程序段中的0.5 秒延时就是电机方向转换的过度时间。
三、硬件连接
把电路中的JP17 用跳线冒短接。
四、实验内容
1.根据硬件连接绘制电路图
2.根据现场环境,调整小车上声音检测电路的灵敏度。
3.编程使小车原地旋转,顺时针转5 秒反时针转5 秒,通过声音检测电路产生中断
使小车停止。程序流程图如下:
a 主程序 b 中断程序
图3-13 程序结构框图
在主程序中的初始化程序要对中断进行设置,要求把中断触发方式设置成下降沿触发
方式,并设置堆栈指针的值。中断程序中,执行电机停止指令后,如果运行RETI 指令返
回主程序,则电机又会起动,所以执行电机停止程序后应停留在中断程序中不返回,但是必须要写RETI 语句。
3.采用查询方式实现以上功能,对比二者的不同,并分析原因。查询方式的程序如
下:
ORG 0000H
LOOP: SETB P1.5 ;顺时针转动
SETB P1.6
LCALL DELAY1 ;延时0.5 秒
CLR P1.4
CLR P1.7
LCALL DELAY ;延时5 秒
JB P3.2 ,NEXT1 ;判断是否有停止信号
SJMP STOP
SETB P1.4 ;反时针转动
SETB P1.7
LCALL DELAY1 ;延时0.5 秒
CLR P1.5
CLR P1.6
LCALL DELAY ;延时5 秒
JB P3.2 ,NEXT1
SJMP STOP
NEXT1: SJMP LOOP
STOP: MOV P1,#0FFH ;中断服务程序,停止小车的运动。
SJMP $
RETI
DELAY: ;延时5 秒
DELAY1: ;延时0.5 秒
END
五、扩展内容
1.编写程序实现以下功能:小车平时静止不动,D2 以每秒一次的速度闪烁,当对着
小车上的麦克风拍一下手时,小车向前运行3s。
2.分析如果中断后不停留在中断程序,而返回主程序,会出现什么现象。
六、思考题
1.根据试验现象分析查询方式和中断方式为什么会出现不同的现象?
2.分析如果中断后不停留在中断程序,而返回主程序,会出现什么现象?
评论
查看更多