8253、8255、8259和8251实现电子琴的自动弹凑和手动弹凑
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编与微机接口技术试验
二、实验项目名称:用8253、8255、8259和8251实现电子琴的自动弹凑和手动弹凑
三、实验学时:2学时
四、实验原理:
用8253做定时器输出音频信号,控制喇叭发出声音。利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调.
五、实验目的:
a)加强8088CPU的汇编程序设计
b)加强对8253定时/计数器芯片的应用理解
c)加强对8255可编程并口芯片的应用理解
d)加强对8259可编程中断控制器芯片的应用理解
e)加强对8251可编程串口芯片的应用理解
f)了解计算机发声原理
六、实验内容:
a)利用8088外接8253可编程定时器/计数器音符音频的频率输出,
用8255的PA口接8只按键,作为电子琴1、2、3、4、5、6、
7、i数字键按键,编程完成按下数字键按键即发出相应的音调。
b)利用8251串口实现与PC机的超级终端程序通讯,可在PC上
按键大写字母‘A’能转换为自动弹凑,大写字母‘M’能转换
为手动弹凑,在手动弹凑方式下,能用PC机的1、2、3、4、5、
6、7、8按键替代试验箱按键弹凑音乐。
七、实验器材(设备、元器件):
DVCC试验箱,PC机;
八、实验步骤:
a)、阅读ppt掌握理解试验内容;
b)、按照试验要求连接电路;
c)、连接试验箱与电脑主机;
d)、打开试验所需软件,输入代码;
f)、运行,观察实验结果;
九、实验数据及结果分析:
1.该实验主要程序段如下:
CODE SEGMENT
CS_8259_P0 EQU 20H
CS_8259_P1 EQU 21H
CS_8255_CTRL EQU 73H
CS_8255_PA EQU 70H
CS_8253_CTRL EQU 4BH
CS_8253_CH0 EQU 48H
CS_8253_CH2 EQU 4AH
CS_8251_STAT EQU 51H
CS_8251_DATA EQU 50H
ASSUME CS:CODE
ORG 1000H
START: JMP MAIN
MODE DB 0 ;0为手动弹凑模式,非0为自动手动弹凑模式
TONELEN DW 0
TONEFR DW 2,3030,2865,2551,2273,2024,1912,1704,1517,1433,1276,1136,1012 TABLE DB 42H,82H,82H,82H,84H,02H,72H
DB 62H,72H,62H,52H,48H
DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H
DB 12H,0A2H,0D2H,92H,88H
DB 82H,0B2H,0B2H,0A2H,84H,02H,72H
DB 62H,72H,62H,52H,44H,02H,12H
DB 12H,62H,62H,52H,44H,02H,82H
DB 72H,62H,52H,32H,48H
DB
0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0
FH
ENDTAB DB 00H
MAIN: CALL I8253A
CALL INTSET
CALL I8259A
CALL I8255A
CLD
MOV AX,SEG TABLE
MOV DS,AX
LEA DI,ENDTAB
MOV AL, 0
CMP MODE,AL
JZ MAN_PLAY
AUTO_PLAY:
LEA S I,TABLE
SOUND:
IN AL, CS_8251_STAT
TEST AL, 00000010B
JZ NEXT1
IN AL, CS_8251_DATA
CMP AL, 'M'
JNZ NEXT1
MOV AL,1
MOV MODE,AL
JMP MAN_PLAY
NEXT1:
LODSB
MOV BX,AX
MOV CX,AX
AND CX,0FH
AND BX,0F0H
SHR BX,1
SHR BX,1
SHR BX,1
; SHR BX,1
MOV AX,TONEFR[BX]
CALL OUTTONE
MOV AX,10
MUL CX
MOV WORD PTR TONELEN,AX
DELAY: MOV AX,WORD PTR TONELEN
CMP AX,0
JNE DELAY
CMP SI,DI
JNE SOUND
JMP AUTO_PLAY
MAN_PLAY:
MOV AX,0
MOV TONELEN, AX
IN AL, CS_8251_STAT
TEST AL, 00000010B
JZ CHK8255
IN AL, CS_8251_DATA
CMP AL, 'A'
JNZ NEXT2
MOV AL,0
MOV MODE,AL
JMP AUTO_PLAY
NEXT2: CMP AL, 31H
JL CHK8255
CMP AL, 38H
JG CHK8255
SUB AL, '0'
MOV AH, 0
MOV BX,AX
SHL BX,1
MOV AX,TONEFR[BX]
CALL OUTTONE
JMP MAN_PLAY
CHK8255:
K1: MOV DX, CS_8255_PA ;PA端口地址
IN AL, DX ;读开关的状态
TEST AL, 01H ;判是否是K1闭合
JZ K2 ;不是转K2
MOV AX, 2273 ;是K1闭合送“1”音频数据1/440.00HZ
JMP KEYDOWN
K2: IN AL, DX ;读开关的状态
TEST AL, 02H ;判是否是K2闭合
JZ K3 ;不是转K3
MOV AX, 2024 ;是K2闭合送“2”音频数据1/493.88HZ
JMP KEYDOWN
K3: IN AL, DX ;读开关的状态
TEST AL, 04H ;判是否是K3闭合
JZ K4 ;不是转K4