簡體   English   中英

通過 TASM 組件中的揚聲器播放音符

[英]Playing music notes through speaker in TASM assembly

我正在嘗試在 TASM 中編寫一個播放音符的程序。 我在網上找不到任何文檔,我找到的最接近的是這個 stackoverflow 問題,它能夠發出“嗶”聲。
我不知道的是:

  1. 這段代碼是如何工作的

  2. 聲音映射是什么

  3. 我如何彈奏特定的音符(做 re mi ...)

用PC speaker播放單音可以使用引用問題中提到的方法。 它使用來自系統定時器的方波發生器,通過將操作模式 0xB6 設置為 I/O 端口 0x43 來激活。 請參閱定時器端口 寫入端口 0x43 的值 182=0xB6=0y10110110 指定

  • 選擇定時器計數器 Nr.2(位 6-7)
  • endianess :首先是低字節,其次是高字節(位 4-5)
  • 模式 3:方塊生成(位 1-3)
  • 格式 0:二進制模式(位 0)。 然后您需要使用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 數字,您將把這些數字作為LowByteHighByte放入系統計時器。

查看如何獲取LowByteHighByte示例代碼 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM