新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)學(xué)習(xí)知識(shí)點(diǎn)全攻略(完結(jié)篇)(三)

單片機(jī)學(xué)習(xí)知識(shí)點(diǎn)全攻略(完結(jié)篇)(三)

作者: 時(shí)間:2012-11-14 來(lái)源:網(wǎng)絡(luò) 收藏
仿真機(jī) 仿真是開(kāi)發(fā)過(guò)程中非常重要的一個(gè)環(huán)節(jié),除了一些極簡(jiǎn)單的任務(wù),一般產(chǎn)品開(kāi)發(fā)過(guò)程中都要進(jìn)行仿真,仿真的主要目的是進(jìn)行軟件調(diào)試,當(dāng)然借助仿真機(jī),也能進(jìn)行一些硬件排錯(cuò)。一塊應(yīng)用電路板包括部份及為達(dá)到使用目的而設(shè)計(jì)的應(yīng)用電路,仿真就是利用仿真機(jī)來(lái)代替應(yīng)用電路板(稱(chēng)目標(biāo)機(jī))的單片機(jī)部份,對(duì)應(yīng)用電路部份進(jìn)行測(cè)試、調(diào)試。仿真有CPU仿真和ROM仿真兩種,所謂CPU仿真是指用仿真機(jī)代替目標(biāo)機(jī)的CPU,由仿真機(jī)向目標(biāo)機(jī)的應(yīng)用電路部份供給各種信號(hào)、數(shù)據(jù),進(jìn)行調(diào)試的辦法。這種仿真能通過(guò)單步運(yùn)行、連續(xù)運(yùn)行等多種辦法來(lái)運(yùn)行程序,并能觀(guān)察到單片機(jī)內(nèi)部的變化,便于改正程序中的錯(cuò)誤。所謂ROM仿真,就是用仿真機(jī)代替目標(biāo)機(jī)的ROM,目標(biāo)機(jī)的CPU工作時(shí),從仿真機(jī)中讀取程序,并執(zhí)行。這種仿真其實(shí)就是將仿真機(jī)當(dāng)成一片EPROM,只是省去了擦片、寫(xiě)片的麻煩,并沒(méi)有多少調(diào)試手段可言。常常這是二種不一樣類(lèi)型的仿真機(jī),也就是說(shuō),一臺(tái)仿真機(jī)不能既做CPU仿真,又做ROM仿真??赡艿那闆r下,當(dāng)然以CPU仿真好。以上是本人對(duì)單片機(jī)的理解,如有不對(duì)之處,請(qǐng)諸位大俠多多指點(diǎn)。發(fā)表您的高論。

28、單片機(jī)音樂(lè)程序設(shè)計(jì)

  利用單片機(jī)(或單板機(jī))奏樂(lè)大概是無(wú)線(xiàn)電愛(ài)好者感興趣的問(wèn)題之一。本文從單片機(jī)的基本發(fā)間實(shí)驗(yàn)出發(fā),談?wù)勔魳?lè)程序的設(shè)計(jì)原理,并給出具體實(shí)例,以供參考。

  單片機(jī)的基本發(fā)音實(shí)驗(yàn)

  我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制單處機(jī)某個(gè)口線(xiàn)的“高”電平或低電平,則在該口線(xiàn)上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào)。

  例如,要產(chǎn)生200HZ的音頻信號(hào),按圖1接入喇叭(若屬臨時(shí)實(shí)驗(yàn),也可將喇叭直接接在P1口線(xiàn)上),實(shí)驗(yàn)程序?yàn)椋?/P>

  其中子程序DEL為延時(shí)子程序,當(dāng)R3為1時(shí),延時(shí)時(shí)間約為20us,R3中存放延時(shí)常數(shù),對(duì)200HZ音頻,其周期為1/200秒,即5ms。這樣,當(dāng)P1.4的高電平或低電平的持續(xù)時(shí)間為2.5ms,即R3的時(shí)間常數(shù)取2500/20=125(7DH)時(shí),就能發(fā)出200HZ的音調(diào)。將上述程序鍵入學(xué)習(xí)機(jī),并持續(xù)修改R3的常數(shù)能感到音調(diào)的變化。樂(lè)曲中,每一音符對(duì)應(yīng)著確定的頻率,表1給出C調(diào)時(shí)各音符頻率及其對(duì)應(yīng)的時(shí)間常數(shù)。讀者能根據(jù)表1所供給的常數(shù),將其16進(jìn)制代碼送入R3,反復(fù)練習(xí)體會(huì)。根據(jù)表1能奏出音符。僅這還不夠,要準(zhǔn)確奏出一首曲子,必須準(zhǔn)確地控制樂(lè)曲節(jié)奏,即一音符的持續(xù)時(shí)間。

  音符的節(jié)拍我們能用定時(shí)器T0來(lái)控制,送入不一樣的初值,就能產(chǎn)生不一樣的定時(shí)時(shí)間。便如某歌曲的節(jié)奏為每分鐘94拍,即一拍為0.64秒。其它節(jié)拍與時(shí)間的對(duì)應(yīng)關(guān)系見(jiàn)表2。

  但時(shí),由于T0的最大定時(shí)時(shí)間只能為131毫秒,因此不可能直接用改變T0的時(shí)間初值來(lái)實(shí)現(xiàn)不一樣節(jié)拍。我們能用T0來(lái)產(chǎn)生10毫秒的時(shí)間基準(zhǔn),然后設(shè)置一個(gè)中斷計(jì)數(shù)器,通過(guò)判別中斷計(jì)數(shù)器的值來(lái)控制節(jié)拍時(shí)間的長(zhǎng)短。表2中也給出了各種節(jié)拍所對(duì)應(yīng)的時(shí)間常數(shù)。例如對(duì)1/4拍音符,定時(shí)時(shí)間為0.16秒,對(duì)應(yīng)的時(shí)間常數(shù)為16(即10H);對(duì)3拍音符,定時(shí)時(shí)間為1.92秒,對(duì)應(yīng)時(shí)間長(zhǎng)數(shù)為192(即C0H)。

  我們將每一音符的時(shí)間常數(shù)和其對(duì)應(yīng)的節(jié)拍常數(shù)作為一組,按次序?qū)?lè)曲中的所有常數(shù)排列成一個(gè)表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就能實(shí)現(xiàn)演奏效果。此外,結(jié)束符和體止符能分別用代碼00H和FFH來(lái)表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生對(duì)應(yīng)的停頓效果。為了產(chǎn)生手彈的節(jié)奏感,在某些音符(例如兩個(gè)相同音符)音插入一個(gè)時(shí)間單位的頻率略有不一樣的音符。

  下面給出程序序清單,可直接在TD-III型學(xué)習(xí)機(jī)上演奏,對(duì)其它不一樣型號(hào)的學(xué)習(xí)機(jī),只需對(duì)應(yīng)地改變一下地址即可。本程序演奏的是民歌“八月桂花遍地開(kāi)”,C調(diào),節(jié)奏為94拍/分。讀者也能自行找出一首歌,按表1和表2給定的常數(shù),將樂(lè)曲翻譯成碼表輸入機(jī)器,而程序不變。本實(shí)驗(yàn)辦法簡(jiǎn)便,即使不懂音樂(lè)的人,將一首陌生的曲子翻譯成代碼也是易事,和著機(jī)器的演奏學(xué)唱一首歌曲,其趣味無(wú)窮。

  程序清單(略,請(qǐng)參看源程序的說(shuō)明)。

  程序框圖如圖2所示。



關(guān)鍵詞: 單片機(jī) 學(xué)習(xí)知識(shí)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉