聲控小車
一、實驗目的
本實驗利用聲音檢測電路檢測聲音,當有較大聲音時產生中斷信號,控制小車的起、
停。通過實驗要求掌握以下知識點:
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.分析如果中斷后不停留在中斷程序,而返回主程序,會出現什么現象?
評論
查看更多