欢迎访问有用文档网!

当前位置: 有用文档网 > 心得体会 >

微机课程设计实验报告修改版

| 浏览次数:

 课程设计说明书

 课程名称:

 《微机原理及接口技术》课程设计

 设计题目:用 定时与计数:利用 8253 控制扬声器发声,播放一段音乐

 班级:

  网络工程 1502

 姓名:

 潘万丁

 开始时间:_2018_____年_01___月_15___日

 完成时间:_2018_____年_01___月_19___日

 成绩评定 平 时 考 勤(20%)

 实验室调试(30%)

 创新(10%)

 答辩(20%)

 说 明 书(20%)

 总评

 指导教师签名:

  ___年__月__日

 目录 摘要 随着科技的高速发展,计算机已经经过了好几代的更新,然而计算机的运行的基本原理依然没有改变的。而今,我们通过一个学期的学习,已经初步了解了计算机的基本结构和原理,并且已经学会了用汇编语言进行基本的程序编写。

 一、概述 汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利用计算机所有特性并能直接控制硬件的唯一语言。借助于汇编程序,计算机本身可以自动地把 汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序设计工作的部分自动化。而本次课程设计的主要目的就是巩固所学过的知识,用汇编语言熟练地运用三大结构,进一步掌握一些指令的功能、掌握子程序的定义及调用和 INT 21H、INT10H 中断的使用,同时熟练运用通用寄存器和堆栈来进行编写一个完整的具有某种特定功能的程序。

 二、方案设计 1.功能分析

 在此次设计中,第一个重点就是音乐播放的控制,要想能按照正常的频率和节拍播放出音乐,就需要合理的设计出给蜂鸣器的频率值和播放的时间。这样就能比较准确的把音乐按一定的节奏播放出来。如果我们要想加快播放速度,我们可以改变每一节拍的播放时间,如果我们改变了播放的频率值,那么歌曲也就相应的改变了。

 我们根据上面的功能分析,同时通过查阅相关资料,了解了计算机的内部结构的同时还清楚的理解了 DOS 中的 21H 和 10H 中断的调用,因此我们设计出如下方案:

 (1)音乐的代码化

 我们首先收集了一首简单的歌曲《两只老虎》,同时还带有相应的音谱,通过查阅相关的音乐资料,了解了节拍的概念和各音符所对应的频率,而后我们把每一首歌曲都转化成两个数据段,一个是把各个音符翻译成相应的频率值,第二是把相应的节拍转化成对应的时间值,来控制播放每一个音符所对应的时间。这样我们在播放歌曲时,同时调用频率值和时间值就可以把相应的歌曲播放出来了。

 (2)音乐演奏的硬件配合

 我们了解到在计算机的主板上有 8253、8255 和蜂鸣器,同时了解到蜂鸣器的驱动是通过 8255 和 8253 共同控制的,我们通过对 8253 的通道 2 进行写数据来控制蜂鸣器的声音频率,再通过 8255 来控制播放时间的长短,就通过这样的巧妙配合来达到播放完整音乐的效果。

 (3)音乐演奏的软件设计

 软件设计是本设计的重点,在软件设计中,我们要给 8253 和 8255 写数据,执行相应的代码来控制音乐的播放。

 三、软件设计

 在介绍音乐的播放之前,先来说说 PC 机的小喇叭是怎样与机器相连的呢?下面的“发声原理图”表示了喇叭与机器简单的相连情况。喇叭的一端连接在电源正极,另一端与机器的 61H 端口的 bit 位相连。可以想象,若能连续改变 61H 端口的 bit 位 0,1 状态,就可以使喇叭线圈内的电流时有时无,从而使喇叭发声。我们编制的汇编程序的工作,就是连续改变 61H 端口的 bit 位状态。

  我们使用 PC 机有一个专门用于定时的电路,型号为 8253。它有三个通道,第一个通道用于控制始终正常运转;第二个通道用于存储器刷新;这两个通道与我们现在要讨论的问题无关。第三个就是一组电路域喇叭相连。

 如下图所示就是 PC 机中完整的发声电路,定时器通道 3 的 G 端与 61H 端口的 bit0 位相连,如果把 61H 端口的 bit0 位置为 1,那么定时器通道 3 就会被启动,此时将有一组信号从 OUT 输出,信号的频率可以用程序控制;若 61H 的端口 bit0 位为 0,则定时器被关闭,out 端就恒为 1.

 发声原理图:

 发声程序设计原理:

 PC 机发声系统以 8253 的 2 号计数器为核心。系统初始化时,2 号计数器 I作在“方波发生器”方式,初值为二进制数,,写入顺序为先低后高,CLK2 为1.193182MHz,当计数初值为 533H 时,OUT2 输出的方波大约为 900Hz,经过简单的滤波之后,送至扬声器。改变 1、4 号计数器的计数初值就可以使扬声器发出不同频率的音响。

  ROM BIOS 中有个 BEEP 子程序,这能根据 BL 中组出的时间计数值控制8253 定时器,产生持续时间为 1 个或几个 0.5 秒,频率为 896HZ 的声音,我们可以利用并修改 BEEP,使其产生任一频率的声音。为此我们需要做两点修改,首先,BEEP 程序只能产生 896HZ 的声音,我们的通用发声程序应能产生任一频率的声音。其次,BEEP 产生声音的持续时间(音长)只能是 0.5 秒的倍数,我们希望声音的持续时间更易于调整,例如可以是 10ms 的倍数。

 我们知道 BEEP 能将计数值 533H 送给定时器 2 产生 896HZ 的声音的,那么产生其它频率声音的时间计数值应为:

 533H×896÷给定频率=123280H÷给定频率 发声程序包括 4 个步骤:

 (1)在 8253 中的 42 端口送一个控制字 0B6H(10110110B),该控制字对定时器 2 进行初始化,使定时器 2 准备接收计数初值。

 (2)在 8253 中的 42H 端口(Timer2)装入一个 16 位的计数值(533H×895/频率),以建立将要产生的声音频率。

 (3)把输出端口 61H 的 PB0、PB1 两位置 1,发出声音。

 对于发音部分。PC 机上的大多数输入/输出(I/O)都是由主板上的 8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI 包括 3 个 8 位寄存器,两个用于输入功能,一个用于输出功能。输入寄存器分配的 I/O 端口号为 60H 和 62H,输出寄存器分配的 I/O 端口号为 61H。由 PPI 输出寄存器中的 0、1 两位来选择扬声器的驱动方式。

 (4)注意音乐节拍表的频率表的设定。一个频率对应一个节拍,如果频率表和节拍表有问题,同样不会发出声音。

 对于发音部分。PC 机上的大多数输入/输出(I/O)都是由主板上的 8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI 只有 PB0 和 PB1 同时为“1”时,才能驱动扬声器地声。

 当从 8255 中采集到输入的数据时,需要确定相应的频率,所以在软件编程时要建立一个数据表。

 把相应的频率送到一个寄存器上,通过公式:

 计数值=533H×896÷ f=1234DCH÷ f

 算出计数值,再把算得的计数值送给 8253,就可产生所要频率的方波。在把计数值送 8253 前,必须先把 8253 进行初始化:

 使其选用通道 2,工作在方式 3 下。

 就整个电路而言,接好电路后,通过软件编程不断地采集从 8255 口中输入的信号,而 8 个开关都接在 8255 的 A 口上,只要有开关按下,就会采集到一个数据,根据这个数据与事先编好的表对应,得到一个计数值,把这个计数值送给 8253 的通道 2,8253 的通道 2 工作的方式3 下,这样就可以产生满足频率要求的发声方波。这个方波经驱动放大就可以使扬声器发出相应的声音。

 所以 8255 在这里完成两个任务,它不仅从 A 口中采集到数据,而且 B 口的 PB1 和 PB0 两个位要控制发声。8253 的主要任务就是产生

 所要求发声的不同频率的方波。

 本例程序是由 8253 芯片控制发声的音阶和节拍, 由 8255 芯片控制扬声器的端口地址开启扬声器发生。音阶对应的数据表如下 音符

 简谱音阶

 频率

 音符

 简谱音阶

 频率

 音符

 简谱音阶

 频率

 C’’ 1. 139 C 1 262 C’ .1 524 D’’ 2. 147 D 2 294 D’ .2 587 E’’ 3. 165 E 3 330 E’ .3 659 F’’ 4. 175 F 4 349 F’ .4 698 G’’ 5. 196 G 5 392 G’ .5 784 A’’ 6. 220 A 6 440 A’ .6 880 B’’ 7. 247 B 7 494 B’ .7 988 通过编写程序,由计算机主板上的 8253 芯片和 8255 芯片连接到主板上的扬声 器来控制主板发声。

 1.算法描述流程图:

 Y

  N

 开始 数据段存入内存 取 SI 所指向的音节频率段频率 取 BP 所指向的发声时长值 频率是否为-1? 向 8253 计数器 2 写控制字 8253 控制 8255 发声 调整 SI,BP 地址,使 SI 指向下一个频率 BP 指向下一个时长 结束

  实现代码如下:

 ;***************************************************************************;程序名称:ceshi ;两只老虎乐曲 ;*************************************************************************** stack segment para stack "stack"

  db 64 dup("stack...") stack ends ;******************************************************************* dseg segment para "data" mus_freq

  dw

 262,294,330,262,262,294,330,262

  dw

 330,349,392,330,349,392,392,440

  dw

 392,349,330,262,392,440,392,349

 dw

 330,262,294,196,262,294,196,262,-1 mus_time

  dw

 25,25,25,25,25,25,25,25,25,25

  dw

 50,25,25,50,12,12,12,12,25,25

  dw

 12,12,12,12,25,25,25,25,50,25,25,50 dseg ends ;******************************************************************* cseg segment para "code"

  assume cs:cseg,ss:stack,ds:dseg ;-------------------------------------------------------------------

 music proc far

  mov

 ax,dseg

  mov

 ds,ax

  lea

 si,mus_freq

  lea

 bp,ds:mus_time freq:

  mov

 di,[si]

  cmp

 di,-1

  je

  end_mus

  mov

 bx,ds:[bp]

  call soundf

  add

 si,2

  add

 bp,2

  jmp

 freq end_mus:

 mov

 ax,4c00h

  int

 21h music endp ;-------------------------------------------------------------------------- soundf proc near

  push ax

  push bx

  push cx

  push dx

  push di

  mov

 al,0b6h

  out

 43h,al

  mov

 dx,12h

  mov

 ax,348ch

  div

 di

  out

 42h,al

  mov

 al,ah

  out

 42h,al

  in

  al,61h

  mov

 ah,al

  or

  al,3

  out

 61h,al wait1:

  mov

 cx,6630

  call waitf

  dec

 bx

  jnz

 wait1

  mov

 al,ah

  out

 61h,al

  pop

 di

  pop

 dx

  pop

 cx

  pop

 bx

  pop

 ax

  ret soundf endp ;-------------------------------------------------------------------------- waitf proc near

  push ax waitf1:

  in

  al,61h

  and

 al,10h

  cmp

 al,ah

  je

  waitf1

 mov

 ah,al

  loop waitf1

  pop

 ax

  ret waitf endp ;-------------------------------------------------------------------------- cseg ends ;***************************************************************************

  end music ;***************************************************************************

 四、调试过程 1. 编辑源程序,假定源文件名为 YINYUE.ASM。

 2. 汇编源程序 YINYUE.ASM。调用宏汇编程序MASM对源文件 YINYUE.ASM进行汇编,生成目标文件 YINYUE.OBJ。若汇编无错误,则进入第三步。

 3. 用连接命令 LINK 连接目标程序文件 YINYUE.OBJ。若连接成功,则进入下一步。

 4. 运行可执行文件 YINYUE.EXE。

 5. 两只老虎音乐响起。

  五、结果描述 按上面的调试步骤过后,运行 ceshi 过后,音乐就响起了。

 六、总结 1. 在这一周的实验过程中碰到了很多的难题和障碍,我们组刚开始各做各的,最后选择最好的程序进行答辩,所以我们每个人都得到了锻炼。在实验的过程中我认识到平时基础知识的重要性,只有能够熟练的掌握指令的含义才能在实验过程中得心应手,否则一步错则整个试验都会陷入困境,因而,严谨的态度是试验成功的重要保障!

 2. 通过这次课程设计,我对各个芯片有了进一步的了解,对各个芯片的功能有了更深刻的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样的试验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。同时在实验过程中我还遇到了很多没见过的指令,同时自己也自己回到宿舍花时间在网上看了一些有关于指令的视频教程,对自己的原有知识进一步巩固与提升了。

 3. 我们大家在实验的时候都团结合作,遇到问题时候一起探讨,增强了我们的合作精神。特别是在制作仿真图的时候大家都很积极帮忙,讨论。

 七、参考文献 [1]韩雁,徐煜明。《微机原理与接口技术》。北京:电子工业出版社,2007。

 [2]超想-3000TC 微机原理与接口实验指导书。

 [3]Stephen E.Derenzo 著,蔡梅琳等译。Practical Interfacing in the Laboratory, Using a PC for the

 Instrumentation, Data Analysis, and Control(微机接口技术实验教程)。北京:机械工业出版社,2006. [4]钱晓捷 编著。32 位汇编语言程序设计。机械工业出版社,2011.

 音乐播放仿真图:

 AD[0..15]AD[0..7]AD0AD1AD2AD3AD4AD5AD6AD7AD0AD1AD2AD3AD4AD5AD6AD7AD[0..15]READY22INTR18NMI17RESET21CLK19MN/MX33HOLD/GT131HLDA/GT030A[16..19]M/IO/S028ALE/QS025DT/R/S127INTA/QS124TEST23BHE34DEN/S226RD32WR/LOCK29U18086D03D14D27D38D413D514D617D718CLK11MR1Q02Q15Q26Q39Q412Q515Q616Q719U274LS273A1B2C3E16E24E35Y015Y114Y213Y312Y411Y510Y69Y77U374LS138D08D17D26D35D44D53D62D71RD22WR23A019A120CS21CLK09GATE011OUT010CLK115GATE114OUT113CLK218GATE216OUT217U48253AU5NOTLS1SPEAKERU4(CLK2)+5vAD[0..7] 仿真图里导入的《两老虎》音乐程序:

  stack segment

  db 64 dup("stack...") stack ends data segment

 mus_freq dw 262,294,330,262,262,294,330,262

  dw 330,349,392,330,349,392,392,440

  dw 392,349,330,262,392,440,392,349

  dw 330,262,294,196,262,294,196,262,-1 music_time dw 10 dup(25)

  dw 50,25,25,50,12,12,12,12,25,25

  dw 12,12,12,12,25,25,25,25,50,25,25,50

 data ends code segment

 assume cs:code,ds:data,ss:stack music

  proc far

  mov ax,data

 mov ds,ax

 mov ax,stack

 mov ss,ax

  lea si,mus_freq

 lea bp,ds:music_time

 freq: mov di,[si]

 cmp di,-1

 je end_mus

 mov bx,ds:[bp]

 call soundf

 add si,2

 add bp,2

 jmp freq

 end_mus:

  mov al,0

 out 62h,al

 mov ah,4ch

 int 21h music endp

 soundf

 proc

 push ax

 push bx

 push cx

 push dx

 push di

 ;MOV AL,80H

 ;OUT 66H,AL

 mov al,0b6h

 out 46h,al

  MOV DX,00H

  MOV AX,6000

  div di

  out 44h,al

 mov al,ah

 out 44h,al

  mov al,0

 mov ah,al

 or al,3

 out 62h,al

 d1: mov cx,2801 d2:

  loop d2

 dec bx

 jnz d1

  mov al,ah

 out 62h,al

  pop di

 pop dx

 pop cx

 pop bx

 pop ax

 ret soundf endp code ends

 end music he.DSN shiyan.asm

推荐访问:微机 修改版 课程设计

上一篇:农业发展规划

下一篇:创业规划书范本

热门排行Top Ranking

新时代青年的奋斗精神心得体会5篇

新时代青年的奋斗精神心得体会5篇新时代青年的奋斗精神心得体会篇1为进一步弘扬爱国奋斗奉献精神,激励党

XX乡镇防止返贫致贫监测和帮扶工作方案

XX乡镇防止返贫致贫监测和帮扶工作方案 为认真落实党的十九届四中全会关于“坚决打赢脱贫攻

坚持总体国家安全观心得体会250字8篇

坚持总体国家安全观心得体会250字8篇坚持总体国家安全观心得体会250字篇1“安而不忘危,存而不忘亡

宣传部部长心得体会15篇

宣传部部长心得体会15篇宣传部部长心得体会篇1首先,感谢领导给我这次评选优秀员工的机会,也感谢您能在

管理信息系统案例

第一章 信息系统与管理 案例((或实例) 得讨论题及点评((或回答)) [实例]利润计划工作中得反复

大学生体育课心得体会1500字5篇

大学生体育课心得体会1500字5篇大学生体育课心得体会1500字篇1不知不觉,进入大学第一个学期的体

餐饮单位疫情防控工作汇报

餐饮单位疫情防控工作汇报根据省、市、区疫情防控指挥部统一部署,严格落实《省市场监督管理局关于进一步加

党支部党建工作年度台账-基层党建工作台账

党支部党建工作年度台账::基层党建工作台账 党支部党建工作年度台账说明为抓好党建工作,根据《党章》《

党员的时代楷模心得体会12篇

党员的时代楷模心得体会12篇党员的时代楷模心得体会篇1@党员干部“打工攻略”请查收一年一度的“双十一

公文格式国家标准

公文格式国家标准 1范围 本标准规定了党政机关公文通用的纸张要求、排版和印制装订要求、公文格式各要素

内勤辅警先进事迹材料

内勤辅警先进事迹材料3篇 内勤辅警先进事迹材料1 办公室工作室一项既辛苦、又清苦的脑力劳动,他没有惊

傅雷家书阅读心得及感悟10篇

傅雷家书阅读心得及感悟10篇傅雷家书阅读心得及感悟篇1一连几天,我都沉浸在《傅雷家书》这本书中,感受