8253、8255、8259和8251实现电子琴的自动弹凑和手动弹凑
微机原理课设 电子琴8253 8255

一、内容摘要设计一个电子琴。
利用数字键1、2、3、4、5、6、7作为电子琴键,按下数字键发出相应的音调。
二、课程设计的目的和意义1、进一步掌握定时器编程和应用。
2、了解微机利用定时器产生音乐的基本方法。
三、课程设计的要点和内容1、根据音阶频率表,利用定时器可以产生相应频率的脉冲信号,不同频率的脉冲信号经驱动电路放大后,就会发生不同的音调。
2、对于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值:本次课设要求设计一个电子琴,作为一个乐器,其最基本的功能就是能够发出一个音阶的所有声音,即:do,re,mi,fa,so,la,xi,dou,8个音符,不同的声音的本质就是不同频率的波,每个音符都对应着固定的频率;而声音的长短即是波的个数。
所以得出的一条思路是:用汇编语言来产生一系列频率不同的方波信号,找到各个音符的频率,然后用汇编语言产生同频信号,并将该信号输入到扬声器,如果驱动功率不够则可以加放大电路。
四、硬件电路设计1、单元电路设计:硬件结构应结合软件方案一并考虑,做到软件、硬件功能相匹配。
在DJ-598K 三合一单片机微机试验仪平台上,硬件设计参考方案如下:2、电路工作原理:2.1可编程8253计数器(1)在计算机的引用中,常常要对外设的某些信号进行计数,希望计算机既能控制技术的过程,还有能读取计数的结果,进而作为控制或管理的决策依据。
如果被计数的信号有了准确的固定的周期,就形成了定时器。
(2)图为8253的内部组成和引脚。
如图所示,与外部的连接线主要分布在右侧的三个部分,即:三个计数器。
其中CLK为计数通道的输入脉冲信号,对于8253来说的频率范围是0—2MHz。
GATE为门控信号,用来启动或禁止计数工作,高电平有效,不同的工作方式,作用也不同。
Out为输出信号,用来输出波形,不同的工作方式,不同的工作方式,输出的波形也不同;而与CPU的的内部接线主要分布在左侧的三个部分。
8253、8255、8259和8251实现电子琴的自动弹凑和手动弹凑

汇编与微机接口技术试验二、实验项目名称:用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 SEGMENTCS_8259_P0 EQU 20HCS_8259_P1 EQU 21HCS_8255_CTRL EQU 73HCS_8255_PA EQU 70HCS_8253_CTRL EQU 4BHCS_8253_CH0 EQU 48HCS_8253_CH2 EQU 4AHCS_8251_STAT EQU 51HCS_8251_DATA EQU 50HASSUME CS:CODEORG 1000HSTART: JMP MAINMODE DB 0 ;0为手动弹凑模式,非0为自动手动弹凑模式TONELEN DW 0TONEFR DW 2,3030,2865,2551,2273,2024,1912,1704,1517,1433,1276,1136,1012 TABLE DB 42H,82H,82H,82H,84H,02H,72HDB 62H,72H,62H,52H,48HDB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2HDB 12H,0A2H,0D2H,92H,88HDB 82H,0B2H,0B2H,0A2H,84H,02H,72HDB 62H,72H,62H,52H,44H,02H,12HDB 12H,62H,62H,52H,44H,02H,82HDB 72H,62H,52H,32H,48HDB0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FHENDTAB DB 00HMAIN: CALL I8253ACALL INTSETCALL I8259ACALL I8255ACLDMOV AX,SEG TABLEMOV DS,AXLEA DI,ENDTABMOV AL, 0CMP MODE,ALJZ MAN_PLAYAUTO_PLAY:LEA S I,TABLESOUND:IN AL, CS_8251_STATTEST AL, 00000010BJZ NEXT1IN AL, CS_8251_DATACMP AL, 'M'JNZ NEXT1MOV AL,1MOV MODE,ALJMP MAN_PLAYNEXT1:LODSBMOV BX,AXMOV CX,AXAND CX,0FHAND BX,0F0HSHR BX,1SHR BX,1SHR BX,1; SHR BX,1MOV AX,TONEFR[BX]CALL OUTTONEMOV AX,10MUL CXMOV WORD PTR TONELEN,AXDELAY: MOV AX,WORD PTR TONELENCMP AX,0JNE DELAYCMP SI,DIJNE SOUNDJMP AUTO_PLAYMAN_PLAY:MOV AX,0MOV TONELEN, AXIN AL, CS_8251_STATTEST AL, 00000010BJZ CHK8255IN AL, CS_8251_DATACMP AL, 'A'JNZ NEXT2MOV AL,0MOV MODE,ALJMP AUTO_PLAYNEXT2: CMP AL, 31HJL CHK8255CMP AL, 38HJG CHK8255SUB AL, '0'MOV AH, 0MOV BX,AXSHL BX,1MOV AX,TONEFR[BX]CALL OUTTONEJMP MAN_PLAYCHK8255:K1: MOV DX, CS_8255_PA ;PA端口地址IN AL, DX ;读开关的状态TEST AL, 01H ;判是否是K1闭合JZ K2 ;不是转K2MOV AX, 2273 ;是K1闭合送“1”音频数据1/440.00HZJMP KEYDOWNK2: IN AL, DX ;读开关的状态TEST AL, 02H ;判是否是K2闭合JZ K3 ;不是转K3MOV AX, 2024 ;是K2闭合送“2”音频数据1/493.88HZJMP KEYDOWNK3: IN AL, DX ;读开关的状态TEST AL, 04H ;判是否是K3闭合JZ K4 ;不是转K4MOV AX, 1805 ;是K3闭合送“3”音频数据1/554.37HZJMP KEYDOWNK4: IN AL,DX ;读开关的状态TEST AL, 08H ;判是否是K4闭合JZ K5 ;不是转K5MOV AX, 1704 ;是K4闭合送“4”音频数据1/587.33HZJMP KEYDOWNK5: IN AL, DX ;读开关的状态TEST AL, 10H ;判是否是K5闭合JZ K6 ;不是转K6MOV AX, 1517 ;是K5闭合送“5”音频数据1/659.26HZJMP KEYDOWNK6: IN AL, DX ;读开关的状态TEST AL, 20H ;判是否是K6闭合JZ K7 ;不是转K7MOV AX, 1353 ;是K6闭合送“6”音频数据1/739.99HZJMP KEYDOWNK7: IN AL,DX ;读开关的状态TEST AL, 40H ;判是否是K7闭合JZ K8 ;不是转K8MOV AX, 1205 ;是K7闭合送“7”音频数据1/830.61HZJMP KEYDOWNK8: IN AL, DX ;读开关的状态TEST AL, 80H ;判是否是K8闭合JZ NOKEY ;不是转K1MOV AX, 1136 ;是K8闭合送“8”音频数据1/880.30HZJMP KEYDOWNFREQ DW 0 ;保存前次设置频率NOKEY: JMP MAN_PLAYMOV AX, 2 ; 关闭发音KEYDOWN:CMP FREQ,AXJE NOKEYMOV FREQ,AXCALL OUTTONEJMP MAN_PLAYOUTTONE PROC NEAR ;按音频数据设置定时器时间常数PUSH AX ; 键码压栈MOV AL, 36H ; 计数器0, 16位二进制,方式3(方波)。
综合实验(8253+8259+8255控制步进电动机)

mov al,34h ;通道0,方式2
out dx,al
mov dx,04b0h
mov al,0
out dx,al
mov al,96h
out dx,al
sti
jmp $
int8259: cli
mov al,bl ;中断程序
mov dx,04a0h
out dx,al
OUT DX, AL ;
MOV AL, 80H ;设置中断向量号
MOV DX, 04C2H ;从04C2H端口地址送初始化命令字ICW2
OUT DX, AL ;
MOV AL, 01H ;设置ICW4,1680X86处理器
OUT DX, AL ;
MOV AL, 0FEH ;1111 1110设置OCW1值,允许IR0中断,禁止其他中断
四、实验原理
本实验由8253、8255、8259三个芯片及步进电机组成,各芯片的工作原理参看前各部分实验。
五、实验步骤
1、实验连线
8255CS~CS0,8255A口接步进电机A、B、C、D,为了观察步进电机的通电情况,将A、B、C、D插孔与发光二极管相连
8253CS~CS1,CLK2~8253CLK0,out0~8259IR0;
STI
JMP $
int8259:
CLI
MOV AL, BL ;中断程序
MOV DX, 04A0H ;向8255的A口写入高低电平
OUT DX, AL ;
MOV DX, 04A2H ;8255 B口端口地址04A2H
IN AL, DX ;从B口读入数据
TEST AL, 01H ;读入数据与0000 0001相与
汇编接口综合实验——简易电子琴实验

简易电子琴——键盘控制电子音响发声、8x8点阵灯显示实验报告12281166 崔雪莹 12281161 安容巧 12281183 张佳悦一、实验目的1.了解小键盘的工作原理,学会如何使用小键盘进行控制,熟悉流程和代码编程;2.了解电子音响的发声原理,会利用8253A级联方式控制其发出不同频率的声音;3.了解8X8点阵灯的工作原理,学会显示想要显示的文字和图形;4.实验结合8253,8259,8255和小键盘,8*8点阵的应用共同实现。
5.实验目的效果:小键盘触发按键,控制电子音响发出相应频率的声音,8X8点阵灯显示相应的内容。
二、实验内容实验主要概述:键盘控制实现两个音部(高音部、低音部)的发声,即:当在键盘上按下‘0’、‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’时,电子音响发出不同频率的低音调,当在键盘上按下‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’时,电子音响发出不同频率的高音调。
同时,在8x8灯上显示相应音调对应的‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’。
1.小键盘按键的获取:图1 小键盘原理图小键盘按键获取原理:(1)判断是否有按键按下:若某行为低电平,此时该行某按键对应某列也为低电平,则说明该按键此时被按下。
将8255A的A口03接行0到行3,B口的03接列0到列3。
A口做输出,B口做输入。
将A口输出设置为0000读取B口的此时的值,若不是全为1则说明有按键按下。
无按键按下则等待。
(2)去抖动:延时,等待按键通断引起的抖动消失。
延时后再读B端口,若还有按键闭合,则认为按键已确定。
(3)找到被按下的按键:用逐行扫描的方法读出此时按键相应的值。
从第0行开始,输出0,顺序逐行扫描。
每扫描一行,读入列线值,从0列开始,逐列检查是否为0。
若为0,则表示该列有键按下;若为1,则表示无键按下。
微机原理课程设计——简易电子琴实验

微机原理与接口技术课程设计——简易电子琴的设计作者:王雨轩指导老师:张金花摘要:本设计主要是利用可编程并行I/O接口芯片8255,通过对电子琴主体部分的电路进行模仿设计,达到电子琴固有的基本功能,故叫简易电子琴。
利用定时器可发出不同频率的方波的原理,使不同频率的方波进入蜂鸣器发出不同音调。
Abstract: This design mainly is to use programmable parallel I/O interface chip 8255 to design the main body part of the electronic keyboard’s circuit,to achieve the basic function of the inherent.So called simple electronic keyboard.The principle of using the timer can make different frequency square wave,let the different frequency square wave into the buzzer to make different tones.关键字:微机原理接口技术 8255 电子琴目录说明书总页数:14页简易电子琴的设计 (3)一、课题要求与内容 (3)(一)课题要求 (3)(二)课题内容 (3)(三)使用设备 (3)二、系统总体方案设计 (4)(一)系统流程图 (4)三、系统硬件设计 (5)(一)设计原理图 (5)(二)主机连线说明 (5)(三)硬件调试 (5)四、系统软件设计 (6)(一)程序清单 (6)(二)软件调试 (12)五、结束语 (13)六、参考文献 (14)简易电子琴的设计随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作。
计算机是一种严格按照时序进行工作的数字化、智能化机器,实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。
8253、8259、8255综合设计题

1.键盘中断(8255,8259),设计一程序当按下任意键或任意组合键时从8255的A口读出按键扫描码并显示,按“ESC”键退出。
2.交通灯控制系统:按照时间控制原则,利用并行接口和定时器,采用时间中断方式设计一套十字路口的交通灯管理系统,通行时间(或禁止时间)30秒,准备时间3秒,在准备时间里黄灯闪烁3次,闪烁频率为0.5秒,周而复始。
可利用8255、8253、8259等接口电路。
(可到实验室完成)
3.键盘电子乐器:利用并行接口8255作为键盘接口,设计一个具有2个八度音阶的键盘乐器,音阶键不少于16个,采用扫描方式管理键盘,音域范围自行定义。
微机原理实验报告-电子琴

微机接口技术课程实验设计报告题目:按键电子琴姓名:学号:************、************班级:2013级电子二班一.设计内容设计一个由80x86系统控制的集成电路,可以实现由键盘控制出不同频率的声音,并且在按动键盘的同时控制八位LED灯的亮灭。
二.设计思路利用80X86系统中,8259,8255,8254三块芯片控制整个电路。
利用8255芯片控制LED灯的亮灭,利用8259的中断组成开关部分,利用8254定时/计数器控制音乐播放。
2.1芯片8259控制部分芯片控制字,采用边沿触发,单片,要写入ICW4控制字,中断类型码控制字:设置IR0~IR7的中断类型码依次为08H、…、0FH方式控制字:非特殊全嵌套方式,主片在非缓冲方式下,中断结束采用非自动结束方式。
2.2芯片8254控制部分通道0:只读写低字节,工作在方式3即方波发生器,计数格式为2进制。
通道1:方式0,计数器,BCD计数,初值01H.2.3芯片8255控制部分A口工作在方式0,作为输入端口用于开关采样;B口工作在方式0,作为输出,连接控制LED灯;C口未定义,默认为输出。
三.硬件电路四.流程图五.按键开始装入频率时间表起始地址计算计数初值并装入计数器调用序并调用延时程序否两个指针递增检测拨键开关并控制LED灯是检测是否结束返回主程序MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604HMY8255_MODE EQU 0606HMY8254_MODE EQU 06C6HMY8254_A EQU 06C0HDATA SEGMENTFREQ_LIST DW 221,248,278,294,330,371,416,441DW 495,556,589,661,742,833,882,-1DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;初始化MOV DS,AXMOV DX,MY8255_MODEMOV AL,81H ;8255控制字OUT DX,ALMOV DX,MY8254_MODE ;8254控制字MOV AL,36HOUT DX,ALBEGIN:CALL CCSCAN ;扫描JNZ INK1JMP BEGININK1:MOV CH,0FEHMOV CL,00HCOLUM:MOV AL,CHMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXL1:TEST AL,01HJNZ L2MOV AL,00HJMP KCODEL2:TEST AL,02HJNZ L3MOV AL,04HJMP KCODEL3:TEST AL,04HJNZ L4MOV AL,08HJMP KCODEL4:TEST AL,08HJNZ NEXTMOV AL,0CH KCODE:ADD AL,CLMOV DL,2DMUL DLPLAY:MOV SI,OFFSET FREQ_LISTADD SI,AXMOV DX,0FHMOV AX,4240HDIV WORD PTR[SI]MOV DX,MY8254_AOUT DX,ALMOV AL,AHOUT DX,ALMOV CX,8DNEXT3:CALL DALLYLOOP NEXT3MOV DX,0FHMOV AX,4240HMOV SI,30DDIV WORD PTR[SI]MOV DX,MY8254_AOUT DX,ALMOV AL,AHOUT DX,ALJMP BEGIN NEXT:INC CLMOV AL,CHTEST AL,08HJZ KERRROL AL,1MOV CH,ALJMP COLUM KERR:JMP BEGIN CCSCAN:MOV AL,00HMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXNOT ALAND AL,0FHRETDALLY:PUSH CXMOV CX,000FHT1:MOV AX,009FH T2:DEC AXJNZ T2LOOP T1POP CXRETCODE ENDSEND START。
电子琴课程设计8255

电子琴课程设计8255一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握电子琴的基本结构和功能,了解电子琴的工作原理,以及基本的音乐理论知识。
2.技能目标:学生能够熟练操作电子琴,进行基本的弹奏和演奏;能够通过电子琴创作简单的音乐作品。
3.情感态度价值观目标:培养学生对音乐的热爱和兴趣,提高学生的音乐素养,培养学生的创新精神和团队合作意识。
二、教学内容本节课的教学内容主要包括以下几个部分:1.电子琴的基本结构和功能:介绍电子琴的各个部分,如键盘、音量控制、音色选择等,以及它们的作用和功能。
2.电子琴的工作原理:讲解电子琴内部的工作原理,如声音产生、音量控制等。
3.基本音乐理论知识:介绍音阶、和弦、节奏等基本音乐理论知识。
4.电子琴操作练习:指导学生进行电子琴的基本操作练习,如开关机、选择音色、调节音量等。
5.简单弹奏和演奏练习:教授学生简单的电子琴弹奏和演奏技巧,并进行练习。
6.创作简单音乐作品:引导学生进行电子琴创作,创作简单的音乐作品。
三、教学方法本节课采用以下几种教学方法:1.讲授法:讲解电子琴的基本结构和功能、工作原理以及基本音乐理论知识。
2.示范法:教师进行电子琴操作示范,学生跟随模仿。
3.练习法:学生进行电子琴操作练习,教师进行指导。
4.创作法:学生进行电子琴创作,教师进行评价和指导。
四、教学资源本节课的教学资源包括以下几个方面:1.教材:电子琴教材,用于指导学生学习。
2.多媒体资料:电子琴教学视频、音频等资料,用于辅助教学。
3.实验设备:电子琴及相关设备,用于学生实践操作和创作。
4.参考书:音乐理论相关书籍,用于学生深入学习音乐理论知识。
五、教学评估本节课的评估方式包括以下几个方面:1.平时表现:评估学生在课堂上的参与度、积极性和表现,包括发言、提问、合作等。
2.作业:评估学生提交的作业,包括练习题、创作作品等,以检查学生的学习成果和理解程度。
3.考试:进行一次电子琴操作和演奏考试,评估学生的技能水平和音乐理论知识掌握情况。
- 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 SEGMENTCS_8259_P0 EQU 20HCS_8259_P1 EQU 21HCS_8255_CTRL EQU 73HCS_8255_PA EQU 70HCS_8253_CTRL EQU 4BHCS_8253_CH0 EQU 48HCS_8253_CH2 EQU 4AHCS_8251_STAT EQU 51HCS_8251_DATA EQU 50HASSUME CS:CODEORG 1000HSTART: JMP MAINMODE DB 0 ;0为手动弹凑模式,非0为自动手动弹凑模式TONELEN DW 0TONEFR DW 2,3030,2865,2551,2273,2024,1912,1704,1517,1433,1276,1136,1012 TABLE DB 42H,82H,82H,82H,84H,02H,72HDB 62H,72H,62H,52H,48HDB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2HDB 12H,0A2H,0D2H,92H,88HDB 82H,0B2H,0B2H,0A2H,84H,02H,72HDB 62H,72H,62H,52H,44H,02H,12HDB 12H,62H,62H,52H,44H,02H,82HDB 72H,62H,52H,32H,48HDB0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FHENDTAB DB 00HMAIN: CALL I8253ACALL INTSETCALL I8259ACALL I8255ACLDMOV AX,SEG TABLEMOV DS,AXLEA DI,ENDTABMOV AL, 0CMP MODE,ALJZ MAN_PLAYAUTO_PLAY:LEA S I,TABLESOUND:IN AL, CS_8251_STATTEST AL, 00000010BJZ NEXT1IN AL, CS_8251_DATACMP AL, 'M'JNZ NEXT1MOV AL,1MOV MODE,ALJMP MAN_PLAYNEXT1:LODSBMOV BX,AXMOV CX,AXAND CX,0FHAND BX,0F0HSHR BX,1SHR BX,1SHR BX,1; SHR BX,1MOV AX,TONEFR[BX]CALL OUTTONEMOV AX,10MUL CXMOV WORD PTR TONELEN,AXDELAY: MOV AX,WORD PTR TONELENCMP AX,0JNE DELAYCMP SI,DIJNE SOUNDJMP AUTO_PLAYMAN_PLAY:MOV AX,0MOV TONELEN, AXIN AL, CS_8251_STATTEST AL, 00000010BJZ CHK8255IN AL, CS_8251_DATACMP AL, 'A'JNZ NEXT2MOV AL,0MOV MODE,ALJMP AUTO_PLAYNEXT2: CMP AL, 31HJL CHK8255CMP AL, 38HJG CHK8255SUB AL, '0'MOV AH, 0MOV BX,AXSHL BX,1MOV AX,TONEFR[BX]CALL OUTTONEJMP MAN_PLAYCHK8255:K1: MOV DX, CS_8255_PA ;PA端口地址IN AL, DX ;读开关的状态TEST AL, 01H ;判是否是K1闭合JZ K2 ;不是转K2MOV AX, 2273 ;是K1闭合送“1”音频数据1/440.00HZJMP KEYDOWNK2: IN AL, DX ;读开关的状态TEST AL, 02H ;判是否是K2闭合JZ K3 ;不是转K3MOV AX, 2024 ;是K2闭合送“2”音频数据1/493.88HZJMP KEYDOWNK3: IN AL, DX ;读开关的状态TEST AL, 04H ;判是否是K3闭合JZ K4 ;不是转K4MOV AX, 1805 ;是K3闭合送“3”音频数据1/554.37HZJMP KEYDOWNK4: IN AL,DX ;读开关的状态TEST AL, 08H ;判是否是K4闭合JZ K5 ;不是转K5MOV AX, 1704 ;是K4闭合送“4”音频数据1/587.33HZJMP KEYDOWNK5: IN AL, DX ;读开关的状态TEST AL, 10H ;判是否是K5闭合JZ K6 ;不是转K6MOV AX, 1517 ;是K5闭合送“5”音频数据1/659.26HZJMP KEYDOWNK6: IN AL, DX ;读开关的状态TEST AL, 20H ;判是否是K6闭合JZ K7 ;不是转K7MOV AX, 1353 ;是K6闭合送“6”音频数据1/739.99HZJMP KEYDOWNK7: IN AL,DX ;读开关的状态TEST AL, 40H ;判是否是K7闭合JZ K8 ;不是转K8MOV AX, 1205 ;是K7闭合送“7”音频数据1/830.61HZJMP KEYDOWNK8: IN AL, DX ;读开关的状态TEST AL, 80H ;判是否是K8闭合JZ NOKEY ;不是转K1MOV AX, 1136 ;是K8闭合送“8”音频数据1/880.30HZJMP KEYDOWNFREQ DW 0 ;保存前次设置频率NOKEY: JMP MAN_PLAYMOV AX, 2 ; 关闭发音KEYDOWN:CMP FREQ,AXJE NOKEYMOV FREQ,AXCALL OUTTONEJMP MAN_PLAYOUTTONE PROC NEAR ;按音频数据设置定时器时间常数PUSH AX ; 键码压栈MOV AL, 36H ; 计数器0, 16位二进制,方式3(方波)。
MOV DX, CS_8253_CTRL ;定时器控制口地址OUT DX, ALPOP AX ; 键码出栈MOV DX, CS_8253_CH0 ;定时器0端口地址OUT DX, AL ;写时间常数低八位MOV AL, AH ;写时间常数高八位OUT DX, ALRETOUTTONE ENDPTIMER PROC FARPUSH AXMOV AX,WORD PTR TONELENCMP AX, 0JE EXITIDEC TONELENEXITI:MOV AL,20HOUT CS_8259_P0,ALPOP A XIRETTIMER ENDPINTSET PROC NEARMOV AX, 0MOV ES,AXMOV DI,(8+3)*4LEA A X,TIMERSTOSWMOV AX,CSSTOSWSTIRETINTSET ENDPI8259A P ROC NEARMOV AL,13HMOV DX,CS_8259_P0OUT DX,ALMOV AL,08HMOV DX,CS_8259_P1OUT DX,ALMOV AL,0BHOUT DX,ALMOV AL,0F7HOUT DX,ALSTIRETI8259A ENDPI8253A PROC NEAR ;按音频数据设置定时器时间常数MOV AL, 0B6H ; 计数器2, 16位二进制,方式3(方波)。
MOV DX, CS_8253_CTRL ;定时器控制口地址OUT DX, ALMOV AX, 12500MOV DX, CS_8253_CH2 ;定时器2端口地址OUT DX, AL ;写时间常数低八位MOV AL, AH ;写时间常数高八位OUT DX, ALRETI8253A ENDPI8255A P ROC NEARMOV AL, 90H ;8255的PA口输入MOV DX, CS_8255_CTRL ;8255控制口地址OUT DX, ALRETI8255A ENDPCODE ENDSEND START2.应用程序运行状态截图十、实验结论:通过此次试验达到了实验所需要达到的目地,让汇编程序编程的能力得到提升;加深了对各类芯片的理解;巩固了已学的知识;。