- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8253定时计数器,clk端接收的是1Mhz的信号,用该频率除以每个音符的频率就得到该音符对应8253的计数初值,如音符1(都)对应的频率为524hz,所以,要发出音符为1的声音,8253对应的计数初值应为1908,所以,8个音符对应的计数初值就如下表: 字符 1 2 3 4 5 6 7 8 音符 1 2 3 4 5 6 7 I 计数初值 1908 1701 1515 1433 1276 1136 1012 954 四、参考流程图 data segment io8255a equ 288h io8255b equ 28bh io8253a equ 280h io8253b equ 283h table dw 524,588,660,698,784,880,988,1048;高音的 ;table dw 262,294,330,347,392,440,494,524;低音的 msg db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$ data ends 五、参考程序 code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,offset msg mov ah,9 int 21h ;显示提示信息 sing: mov ah,7 int 21h ;从键盘接收字符,不回显 cmp al,1bh je finish ;若为ESC键,则转finish cmp al,1 jl sing cmp al,8 jg sing ;若不在1-8之间转sing sub al,31h shl al,1 ;转为查表偏移量,注意:频率值占两个字节 mov bl,al ;保存偏移到bx mov bh,0 mov ax,4240H ;计数初值 = 1000000 / 频率, 保存到AX mov dx,0FH div word ptr[table+bx] mov bx,ax ;bx中也是计数初值 mov dx,io8253b ;设置8253计时器0方式3, 先读写低字节, 再读写高字节 mov al out dx,al mov dx,io8253a mov ax,bx out dx,al ;写计数初值低字节 mov al,ah out dx,al ;写计数初值高字节 mov dx,io8255b ;设置8255 A口输出 mov al out dx,al mov dx,io8255a mov al,03h out dx,al ;置PA1PA0 = 11(开扬声器) call delay ;延时 mov al,0h out dx,al ;置PA1PA0 = 00(关扬声器) jmp sing finish: mov ax,4c00h int 21h delay proc near ;延时子程序 push cx push ax mov ax,15 x1: mov cx,0ffffh x2: dec cx jnz x2 dec ax jnz x1 pop ax pop cx ret delay endp code ends end start 思考题: 1、设置8253的计数通道0为计数器,设置8255C口的PC0和PC7为控制端,完成以上功能。 2、编写程序,按下1键时演奏《两只老虎》,按下其它键则提示重新输入。 * * * * * 12月3日,周三,上午1、2节,实验4 12月3日,周三,中午12:50,实验5 12月10日,周三,中午12:50,实验6 流程图 主
文档评论(0)