北邮微原硬件实验
- 格式:doc
- 大小:83.50 KB
- 文档页数:18
微原硬件实验报告班级:07118 班学号:070547班内序号:26姓名:杨帆实验一熟悉实验环境及IO的使用一,实验目的1. 通过实验了解和熟悉实验台的结构,功能及使用方法。
2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。
3. 学会Debug 的使用及编写汇编程序二,实验内容1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2.用汇编语言编写跑马灯程序。
(使用EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。
B.通过输出端口控制灯的工作状态(低电平灯亮)三,实验步骤1.实验板的IO 端口地址为EEE0H在Debug 下,I 是读命令。
(即读输入端口的状态---拨码开关的状态)O 是写命令。
(即向端口输出数据---通过发光管来查看)进入Debug 后,读端口拨动实验台上八位拨码开关输入I 端口地址回车屏幕显示xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口输入O 端口地址xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。
2. 在Debug 环境下,用a 命令录入程序,用g 命令运行C>Debug -amov dx, 端口地址mov al,输出内容out dx, almov ah, 0bhint 21hor al, aljz 0100int 20h-g运行查看结果,修改输出内容再运行查看结果分析mov ah, 0bhint 21hor al, aljz 0100int 20h该段程序的作用3.利用EDIT 工具编写汇编写跑马灯程序程序实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。
B.通过输出端口控制灯的工作状态(低电平灯亮) C>EDIT 文件名.asm录入程序按Alt 键打开菜单进行存盘或退出编译文件C>MASM 文件名.asm连接文件C>LINK 文件名.obj运行文件或用Debug 进行调试。
电子工程学院ASIC专业实验报告班级:姓名:学号:班内序号:第一局部语言级仿真LAB1:简单的组合逻辑设计一、实验目的掌握根本组合逻辑电路的实现方法。
二、实验原理本实验中描述的是一个可综合的二选一开关,它的功能是当sel=0否那么给出结果out=b。
在Verilog HDL 中,描述组合逻辑时常使用时,给出out=a,assign结构。
equal=(a==b)?1:0是一种在组合逻辑实现分支判断时常用的格式。
parameter定义的参数决定位宽。
测试模块用于检测模块设计的是否正确,它给出模块的输入信号,模块的内部信号和输出信号。
size观察三、源代码mux.vmodulescale_mux(out,sel,b,a);parametersize=1;output[size-1:0]out;input[size-1:0]b,a;inputsel;assignout=(!sel)?a:(sel)?b:{size{1'bx}};endmodulemux_test.v`definewidth8`timescale1ns/1nsmodulemux_test;reg[`width:1]a,b;wire[`width:1]out;regsel;scale_mux#(`width)m1(.out(out),.sel(sel),.b(b),.a(a)); initialbegin$monitor($stime,,"sel=%ba=%bb=%bout=%b",sel,a,b,out); $dumpvars(2,mux_test);sel=0;b={`width{1'b0}};a={`width{1'b1}};#5sel=0;b={`width{1'b1}};a={`width{1'b0}};#5sel=1;b={`width{1'b0}};a={`width{1'b1}};#5sel=1;b={`width{1'b1}};a={`width{1'b0}};#5$finish;endendmodule四、仿真结果与波形LAB2:简单时序逻辑电路的设计一、实验目的掌握根本时序逻辑电路的实现。
信息与通信工程学院通信原理硬件实验报告指导教师:实验日期:实验一双边带抑制载波调幅(DSB-SC AM)一、实验目的1) 了解DSB-SC AM信号的产生及相干解调的原理和实现方法。
2) 了解DSB-SC AM的信号波形及振幅频谱的特点,并掌握其测量方法。
3) 了解在发送DSB-SC AM信号加导频分量的条件下,收端用锁相环提取载波的原理及实现方法。
4) 掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波调试方法。
二、实验内容及步骤1. DSB-SC AM 信号的产生1) 按照指导书图示,连接实验模块。
2) 示波器观察音频振荡器输出调制信号m(t),调整频率10kHz03) 示波器观察主振荡器输出信号波形和频率;观察乘法器输出,注意相位翻转。
4) 测量已调信号的振幅频谱,调整加法器的G和g,使导频信号的振幅频谱的幅度为已调信号的编带频谱幅度的0.8倍。
2、DSB-SC AM 信号的相干解调及载波提取1) 调试锁相环a) 单独测试VCO的性能 Vin暂不接输入,调节f0旋钮,改变中心频率,频率范围约为 70~130kHz。
V in接直流电压,调节中心频率100kHz-2~2V变化,观察VCO 线性工作范围;由GAIN调节VCO灵敏度,使直流电压变化正负1V时VCO频偏为10kHzb) 单独测试相乘和低通滤波工作是否正常。
锁相环开环,LPF输出接示波器。
两VCO经过混频之后由LPF输出,输出信号为差拍信号。
c) 测试同步带和捕捉带:锁相环闭环,输出接示波器,直流耦合。
将信号源VCO的频率f0调节到比100kHz小很多的频率,使锁相环失锁,输出为交变波形。
调节信号源VCO频率缓慢升高,当波形由交流变直流时说明VCO锁定,记录频率f2=96.8kHz,继续升高频率,当直流突变为交流时再次失锁,记录频率 f4=115.6kHz。
缓慢降低输入VCO频率,记录同步时频率f3=106.9kHz和再次失锁时频率f1=90.7kHz。
北邮嵌入式实验报告北邮嵌入式实验报告一、引言嵌入式系统是将计算机技术与其他工程领域相结合的一种综合应用技术,广泛应用于各个领域。
本实验旨在通过对北邮嵌入式系统的学习与实践,深入了解嵌入式系统的原理和应用。
二、实验背景北邮嵌入式实验是计算机科学与技术专业的一门重要实践课程。
通过该实验,学生可以掌握嵌入式系统的基本原理、设计方法和调试技巧,提高对计算机硬件和软件的综合应用能力。
三、实验内容1. 硬件平台本实验使用的硬件平台为北邮嵌入式系统开发板,该开发板集成了ARM Cortex-M3内核的处理器,具有丰富的外设接口和扩展能力。
2. 软件开发环境本实验使用的软件开发环境包括Keil MDK-ARM集成开发环境和ST-Link调试工具。
Keil MDK-ARM提供了一套完整的软件开发工具链,包括编译器、汇编器、链接器和调试器等,方便学生进行嵌入式软件的开发和调试工作。
3. 实验任务本实验主要包括以下几个任务:(1) 学习嵌入式系统的基本原理和架构,了解处理器的工作原理和寄存器的使用方法。
(2) 学习嵌入式软件开发的基本流程,包括编译、烧写和调试。
(3) 编写简单的嵌入式应用程序,实现对外设的控制和数据处理功能。
(4) 调试和测试嵌入式应用程序,验证程序的正确性和稳定性。
四、实验过程1. 学习嵌入式系统的基本原理和架构在实验开始前,我们首先学习了嵌入式系统的基本原理和架构。
了解了处理器的工作原理,包括指令执行过程、寄存器的使用方法等。
同时,我们还了解了嵌入式系统的外设接口和扩展能力,为后续的实验任务做好准备。
2. 学习嵌入式软件开发的基本流程在掌握了嵌入式系统的基本原理后,我们开始学习嵌入式软件开发的基本流程。
首先,我们安装了Keil MDK-ARM集成开发环境,并配置了相应的编译器和调试器。
然后,我们学习了嵌入式软件的编译、烧写和调试方法,掌握了如何将编写的程序烧写到开发板上,并通过调试工具进行程序的调试和测试。
实验报告学院:计算机学院课程名称:计算机系统结构实验名称:WINDLX模拟器实验班级:姓名:学号:实验一 WINDLX模拟器安装及使用略实验二指令流水线相关性分析一.实验类别验证实验二.实验目的通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。
三.实验环境Windows XP操作系统WinDLX模拟器四.实验原理指令流水线中主要有结构相关、数据相关、控制相关。
相关影响流水线性能。
(1)数据相关定义:原有先后顺序的两条指令(I1,I2)在对共享变量(位置)进行读、写时,指令流水线中实际完成的读、写顺序与原有顺序不一致,导致流水线输出错误。
三类数据相关:写读(WR)相关读写(RW)相关写写(WW)相关解决方法技术:1. 使某些流水线指令延迟、停顿一或多个周期。
2. 双端口存储器:如果指令和数据放在同一个存储器。
3. 设置两个存储器:一个数据存储,一个为指令存储器。
4. 软件优化编译:通过指令重新排序,消除数据相关。
5. 定向技术:又称旁路技术或专用通路技术,是使后续指令提前得到前指令的运算结果(适合ALU类指令)(2)结构相关定义:如果某指令在流水线重叠执行过程中,硬件资源满足不了指令重叠执行的要求,会产生资源冲突或竞争,称为流水线结构相关解决方法技术:1. 延迟技术:使某些指令延迟、停顿一或多个时钟周期2. 双端口存储器:允许同时读两个数据或指令3. 设置双存储器(哈弗结构):一个数据存储,一个指令存储。
4软件优化编译:通过指令重新排序消除结构相关。
(3)控制相关定义:控制相关是指因程序执行转移类指令而引起的冲突相关。
包括无条件转移、条件转移、子程序调用、中断等,它们属于分支指令,执行中可能改变程序方向,造成流水线断流。
解决方法技术:1、静态分支技术静态转移预测技术(猜测法) ;延迟转移;提前形成条件码,生成转移目标地址;改进循环程序;2、动态分支预测技术转移历史表BHT;转移目标缓冲栈(BTB);转移目标指令缓冲栈BTIB;五.实验步骤(1)观察程序中出现的数据/控制/结构相关。
北京邮电大学实验报告题目:基于SYSTEMVIEW通信原理实验报告班级:专业:姓名成绩:目录实验一验证抽样定理 (3)一、实验目的 (3)二、实验原理 (3)三、实验步骤 (4)四、实验结果 (5)4.1抽样速率fs=10Hz(小于2fm): (5)4.2抽样速率fs=28Hz(等于2fm): (6)4.3抽样速率fs=56Hz(大于2fm): (7)五、实验讨论 (7)六、实验建议和意见 (8)实验二验证奈奎斯特第一准则 (8)一、实验目的 (8)二、实验原理 (8)2.1奈奎斯特第一准则 (8)2.2升余弦滤波器 (9)三、实验步骤 (9)四、实验结果 (10)4.1Rate为奈奎斯特速率(100Hz),无噪声 (11)4.2改变信源速率Rate,无噪声 (12)4.2.1Rate = 50 Hz (12)4.2.2Rate = 150 Hz (13)4.2.3Rate = 200 Hz (14)4.3Rate为奈奎斯特速率(100Hz)时,加入噪声 (15)4.3.1标准差Std Dev = 0.2V (15)4.3.2标准差Std Dev = 2V (16)4.3.3标准差Std Dev = 5V (17)五、实验讨论 (17)六、实验建议和意见 (18)实验三16QAM调制与解调 (18)一、实验目的 (18)二、实验原理 (18)2.1矩形MQAM信号星座 (19)2.2矩形星座MQAM信号的产生 (19)2.3矩形星座MQAM信号的解调 (19)三、实验步骤 (20)四、实验结果 (21)4.1带宽Fc=10Hz,无噪声 (21)4.2带宽Fc=10Hz,加入噪声 (22)4.2.1标准差Std Dev = 0.2V (22)4.2.2标准差Std Dev = 5V (23)4.3改变带宽,有噪声 (24)4.3.1带宽Fc=20Hz(2倍),噪声标准差Std Dev = 0.2V (24)4.4增大发送功率,有噪声 (25)4.4.1基带信号幅度Amp = 20v,噪声标准差Std Dev = 1V (25)五、实验讨论 (26)六、实验建议和意见 (27)实验一验证抽样定理一、实验目的1)验证抽样定理。
北邮otn实习报告【篇一:北京邮电大学专业实习报告】北京邮电大学实习报告附:实习总结及心得体会:学习通信已经三年了,即将步入大四,我们马上要结束大学的课程,很多人要步入社会,很多人要进入实验室进行专业领域的研究学习,这个时候,就该把书本上的知识运用到实际中,真正把这些知识学到手。
所以,大四开学之前,我们进行了为期4天的专业实习,在黄村的联通培训基地实习。
一、实习目的及要求通过专业实习复习并深化本专业知识,并理论应用到实际,了解通信发展的现况,加深对全国通信网的感性认识,了解本行业的历史发展,现在概况,以及未来的发展及行业新技术的趋势等。
在复习和进一步学习通信行业各学科知识的同时,理论联系实践,培养学生的实际解决问题能力。
除了知识技术方面的培养,还进行学生关于工作态度,分工合作的契合性,乃至面对各种问题的人生态度等素质教育,使学生真正成长为全方面的素质人才。
了解电信企业生产和运营的规律及通信企业的现状,将对本行业的认识与社会发展及国家局势和性质联系到一起,上升到另一个高度,达到对学生更深层次的教育培养,真正为以后走向社会为国家通信行业做贡献打下基础。
二.实习内容总结及心得体会1.20m宽带及综合布线专业实习的第一天,老师主要介绍了宽带接入,光纤接入fttx+lan等技术。
其中重点介绍了adsl,dsl,fttx,xpon 。
通过老师的讲解,我们了解了adsl技术是运行在原有普通电话线上的一种新的高速宽带技术,它利用现有的一对电话铜线,为用户提供上、下行非对称的传输速率(带宽)。
非对称主要体现在上行速率(最高640kbps)和下行速率(最高8mbps)的非对称性上。
上行(从用户到网络)为低速的传输,可达640kbps;下行(从网络到用户)为高速传输,可达8mbps。
adsl是目前dsl技术系列中最适合宽带上网的技术,因为adsl上下行速率的非对称特性、能提供的速率以及传输距离特别符合现阶段互联网接入的要求,而且能与普通电话共用接入线;adsl的标准化很完善,产品的互通性很好,价格也在大幅下降,而且adsl接入能提供qos、确保用户独享一定的带宽。
信息与通信工程学院微原硬件实验报告姓名:班级:学号:班内序号:【一.基本的I/O实验】实验一 I/O地址译码一、实验目的掌握I/O地址译码电路的工作原理。
二、实验原理和内容1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
例如:执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲,执行下面两条指令MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲。
图1-1利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
2、接线: Y4/IO地址接 CLK/D触发器Y5/IO地址接 CD/D触发器D/D触发器接 SD/D角发器接 +5VQ/D触发器接 L7(LED灯)或逻辑笔三、硬件接线图及软件程序流程图1.硬件接线图2.软件程序流程图四、源程序DATA SEGMENTDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK ;基本框架;延时子程序DELAY1 PROC NEARMOV BX,500HPUSH CXLOOP2: MOV CX,0FFFHWAIT1: LOOP WAIT1DEC BXJNZ LOOP2POP CXRETDELAY1 ENDPSTART: MOV CX,0FFFFH ;L7闪烁控制LOOP1: MOV DX,2A0H ;灯亮OUT DX,ALCALL DELAY1MOV DX,2A8H ;灯灭OUT DX,ALCALL DELAY1LOOP LOOP1 ;循环闪烁CODE ENDSEND START五、实验结果灯L7闪烁实验二简单并行接口一、实验目的掌握简单并行接口的工作原理及使用方法。
(选择273进行实验)二、实验原理和内容1、按下面图1-2简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。
74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。
2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。
3、接线:按图1-2-1接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门)图1-2三、硬件接线图及软件程序流程图1.硬件接线图2.软件程序流程图四、源程序DATA SEGMENTDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK ;基本框架START: MOV AH,1 ;键盘输入INT 21HCMP AL,27 ;判断是否为ESC键JZ EXITMOV DX,2A8HOUT DX,AL ;输出JMP STARTEXIT: MOV DX,2A8H ;返回DOSMOV AL,0OUT DX,AL ;所有灯灭MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果8个灯代表8位ASCII码,灯亮代表‘1’,灯灭代表‘0’。
当从键盘输入字母或字符时,8个灯显示与输入对应的ASCII码,按下ESC键则所有灯灭。
六、实验总结接线时注意各个端口名称不要接错,接线完成之后可以用HQFC中的演示实验验证接线是否正确。
实验一中需要加入合理的延时子程序来实现灯的亮灭交替。
七、实验收获与心得体会第一次微原硬件实验在参考讲义和询问老师的情况下了解到了基础的硬件试验箱操作方法,学会了通过电脑软件编写控制试验箱的简单步骤以及相关注意事项。
【二.可编程并行接口8255实验】实验三可编程并行接口8255实验四七段数码管一、实验目的实验三:通过实验,掌握8255工作于方式0以及设置A口为输出口,C 口为输入口的方法。
实验四:掌握数码管显示数字的原理。
二、实验原理和内容实验三:1、实验电路如图2-1,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2、编程从8255C口输入数据,再从A口输出。
图2-1实验四:静态显示:按图2-2连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1 、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示学号的后四位0210。
三、硬件接线图及软件程序流程图1.硬件接线图实验三实验四2.软件程序流程图实验三实验四四、源程序(仅实验三代码)DATA SEGMENTDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK ;基本框架START: MOV AX,DATAMOV DS,AXMOV DX,283H ;8255控制寄存器端口地址283H MOV AL,B ;工作方式为0OUT DX,AL ;初始化8255DIGITAL: MOV DX,28AH ;熄灭数码管MOV AL,00HOUT DX,ALMOV DX,288H ;A口显示0MOV AL,3FHOUT DX,ALMOV DX,28AH ;C口00000001(位码)MOV AL,01HOUT DX,ALMOV DX,28AH ;熄灭数码管MOV AL,00HOUT DX,ALMOV DX,288H ;A口显示2MOV AL,06HOUT DX,ALMOV DX,28AH ;C口00000010(位码)MOV AL,02HOUT DX,ALMOV DX,28AH ;熄灭数码管MOV AL,00HOUT DX,ALMOV DX,288H ;A口显示1MOV AL,5BHOUT DX,ALMOV DX,28AHMOV AL,04H ;C口00000100(位码)OUT DX,ALMOV DX,28AH ;熄灭数码管MOV AL,00HOUT DX,ALMOV DX,288H ;A口显示0MOV AL,3FHOUT DX,ALMOV DX,28AHMOV AL,08H ;C口00001000(位码)OUT DX,ALMOV DX,28AH ;熄灭数码管MOV AL,00HOUT DX,ALMOV AH,01HINT 16HJNZ EXIT ;有键盘输入,退出JMP DIGITALEXIT: MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果数码管显示了学号的后四位“0210”如图所示。
当键盘有按键输入时退出,数码管灭。
六、实验总结本次实验中控制数码管显示的主要有两个端口,A口和C口,C口控制哪一路数码管亮,A口控制一路数码管亮什么数字;工作方式的选择如下图所示,D7=1表示控制寄存器中存放的是工作方式选择字,工作在方式0,A、C均为输出,B口不使用,故AL为B或B均可。
七、实验收获与心得体会初步了解可编程并行接口8255的简单应用;在实验三中8255的工作方式选择字非常重要,要弄清A、C口为输入还是输出,其次在代码中设计按键退出模块,可以使得运行更加可靠。
学习了控制数码管显示的方法,即通过两路控制,一路负责扫描决定哪一路显示,一路负责决定显示什么数字。
这种思路与数电实验中VHDL语言控制数码管有异曲同工之处,让我体会到了编程思想的相同之处。
【三.可编程定时器/计数8253实验】实验八可编程定时器/计数器(8253/8254)一、实验目的学习掌握8253用作定时器的编程原理;二、实验原理和内容1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。
2.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。
注意:8253输入频率应小于2MHz。
三、硬件接线图及软件程序流程图1.硬件接线图2.软件程序流程图四、源程序DATA SEGMENTFENPIN DW 0001H,3906,3472,3125,2932,2604,2344,2083,1953;分频比DIGITAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;数码管MUSIC DB 0,3,2,1,2,3,3,3,0,2,2,2,0,3,5,5,0,3,2,1,2,3,3,3,1,2,2,3,2,1,0,5,0,1,0 ;存放播放的乐曲音符NUM DB 00H,070H,0B0H,0D0H,0E0H ;检测键盘输入(00h=00000000;070h=01110000;0b0h=;0d0h=;0e0h=)DATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK;延时子程序1DELAY PROC NEARPUSH CXMOV CX,100HWAIT0: LOOP WAIT0POP CXRETDELAY ENDP;延时子程序2DELAY1 PROC NEARPUSH CXMOV CX,0FFFFHWAIT1: LOOP WAIT1POP CXRETDELAY1 ENDP;获取键盘输入值的子程序KEY PROC NEARPUSH AX ;保护现场PUSH CXPUSH DXMOV CX,00H ;从第一行开始扫描CHECK: MOV DX,28AH ;C口地址给DXMOV BX,OFFSET NUMADD BX,CXMOV AL,[BX]OUT DX,AL;防抖IN AL,DX ;判断是否有键盘按下MOV AH,ALCALL DELAYIN AL,DXCMP AL,AHJNZ CHECK ;不相等说明为抖动,重新检测;判断按下的列AND AL,0FHCMP AL,0FHJZ NEXTCMP AL,0EHJZ NEXT1CMP AL,0DHJZ NEXT2CMP AL,0BHJZ NEXT3MOV BX,01HJMP GOTNEXT: INC CXCMP CX,05HJNZ JUMP1MOV CX,01H ;修改变量扫描下一行JUMP1: JMP CHECKNEXT1: MOV BX,04HJMP GOTNEXT2: MOV BX,03HJMP GOTNEXT3: MOV BX,02H;计算按下键盘的数值GOT: SUB CX,01HMOV AL,CLMOV DL,04HMUL DLADD BL,ALSUB BL,01H ;此时BX中所存即为对应的偏移量 POP DX ;恢复现场POP CXPOP AXRETKEY ENDP;主程序START: MOV AX,DATAMOV DS,AX;8253初始化MOV DX,283HMOV AL,36HOUT DX,AL;8255初始化MOV DX,28BHMOV AL,81H ;C口输入OUT DX,ALMOV DX,289H ;B口位选数码管MOV AL,01HOUT DX,AL;扫描键盘LOOP1: CALL KEYCMP BX,0 ;按0播放音乐JZ PLAY0CMP BX,9 ;按9退出JZ EXIT;按1~8发出对应音MOV CX,BXMOV BX,OFFSET DIGITAL ;数码管显示音符 ADD BX,CXMOV AL,[BX]MOV DX,288H ;A口输出OUT DX,AL;播放该音符MOV BX,OFFSET FENPINMOV AX,CXADD AX,AXADD BX,AX;计数,先低八位后高八位MOV AX,[BX]MOV DX,280HOUT DX,ALMOV AL,AHOUT DX,ALCALL DELAY1CALL DELAY1MOV DX,28AH ;C口输入IN AL,DX;检测键盘是否弹起MOV AH,ALLOOP2: CALL DELAYIN AL,DXCMP AL,AHJZ LOOP2;初始化8253,停止播放音乐MOV AX,0HMOV DX,283HMOV AL,36HOUT DX,ALJMP LOOP1;播放音乐PLAY0: MOV CX,01HPLAY: PUSH CX;读取音符,存于CX中MOV BX,OFFSET MUSICADD BX,CXMOV AL,[BX]MOV CL,ALMOV CH,0H;数码管显示MOV BX,OFFSET DIGITALADD BX,CXMOV AL,[BX]MOV DX,288HOUT DX,AL;播放该乐符MOV BX,OFFSET FENPINMOV AX,CXADD AX,AXADD BX,AX;计数,先低八位后高八位MOV AX,[BX]MOV DX,280HOUT DX,ALMOV AL,AHOUT DX,ALPOP CX;延时,持续播放MOV AX,90HLOOP3: CALL DELAY1DEC AXJNZ LOOP3;乐曲未结束时,CX加1INC CXCMP CX,28H;共40个音符JNZ JUMJMP LOOP1JUM: JMP PLAYEXIT: MOV AL,0MOV DX,288HOUT DX,ALMOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果1.按小键盘的0,播放预置音乐,数码管显示音符对应的数字1~8;2.按小键盘的1~8,分别发出do,re,mi,fa,so,la,si,高音do,数码管显示按下的音符对应的1~8数字;3.按小键盘的9,数码管熄灭,放音停止,返回dos;六、实验总结1.在开始用MUSIC存乐谱实现了代码的多用性,可以直接在开头改变对应数字来实现不同乐曲的演奏;2.开头用DIGITAL存数码管需要显示的0~8数字,数码管显示原理参考实验三和四,不同点在于8255中C口为输入,B口位选数码管仅第一路亮;3.实验难点主要在小键盘与数码管,8254的连接控制。