您的当前位置:首页正文

实验2:8253、8255接口实验

2022-04-02 来源:步旅网


实验二: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

DATAS SEGMENT WORD PUBLIC 'DATD' PLB DW 262,294,330,349 ;频率表 DW 392,440,494,523 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 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 ;控制字=10110110B OUT 43H,AL MOV DX,12H ;fo=1193000(123428H) MOV AX,3428H DIV BX ;AX=fo/声音频率 OUT 42H,AL MOV AL,AH 1

CODES

OUT RET ENDS END

42H,AL START

;写8253计数器初值

2

;实验二 演示实验(播放歌曲)

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 3

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 ;发出声音 4

;入口 AL=音调,AH=音节 FCSY: PUSH PUSH PUSH PUSH PUSH LEA MOV REPNE JNE SUB ADD MOV LEA MOV MOV REPNE JNE ADD MOV OUT MOV OUT MOV MOV DIV OUT MOV OUT MOV MUL

MOV FCSY1: LOOP DEC JNZ MOV

OUT FCSYE: POP POP POP POP POP

RET

;读键盘 5

DI DX CX BX AX DI,YDB ;音调表 CX,21 ;音调表长度 SCASB ;查找音调 FCSYE ;没找到退出 DI,OFFSET YDB+1 DI,DI BX,[DI+PLB];取频率 DI,YJB ;音节表 CX,8 ;音节表长度 AL,AH SCASB ;查找音节 FCSYE ;没找到退出 DI,7 AL,3 61H,AL ;打开声音开关(8255B口) AL,0B6H ;8253通道2=方波 43H,AL ;设置8253控制字 DX,12H AX,3428H BX ;方波周期=123428H/频率 42H,AL ;设置8253时间常数 AL,AH 42H,AL AL,[DI] ;取时间 GQSD ;歌曲速度常数 CX,0 FCSY1 ;延时 AX FCSY1 AL,0 61H,AL ;关闭声音开关 AX BX CX DX DI

;入口 ;出口 无

NC:无输入,C:有输入;AL=字符 DJP: PUSH MOV MOV INT CMP JZ MOV INT OR JNZ INT

OR DJP1: MOV

STC DJPE: MOV POP

RET CODES ENDS

END 6

BX BX,AX AH,0BH 21H AL,0 DJPE AH,08H 21H AL,AL DJP1 21H AL,80H BL,AL AX,BX BX START

; ;检测键盘 ;无键按下 ;输入 ;扩展码二次输入 ;最高位置1

因篇幅问题不能全部显示,请点此查看更多更全内容