《微机原理与接口技术》实验报告 简易电子琴(2)
简易电子琴
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [外语考试]管理学 第13章 沟通
- [外语考试]07、中高端客户销售流程--分类、筛选讲
- [外语考试]2015-2020年中国高筋饺子粉市场发展现
- [外语考试]“十三五”重点项目-汽车燃油表生产建
- [外语考试]雅培奶粉培乐系列适用年龄及特点
- [外语考试]九三学社入社申请人调查问卷
- [外语考试]等级薪酬体系职等职级表
- [外语考试]货物买卖合同纠纷起诉状(范本一)
- [外语考试]青海省实施消防法办法
- [外语考试]公交车语音自动报站系统的设计第3稿11
- [外语考试]logistic回归模型在ROC分析中的应用
- [外语考试]2017-2021年中国隔膜泵行业发展研究与
- [外语考试]神经内科下半年专科考试及答案
- [外语考试]园林景观设计规范标准
- [外语考试]2018八年级语文下册第一单元4合欢树习
- [外语考试]分布式发电及微网运行控制技术应用
- [外语考试]三人行历史学笔记:中世纪人文主义思想
- [外语考试]2010届高考复习5年高考3年联考精品历史
- [外语考试]挖掘机驾驶员安全生产责任书
- [外语考试]某211高校MBA硕士毕业论文开题报告(范
- 用三层交换机实现大中型企业VLAN方案
- 斯格配套系种猪饲养管理
- 涂层测厚仪厂家直销
- 研究生学校排行榜
- 鄱阳湖湿地景观格局变化及其驱动力分析
- 医学基础知识试题库
- 2010山西省高考历年语文试卷精选考试技
- 脉冲宽度法测量电容
- 谈高职院校ESP教师的角色调整问题
- 低压配电网电力线载波通信相关技术研究
- 余额宝和城市商业银行的转型研究
- 篮球行进间运球教案
- 气候突变的定义和检测方法
- 财经大学基坑开挖应急预案
- 高大支模架培训演示
- 一种改进的稳健自适应波束形成算法
- 2-3-鼎视通核心人员薪酬股权激励管理手
- 我国电阻焊设备和工艺的应用现状与发展
- MTK手机基本功能覆盖测试案例
- 七年级地理教学课件上册第四章第一节




