实验2:8253、8255接口实验

合集下载

8255并行口实验

8255并行口实验
以前在单片机基础实验中做过LED显示实验和数码管显示实验,所以这两个实验比较好做。在第二个实验中,分别置全开和全关时想用这些代码实现
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并行接口应用实验

实验二_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接口实验报告可编程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实验报告

北理工微机原理与接口技术之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综合实验

计数器定时器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接口实验)

实验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计数器定时器接口实验

微机原理实验报告实验五 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的综合应用实例_发声及音乐

实验一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集成实验环境”,新建一个文件。

微机接口 8255并行接口实验报告

微机接口 8255并行接口实验报告

浙江工业大学计算机学院实验报告实验名称 8255并行接口实验姓名徐洁学号 ************班级计科1301班教师雷艳静日期 2015/12/31一、实验内容与要求1.1 实验内容8255方式0实验一:从8255端口C输入数据,再从端口A输出,即TPC-USB平台按逻辑电平开关K0~K7通过编程使端口C接收,然后再通过端口A输出到LED显示电路L0~L7,这样逻辑电平开关的值就可以通过8255芯片显示在LED显示电路上。

8255方式1输出实验:编程实现每按一次单脉冲按钮产生一个正脉冲,使8255产生一次中断,让CPU进行一次中断服务:依次输出01H、02H、04H、08H、10H、20H、40H、80H 使LED显示电路L0~L7依次发光,中断8次结束。

8255方式1输入实验:编程实现每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务,读取逻辑电平开关预置的ASCII码,在屏幕上显示其对应的字符,中断8次结束。

1.2 实验要求(1) 具有一定的汇编编程的基础,能编写一些基本语句来实现实验。

实验前根据实验流程图,写出对应代码;(2) 要了解8255A并行接口芯片内部结构和外部引脚,理解8255芯片的工作方式和程序设计方法;(3) 熟悉实验平台TPC-USB了解各个接口的名称与功能,进行实验时能快速并正确地连接好实验电路;(4) 8255方式0实验一:连接PC与TPC-USB平台,用微机实验软件运行程序,用TPC-USB平台上的逻辑电平开关与LED显示电路观察,LED显示的值与逻辑电平开关设的值对应;(5) 8255方式1输出实验:连接PC与TPC-USB平台,用微机实验软件运行程序,手按单脉冲按钮,观察LED显示电路能依次发光,按8次后,中断结束,程序结束;(6) 8255方式1输入实验:连接PC与TPC-USB平台,用微机实验软件运行程序,用TPC-USB平台的逻辑电平开关设置一个ASCII码,按一次单脉冲,屏幕就能显示该ASCII码对应的字符,变更逻辑电平的开关,按一次单脉冲,屏幕就会显示变更的ASCII码对应的字符。

8255并口实验详解

8255并口实验详解

xxxx大学计算机学院实验报告一、实验内容与要求1.1 实验内容(1)8255方式0实验从8255端口C输入数据,再从端口A输出(2)8255方式1输出实验编程实现每按一次单脉冲按钮产生一个正脉冲,使8255产生一次中断服务:依次输出01H,02H,04H,08H,10H,20H,40H,80H使L0~L7依次发光,中断8次结束。

(3)8255方式1输入实验编程实现:每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:读取逻辑电平开关预置的ASCII码,在屏幕上显示其对应的字符,中断8次结束。

1.2 实验要求(1)8255方式0实验实验预期效果:拨动逻辑开关,启动程序,开关打开的对应灯可以亮起。

改变开关的状态,灯的亮暗也随之改变。

(2)8255方式1输出实验实验预期效果:按一次单脉冲按钮,L0亮起;以后每按一次,后面的灯依次会亮起。

中断8次结束。

(3)8255方式1输入实验实验预期效果:每按一次单脉冲按钮读取逻辑电平开关预置的ASCII码,在屏幕上显示其对应的字符,中断8次结束。

二、实验原理与硬件连线2.1 实验原理CPU通过指令将控制字写入8255A的控制端口设置它的工作方式。

8255A有两个控制字:方式选择控制字和端口C置位/复位控制字,这两个控制字均写入同一个控制端口地址(端口选择先A1A0=11)8255A有3种工作方式:方式0——基本输入/输出方式;方式1——选通输入/输出方式;方式2——双向传输方式。

方向选择控制字用于设置各端口的工作方式。

方式0称为基本输入/输出方式。

该方式下,端口A、端口B、端口C的高4位和端口C的低4位均可独立地设为输入或输出数据端口。

在方式0时,8255A与CPU时间没有应答联络信号,可用于无条件传送或查询方式数据传送场合。

采用查询方式传送时,可以将端口A、端口B 作为数据端口,用端口C存放外部设备状态信息,用于CPU查询。

方式1称为选通输入/输出方式。

微机原理8255并行接口(2)完整实验报告

微机原理8255并行接口(2)完整实验报告

实验6 8255并行接口实验
实验时间2019年12月5日
实验类型■验证性□设计性□综合性
1. 实验目的
1.学习并掌握8255的工作方式及其应用。

2.掌握8255典型应用电路的接法。

2. 实验内容及过程(主要内容、操作步骤)
1.基本输入输出实验。

编写程序,使8255的B口为输出,A口为输入,完成拨动开关到数据灯的数据传输。

要求只要开关拨动,数据灯的显示就发生相应改变。

3. 测试数据及实验结果
4. 实验分析及总结(主要考察内容)
启动中断的动作是脉冲开关,因为PC2接的是脉冲开关。

8255A输出的信号可用于CPU提出中断请求。

B端口的方式一需要借用端口C用做联络信号,端口C 还具有中断请求和屏蔽功能
教师评阅
评价指标:实验目的、操作步骤、设计、算法、程序结构、实验结果、实验分析、实验总结。

接口单元实验1(8255,8253)

接口单元实验1(8255,8253)

接口单元实验(1) 8255可编程并行接口一、实验目的掌握8255方式0的工作原理及使用方法,用8255实现开关状态显示、十字路口交通信号灯的模拟控制。

二、实验要求1.编写程序,设定8255的PA端口为开关量输入,PC口为开关量输出,要求将PA端口的开关状态用PC端口的对应的发光二极管显示。

(提高篇:修改程序,根据输入,循环点亮发光二极管,例如开关2合上,则依次点亮灯2,3,。

,状态由对应的LED显示出来:ON对应LED亮,OFF对应LED灭。

4.文件不支持长文件名格式。

5.运行程序时,可用单步监控方式观察程序运行状态。

实验思考1.用编程的方法改变输出状态显示,即ON对应LED灭,OFF对应LED亮。

2.能否改变程序加载的段地址为8200H,偏移地址为2000H?在何处改动?3.通讯的波特率9600bps表示什么?2.实际的交通灯管理与本实验还有哪些不同?四.实验报告1.完成实验的两个程序。

2.总结8255工作方式0的特点。

参考程序框架:snYewY equ 0;全黄snRewR equ 0FH;全红snGewR equ 96H;南北绿东西红snDewR equ 9FH;东西红snYewR equ 06H;南北黄东西红;其他符号定义于此T1 equ 1000;结合实际修改延时T1/T2T2 equ 500…CPORT equ 204HDelay macro ntime;用于延时的宏定义Local delaylabelMov cx,ntimeoutloop:mov si,cxxor cx,cxdelaylabel:and ax,axLoop delaylabel mov cx,si loop outloop Endm;程序头部,参看以前实验;初始化:8255方式0,C 口输出 Mov al,snRewRMov dx,CPORTOut dx,alDelay 1000Cont:Mov al,snGewR Mov dx,CPORT Delay T1 MOV BX,3 Rept:Mov al,snDewR Out dx,al Delay T2Mov al,snYewR Out dx,al Delay T2 Dec bx Jnz reptMov al,snRewG Out dx,al Delay T2在添加指令 …jmp cont; 注意 这一条指令编译时会报错,原因是跳转的距离不在-128~127间,思考如何修改?8253定时/计数器实验一.实验要求编程将8253的定时器0设置为方式3(方波),定时器1设置为方式2(频率发生器),定时器2设置为方式2(频率发生器)。

实验2:8253、8255接口实验

实验2:8253、8255接口实验

实验二: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 ENDSDA TAS SEGMENT WORD PUBLIC 'DATD'PLB DW 262,294,330,349 ;频率表DW 392,440,494,523DA TAS ENDSCODES SEGMENT BYTE PUBLIC 'CODE'ASSUME CS:CODES,SS:STACKS,DS:DA TAS,ES:DATASSTART: MOV AX,DA TASMOV DS,AXMOV ES,AXMOV AL,03HOUT 61H,AL ;打开声音输出M1: MOV AH,1INT 21H ;键盘输入SUB AL,'1'JL ME ;<1结束CMP AL,7JG M1 ;>8继续SHL AL,1 ;乘以2MOV BL,ALXOR BH,BH ;查找频率MOV BX,[BX+PLB]CALL SZPL ;设置频率JMP M1ME: MOV AL,0OUT 61H,AL ;关闭声音输出MOV AH,4CHINT 21H ;返回DOS;设置频率(入口: BX=声音频率)SZPL: MOV AL,0B6H ;控制字=10110110BOUT 43H,ALMOV DX,12H ;fo=1193000(123428H)MOV AX,3428HDIV BX ;AX=fo/声音频率OUT 42H,ALMOV AL,AHOUT 42H,AL ;写8253计数器初值RETCODES ENDSEND START;实验二演示实验(播放歌曲)STACKS SEGMENT WORD STACK 'STACK'DW 100H DUP(?)STACKS ENDSDATAS 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,494DW 523,570,620,650,710,790,860YJB 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' ;歌曲1DB '3-5-3 2 1-2-3 5 24'DB '1-1 F E-E F 1-2 3 14',0GQ2 DB 120 ;速度DB '6_7 6_6_3_5_6_5=6 33' ;歌曲2DB '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',0GQ3 DB 90 ;速度DB '1_1 2_3_3 1_3 1 3-2_2 3_';歌曲3DB '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 ',0TSXX DB 'Input(1-3) [Esc] End ?$'DATAS ENDSCODES SEGMENT BYTE PUBLIC 'CODE'ASSUME CS:CODES,SS:STACKS,DS:DATAS,ES:DATASSTART: MOV AX,DATASMOV DS,AXMOV ES,AXM1: LEA DX,TSXXMOV AH,9INT 21H ;显示提示信息M2: CALL DJP ;读键盘JNC M2CMP AL,27JE ME ;Esc键结束CMP AL,'1'JNE M3LEA SI,GQ1JMP MAM3: CMP AL,'2'JNE M4LEA SI,GQ2JMP MAM4: CMP AL,'3'JNE M5LEA SI,GQ3JMP MAM5: JMP M2MA: MOV AH,2MOV DL,ALINT 21H ;显示字符MOV DL,13INT 21HMOV DL,10INT 21HCALL BFGQ ;播放歌曲JMP M1ME: MOV AH,4CHINT 21H ;返回DOS;播放歌曲;入口SI=歌曲数据速度,音调+音节,……,0 BFGQ: PUSH SIPUSH AXLODSBMOV GQSD,AL ;歌曲速度BFGQ1: LODSWOR AL,ALJZ BFGQE ;播放结束CALL FCSY ;发出声音CALL DJP ;读键盘JNC BFGQ1 ;没有键盘按下转CMP AL,27JNE BFGQ1 ;非Esc键转BFGQE: POP AXPOP SIRET;发出声音;入口AL=音调,AH=音节FCSY: PUSH DIPUSH DXPUSH CXPUSH BXPUSH AXLEA DI,YDB ;音调表MOV CX,21 ;音调表长度REPNE SCASB ;查找音调JNE FCSYE ;没找到退出SUB DI,OFFSET YDB+1ADD DI,DIMOV BX,[DI+PLB];取频率LEA DI,YJB ;音节表MOV CX,8 ;音节表长度MOV AL,AHREPNE SCASB ;查找音节JNE FCSYE ;没找到退出ADD DI,7MOV AL,3OUT 61H,AL ;打开声音开关(8255B口)MOV AL,0B6H ;8253通道2=方波OUT 43H,AL ;设置8253控制字MOV DX,12HMOV AX,3428HDIV BX ;方波周期=123428H/频率OUT 42H,AL ;设置8253时间常数MOV AL,AHOUT 42H,ALMOV AL,[DI] ;取时间MUL GQSD ;歌曲速度常数MOV CX,0FCSY1: LOOP FCSY1 ;延时DEC AXJNZ FCSY1MOV AL,0OUT 61H,AL ;关闭声音开关FCSYE: POP AXPOP BXPOP CXPOP DXPOP DIRET;读键盘;入口无;出口NC:无输入,C:有输入;AL=字符DJP: PUSH BXMOV BX,AX ;MOV AH,0BHINT 21H ;检测键盘CMP AL,0JZ DJPE ;无键按下MOV AH,08HINT 21H ;输入OR AL,ALJNZ DJP1INT 21H ;扩展码二次输入OR AL,80H ;最高位置1 DJP1: MOV BL,ALSTCDJPE: MOV AX,BXPOP BXRETCODES ENDSEND START。

交通灯控制实验(8255)

交通灯控制实验(8255)
微机接口实验
实验二
交通灯控制实验(8255) 交通灯控制实验(8255)
一、实验目的
掌握8255方式0的工作原理及使用方法。 掌握8255方式0的工作原理及使用方法。 8255方式
二、实验内容
微机接口实验
实验二
交通灯控制实验(8255) 交通灯控制实验(8255)
一、实验目的 掌握8255方式0的工作原理及使用方法。 掌握8255方式0的工作原理及使用方法。 8255方式 二、实验内容 通过并行接口8255 通过并行接口8255实现十字路口交通 8255实现十字路口交通 灯的模拟控制。如图,L7、L6、L5作为南 灯的模拟控制。如图,L7、L6、L5作为南 北路口的交通灯与PC7 PC6、PC5相连 PC7、 相连, 北路口的交通灯与PC7、PC6、PC5相连, L2、L1、L0作为东西路口的交通灯与 作为东西路口的交通灯与PC2 L2、L1、L0作为东西路口的交通灯与PC2 PC1、PC0相连 相连。 、PC1、PC0相连。编程使六个灯按交通灯 变化规律燃灭。 变化规律燃灭。
交通灯控制
二、实验内容
通过并行接口8255 通过并行接口8255实现十字路口交通 8255实现十字路口交通 灯的模拟控制。 L7、L6、L5作为 灯的模拟控制。如下图,L7、L6、L5作为 南北路口的交通灯与PC7 PC6、PC5相连 PC7、 南北路口的交通灯与PC7、PC6、PC5相连 L2、L1、L0作为东西路口的交通灯与 ,L2、L1、L0作为东西路口的交通灯与 PC2、PC1、PC0相连 相连。 PC2、PC1、PC0相连。编程使六个灯按交 通灯变化规律燃灭。 通灯变化规律燃灭。
交通灯控制
三、实验电路
8255 地址: 地址:
控制寄存器: 控制寄存器: C口地址: 口地址: 28BH 28BH 288H 288H

计算机接口技术实验报告

计算机接口技术实验报告

计算机接口技术实验报告数学与计算机学院《计算机接口技术》实验报告专业: 班级: 学号: 姓名: 指导老师:实验1 定时与中断接口程序设计一实验目的1了解定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法;2.学习使用TURBO C++对8253、8255进行编程操作;3(熟悉拦截PC机中断向量的TC++ 编程方法。

二实验内容1(8253、8255在PC/XT机中的电路连接介绍1, 8088 8253 2,D7…D0 OUT0 D7…D0 至8259 IRQ0,中断类型=8 3, RD GATE0 +5V IOR4, WR CLK0 IOW5, A0 OUT1 A0 至8237的DRAM刷新请求6, A1 GATE1 A1 +5V7, CLK18,地址OUT2 IO/M & 放大 9,译码CS GATE2 A9…A210, CLK0,1,2 40H~43H1.19MHz地址PB0译码 CS PB160H~63H 8255PC机启动后,系统设置的初始状态为:芯片有关工作方式初值运行情况通道0#:方式3(方波计数初值:OUT输出55ms方波至0000H 发生器) 8259的IRQ0 8253 通道2#:,(1KHz) 计数初值:,,(1KHz方波) (1190)PB0、PB1:方式0(简控制蜂鸣器发声。

0:不发8255 单输出) 声,1:发声 8259 IRQ0:允许中断中断类型号:8 CPU响应8号中断 2(程序要求(1)程序启动时,要求输入定时时间,以秒为单位。

(2)按秒计时,每秒到达时,在屏幕上显示当前为第几秒,同时蜂鸣器发出短促叫声;(3)当定时时间到,则显示“Time Up!”,结束程序。

三. 实验步骤1(建立源文件:启动TURBO C++3.0,建立Timer.CPP。

保存到D:\ ×(学号)\Timer.CPP;2(设置TC工作目录:选菜单Options/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放目录,OK。

实验2 8255输入输出实验

实验2 8255输入输出实验

实验2 8255输入输出实验
一、实验要求
利用8255 可编程并行口芯片,实现输入/输出实验,实验中用8255PA 口作输出,PB口作输入。

二、实验目的
1、了解8255 芯片结构及编程方法。

2、了解8255 输入/输出实验方法。

三、实验电路及连线
8255 的CS/接地址译码/CS0,则命令字地址为8003H,PA 口地址为8000H,PB 口地址为8001H , PC 口地址为8002H 。

PA0-PA7(PA 口)接LED0-LED7(LED)PB0-PB7(PB 口)接K0-K7(开关量)。

数据线、读/写控制、地址线、复位信号板上已接好。

四、实验说明
可编程通用接口芯片8255A 有三个八位的并行I/O口,它有三种工作方式。

本实验采用的是方式0:PA,PC 口输出,PB 口输入。

很多I/O 实验都可以通过8255来实现。

五、实验内容
1、8255的一个端口接开关,另一个接灯,循环实现将开关状态读入,并输出至灯显示。

2、实现循环灯,并由K0控制循环灯的启停。

六、实验报告要求
对于每一个实验内容,要求:
1、画出硬件连接图
2、画出流程图
3、写出程序
4、调试体会及遇到的问题。

8253、8255、8259综合实验

8253、8255、8259综合实验

8253、8255、8259 综合实验医电61刘晶061210058253、8255、8259综合实验一、实验目的1.掌握8259、8253、8255芯片结构及工作方式;2.熟悉8259、8252、8259的初始化和操作编程;3.掌握各芯片之间或与CPU间的连接方法。

二、实验设备b6000p实验教学系统;2.IBM-PC机三、实验内容1.8255A口为输出口,接8个发光二极管,B口为输入口,接8个拨动开关,“0”或“1”,从而实现把开关的状态显示出来。

2.用8253计数器0对外部事件进行计数,每发生5次外部事件,用发光二极管亮做提示。

3.用8253计数器0输出一个1S为周期的方波,并用发光二极管显示其周期。

4.8个LED二级管循环点亮,每个亮1秒钟,用8253定时1秒,通过8259中断实现1S 循坏显示四、实验结果1.8255程序如下:DATA SEGMENTCOUNT DB 1DATA ENDSSTACK SEGMENTDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKSTART:MOV AX,DA TAMOV DS,AXMOV DX,8003H ;8255控制口MOV AL,10000010B ;控制字:A口方式0输出,B口方式0输入OUT DX,AL ;写入控制字TESTI:MOV DX,8001H ;指向B口IN AL,DX ;从B口读入开关状态MOV DX,8000H ;指向A 口OUT DX,AL ;A 口用LED 指示开关状态 JMP TESTI ;循环检测 CODE ENDSEND START 实验结果:程序运行后,波动开关,可以控制其对应二极管的亮、灭。

2.8253对外部事件计数 程序如下:DATA SEGMENT COUNT DB 1 DATA ENDSSTACK SEGMENT DB 100 DUP(?) STACK ENDSCODE SEGMENT MAIN PROC FARASSUME CS:CODE,DS:DA TA,SS:STACK START:MOV AX,DA TA MOV DS,AX JISHU:MOV AL,00010001BMOV DX,9003HOUT DX,ALMOV AL,3MOV DX,9000H OUT DX,ALDUHUI: MOV AL,00000000B MOV DX,9003H OUT DX,AL MOV DX,9000H IN AL,DX SUB AL,0 JZ JISHU JMP DUHUI MAIN ENDP CODE ENDS END START 实验结果:程序运行后,每发生5次外部事件(单脉冲电路产生),二极管亮1次作为MOV CX,0FFFFHDELAY: DEC CXCMP CX,00HJNZ DELAY3.8253输出周期为1s的方波程序如下:DATA SEGMENTCOUNT DB 1DATA ENDSSTACK SEGMENTDB 100 DUP(?)STACK ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DA TA,SS:STACKSTART:MOV AX,DA TAMOV DS,AXMOV AL,00110110BMOV DX,9003HOUT DX,ALMOV BX,62500MOV AL,BLMOV DX,9000HOUT DX,ALMOV AL,BHOUT DX,ALMAIN ENDPCODE ENDSEND START实验结果:二极管以1s为周期闪烁,即得到了1s为周期的脉冲波,并用二极管显示出来。

8255并行口实验+8253定时器实验

8255并行口实验+8253定时器实验

实验2 8255A并行口实验(一)一、实验目的1.掌握并行接口芯片8255的使用与硬件接口方法。

2.掌握8255A的各种工作方式和编程原理。

二、8255A芯片介绍8255A是可编程通用并行接口芯片,它具有A、B、C三个并行接口,用+5V 单电源供电,能在以下三种方式下工作:方式0:基本输入/输出方式方式1:选通输入/输出方式(应答式输入输出方式)方式2:双向选通工作方式8255工作于方式1或2时,PC口的一些引脚作为A和B口的联络信号线,如下表:三、实验内容1、并行口工作于方式0时的传送(1)设计一个电路:用8255A做并行口,读入8个开关的状态并通过发光二极管显示出来。

(当拨动开关时,相应的发光二极管的状态时刻跟随变化)(2)当总开关K闭合(K=1)时,分开关能够控制对应的发光二极管;而当总开关K断开(K=0)时,分开关无论如何拨动,对应发光二极管都不跟随变化。

2、方式1用8255芯片的B口工作于方式1做输入,A口工作于方式0做输出。

采用查询与中断2种方式,实现拨动开关控制发光二极管的显示。

提示:必须理解8255方式1输入的工作过程及相关联络控制信号的先后时序关系。

根据上述要求设计电路并编写程序。

实验3 8255并行口实验(二)一、实验目的1. 通过可编程并行接口芯片8255实现十字路口交通灯的模拟控制。

2. 掌握七段数码显示管的使用方法。

3. 掌握软件延时方法的使用。

4. 进一步掌握并行接口芯片8255的使用方法。

二、实验内容1.根据实验系统现有的实验电路,设计电路并编写程序使12个灯按交通变化规律亮、灭或闪烁。

要完成本实验,必须先了解交通路灯的亮灭规律,设有一个十字路口分为南北方向和东西方向,初始状态为红灯全亮,之后,南北绿灯亮,东西红灯亮,南北方向通车。

延时一段时间后,南北绿灯熄灭,而南北黄灯开始闪烁,闪烁若干次以后,南北红灯亮,而同时东西的绿灯亮,东西方向通车,延时一段时间后,东西绿灯熄灭,而东西黄灯开始闪烁,闪烁若干次以后,再切换到南北方向,之后,重复上述过程。

8255,8253交通灯模拟实验报告

8255,8253交通灯模拟实验报告

(-)课题简介 (2)(二)设计方案 (2)(三)具体设计 (4)1.电路原理 (4)2. ........................................................ 程序原理: 63.系统原理 (8)1)....................................................................... 8259, 8255A, 8254 工作原理:84.关键技术分析 (13)1)实时控制和管理设计 (13)2)发光二极管闪烁程序 (14)3)源程序 (15)(四)测试 (21)1.在测试中遇到的问题记录 (21)2.测试结果 (22)(五)....................... 总结22 (六)........................... 设计体会23 (七)........................... 参考文献24(一)课题简介十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。

十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。

当前,国大多数城市正在采用“自动”红绿交通灯,它具有固左的“红灯一绿灯”转换间隔,并自动切换。

它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。

在交通灯的通行与禁止时间控制显示中,通常要么东西、南北两方向务50秒:要么根拯交通规律,东四方向60秒,南北方向40秒,时间控制都是固泄的。

交通灯的时间控制显示,以固定时间值预先"固化”在单片机中,每次只是以一泄周期交替变化。

但是,实际上不同时刻的车辆流通状况是十分复杂的, 是高度非线性的、随机的,还经常受认为因素的影响。

采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。

它不顾当前道路上交通车辆数的实际情况变化,苴最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档