简易波形发生器汇编语言包含正弦波、三角波、锯齿波
时间: 2023-07-04 12:30:25 浏览: 164
以下是一个简单的波形发生器的汇编语言代码,可以产生正弦波、三角波、锯齿波:
```
ORG 0x100
MOV AL, 0B6H ;设置计数器0门控方式,计数器工作方式2
OUT 43H, AL
MOV AX, 0F424H ;设置计数器0的初值为0F424H
OUT 40H, AL
MOV AL, AH
OUT 40H, AL
MOV AL, 20H ;打开中断
OUT 21H, AL
MOV AL, 0 ;设置DS为0
MOV DS, AL
MOV BX, 0 ;设置BX为0
LOOP:
; 产生正弦波
MOV CX, BX ;将BX的值保存到CX
SHR CX, 8 ;将CX右移8位,得到CX的高8位
MOV AL, [SIN+CX] ;从SIN数组中读取对应的正弦值
OUT 61H, AL ;将正弦值输出到PC喇叭
; 产生三角波
MOV CX, BX ;将BX的值保存到CX
SHR CX, 8 ;将CX右移8位,得到CX的高8位
CMP CX, 80H ;判断CX的高8位是否小于80H
JB TRI_DOWN ;如果是,跳转到TRI_DOWN
SUB CX, 80H ;如果不是,将CX的高8位减去80H
NEG CX ;将CX的值取反
ADD CX, 80H ;将CX的高8位加上80H
JMP TRI_END ;跳转到TRI_END
TRI_DOWN:
NEG CX ;将CX的值取反
TRI_END:
MOV AL, CL ;将CX的低8位保存到AL
OUT 61H, AL ;将三角波值输出到PC喇叭
; 产生锯齿波
MOV CL, BH ;将BH的值保存到CL
OUT 61H, CL ;将锯齿波值输出到PC喇叭
INC BX ;BX加1
CMP BX, 10000H ;判断是否达到65536
JNE LOOP ;如果没有,跳转到LOOP
HLT ;程序停止执行
SIN:
DB 80H, 83H, 86H, 89H, 8CH, 8FH, 92H, 95H, 98H, 9BH, 9EH, 0A1H, 0A4H, 0A7H, 0AAH, 0ADH
DB 0B0H, 0B2H, 0B5H, 0B8H, 0BBH, 0BEH, 0C1H, 0C3H, 0C6H, 0C9H, 0CBH, 0CEH, 0D0H, 0D3H, 0D5H, 0D8H
DB 0DAH, 0DCH, 0DEH, 0E0H, 0E2H, 0E4H, 0E6H, 0E8H, 0EAH, 0ECH, 0EDH, 0EFH, 0F0H, 0F2H, 0F3H, 0F5H, 0F6H
DB 0F7H, 0F8H, 0F9H, 0FAH, 0FAH, 0FBH, 0FBH, 0FBH, 0FCH, 0FCH, 0FCH, 0FBH, 0FBH, 0FBH, 0FAH, 0FAH
DB 0F9H, 0F8H, 0F7H, 0F6H, 0F5H, 0F3H, 0F2H, 0F0H, 0EFH, 0EDH, 0ECH, 0EAH, 0E8H, 0E6H, 0E4H, 0E2H
DB 0E0H, 0DEH, 0DCH, 0DAH, 0D8H, 0D5H, 0D3H, 0D0H, 0CEH, 0CBH, 0C9H, 0C6H, 0C3H, 0C1H, 0BEH, 0BBH, 0B8H
DB 0B5H, 0B2H, 0B0H, 0ADH, 0AAH, 0A7H, 0A4H, 0A1H, 09EH, 0X9BH, 0X98H, 0X95H, 0X92H, 0X8FH, 0X8CH, 0X89H, 0X86H, 0X83H
```
这段代码使用计数器0来产生正弦波、三角波、锯齿波信号,并将信号输出到PC喇叭。程序会持续运行并不断产生信号,直到程序被停止。其中,正弦波的数据存储在SIN数组中。
阅读全文