实验2:8253、8255接口实验
8255并行口实验

JZ NEXT
MOV AL,00H
NEXT:MOVAL,0FFH
”
结果无论开关是否闭合,全都不亮,后来发现只需在中间加上个跳转语句就行了。
实验程序如下
附录
实验题1:
ASSUME CS:CODE学号
113200880200057
专业年级
电子信息工程2008级
实验题目
8255并行口实验
实验目的
1、掌握可编程并行接口8255的初始化及其应用
2、掌握汇编语言源程序的设计方法
实验内容
实验内容1:8255A的A口作为输入口,与逻辑电平开关K1~K8相连。8255A的B口作为输出口,与发光二极管LED1~LED8相连。编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。即当开关ki置于L时,对应发光二极管LEDi点亮;置于H时熄灭。
TEST AL,01H;测试PA0的状态
JZ NEXT;PA0为0则跳转
MOV AL,00H;否则全亮
JMP LOOP2
NEXT:MOV AL,0FFH;置全灭
LOOP2:MOV DX,04A2H
OUT DX,AL;输出,控制灯的开关
JMP LOOP1
CODE ENDS
END START
CODE SEGMENT PUBLIC
ORG 100H
START:MOVAL,10010000B
MOV DX,04A6H
OUT DX,AL;送出8255的控制字
LOOP1:MOV DX,04A0H
IN AL,DX;读入A口的状态
实验二_8255并行接口应用实验

实验二_8255并行接口应用实验一、实验目的1. 熟悉8255并行接口的功能和应用。
2. 掌握8255并行接口的控制字的含义和编写方法。
3. 熟悉并行接口的IO读写操作。
二、实验仪器1. PC机2. AT8051开发板4. 其他配件线路三、实验原理8255芯片是Intel公司提供的一种通用并行接口芯片。
它可以实现外围设备、传感器的控制、数据的输入/输出等功能,是一种非常实用的通用接口芯片。
8255是一个三端口、24线单片并行接口芯片,它可以直接连接CPU总线或I/O总线,采用AHB (AMBA High-Performance Bus)总线。
总线与8255之间的通讯方式采用输入/输出端口的方式,在CPU访问8255时,必须指定8255的端口地址。
CPU在访问8255时,AV(地址有效)为高电平,同时CS和RD为有效低电平。
8255所使用的端口地址由登录的端口号选择器(P0、P1、P2)决定。
8255的主要特点:a. 具有3个通用I/O端口,每个端口有8位,共有24条I/O线。
b. 可以通过外部信号线与中间件或总线连接。
c. 具有3种基本工作方式:安装、双向缓冲装置和输入输出方式。
d. 为减少芯片引脚数,端口地址用地址寄存器低端口号器(P0,P1)来指定。
端口的寄存器编号可以选择0或1。
e. 以可编程方式控制I/O端口。
f. 内接有二进制计数器,可用于计时和计数应用。
2. 编程实现原理本次实验中,我们将用8051的C语言编程,控制8255进行I/O读写操作。
在编程时,我们将根据需要设置8255的控制字,并利用控制字来控制8255的输入输出。
同时,在控制8255的I/O读写操作中,我们还需将相应的端口地址赋值给端口指针,以实现读写操作。
3. 硬件连接我们将在AT8051开发板上搭建实验电路,具体如下:a. 8255芯片的输入输出口A、B、C分别连接到LED灯,以控制LED灯的开关状态。
b. AT8051开发板的P0、P1、P2分别连接到8255的A1、A0、CS/WR、RD/CS口线,以进行8255的读写操作。
单片机可编程8255接口实验报告

单片机可编程8255接口实验报告可编程8255接口实验报告㈠实验目的1.掌握可编程并行接口芯片的基本工作原理及其使用方,熟悉8255可编程并行I/O扩展接口。
2.掌握8255可编程并行I/O扩展接口方法,能够利用8255可编程并行接口芯片设计简单应用系统。
㈡实验器材1. G6W仿真器一台2. MCS-51实验板一台3. PC机一台4.电源一台㈢实验内容及要求1.声光报警器实验8255是可编程的通用并行输入输出扩展接口。
8255芯片的片选信号CS4 及口地址选择线AA0、AA1分别由8051的地址线提供。
8255的A口设置为输入数据端口,B口设置为输出数据端口,通过控制位操作控制字将C口某一位置位或复位,B口与发光二极管LED相连,C口与蜂鸣器相连,读取A 口数据,只要有一位为“1”,则点亮发光二极管LED(B口输出为低,LED 亮,反之,LED 灭),同时蜂鸣器响(若 C口某一位置1,蜂鸣器不响)。
2.交通灯控制实验通过并行接口8255实现十字路nb 口交通灯的模拟控制。
L6~L8与PC5~PC7相连,作为南北路口的交通灯,L1~L3与PC0~PC2相连,作为东西路口的交通等。
编程使六个灯按以下规律变化:南北路口的“绿”灯(L8)、东西路口的“红”灯(L1)同时亮30秒(要求有倒计时显示);南北路口的“黄”灯(L7)闪烁若干次,同时东西路口“红”灯(L1)继续亮;南北路口的“红”灯(L6)、东西路口的“绿”灯(L3)同时亮30秒(要求有倒计时显示);东西路口的“黄”灯(L2)闪烁若干次,南北路口的“红”灯(L6)继续亮;重复以上步骤。
㈣实验步骤1.连接8255芯片的片选信号CS4及口地址选择线AA0、AA1,并根据片选信号及口地址选择线确定8255的各I/O口地址和控制字寄存器的地址。
2.声光报警器实验的连线①8255的A口的8位根据需要接入高低电平。
②8255的B口中任一口与TEST相连,运行程序,即可观察L9发光二极管。
北理工微机原理与接口技术之8255,8253实验报告

北理工微机原理与接口技术之8255,8253实验报告微机原理与接口技术实验报告———8253可编程定时器8255并行接口实验实验一8255并行接口实验一,实验内容8255的A口作为输入口,与逻辑电平开关相连。
8255的B口作为输出口,与发光二极管相连。
编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。
二,实验目的(1)掌握8255的工作原理。
(2)掌握编写8255并行接口初始化及编程实现的方法。
三,实验仪器微机实验教学系统实验箱、8086CPU模块四,实验步骤(1)连线8255的PA0—PA7分别与逻辑电平开关的K1—K8相连?PB0—PB7分别与发光二极管电路的LED1—LED8相连?CS0与8255的片选CS8255相连其它线路均已连好具体如图所示:(2)编辑程序,编译链接后,单步运行,调试程序。
(3)调试通过后,全速运行,观察实验结果。
(4)撰写实验报告。
五,实验源程序如下CODE SEGMENT PUBLICASSUME CS:CODEORG 100HSTART:MOV DX,04A6HMOV AX,90H ;写8255的控制字,A组工作在方式0,A口输入,C口高4位输出,B组工作在方式0,B口及C口的低4位均工作在输出OUT DX,AXSTART1:MOV DX,04A0HIN AX,DX ;读取A口数据MOV DX,04A2HOUT DX,AX ;将从A口读取的数据从B口输出,控制LED灯JMP START1CODE ENDSEND START六,实验现象LED灯低电平有效。
当某一开关拨到低电平时,对应的LED灯点亮。
当某一开关拨到高电平时,对应的LED灯熄灭七,思考题1.将片选线接到CS1—CS7;重新编写程序。
CS0对应地址是04A0---O4AF, CS1对应地址是04B0---O4BF.现将片选线接到CS1,重新编程:CODE SEGMENT PUBLICASSUME CS:CODEORG 100HSTART:MOV DX,04B6H ;CS1对应的地址MOV AX,90HOUT DX,AXSTART1:MOV DX,04B0HIN AX,DXMOV DX,04B2HOUT DX,AXJMP START1CODE ENDSEND START实验现象:如同片选线接到CS02.交换A B接线,A口输出、B口输入;重新编写程序。
计数器定时器8253和并行接口8255综合实验

计数器定时器8253和并行接口8255综合实验一、实验目的1.掌握8253定时原理和初始化方法。
2.掌握8255并行输入输出原理和初始化方法。
3.掌握定时器8253和并行接口8255的综合应用设计技术。
二、实验内容用8253定时1秒钟,“时间到”信号可由8255端口的一个位检测得到。
在8255的另一个端口连接8个发光二极管,则可实现每隔1秒钟循环点亮1个灯。
还可以在8255端口的另一个位连接一只开关,当开关拨到1时进入运行状态,当拨到0时返回DOS。
三、实验程序流程图四、实验硬件接线图程序清单:CODE SEGMENTASSUME CS:CODESTART:MOV AL,10010000B ;8255初始化MOV DX,28BH ;间接I/O寻址方式,8255的控制口地址OUT DX,AL ;将8255控制字送控制端口地址PR0: MOV AL,00110110B ;8253计数器0工作方式字MOV DX,283H ; 间接I/O寻址方式,8253的控制口地址OUT DX,AL ;将8253计数器0控制字送到控制端口地址MOV AX,1000 ;计数初值MOV DX,280H ;选中计数器0OUT DX,AL ; 将计数初值低字节送8253计数器0端口地址MOV AL,AH ; 先读写低字节,再读写高字节OUT DX,AL ; 将计数初值高字节送8253控制端口地址PR1: MOV AL,01111100B ;8253计数器1工作方式字MOV DX,283H ; 间接I/O寻址方式OUT DX,AL ;将8253计数器1控制字送到控制端口地址MOV AX,1000 ;计数初值MOV DX,281H ;选中计数器1OUT DX,AL ; 将计数初值低字节送8253计数器1端口地址MOV AL,AH ;先读写低字节,再读写高字节OUT DX,AL ;将计数初值高字节送8253控制口地址MOV BL,01HMOV DX,28AH ; 间接I/O寻址方式,8255的C口地址MOV AL,BLOUT DX,AL ;点亮一盏灯L1:MOV DX,288H ; 间接I/O寻址方式,8255的A口地址IN AL,DXTEST AL,10000000B ;测试PA7开关JE NEXT ;若为0则返回DOSL2: MOV DX,288H ;8255A口地址IN AL,DXTEST AL,00000001B ;测PA0,若是1则继续测PA0JNE L2ROL BL,1 ;若是0则准备点亮下一盏灯MOV DX,28AH ;8255C口地址MOV AL,BL ;点亮下一盏灯OUT DX,ALL3: MOV DX,288H ;8255A口地址IN AL,DXTEST AL,01H ;测PA0,若是0则继续测PA0JE L3 ;定时到OUT输出低电平并维持一个CLK周期JMP L1 ;若PA0为1,则跳转至L1NEXT: MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START。
实验3(8255接口实验)

实验3:8255并行接口应用实验一、实验目的1、掌握8255的工作方式及应用编程。
2、掌握8255的典型应用电路的连接。
二、实验原理分析并行接口是以数据字节为单位进行的数据双向传输的接口部件,可以是8位、16位、32位和64位,其数据传输分单向和双向两种。
并行接口可以很简单(纯硬件电路方式,如锁存器或三态门),也可以很复杂(软硬件结合方式,即可编程并行接口)。
一般功能完善的并行接口包括:输入/输出数据寄存器、控制寄存器(存放控制命令)、状态寄存器(保存当前工作状态)和总线缓冲器等部件。
8255是Intel公司的一款可通过软件编程来确定并行接口工作方式的可编程接口部件。
1、8255基本结构8255内部结构如实验指导书P54,图3-5-1所示。
图8255内部结构及管脚图中:(1)数据端口:数据端口一方面连接外部设备、另一方面连接内部数据总线。
设有A、B、C等3个8位数据端口,其中:A端口,即PA0~PA7:8条数据线,由软件编程来确定其处于输入、输出或双向。
B端口,即PB0~PB7:8条数据线,由软件编程来确定其处于输入或输出。
C端口,即PC0~PC7:8条数据线,由软件编程来确定其处于输入或输出,也可以用作控制信号的输出或状态信号的输入线。
(2)A组和B组控制部件:一方面接收读写控制逻辑电路的读写命令,另一方面接收由数据总线输入的控制字,分别控制A组和B组的读/写操作和工作方式。
编程写入的控制字输入到CPU内部控制寄存器,通过数据总线传送给8255接收,以控制A组和B组的工作方式。
A组包括:A端口8位(PA0~PA7),C端口高4位(PC4~PC7)。
B组包括:B端口8位(PB0~PB7),C端口低4位(PC0~PC3)。
(3)读写控制逻辑:负责管理8255的数据传送。
它接收来自系统总线的A0、A1和CS以及读RD、写WR和复位信号RESET,并将这些信号进行逻辑组合,形成相应的控制字、数据和状态信息。
8253计数器定时器接口实验

微机原理实验报告实验五 8253计数器/定时器接口实验1.实验目的1)学会通过PC总线、驱动器、译码器等在PC机外部扩充为新的芯片;2)了解8253计数器/定时器的工作原理;3)掌握8253初始化的程序设计;4)掌握8253方式0的计数方式的使用方法和方式3方波产生的方法。
2.实验内容将实验装置上的1片8253定时器/计数器接入系统,具体做两个内容的实验。
1)实验一:将8253的计数器0设置为工作于方式0,设定一个计数初值,用手动逐个输入单脉冲,观察OUT0的电平变化。
硬件连接:断开电源,按图2-1将8253接入系统。
具体包括:(1)将8253的CS接I/O地址输出端280H-287H;(2)将8253的计数器0的CLK0与单脉冲信号相连,以用来对单脉冲进行计数;(3)将8253的GATE0用专用导线接向+5V,以允许计数器0工作;(4)将8253的OUT0接到LED发光二极管,以显示8253计数器0的输出OUT0的状态。
图2-1 8253实验一的连线图2)实验二:将8253的计数器0、1均设置为工作于方式3(方波),按图2-2重新接线。
要求是当CLK0接1MHz时,OUT1输出1Hz的方波,OUT的输出由LED 显示出来。
将计数器0与计数器1串联使用,计数器0的输出脉冲OUT0作为计数器1的时钟输入CLK1。
图2-2 8253实验二的连线图3.程序及框图1)程序框图图4-1给出了8253实验一的流程图。
图4-1 程序流程图图4-2给出了8253实验二的流程图。
2)程序代码实验一程序代码:CTRL EQU 283HTIME0 EQU 280HTIME1 EQU 281HDATA SEGMENTMESS DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DX,AXMOV DX,OFFSET MESSMOV AH,09HINT 21HMOV DX,CTRLMOV AL,30HOUT DX,ALMOV DX,TIME0MOV AX,03HOUT DX,ALXCHG AH,ALOUT DX,ALCOUNT:MOV AH,06HMOV DL,0FFHINT 21HJZ COUNTMOV AX,4C00HINT 21HCODE ENDSEND START实验二程序代码:CTRL EQU 283HTIME0 EQU 280HTIME1 EQU 281HDATA SEGMENTMESS DB 'ENTER ANY KEY RETURN TO DOS!',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DX,AXMOV DX,OFFSET MESSMOV AH,09HINT 21HMOV DX,CTRLMOV AL,36HOUT DX,ALMOV AL,76H OUT DX,ALMOV DX,TIME0 MOV AX,1000OUT DX,ALXCHG AH,ALOUT DX,ALMOV DX,TIME1 MOV AX,1000OUT DX,ALXCHG AH,ALOUT DX,ALCOUNT:MOV AH,06H MOV DL,0FFHINT 21HJZ COUNTMOV AX,4C00HINT 21HCODE ENDSEND START4.实验数据、现象及结果分析5. 实验思考题1)实验一中的定时器0的输出OUT0的电平是如何变化的,为什么?解:假设对定时器0赋初值为3,则控制字发送后,OUT0变为低电平,当手动输入3个单脉冲后,OUT0变为高电平。
8255与8253的综合应用实例_发声及音乐

实验一8255与8253的综合应用实例:发声及音乐一、实验要求利用定时/计数器8253和并行接口8255控制扬声器发声。
8253的输入时钟CLK的频率1.19318MHz。
二、实验设计(1)硬件设计(如下图)(2)软件设计:音乐程序如下:stack segment para stack 'stack'db 64 dup('stack...')stack endsdseg segment para 'data'mus_fre dw 330,392,330,294,330,392,330,294,330dw 330,392,330,294,262,294,330,392,294dw 262,262,220,196,196,220,262,294,330,262dw-1mus_tim dw 3 dup(100),50,50,100,50,50,200dw 2 dup(100,100,50,50),200dw 3 dup(100,50,50),200dseg endscseg segment para 'code'assume cs:cseg,ss:stack,ds:dsegmusic proc farmov ax,dsegmov ds,axfreq1: lea si,mus_frelea bp,ds:mus_timfreq: mov di,[si]cmp di,-1je end_musmov bx,ds:[bp]call soundfadd si,2add bp,2jmp freqend_mus:jmp freq1mov ah,4chint 21hsoundf proc nearpush axpush bxpush cxpush dxpush dimov al,0b6h ;10110110Bout 43h,al ;送控制字mov dx,12h ;12348C为1.1931Mmov ax,348chdiv di ;除以频率为延时out 42h,al ;送延时常数mov al,ahout 42h,alin al,61h ;保护并口状态,开并口mov ah,alor al,3out 61h,alwait1: mov cx,600 ;发声延时push axwaitf1: in al,61hand al,10h ;10hcmp al,ahje waitf1mov ah,alloop waitf1pop axdelay: loop delaydec bxjnz wait1mov al,ahout 61h,al ;还原并口pop dipop dxpop cxpop bxpop axretsoundf endpmusic endpcseg endsend三、实验步骤1、打开“Masm For Windows集成实验环境”,新建一个文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:8253、8255接口实验
实验目的:
1. 学习8253、8255接口芯片的功能
2. 掌握8253、8255的使用方法
3. 了解PC机发声系统及程序控制方法
实验内容:
1. 使用8086汇编语言控制PC机发声系统,编制一个“电子琴”弹奏程序(必做)
2. 利用PC机发生系统播放歌曲(选做)
实验方法:编制程序上机调试
实验要求:(见参考程序)根据要求绘制程序流程图并解释说明
实验步骤:编制子程序及主程序后上机运行调试
实验分析:输入数据;观察并记录运行结果
一、电子琴参考程序:
实验要求:从键盘输入一个字符1~8,弹奏出对应的声调
;实验二8253、8255接口实验(电子琴)
STACKS SEGMENT WORD STACK 'STACK'
DW 100H DUP(?)
STACKS ENDS
DA TAS SEGMENT WORD PUBLIC 'DATD'
PLB DW 262,294,330,349 ;频率表
DW 392,440,494,523
DA TAS ENDS
CODES SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CODES,SS:STACKS,DS:DATAS,ES:DA TAS
START: MOV AX,DA TAS
MOV DS,AX
MOV ES,AX
MOV AL,03H
OUT 61H,AL ;打开声音输出
M1: MOV AH,1
INT 21H ;键盘输入
SUB AL,'1'
JL ME ;<1结束
CMP AL,7
JG M1 ;>8继续
SHL AL,1 ;乘以2
MOV BL,AL
XOR BH,BH ;查找频率
MOV BX,[BX+PLB]
CALL SZPL ;设置频率
JMP M1
ME: MOV AL,0
OUT 61H,AL ;关闭声音输出
MOV AH,4CH
INT 21H ;返回DOS
;设置频率(入口: BX=声音频率)
SZPL: MOV AL,0B6H ;控制字=B
OUT 43H,AL
MOV DX,12H ;fo=1193000(123428H)
MOV AX,3428H
DIV BX ;AX=fo/声音频率
OUT 42H,AL
MOV AL,AH
OUT 42H,AL ;写8253计数器初值
RET
CODES ENDS
END START
;实验二演示实验(播放歌曲)
STACKS SEGMENT WORD STACK 'STACK'
DW 100H DUP(?)
STACKS ENDS
DATAS SEGMENT WORD PUBLIC 'DATD'
GQSD DB 60 ;歌曲速度时间常数
YDB DB 'ABCDEFG1234567abcdefg' ;音调符号表
PLB DW 130,147,165,175,196,220,247 ;音调频率表
DW 262,294,330,349,392,440,494
DW 523,570,620,650,710,790,860
YJB DB '<>=_ -34' ;音节符号表: 1/16,1/8,1/4,1/2,1,2,3,4 SJB DB 1,2,4,8,16,32,48,64,80,96,112,128;音节时间表
;歌曲数据表
GQ1 DB 60 ;速度
DB '3-5-3-2 3 5-3 2 34' ;歌曲1
DB '3-5-3 2 1-2-3 5 24'
DB '1-1 F E-E F 1-2 3 14',0
GQ2 DB 120 ;速度
DB '6_7 6_6_3_5_6_5=6 33' ;歌曲2
DB '2_3 2_2_F_1_2_1_2_F3'
DB '1_2 3_3_F 3_233_5_'
DB '6_6 7_6_7_6=7=5=3_533_E_F_F 1_'
DB 'F_3_2=3=F_6=14G_G F=G=2_2 3=2 '
DB 'G_5 3=2=G_3_2=3=E_1_F_F F-a_6_'
DB '6 62a b a_b_a=b=6_a_6_6 62',0
GQ3 DB 90 ;速度
DB '1_1 2_3_3 1_3 1 3-2_2 3_';歌曲3
DB '4_4_3_2_443_3 4_5_5 3_'
DB '5 3 5-4_4 5_6_6_5_4_64'
DB '5_5 1_2_3_4_5_646_6 2_'
DB '3_4_5_6_747_7 3_4_5_6_7_'
DB 'a37_7_6 4 7 5 a 5 3 2 ',0
TSXX DB 'Input(1-3) [Esc] End ?$'
DATAS ENDS
CODES SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CODES,SS:STACKS,DS:DATAS,ES:DATAS
START: MOV AX,DATAS
MOV DS,AX
MOV ES,AX
M1: LEA DX,TSXX
MOV AH,9
INT 21H ;显示提示信息
M2: CALL DJP ;读键盘
JNC M2
CMP AL,27
JE ME ;Esc键结束
CMP AL,'1'
JNE M3
LEA SI,GQ1
JMP MA
M3: CMP AL,'2'
JNE M4
LEA SI,GQ2
JMP MA
M4: CMP AL,'3'
JNE M5
LEA SI,GQ3
JMP MA
M5: JMP M2
MA: MOV AH,2
MOV DL,AL
INT 21H ;显示字符
MOV DL,13
INT 21H
MOV DL,10
INT 21H
CALL BFGQ ;播放歌曲
JMP M1
ME: MOV AH,4CH
INT 21H ;返回DOS
;播放歌曲
;入口SI=歌曲数据速度,音调+音节,……,0 BFGQ: PUSH SI
PUSH AX
LODSB
MOV GQSD,AL ;歌曲速度BFGQ1: LODSW
OR AL,AL
JZ BFGQE ;播放结束
CALL FCSY ;发出声音
CALL DJP ;读键盘
JNC BFGQ1 ;没有键盘按下转
CMP AL,27
JNE BFGQ1 ;非Esc键转BFGQE: POP AX
POP SI
RET
;发出声音
;入口AL=音调,AH=音节
FCSY: PUSH DI
PUSH DX
PUSH CX
PUSH BX
PUSH AX
LEA DI,YDB ;音调表
MOV CX,21 ;音调表长度
REPNE SCASB ;查找音调
JNE FCSYE ;没找到退出
SUB DI,OFFSET YDB+1
ADD DI,DI
MOV BX,[DI+PLB];取频率
LEA DI,YJB ;音节表
MOV CX,8 ;音节表长度
MOV AL,AH
REPNE SCASB ;查找音节
JNE FCSYE ;没找到退出
ADD DI,7
MOV AL,3
OUT 61H,AL ;打开声音开关(8255B口)
MOV AL,0B6H ;8253通道2=方波
OUT 43H,AL ;设置8253控制字
MOV DX,12H
MOV AX,3428H
DIV BX ;方波周期=123428H/频率
OUT 42H,AL ;设置8253时间常数
MOV AL,AH
OUT 42H,AL
MOV AL,[DI] ;取时间
MUL GQSD ;歌曲速度常数
MOV CX,0
FCSY1: LOOP FCSY1 ;延时
DEC AX
JNZ FCSY1
MOV AL,0
OUT 61H,AL ;关闭声音开关FCSYE: POP AX
POP BX
POP CX
POP DX
POP DI
RET
;读键盘
;入口无
;出口NC:无输入,C:有输入;AL=字符
DJP: PUSH BX
MOV BX,AX ;
MOV AH,0BH
INT 21H ;检测键盘
CMP AL,0
JZ DJPE ;无键按下
MOV AH,08H
INT 21H ;输入
OR AL,AL
JNZ DJP1
INT 21H ;扩展码二次输入
OR AL,80H ;最高位置1 DJP1: MOV BL,AL
STC
DJPE: MOV AX,BX
POP BX
RET
CODES ENDS
END START。