《电子琴课程设计.ppt》由会员分享,可在线阅读,更多相关《电子琴课程设计.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计题目:基于PC机的电子琴设计目的:1.掌握PC机扬声器发声原理 2.掌握PC机键盘工作原理 3.掌握中断技术 4.掌握8253,8255,8259等芯片在PC机使用。5.加强汇编语言编程能力,中断程序编写方法 要求:当按下PC机键盘数字键1-8时,发低音1,2,3,4,5,6,7,i八个音调。当按下Q,W,E,R,T,Y,U,I时发中音1,2,3,4,5,6,7,i八个音调,当按下A,S,D,F,G,H,J时发高音1,2,3,4,5,6,7,i八个音调。按键由中断的方式直接从并行口8255读取,由软件实现转化,从而确定键值,根据键值使8253发不同频率的音,完成电子琴设计。PC机中硬件
2、介绍机中硬件介绍可编程的定时/计数器内部有3个16位功能相同独立计数器通道每个计数器可工作在6种方式计数频率8253(2MHZ),8254(5MHZ)一、一、8253在在PC/XT机中的应用机中的应用GATE0GATE1GATE2CLK0CLK1CLK2OUT0OUT1OUT2D7D0DCQSCLRDCQ+5VQ+5VDRQ08237-5IRQ08259T/C2 OUT扬声器接口扬声器接口RDWRCSA1A0D7D0PCLK2.38636MHzRESETDRVA1A0IORIOWT/C CSPB08255-5DACK0 BRD8253PC机中8253的地址为40H43H 通道0:用来做系统一般
3、定时器用,其门控信号接至高电平,使得计数器0一直工作。通道0的输出接至系统中断控制器8259的IRQ0输入,BIOS设定为方式3方波产生器,初值栽入为0,因此正常情况下每秒产生18.2的中断,BIOS即利用此周期性的中断来维持电脑的时间计数 通道1:用来做系统存储器刷新,门控信号输入接高电平,计数器工作一直有效,PC的BIOS在启动时设定此通道工作于方式2做比率产生器用,计数器每15US产生一次存储器刷新信号,此通道的计数器不允许被使用者加以利用 通道2:用做喇叭驱动,门控输入可以由输出口(I/O地址61H)的位0加以控制启动或关闭。若启动,设定为工作方式3做方波产生器可以持续地由此通道送出固
4、定频率的方波信号至喇叭,驱动喇叭发出声音8253的初始化编程步骤:*写入控制字*写入计数初值定时时间=时钟脉冲周期*预置计数初值N写控制字写控制字写计数值低写计数值低8位位写计数值高写计数值高8位位*非必须非必须 控制字寄存器:是一种只写寄存器,由CPU向它写入控制字,规定各计数器通道工作方式,读写格式、计数进制。SC1 SC0 RL1 RL0 M2 M1 M0 BCD 1 BCD码计数 0 2进制计数000 方式0 001 方式1 X10 方式2 X11 方式3 100 方式4 101 方式500 通道0 01 通道1 10 通道2 00 计数器锁存,供CPU读取 01 只读/写计数器低字节
5、 10 只读/写计数器高字节 11 先读/写低字节,再读/写高字节 MOV AL,10110110B ;8253计数器2方式3 OUT 43H,AL MOV BX,FRED ;所要分频技术值 MOV AL,BL ;先写低字节 OUT 42H,AL MOV AL,BH ;再写高字节 OUT 42H,AL 二、PC微机键盘及接口1、PC微机键盘特点PC微机常用的键盘有101键的增强型键盘和102键的扩展键盘。不论键数的多少均具有如下特点:键盘由单片机、译码器和16行X 8列的键开关矩阵三大部分组成。按键采用电容开关,即按键时的上下动作使电容量发生变化,从而实现开关接通或断开的目的。它是一种由单片机
6、扫描、编码的智能化键盘。但是,它不能直接提供与键功能对应的键值或键码,必须由主机在键处理程序中将键盘提供的扫描码转换为反映键功能的ASCII码。它是一个与主机箱分开的独立部件,通过一根五芯电缆与主机相连接。2.PC微机键盘的功能串行接受键盘送来的扫描码,完成串并转换后保存收妥一个键盘扫描码后,立即产生一个中断请求信号保存的扫描码可供CPU读取,并通过软件进行相应转换处理接受CPU的命令,输出到键盘,并接受键盘回送的响应信号 SE DS S/P D0 D1 OE CLRCLK GD CLR RD CLR RQPCLKRESETCLK DATA RESET GND +5VPB7PB6D CLK C
7、LR PRQQQ1+5VIRQ1OA OBOHOHPA7PA6PA0+5V微机键盘接口电路LS332 LS 332 串并转换电路D1 串行输入,和接口中DATA连接OAOH 并行输出,和8255的PA0PA7连接,供CPU读取OH是中断源,通过中断请求触发器连8259的IRQ1,作为向CPU提出申请的中断源PB7 允许读取扫描码(为0),清除中断请求信号(高到低跳变)PB6 为1该接口电路能工作接口中的CLK经过两级同步和LS322的CLK相连。工作原理:当PB7和IRQ1为0时,LS322接受串行数据(DATA),实现串并转换。收到8位扫描码,LS322的OH为1,使得IRQ1有效,向CPU
8、提出中断申请,同时中断请求触发器的Q端输出0,使DI 为0,通知接口暂时不送扫描码。CPU接受到中断请求信号,通过8255的A口读取数据,并使PB7产生1到0跳变,清除LS322和中断请求触发器。3.PC机键值的获取 按下一个键时,开关接通,该芯片就产生一个扫描码(通码),该扫描码说明了按下的键在键盘上的位置 松开按下的键时,也产生一个扫描码(断码),该扫描码说明了松开的键在键盘上的位置。扫描码长度为一个字节(16位),通码的第7位为0,断码的地7位为1。即:断码通码80h(80h相当于二进制1000 0000)三、PC机中的82551.8255有3个8位并行口2.方式0:基本I/O 方式1:
9、选通I/O 方式2:双向I/O 8255PA口PB6PB7键盘PB0PB1扬声器8255在PC机中的地址为60H63H8255的控制字的控制字1.方式选择控制字2.置位/复位控制字 方式选择控制字D7 D6 D5 D4 D3 D2 D1 D0C口低4位I/O1=输入0=输出B口I/O1=输入0=输出B口方式0=方式01=方式1C口高4位I/O1=输入0=输出A口I/O1=输入0=输出 A口方式00=方式001=方式11X=方式2D7=1 标志位 置位/复位控制字D7 D6 D5 D4 D3 D2 D1 D0 1 置位0 复位000 选中PC0001 选中PC1111 选中PC7位选择任意值D7
10、=0 标志位 8255初始化 MOV AL,99H;模式0,A口、C口输入 OUT 63H,AL ;B口输出 MOV AL,80H ;PB7=1 OUT 61H,AL MOV AL,40H ;PB7=0,PB6=1 OUT 61H,AL 启动扬声器工作 IN AL,61H ;读PB口当前状态 OR AL,03H ;使PB1、PB0均为1 OUT 61H,AL ;使扬声器发声(开始发音)当然扬声器发声还要控制8253芯片 IN AL,61H ;读PB口当前状态 AND AL,0FCH ;使PB1、PB0均为0 OUT 61H,AL ;8253计数器2,扬声器停止工作停止扬声器工作 四、PC机中8
11、259优先级排队管理接受和扩充外部设备的中断请求提供中断类型号进行中断请求的屏蔽和开放PC机中有2块中断管理芯片:主片、从片 T/C0计时中断计时中断 键盘控制器中断键盘控制器中断 级联中断级联中断 串行口串行口2 串行口串行口1 并行口并行口2 软盘控制器软盘控制器 并行口并行口108 09 0A 0B 0C 0D 0E 0F IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR770 71 72 73 74 75 76 77INTAINTAINTAINTAINTINTINTRINTR主片主片从片从片口地址:口地址:20H 21H20H 21H口地址:口地址:A0H A1HA0H A
12、1H双片双片IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7IR0IR1IR2IR3IR4IR5IR6IR7SP/ENSP/EN+5VGND 共15级向量中断,采用两片级连,故CAS2CAS0作互连线,从片的INT直接连到主片的IR2上。端口地址,主片在020H03F范围内,实际使用020H和021H。从片在0A00BFH范围,实际使用0A0H,0A1H两个端口。主、从片的中断请求信号均采用边沿触发。采用完全嵌套方式,优先级的排列次序为0级最高,依次为1级,8-15级,然后是3-7级。采用非缓冲方式,主片的SPEN端接+5V,从片SPEN端接地。设定0级-7级对应主片的中断号为8
13、HOFH,8级15级对应从片的中断号为70H77H。五、五、五、五、8259A8259A的编程方法的编程方法的编程方法的编程方法1.如何对8259进行初始化?8259的命令字分为初始化命令字和操作方式命令字两种(1)4个初始化命令字ICW1、ICW2、ICW3和ICW4(2)3个操作方式命令字OCW1、OCW2和OCW3对8259的初始化是通过CPU对8259A送控制命令字实现的。对于只占两个I/O地址的8259A,CPU对8259A各寄存器的读写是I/O地址和数据配合完成的ICW1ICW2级联方式ICW3需要ICW4ICW4NSNGL=1Y(SNGL=0)Y(IC4=1)N(IC4=0)注意
14、:初始化命令字只发一次,操作命令字可以重置,以动态改变8259A的操作与控制方式 2、PC机对主片8259A各寄存器的选定:(PC机上的8259A的I/O地址为20H和21H)(1)对于4个初始化命令字的选定:ICW1:0020H A0=0,D4=1ICW2:0021H A0=1ICW3:0021H A0=1,ICW1中SNGL(D1)位=0ICW4:0021H A0=1,ICW1中IC4(D0)位=1按照ICW1-ICW4的顺序写入(2)对于操作方式命令字的选定OCW1:0021H A0=1OCW2:0020H A0=0,D3D4=0 0OCW3:0020H A0=0,D3D4=1 0 3、
15、初始化命令字初始化命令字ICW1写入后,8259A内部完成初始化过程:A、使8259A对中断请求信号边沿检测电路复位,以使它在中断请求信号由低变高时,才能产生中断。B、清除中断屏蔽寄存器,设置中断优先级排队。ICW1IC4SNGL00*1LTIM*A0D7 D6 D5 D4 D3 D2 D1 D001不写ICW4写ICW401级联,写ICW3单片,不写ICW38088/8086不用标志位0=边沿触发方式1=电平触发方式ICW2 D7 D6 D5 D4 D3 D2 D1 D0T31A00T7T6T5T400 D7 D6 D5 D4 D3 D2 D1 D0IR7 T7 T6 T5 T4 T3 1
16、1 1IR6 T7 T6 T5 T4 T3 1 1 0IR5 T7 T6 T5 T4 T3 1 0 1IR4 T7 T6 T5 T4 T3 1 0 0IR3 T7 T6 T5 T4 T3 0 1 1IR2 T7 T6 T5 T4 T3 0 1 0IR1 T7 T6 T5 T4 T3 0 0 1IR0 T7 T6 T5 T4 T3 0 0 08259A输送的中断类型号输送的中断类型号无特征位,跟在ICW1后 S7 S6 S5 S4 S3 S2 S1 S0 1ICW3A0D7 D6 D5 D4 D3 D2 D1 D0ICW3 中断级联方式的设置主片 Si表示IRi有中断请求XXXXXID2ID1I
17、D0 1ICW3A0D7 D6 D5 D4 D3 D2 D1 D0从片 从片标志码ICW3在ICW1中D1=1时有效,紧跟在ICW2后 IR7 IR0 SP/ENCS A0 INTA INTCS0CS2IR7 IR0 SP/ENCS A0 INTA INTCS0CS2IR7 IR0 SP/ENCS A0 INTA INTCS0CS2数据总线控制总线地址总线8259主从级联GNDGNDVCCICW4PMAEOIM/S10SFNM BUF00A0D7 D6 D5 D4 D3 D2 D1 D001选用8085选用808601非自动方式自动中断结束方式0=全嵌套方式1=特殊全嵌套方式=非缓冲方式,此时
18、若用级联,由SP/EN确定主从设备。=缓冲方式,本片为从片=缓冲方式,本片为主片0 1 01 1全嵌套方式:高级中断可打断正在处理的中断,优先处理更高级的中断。特殊全嵌套方式:对于级联方式,主8259A把从同一从8259A来的不同级别的中断请求认为是同级的。在8259A级联时,若主片处于特殊全嵌套方式就允许对相同级别的中断请求开放。4、操作命令 OCW1OCW3M7M6M5M4M3M2M1M0 1OCW1A0D7 D6 D5 D4 D3 D2 D1 D01=屏蔽 ;0=开放OCW1操作命令设置中断屏蔽字,可读可写 RSL EOI 0 0 L2 L1 L0 0 OCW2A0D7 D6 D5 D4
19、 D3 D2 D1 D0优先级轮换指定中断优先级中断结束 特征位 中断等级编码OCW2 用来设置中断结束方式,中断排队方式 OCW3:查询中断、读状态、特殊屏蔽方式查询中断、读状态、特殊屏蔽方式XESMM SMM0 1 PRR RIS 0 OCW3A0D7 D6 D5 D4 D3 D2 D1 D0特殊屏蔽允许特殊屏蔽设置特征位查询方式读寄存器允许读ISR初始化编程系统上电期间,分别对8259A的主片和从片进行初始化的程序段如下:;初始化8259A主片MOV AL,11H ;ICW1:边沿触发,多片,要ICW4OUT 20H,ALJMP SHORT$+2 MOV AL,8 ;ICW2:中断类型号
20、高5位OUT 21H,ALJMP SHORT$+2 MOV AL,04H ;主片的IR2接从片(S1)OUT 21H,ALJMP SHORT$+2MOV AL,01H ;ICW4:非缓冲,全嵌套 ;16位的CPU,非自动结束 OUT 21H,AL ;初始化8259A从片 MOV AL,11H ;ICW1:边沿触发,多片,要ICW4 OUT 0a0H,AL JMP SHORT$+2 MOV AL,70H ;ICW2:中断号的高5位 OUT 0a1H,AL JMP SHORT$+2 MOV AL,02H ;ICW3:从片接主片的IR2 OUT 0a1H,AL JMP SHORT$+2 MOV AL
21、,01H ;ICW4:非缓冲,全嵌套,16 ;位的CPU,非自动结束 OUT 0a1H,AL 开放8259中断 IN AL,21H ;读IMR AND AL,11111100B ;IR0和IR1中断开放 OUT 21H,AL ;OCW1口地址这样写的好处:不影响其他中断源,只是打开了0和1 执行EOI命令 MOV AL,01100001B ;OCW2的中断等级码1号 OUT 20H,AL ;写入,OCW2端口(A0=0)此命令安排在中断服务程序里 IP0CS0IP1CS1IP2CS2IP3CS3IP254CS254IP255CS255中断向量表00000H00004H003FCH00400H
22、中断向量设置:PUSH DS MOV AX,SEG KEYINTERRUPT MOV DS,AX ;中断向量的段基地址放在DS中 MOV DX,OFFSET KEYINTERRUPT MOV AL,09H MOV AH,25H ;用INT 21H的25号功能设置中断向量 INT 21H POP DS STI ;开中 KEYINTERRUPT中断服务程序现场保护 IN AL,60H PUSH AX IN AL,61H MOV AH,AL OR AL,80H OUT 61H,AL XCHG AH,AL OUT 61H,AL POP AX MOV AH,AL;AH为键扫描码 键处理 执行EOI命令
23、现场恢复 返回 发音原理发音原理音频:人耳可以感觉到的声音频率a 20Hz 20000Hz语音和音乐是两类特殊的音频信号a语音是语言的载体,是对声音的抽象a音乐是符号化的声音音符与频率:发不同频率的音符,靠定时器时间常数的计算:1.197648MHZ/频率值可以事先算好,放入内存单元。比如低音:2205444 2474849 2774324 建表:DW 5444,4849,4324.音频与频率的关系如前所述,持续时间取决于乐曲的速度和每个音符持续的长度,在4/4乐曲中,每个小节含4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续时间半拍,根据乐曲进行速度,假设一个全音符分配
24、为1S时间,则每拍为250MS方案1:固定拍长(基本方案)方案2:根据键盘按键时间长短确定拍长 程序流程程序流程程序分2部分:主流程,中断服务程序主流程含初始化程序,发音节拍的控制中断服务程序:读键盘扫描码,根据键值计算时间常数,设置节拍长度,启动定时器等工作方案1的流程:开始 8253初始化 8255初始化 8259初始化设置中断向量8259,cpu开中断判是否在发声状态?调用延时50MS子程序20次延时到?NYY停止发声主流程主流程 清发声状态N程序提示 中断服务程序入口 现场保护从8255口中读取扫描码判是否是通码根据通码查找键值根据键值获取发声频率计算时间常数置当前状态为发声状态设置延
25、时节拍启动定时器2AAA执行EOI命令开中断中断返回现场恢复YN程序流程仅仅说明实现的过程,没有提示信息,程序环节中把提示信息加入方案2需要根据通码和断码的时间确定节拍的延时时间,在4/4节拍的音乐中,每个音、符的长度必须是1/4节拍的整数倍,要做到这要求,程序流程需做适当的改进。判是否在发声状态?NYY停止发声主流程主流程清发声状态,清断码信号延时1/4节拍,250ms有断码信号?N设时间 开始 8253初始化 8255初始化 8259初始化设置中断向量8259,cpu开中断程序提示 中断服务程序入口 现场保护从8255口中读取扫描码判是否是通码根据通码查找键值根据键值获取发声频率计算时间常
26、数置当前状态为发声状态设置延时1/4节拍启动定时器2BAA现场恢复执行EOI命令开中断中断返回YN B置当前状态为断码状态A 调试方法调试方法调试程序很多时候借助于显示器,首先进入程序可以有个提示:比如这是一个电子琴模拟程序,当按下PC机键盘数字键1-8时,发低音1,2,3,4,5,6,7,i八个音调。当按下Q,W,E,R,T,Y,U,I时发中音1,2,3,4,5,6,7,i八个音调,当按下A,S,D,F,G,H,J时发高音1,2,3,4,5,6,7,i八个音调,如果程序有这个提示,表示程序进入你的掌控。本程序有中断服务程序,如何知道进入中断服务程序,中断的架构是否正确,我们可以考虑先不发声,
27、按下一个键,把该键的键值从显示器上显示出来,这说明中断已经正确,如果不正确:检查开中?8259的初始化是否正确?8259的中断屏蔽寄存器是否为开放状态,中断向量是否设置好?中断正确,再加上发声程序,如果发声不正确,检查定时器通道2,发声还需要用到8255的PB0,PB1,需要检查这两个引脚是否设置为1,可以专门编一个小程序测试发声是否正确。发声正确,可以考虑在原结构上加入节拍控制程序。汇编语言不直观,调试时一定需要有耐心 课程设计要求写实验报告写实验报告要求要求设计方案设计方案源程序代码源程序代码调试过程说明调试过程说明心得与体会心得与体会考核考核平时成绩平时成绩(出勤出勤 纪律等纪律等 ):20%):20%机上验收、提问、报告机上验收、提问、报告:80%:80%抄袭与无报告者作不及格论抄袭与无报告者作不及格论 时间安排:910111213上午上课编程上课答疑/编程上机下午编程编程编程编程上机1617181920上午上机修改程序上机修改程序交报告提问下午上机同上上机同上 上机地点:机房404答疑地点:608