资源描述:
《本实验用8253做定时器输出音频信号》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、;本实验用8253做定时器输出音频信号,控制喇叭发出声音;将8253的CLK1接到1MHz脉冲信号上(1MHz信号可由4MHz信号;分频后得到),GATE1接VCC,OUT1接喇叭的脉冲输入。;CONTROLequ0c003hCOUNT0 equ0c000hCOUNT1 equ0c001hCOUNT2 equ0c002hOUTBIT equ08002hIN_KEY equ08001hdata segmentlast db 0KeyTable: ;键码定义 db 16h,15h,14h,0ffh db 13h,12h,11h,10h d
2、b 0dh,0ch,0bh,0ah db 0eh,03h,06h,09h db 0fh,02h,05h,08h db 00h,01h,04h,07hToneTable: dw 2273,2024,1805,1704 dw 1517,1353,1205,1136data endscode segment assumecs:code,ds:dataTestKeyprocnear mov dx,OUTBIT mov al,0 out dx,al ;输出线置为0 mov dx,IN_KEY
3、in al,dx ;读入键状态 not al and al,0fh ;高四位不用 retTestKeyendpGetKeyprocnear mov ch,00100000b mov cl,6KLoop: mov dx,OUTBIT mov al,ch ;找出键所在列 not al out dx,al shr ch,1 mov dx,IN_KEY in al,dx not al and al,0fh jne Goon_ ;该
4、列有键入 dec cl jnz KLoop mov cl,0ffh ;没有键按下,返回0ffh jmp Exit1Goon_: dec cl shl cl,2 ;键值=列X4+行 mov ch,4LoopC: test al,1 jnz Exit1 shr al,1 inc cl dec ch jnz LoopCExit1: mov dx,OUTBIT mov al,0 out dx,al mov ch,0 mov bx,offset
5、KeyTable add bx,cx mov al,[bx] ;取出键码 retGetKeyendpOutToneproc near push ax mov al,76h ;计数器1,16位二进制,方式3。 mov dx,CONTROL out dx,al pop ax mov dx,COUNT1 out dx,al mov al,ah out dx,al retOutToneendpdelay procnear ;
6、 push cx mov cx,60000 loop $ pop cx retdelay endpstartproc near mov ax,data mov ds,axMLoop: call TestKey ;有键入? jz MLoop ;无键入,继续显示 call GetKey ;读入键码 cmp al,1 ;是否在1~8范围内 jl MLoop cmp al,8 jg MLoop mov a
7、h,0 dec ax shl ax,1 mov si,ax mov bx,offsetToneTable mov ax,[bx+si] ;查找音频值 call OutTone ; call delay ;延时 mov ax,2 ;关闭发音 call OutTone jmp MLoopstartendpcode