[英]Playing music notes through speaker in TASM assembly
我正在嘗試在 TASM 中編寫一個播放音符的程序。 我在網上找不到任何文檔,我找到的最接近的是這個 stackoverflow 問題,它能夠發出“嗶”聲。
我不知道的是:
這段代碼是如何工作的
聲音映射是什么
我如何彈奏特定的音符(做 re mi ...)
用PC speaker播放單音可以使用引用問題中提到的方法。 它使用來自系統定時器的方波發生器,通過將操作模式 0xB6 設置為 I/O 端口 0x43 來激活。 請參閱定時器端口。 寫入端口 0x43 的值 182=0xB6=0y10110110 指定
OUT 0x42,LowByte
,LowByte 和OUT 0x42,HighByte
指定所需的頻率。 這個 16 位二進制數 integer 實際上指定了方波的周期,即從 0 到 1 翻轉波形所必須經過的滴答數,反之亦然。當您對頻率進行編程后,要求可編程外圍接口將揚聲器連接到方波發生器。 如果 PPI 端口為 0x61,這是通過設置兩個最低有效位來完成的,請參閱PPI 端口。
IN AL,0x61 ; Get the previous value of PPI port B.
OR AL,0x03 ; Set the two least significant bits.
OUT 0x61,AL ; Write it back to PPI port B.
現在您應該等待一段時間讓音調播放,然后將 PPI 端口 B 的兩位重置為 0。
您可以在此處找到音調與頻率的映射。 您將需要一個表格來將do、re、mi等音調的頻率轉換為 16 位 integer 數字,您將把這些數字作為LowByte和HighByte放入系統計時器。
查看如何獲取LowByte和HighByte的示例代碼。 PC 計時器以 1193180 Hz 的頻率計時。 當你要播放音調時(注意C 4 =261.63 Hz),計算1193180/261.63=4560=0x11D0。 LowByte=0xD0 和 HighByte=0x11。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.