📄 pc.asm
字号:
;/*---------------------------*/
;PC蜂鸣器高低音测试
;编译器为MASM5.0测试通过
;/*---------------------------*/
;/*---------------------------*/
;数据段定义
data segment ;数据定义段
assume ds:data ;建立数据段寄存器寻址
note_t dw 131,147,165,175,196,220,247 ;超低音
dw 262,294,330,349,392,440,494 ;低音
dw 523,587,659,698,784,880,988 ;中音
dw 1046,1175,1318,1397,1568,1760,1975 ;高音
data ends ;数据定义段结束
;/*---------------------------*/
;/*---------------------------*/
;代码段定义
code segment ;代码定义段
assume cs:code ;建立代码段寄存器寻址
;/*---------------------------*/
;/*---------------------------*/
;主函数
main proc far ;主函数过程定义
mov ax,data ;取数据段地址
mov ds,ax ;装载数据段寄存器ds,使之指向当前数据段
mov bx,0 ;设定查表数组下标初值
;/*---------------------------*/
;/*---------------------------*/
;检测输入
key_scan:
mov ah,0bh ;调用中断21,0bh检测有无键盘输入
int 21h
cmp al,00h ;有输入al=ffh,无输入al=00h
jnz exit ;有输入就退出
next:
add bx,2
push bx
mov cx,note_t[bx] ;取得对应数组下标值的频率值
mov dx,0012h
mov ax,34dch
div cx ;ax为所得分频值
call beep
pop bx
cmp bx,48
ja key_scan1
jmp key_scan ;否则继续
key_scan1:
mov ah,0bh ;调用中断21,0bh检测有无键盘输入
int 21h
cmp al,00h ;有输入al=ffh,无输入al=00h
jnz exit ;有输入就退出
next1:
sub bx,2
push bx
mov cx,note_t[bx] ;取得对应数组下标值的频率值
mov dx,0012h
mov ax,34dch
div cx ;ax为所得分频值
call beep
pop bx
cmp bx,0
je key_scan
jmp key_scan1 ;否则继续
;/*---------------------------*/
;/*---------------------------*/
;退出
exit:
mov ah,4ch ;调用中断21,4ch退出系统
int 21h
;/*---------------------------*/
;/*---------------------------*/
main endp ;主函数过程结束
;/*---------------------------*/
;/*---------------------------*/
;固定频率响
beep proc near
push bx
out 42h,al ;输出频率值,低8位
mov al,ah
out 42h,al ;输出频率值,高8位
in al,61h ;开启定时器
or al,03h
out 61h,al
mov ah,00h ;取时钟计数值
int 1ah
mov al,6 ;9.1次为0.5秒
cbw ;al值转为16位ax
add ax,dx ;加上当前时钟计数值,得到计数终值
mov bx,ax ;计数终值置入bx
delay: mov ah,00h
int 1ah ;取时钟计数值
cmp bx,dx ;到终值吗?
jnz delay ;未到,继续延时
in al,61h ;关闭定时器
and al,0fch
out 61h,al
pop bx
ret
beep endp
;/*---------------------------*/
;/*---------------------------*/
code ends ;代码段结束
end main ;主程序结束
;/*---------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -