微机原理与接口技术8254电子发声器_课程设计.docx
一试验名称:发声器二功能及使用方法:设计一个电子琴发声程序,并在运行时通过试验箱上的扬声器发声,并且当按下数字 114 时,依次发出 1,2,3,4,5,6,7 的低音和 1,2,3,4,5,6,7 的中音。并在试验箱上的发声器上发声,这确定需要有发声程序,驱动发声程序,还有键盘扫描程序,及为了能够听见动听的字符音还得对程序进展 必要的延时。利用 8254 芯片所供给转化后的频率送到发声单元进展发声及8255 芯片送供给的输入输出功能,来完成从键盘的输入到发声装置发声的掌握。电子发声原理:一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出这个音符的声音。将一段乐曲的音符对应频率的方波一次送到扬声器,就可以演奏出这段乐曲。利用 8254 的“方波发生器”,将相应的一种频率的计数初值写入计数器,就可以产生对应频率的方波。计数初值的计算如下:计数初值 = 输入时钟输出频率例如输入时钟承受 1MHZ,要得到 800HZ 的频率,计数初值即为 1000000/800。音符与表的比照关系如上表所示。对于每一个音符的演奏时间,可以通过软件延时来处理。首先确定单位延时子程序依据 CPU 的频率不同而有所变化。然后确定每个音符演奏需要几个单位延时,将此值送入存放器,再调用延时子程序即可。三试验器件:通过试验箱上的扬声器发声,并且当按下数字 114 时,依次发出 1,2,3,4,5,6,7 的低音和 1,2,3,4,5,6,7 的中音。并在试验箱上的发声器上发声。选用器件:8254 和 8255 芯片各一片,微机一台,TPC-H 通用微机接口试验系统一台,扬声器和导线假设干四电路连接图:8254 局部接线图8255 局部接线图0五各子程序功能1.为 8255 和 8254 所定义的端口地址: I0Y0 EQU 06C0HMY8254_COUNT0 EQU I0Y0+00H MY8254_COUNT1 EQU I0Y0+02H MY8254_COUNT2 EQU I0Y0+04H MY8254_MODE EQU I0Y0+06H MY8255_A EQU 0640HMY8255_B EQU 0642H MY8255_C EQU 0644H MY8255_MODE EQU 0646H2.频率表及所对应的时间表:FREQ_LIST DW 262H,294H,330H,349H,392H,440H,496H DW 523H,587H,659H,698H,784H,880H,988HDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H3.定义 8255 和 8254 的掌握字MOV DX,MY8255_MODE MOV AL,81HOUT DX,ALMOV DX,MY8254_MODE MOV AL,36HOUT DX,AL4. CCSCAN 子程序实现取出按键值并输入A 口清屏子程序1CCSCAN:MOV AL,00HMOV DX,MY8255_A OUT DX,ALMOV DX,MY8255_C IN AL,DXNOT AL AND AL,0FH RET5. Play 输动身音的子程序PLAY PROCMOV AH,0 MOV SI,AX SHL SI,1 MOV DX,0FHMOV AX,4240H DIV WORD PTR SIMOV DX,MY8254_COUNT0 OUTDX,ALMOV AL,AH OUTDX,AL RETPLAY ENDP6. 延时子程序DALLY PROCD0: MOV CX,0010H D1: MOV AX,02H D2: DEC AXJNZ D2 LOOP D1 DEC DL JNZ D0 RETDALLY ENDP7. 按键扫描功能COLUM:MOV AL,CHMOV DX,MY8255_A OUT DX,ALMOV DX,MY8255_C IN AL,DX2L1:TEST AL,01H JNZ L2MOV AL,00H JMP KCODEL2:TEST AL,02H JNZ L3MOV AL,04H JMP KCODEL3:TEST AL,04H JNZ L4MOV AL,08H JMP KCODEL4:TEST AL,08H JNZ NEXT MOV AL,0CHKCODE: ADD AL,CLCALL PLAYPUSH AX KON:CALL DALLYCALL CCSCAN JNZ KONPOP AXJMP BEGIN1六源程序清单I0Y0 EQU 06C0H MY8254_COUNT0 EQU I0Y0+00H MY8254_COUNT1 EQU I0Y0+02H MY8254_COUNT2 EQU I0Y0+04H MY8254_MODEEQU I0Y0+06H MY8255_A EQU 0640HMY8255_B EQU 0642H MY8255_C EQU 0644H MY8255_MODE EQU 0646H STACK1 SEGMENT STACKDW 256 DUP(?) STACK1 ENDSDATA SEGMENTFREQ_LIST DW 262H,294H,330H,349H,392H,440H,496H DW 523H,587H,659H,698H,784H,880H,988HDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODE MOV AL,81HOUT DX,ALMOV DX,MY8254_MODE MOV AL,36HOUT DX,AL BEGIN1:CALL CCSCAN JNZ INK1JMP BEGIN1INK1:CALL CCSCAN JNZ INK2JMP BEGIN1 INK2:MOV CH,0FEHMOV CL,00H COLUM:MOV AL,CHMOV DX,MY8255_A OUT DX,ALMOV DX,MY8255_C IN AL,DXL1:TEST AL,01H JNZ L2MOV AL,00H JMP KCODEL2:TEST AL,02H JNZ L3MOV AL,04H JMP KCODEL3:TEST AL,04H JNZ L4MOV AL,08H JMP KCODEL4:TEST AL,08H JNZ NEXT MOV AL,0CHKCODE: ADD AL,CLCALL PLAYPUSH AX KON:CALL DALLYCALL CCSCAN JNZ KONPOP AXJMP BEGIN1 NEXT:INC CLMOV AL,CH TEST AL,08H JZ KERR ROL AL,1 MOV CH,AL JMP COLUMKERR:JMP BEGIN1 CCSCAN:MOV AL,00HMOV DX,MY8255_A OUT DX,ALMOV DX,MY8255_C IN AL,DXNOT AL AND AL,0FH RETPLAY PROCMOV AH,0 MOV SI,AX SHL SI,1 MOV DX,0FHMOV AX,4240H DIV WORD PTR SIMOV DX,MY8254_COUNT0 OUTDX,ALMOV AL,AH OUTDX,AL RETPLAY ENDPDALLY PROCD0: MOV CX,0010H D1: MOV AX,02H D2: DEC AXJNZ D2 LOOP D1 DEC DL JNZ D0 RETDALLY ENDP CODEENDSEND START