教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

《微机原理与接口技术》实验报告 简易电子琴(2)

来源:网络收集 时间:2026-08-12
导读: 简易电子琴 6、设计原程序及注释 code segment assume cs:code ,ds:data ;把代码段CS、数据段DS分别与相应的寄存器相连接 ;ASSUME语句只是使汇编程序知道在程序执行时各个段寄存器的值,而这些寄存器的实际值(除

简易电子琴

6、设计原程序及注释

code segment

assume cs:code ,ds:data ;把代码段CS、数据段DS分别与相应的寄存器相连接

;ASSUME语句只是使汇编程序知道在程序执行时各个段寄存器的值,而这些寄存器的实际值(除了代码段寄存器CS以外),还必须在程序执行时,用MOV指令来赋给,不起真正的关联作用。

data segment ;定义数据段

data1 dw 4002,3567,3178,2834,2527,2250,2005,1786 ;8253计数值,不同频率

脉冲需要不同计数值(此处使用T1)

data ends ;定义数据段结束

org 1500h ;伪指令org:指定了段内在它以后的程序或数据块存放的起始地址

(本实验采用1500h,与实验室实验箱相关)

start : mov ax,data ;起真正关联作用,对数据段寄存器DS初始化,取出DATA

数据段的段地址,借助AX寄存器中转 ;START为语句标号,可作为跳转目标

mov ds,ax ;实现段寄存器DS的初始化 mov dx, 0ff2bh ;8255A控制口地址:0FF2BH mov al,82h ;10000010B

out dx,al ;写8255A芯片的控制字,实现工作在方式0,A端口和C端

口输出,B端口输入

b8255: mov bx,offset data1 ;初始化地址指针,以后就可以用这些指针来间接

寻址缓冲区

mov dx, 0ff29h;8255A的B口地址:0FF29H,将8255的B口地址赋给DX in al,dx ;从B口得到输入信息送到AL中 test al,80h ;10000000B检验按下键是否在K8

;test(按位与)用于检测哪个开关拨上去

jnz lop8 ; 不是K8则跳到LOP8,以下均类似(jnz不等于0转移,ZF=0)

简易电子琴

test al,40h ;01000000B检验按下键是否在K7 ;注意:高电平有效 jnz lop7

test al,20h ;00100000B检验按下键是否在K6 jnz lop6

test al,10h ;00010000B检验按下键是否在K5 jnz lop5

test al,08h ;00001000B检验按下键是否在K4 jnz lop4

test al,04h ;00000100B检验按下键是否在K3 jnz lop3

test al,02h ;00000010B检验按下键是否在K2 jnz lop2

test al,01h ;00000001B检验按下键是否在K1 jnz lop1

jmp b8255 ;跳转至b8255

lop8: add bx,2 ;2:每一个字占2个字节,以下均一致

;bx+2的值是data段中离开存储单元的两个字节的存储单元的地址,而不是bx单元的内容加2

lop7: add bx,2 lop6: add bx,2 lop5: add bx,2 lop4: add bx,2 lop3: add bx,2 lop2: add bx,2 lop1: add bx,2

;每次进行test后不为0则跳转到指定lop,从指定lop开始地址依次加2,最终执行完所有的lop后使得地址指向拨上去的开关对应的地址(对应当前喇叭发出的音符)的下一个地址(对应当前音符的下一个音符)

简易电子琴

mov dx, 0043h ;8253的控制字端口地址为:43H

;在送出频率计数值之前,还要给方式寄存器送一个方

式值,该数决定对哪一个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制码还是BCD码。

mov al,37h ;00110111B

out dx,al ;写8253芯片的控制字,选择计数器0,先写最低有效位,

然后写最高有效位,实现工作在方式3,8253的每个计数器的计数制为二进制

;out指令把输出结果送到端口DX中去 mov dx,0040h ;8253的计数器0的地址为:40H

mov ax,word ptr ds:[bx] ;写计数值,从偏移中取出写到计数器端口 ;运算符PTR建立一个新的存储器地址操作数。

新的操作数的段地址和段内偏移量与PTR运算符右边的操作数的对应分量相同(ds:数据段段地址;bx:数据段内偏移量;地址=ds×16+bx),而类型由PTR的左边的操作数指定,此处为word字类型。

out dx,al ;先写最低有效位(即低8位) mov al,ah

out dx,al ;再写最高有效位(即高8位) 这时喇叭发出声音 mov cx,0ffffh ;0ffffh控制延时 11: mov dx,03h

12:dec dx ;对指定的操作数减1,然后把结果送回操作数 jnz 12 ;不等于0转移,跳转至12 loop 11 ;跳转到11 目的是增加时延

;LOOP指令使CX减1,且判断若CX不等于0,则循环至目标操作数 一条LOOP指令相当于以下两种指令的组合: DEC CX

简易电子琴

JNZ AGAIN

mov dx, 0ff2ah ;8255A的C口地址:0FF2AH mov al,0

out dx,al ;写端口C控制字,使bit0复位的控制字为00000000B 注意:使端口C按复位的控制字被写入控制字寄存器 jmp b8255 ;跳转至b8255 ret ;从过程返回 code ends ;代码段结束

end start ;end用来结束整个源程序

7、简易电子琴的安装与调试

硬件调试

⑴连接简易电子琴系统的电路图。

⑵将DVCC实验箱与计算机保持串口通讯成功。 ⑶将汇编程序代码输入计算机进行硬件调试。 软件调试

⑴把弹奏功能的程序代码输入计算机,与硬件相结合进行修改调试(其中主要运用跳转、循环指令)。 ⑵实现弹奏功能。 最终结果

当开关拨为“1”时,相当于有键按下,喇叭发出声音。拨动不同的开关则对应不同的音符,每次只能拨一个开关。连续拨动开关,喇叭发出音乐。

注意:每次只能拨一个开关,当Kn(n=1、2、3 8、9)开关拨开时,发出响音,若Kn未关闭,则下一个拨开开关只能是Kn之后的开关才可发出响音,拨开Kn之前的开关没有发音;若Kn关闭,则下一个拨开开关可以是所有开关中的任何一个,所以,如果我们想自己弹奏一首音乐的话,我们可以每次拨开一个开关,然后关闭,再拨下一个音符对应开关,这样就可以按音乐的乐谱弹奏出所有音符。

简易电子琴

五、实验总结

在为期一周的微机原理课程设计中,我对微机原理及应用这门课有了更深的认识,系统的掌握了微机原理及接口的应用知识,我学会了制做项目的一般步骤。第一部是硬件设计主要是实现控制对象与被控制对象之间的联系。第二步就是软件设计,就是要完成各个可编程芯片与CPU之间的数据传送。在本次设计中对硬件要求就要熟练掌握可编程器件8255A和8253的应用。对软件设计就要熟练掌握汇编语言。此次实验后,我对8253的工作方式,尤其是方式3,还有8253,8255A的工作方式控制字等之前觉得很费解的概念有了实质的理解。由于时间限制的问题和硬件的局限性也只能将电子琴的功能简易化,实现自己弹奏音乐。此外,汇编语言是一门较难的计算机内容,在以后学习中仍需加强。

虽然此次课程设计的过程是艰辛的,但结果还是令我比较欣慰的。在此特别感谢老师对我的指导。

六、参考文献

《微机原理与接口技术》(第2版) 周明德、蒋本珊 编著 人民邮电出版社

…… 此处隐藏:1476字,全部文档内容请下载后查看。喜欢就下载吧 ……
《微机原理与接口技术》实验报告 简易电子琴(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/118356.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)