实验2:8253、8255接口实验
- 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