微机原理硬件实验报告3

上传人:豆浆 文档编号:25752335 上传时间:2017-12-17 格式:DOC 页数:9 大小:744.14KB
返回 下载 相关 举报
微机原理硬件实验报告3_第1页
第1页 / 共9页
微机原理硬件实验报告3_第2页
第2页 / 共9页
微机原理硬件实验报告3_第3页
第3页 / 共9页
微机原理硬件实验报告3_第4页
第4页 / 共9页
微机原理硬件实验报告3_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《微机原理硬件实验报告3》由会员分享,可在线阅读,更多相关《微机原理硬件实验报告3(9页珍藏版)》请在金锄头文库上搜索。

1、微机原理硬件实验实验报告2008*班姓名: 学号:实验三:8253 计数器/定时器的应用目录实验目的 .3实验内容及要求 .3程序流程图 .3实验代码 .4电路连线图 .8思考题 .9心得体会 .9实验目的学习掌握 8253 用作定时器的编程原理。实验内容及要求完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。音符频率对照表音符 1(do) 2(re) 3(mi) 4(fa) 5(so) 6(la) 7(si) i(do)频率(Hz) 256 288 320 341 384 426.6 480 512扩展功能:利用小键盘实现弹琴功能,并显示弹奏的乐谱。程序流程图该实验的程序主要有两

2、个功能:其中一个是自动播放音乐的功能,另一个是弹琴的功能。程序设计的主要模块划分如下:主程序工作模式选择 ( m o d e )输入模块播放音乐模块播音模块检测输入输入响应显示模块主程序中有两个主要的模块,一个是工作模式的选择模块,用来确定当前程序运行在什么状态(播放音乐或者弹琴) ,另一个模块是显示模块,用来显示当前播放器所播放的是哪一个音。工作模块选择模块下有三个子模块,分别是播放音乐模块、输入模块及播音模块。播放音乐模块是用来播放音乐,它在适当的时候从内存中取预置的音乐的一个音,把这个音有关的信息放到内存中特定的位置,并设定这个音的持续时间。输入模块用来检测是否有键盘输入,一旦检测到有键

3、盘输入,则把对应的音的有有关信息放到内存中特定的位置。该模块中也包含有两个子模块,其中检测输入模块的作用是扫描键盘,把对应于八个音的八个键的工作状态读入 PC 中;输入响应模块的作用是对检测输入模块读入的信息进行响应,通过这些信息判断哪些键被按下,再做出相应的行为。播音模块从内存中特定位置中取出要播放的音的有关信息,并通过设置 8253 达到播放不同频率的音的效果。三个模块彼此独立又彼此相联系,从而使得程序工作有条不紊。程序初始化数码管显示工作模块与前一模式相同 ?音符计数清零延时结束 ?取出下一音符 ,并设置延时读入键盘输入状态根据输入设置播放的音播音设定的音程序结束 ?程序结束否否是是是否

4、播放音乐弹琴实验代码该程序中的每一个子函数对应着上面框图的一个模块,每个字程序都有自己特定的功能。实验代码如下:delay macro;定义一个用于延时的宏local lp1,lp2pushcxmov cx, timelp1: pushcxmov cx, timelp2: loop lp2pop cxloop lp1pop cxover;调用结束程序的宏endm;-over macro;用于判断是否结束程序的宏local llpushaxmov ah, 0bhint 21hor al, aljz lljmp exitll: pop axendm;-dis macro;让数码管显示的宏pusha

5、xpushdxmov dx, palea di, num0mov al, showmov ah, 0add di, axmov al, diout dx, alpop op axendm;-data segmenttime dw 100h;数码管延时time 2 dw 500h;播音延时计数time 3 dw 20h;空音延时计数count dw 0;用来计算播放到哪一个音;-pa dw 0ee00h;8255 的四个端口pb dw 0ee01hpc dw 0ee02hctrl dw 0ee03h;-c0 dw 0ee20h;计数器的四个端口c1 dw 0ee21hc2 dw 0ee22hct

6、rlc dw 0ee23hcnum db 00110110b;播音时的控制字cnum0 db 00110010b;播空(不出声)时的;控制字;-num0 db 00000000b;空音对应的;显示num1 db 00100001b;以下是 8 个;音对应num2 db 11110100b;的数码管显;示num3 db 11110001bnum4 db 00111001bnum5 db 11011001bnum6 db 11011101bnum7 db 01100001bnum8 db 11111101bnum8 db 00100011b;-sou dw 10d;空音的分频比sou1 dw 12

7、5d;8 个音的分频比sou2 dw 111dsou3 dw 100dsou4 dw 94dsou5 dw 83dsou6 dw 75dsou7 dw 67dsou8 dw 63dplay_ dw 0;存放正要播放的音的分频比play db 0;正在播放的音show db 0;正在显示的音pplay db 0;前一个播放的间pfun db 0;前一次所使用的功能gate db 0;-;乐谱music db 1h,0h,1h,0h,5h,0h,5h,0hdb 6h,0h,6h,0h,5h,0h,5h,0hdb 4h,0h,4h,0h,3h,0h,3h,0hdb 2h,0h,2h,0h,1h,0h

8、,1h,0hdb 5h,0h,5h,0h,4h,0h,4h,0hdb 3h,0h,3h,0h,2h,0h,2h,0hdb 5h,0h,5h,0h,4h,0h,4h,0hdb 3h,0h,3h,0h,2h,0h,2h,0hdb 1h,0h,1h,0h,5h,0h,5h,0hdb 6h,0h,6h,0h,5h,0h,5h,0hdb 4h,0h,4h,0h,3h,0h,3h,0hdb 2h,0h,2h,0h,1h,0h,1h,0hnumber dw $ - music;-data ends;-sta segment stack stackdb 100 dup(?)sta ends;-code seg

9、mentassume ss:sta,ds:data,cs:codestart: mov ax, datamov ds, axmov es, ax;-;初始化 8255 芯片mov al, 10000001b ;mov dx, ctrlout dx, al;固定使用一个数码管mov dx, pbmov al, 01hout dx, al;开始时显示为空mov show, 0;下面是主程序lp: disdelaycall modejmp lp;-程序结束-exit: mov ax, 4c00hint 21h;-mode proc near;模式选择函数mov dx, 0eee0h;读入端口,确;定

10、工作状态in al, dxtest al, 01hjz mus;-mov pfun, 1h;1 指的是是弹琴;状态call inputmov bl, gatecmp bl, 0jz nosou;GATE 为零是 ,表示没有;按键输入mov bh, cnum;预定控制字jmp setc;nosou: mov ax, 0mov play,al;设定下一个播放的音mov show, al;设置数码管的显;示mov ax, 10dmov play_, ax;设定下一整体上;播放的音的分频比mov bh, cnum0;设定控制字;-下面是播放的有关代码-setc: mov ah, pplay;如所播放的

11、音和前;一个mov al, play;一样,则跳过设置8253 的代码cmp ah, aljz nosetcall csetnoset: jmp modex;-Mus : mov al, pfuncmp al, 0jz jump;检查上次所使用的功能,如果不同则重新调;制mov pfun, 0mov count, 0hmov cx, 0;CX 为延时计数器jump: cmp cx, 0jnz con;延时示结果 ,跳过;根据 count 的户数,确定下一个播放的;音lea si, musicmov bx, countmov al, si+bxcmp al, 0jz stop;根据播放的是不是空

12、音,设置不同的延时mov cx, time2mov bh, cnumjmp next4stop: mov cx, time3mov bh, cnum0next4: mov show, al;设置数码管mov play,allea si, soumov ah, 0add si, axadd si, axmov dx, si;取出对应音的分频比mov play_, dx;设置分频比call cset;COUNT 计数自增mov bx, countinc bxcmp bx, numberjz backmov count, bxjmp conback: mov count, 0hcon: dec cx;延时计数减 1modex: retmode endp;-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号