自動(dòng)演奏延遲程序電路及配套程序介紹
我們通過(guò)對(duì)一個(gè)自動(dòng)演奏延遲程序電路及配套程序的介紹,來(lái)講解“置位”、“清位”等指令和延時(shí)程序的編制原理。
一、發(fā)聲原理
由圖可知,如果我們要使B2發(fā)出一定頻率的聲音,只要改變Pl.7的高低電位,并在Pl.7高低電位變換之間延長(zhǎng)一段時(shí)間即可。改變Pl.7的高低電位可用專(zhuān)門(mén)的位操作指令,也叫做布爾操作指令。比如,我們用一條“置位Pl.7”指令,可使Pl.7呈高電位,然后延時(shí)一段時(shí)間,再執(zhí)行“清位Pl.7”指令,使Pl.7呈低電位,延時(shí)一段時(shí)間后再返回去執(zhí)行“置位”指令。經(jīng)過(guò)上述操作,Pl.7的電位就完成了一個(gè)高低變化周期,B2也就完成了一次全振動(dòng)。如此,循環(huán)上述程序,Pl.7就會(huì)持續(xù)地向B2送出一定頻率的方波,B2就會(huì)持續(xù)地發(fā)出一定頻率的聲音來(lái)。
二、延時(shí)原理
為了使B2發(fā)聲的頻率穩(wěn)定,Pl.7呈高電位的時(shí)間和呈低電位的時(shí)間必須是一個(gè)定數(shù),這就要求CPU在完成對(duì)Pl.7的“置位”和“清位”之間延遲一定的時(shí)間,這期間必須保證不再對(duì)Pl.7進(jìn)行改變電位的操作。CPU可以停止對(duì)Pl.7操作,但CPU絕不會(huì)停下來(lái),它仍會(huì)按一定的節(jié)拍在工作,所以,上述延時(shí)時(shí)間內(nèi)CPU或者去完成對(duì)其它I/O口輸入輸出的操作,或者就在那里“計(jì)數(shù)”以實(shí)現(xiàn)延時(shí)。后者是延時(shí)的常用手段。
通常是先向某一個(gè)寄存器裝入一個(gè)常數(shù),然后讓CPU完成幾個(gè)“空操作”,再將寄存器里的數(shù)減l并對(duì)該寄存器中的數(shù)值進(jìn)行判斷,如果寄存器中的數(shù)值不為零,則進(jìn)行一輪空操作后再進(jìn)行判斷;如果寄存器中的數(shù)值為零,說(shuō)明延時(shí)時(shí)間已到,接著完成延時(shí)后的操作。
三、樂(lè)聲及其程序
樂(lè)聲是由長(zhǎng)短高低不同的音階構(gòu)成的。由于音階高低不同的音調(diào)是由振動(dòng)頻率決定的,所以我們只要用程序來(lái)確定振動(dòng)頻率、各頻率聯(lián)接的先后次序及各頻率持續(xù)的時(shí)間,就能實(shí)現(xiàn)樂(lè)聲演奏。以《小草》前兩句為例,音階是“6-6-1-7-6,6-6-3-2-3”,而所用到的不重復(fù)音階只有“6、7、l、2、3”等5個(gè)。我們分別將能通過(guò)B2發(fā)出上述5種音高的程序聯(lián)接起來(lái),就能使電路連續(xù)演奏出《小草》這首歌的部分弦律來(lái)。
音階“6”的頻率是220Hz,周期約為5.545ms,半周期約2.27ms,這樣,我們可編一段2.27ms的延時(shí)程序嵌在Pl.7高低電位變化之間,即可使B2發(fā)出“6”音。
“6”音的程序見(jiàn)清單中0063H至0075H區(qū)間。
由程序可以看出,執(zhí)行“置位Pl.7、送數(shù)R2,#E3”后,又連續(xù)執(zhí)行了三次“空操作”。每次空操作用時(shí)2(s,而執(zhí)行“減1轉(zhuǎn)移Xl”用時(shí)4(s,此一個(gè)循環(huán)用時(shí)恰為l0(s。“減1轉(zhuǎn)移”是一條條件轉(zhuǎn)移指令。執(zhí)行結(jié)果是將指定寄存器中的內(nèi)容減1,然后判斷寄存器中的數(shù)值,如果寄存器中的數(shù)值不為零,即轉(zhuǎn)移到指定位置;如果寄存器中的數(shù)值為零,接著執(zhí)行下面的程序。由于“送數(shù)R2,#E3H”裝入R2中的數(shù)為E3H,即227,所以,當(dāng)R2中的數(shù)為零時(shí),共完成上述循環(huán)227次,用時(shí)恰好是2.27ms,而“置位”和“送數(shù)”指令所用4(s則可以忽略。
就是說(shuō),至此,Pl.7呈高電位的時(shí)間已持續(xù)了2.27ms。
同樣,接著執(zhí)行“清位Pl.7”和下面的程序,又使Pl.7呈低電位的時(shí)間持續(xù)了2.27ms。這樣,Pl.7就輸出了頻率為220HZ的方波信號(hào)的一個(gè)完整的周期。持續(xù)循環(huán)上述程序,B2就會(huì)發(fā)出“6”的音階。其它音階程序原理與之相同。各音階子程序之后是子程序返回指令。





