延时遇到的问题!急!...先谢谢了

来源:百度知道 编辑:UC知道 时间:2024/06/04 18:50:25
写的汇编程序中,用到了 waitf函数,就是一个利用61H端口的PB4
做的延迟。我想弄一个秒表,把CX设置成663,应该就是0.01S啊
可是要快的多,也就是说延迟小于了0.01s
怎么回事,不同的机器,waitf不同的效果吗,可很多书上都提到了这个函数,说33144是0.5s....
另外还有就是想征求一下,怎么设置那个扬声器的频率和时间,可以弄出悦耳点的声音,我想让他滴滴答答响起来,
用的的是61H端口的0,1位,谢谢大家了,急.....

处理延迟没用过waitf函数,可能他用的是时钟的滴答数来计算时间的吧,不同CPU,10ms的滴答数是不一样的,
最好使用2ch号DOS中断来读取系统时间,那样可以很精确(DH,DL分别保存秒和百分秒数)

例子:(延迟500ms)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
code segment
assume cs:code
start: mov ah,2ch
int 21h
mov bx,dx
add bx,0032h ;高8位为延时秒数,低8位位延时百分秒数(500ms)
lp: int 21h
cmp dx,bx
jle lp
mov ah,4ch
int 21h
code ends
end start

2、我这有个用61h端口实现的音乐程序,例子是两只老虎,可以在data段修改每个音符频率和延迟来改变歌曲
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

data segment
;频率表
FTABLE dw 262,294,330,262
dw 262,294,330,262
dw 330,349,392 ;书上把 4 频率(349)写成了394,- =
dw 330,349,392
dw 392,440,392,349,330,261
dw 392,440,392,349,330,261
dw 294,192,262
dw 294,192,262,0
;时间表
TTABLE dw 80,80,80,80
dw 80,80,80,80
dw 80,80,160
dw 80,80,160
dw 40,40,40,40,80,80
dw 40,40,40,40,80,80
dw 80