聲控小車(chē)
一、實(shí)驗(yàn)?zāi)康?br>本實(shí)驗(yàn)利用聲音檢測(cè)電路檢測(cè)聲音,當(dāng)有較大聲音時(shí)產(chǎn)生中斷信號(hào),控制小車(chē)的起、
停。通過(guò)實(shí)驗(yàn)要求掌握以下知識(shí)點(diǎn):
1.掌握與外中斷相關(guān)的特殊功能寄存器的設(shè)置方法。
2.了解聲音檢測(cè)電路的電路原理和使用方法。
3.掌握查詢方式和中斷方式的卻別。
二、實(shí)驗(yàn)預(yù)備知識(shí)
1.程序中有多個(gè)中斷的程序編寫(xiě)格式
在單片機(jī)的實(shí)際運(yùn)用中,很多情況下在一個(gè)程序中會(huì)用到多個(gè)中斷。下面以同時(shí)使用
兩個(gè)外部中斷為例,說(shuō)明多中斷的程序結(jié)構(gòu)。
ORG 0000H
SJMP MAIN
ORG 0003H ;INT1 中斷入口
SJMP INT1IN
ORG 0013H ;定時(shí)器T0 中斷入口
SJMP T1 IN
ORG 0030H
MAIN: MOV IE ,# ;允許T1 、INT1 中斷
MOV IP ,# ;設(shè)置中斷優(yōu)先級(jí)
……
……
INT0IN:…… ;INT1 中斷服務(wù)程序
……
RETI
INT1IN:…… ;T1 中斷服務(wù)程序
……
RETI
END
程序中如果需要更多的中斷,可以按照以上程序的方法添加即可。但是要考慮如果兩
個(gè)(或多個(gè))中斷優(yōu)先級(jí)的問(wèn)題,可以通過(guò)設(shè)置特殊功能寄存器IP 來(lái)設(shè)置各中斷的優(yōu)先級(jí)。
2.聲音檢測(cè)電路使用
主電路板上的聲音檢測(cè)電路在沒(méi)有檢測(cè)到聲音時(shí)其輸出端為高電平,當(dāng)麥克風(fēng)接收到
一定強(qiáng)度的聲音時(shí)其輸出端變?yōu)榈碗娖健S锰€冒短接JP17 的2、3 腳就可以把聲音檢測(cè)
電路的輸出接到單片機(jī)的INT0(P3.2)端。
調(diào)節(jié)RP1 電位器可以調(diào)節(jié)聲音檢測(cè)電路的靈敏度,環(huán)境噪聲比較大是,應(yīng)降低靈敏度,
在環(huán)境噪聲較小時(shí)可以提高靈敏度。
3.小車(chē)的電機(jī)控制
小車(chē)由兩個(gè)電機(jī)分別驅(qū)動(dòng)左右兩面的車(chē)輪轉(zhuǎn)動(dòng)。要實(shí)現(xiàn)小車(chē)原地順時(shí)針旋轉(zhuǎn),需要左
面電機(jī)正轉(zhuǎn),右面電機(jī)反轉(zhuǎn)。如果右面電機(jī)正轉(zhuǎn),而左面電機(jī)反轉(zhuǎn),則小車(chē)逆時(shí)針轉(zhuǎn)動(dòng)。
小車(chē)電機(jī)的正反轉(zhuǎn)由P1.4~P1.7 控制,對(duì)它們進(jìn)行操作就可以實(shí)現(xiàn)電機(jī)的控制,例如:要
實(shí)現(xiàn)左電機(jī)正轉(zhuǎn)和右電機(jī)反轉(zhuǎn)需執(zhí)行下列程序:
SETB P1.5
SETB P1.6
LCALL DELAY1 ;延時(shí)0.5 秒
CLR P1.4
CLR P1.7
由于電機(jī)是電感性負(fù)載,并且有機(jī)械慣性,因此在電機(jī)運(yùn)轉(zhuǎn)方向變化時(shí)需要過(guò)度時(shí)間,
以上程序段中的0.5 秒延時(shí)就是電機(jī)方向轉(zhuǎn)換的過(guò)度時(shí)間。
三、硬件連接
把電路中的JP17 用跳線冒短接。
四、實(shí)驗(yàn)內(nèi)容
1.根據(jù)硬件連接繪制電路圖
2.根據(jù)現(xiàn)場(chǎng)環(huán)境,調(diào)整小車(chē)上聲音檢測(cè)電路的靈敏度。
3.編程使小車(chē)原地旋轉(zhuǎn),順時(shí)針轉(zhuǎn)5 秒反時(shí)針轉(zhuǎn)5 秒,通過(guò)聲音檢測(cè)電路產(chǎn)生中斷
使小車(chē)停止。程序流程圖如下:
a 主程序 b 中斷程序
圖3-13 程序結(jié)構(gòu)框圖
在主程序中的初始化程序要對(duì)中斷進(jìn)行設(shè)置,要求把中斷觸發(fā)方式設(shè)置成下降沿觸發(fā)
方式,并設(shè)置堆棧指針的值。中斷程序中,執(zhí)行電機(jī)停止指令后,如果運(yùn)行RETI 指令返
回主程序,則電機(jī)又會(huì)起動(dòng),所以執(zhí)行電機(jī)停止程序后應(yīng)停留在中斷程序中不返回,但是必須要寫(xiě)RETI 語(yǔ)句。
3.采用查詢方式實(shí)現(xiàn)以上功能,對(duì)比二者的不同,并分析原因。查詢方式的程序如
下:
ORG 0000H
LOOP: SETB P1.5 ;順時(shí)針轉(zhuǎn)動(dòng)
SETB P1.6
LCALL DELAY1 ;延時(shí)0.5 秒
CLR P1.4
CLR P1.7
LCALL DELAY ;延時(shí)5 秒
JB P3.2 ,NEXT1 ;判斷是否有停止信號(hào)
SJMP STOP
SETB P1.4 ;反時(shí)針轉(zhuǎn)動(dòng)
SETB P1.7
LCALL DELAY1 ;延時(shí)0.5 秒
CLR P1.5
CLR P1.6
LCALL DELAY ;延時(shí)5 秒
JB P3.2 ,NEXT1
SJMP STOP
NEXT1: SJMP LOOP
STOP: MOV P1,#0FFH ;中斷服務(wù)程序,停止小車(chē)的運(yùn)動(dòng)。
SJMP $
RETI
DELAY: ;延時(shí)5 秒
DELAY1: ;延時(shí)0.5 秒
END
五、擴(kuò)展內(nèi)容
1.編寫(xiě)程序?qū)崿F(xiàn)以下功能:小車(chē)平時(shí)靜止不動(dòng),D2 以每秒一次的速度閃爍,當(dāng)對(duì)著
小車(chē)上的麥克風(fēng)拍一下手時(shí),小車(chē)向前運(yùn)行3s。
2.分析如果中斷后不停留在中斷程序,而返回主程序,會(huì)出現(xiàn)什么現(xiàn)象。
六、思考題
1.根據(jù)試驗(yàn)現(xiàn)象分析查詢方式和中斷方式為什么會(huì)出現(xiàn)不同的現(xiàn)象?
2.分析如果中斷后不停留在中斷程序,而返回主程序,會(huì)出現(xiàn)什么現(xiàn)象?
評(píng)論