΢»úÔ­Àí¿Î³ÌÉè¼Æ²¨Ðη¢ÉúÆ÷ - ͼÎÄ ÏÂÔØ±¾ÎÄ

Îå ¸½Â¼

5.1 Ô´³ÌÐò¼°ËµÃ÷

;****************¸ù¾Ý²é¿´¶Ë¿Ú×ÊÔ´ÐÞ¸ÄÏÂÁзûºÅÖµ******************* IOY0 EQU 3000H ;ƬѡIOY0¶ÔÓ¦µÄ¶Ë¿ÚʼµØÖ·

MY8259_ICW1 EQU IOY0+00H ;ʵÑéϵͳÖÐ8259µÄICW1¶Ë¿ÚµØÖ· MY8259_ICW2 EQU IOY0+04H ;ʵÑéϵͳÖÐ8259µÄICW2¶Ë¿ÚµØÖ· MY8259_ICW3 EQU IOY0+04H ;ʵÑéϵͳÖÐ8259µÄICW3¶Ë¿ÚµØÖ· MY8259_ICW4 EQU IOY0+04H ;ʵÑéϵͳÖÐ8259µÄICW4¶Ë¿ÚµØÖ· MY8259_OCW1 EQU IOY0+04H ;ʵÑéϵͳÖÐ8259µÄOCW1¶Ë¿ÚµØÖ· MY8259_OCW2 EQU IOY0+00H ;ʵÑéϵͳÖÐ8259µÄOCW2¶Ë¿ÚµØÖ· MY8259_OCW3 EQU IOY0+00H ;ʵÑéϵͳÖÐ8259µÄOCW3¶Ë¿ÚµØÖ· ;*************************************************************** IOY1 EQU 3040H ;ƬѡIOY1¶ÔÓ¦µÄ¶Ë¿ÚʼµØÖ· MY8254_COUNT0 EQU IOY1+00H*4 ;8254¼ÆÊýÆ÷0¶Ë¿ÚµØÖ· MY8254_COUNT1 EQU IOY1+01H*4 ;8254¼ÆÊýÆ÷1¶Ë¿ÚµØÖ· MY8254_COUNT2 EQU IOY1+02H*4 ;8254¼ÆÊýÆ÷2¶Ë¿ÚµØÖ· MY8254_MODE EQU IOY1+03H*4 ;8254¿ØÖƼĴæÆ÷¶Ë¿ÚµØÖ· ;*************************************************************** IOY2 EQU 3080H ;ƬѡIOY2¶ÔÓ¦µÄ¶Ë¿ÚʼµØÖ· MY8255_A EQU IOY2+00H*4 ;8255µÄA¿ÚµØÖ· MY8255_B EQU IOY2+01H*4 ;8255µÄB¿ÚµØÖ· MY8255_C EQU IOY2+02H*4 ;8255µÄC¿ÚµØÖ·

MY8255_MODE EQU IOY2+03H*4 ;8255µÄ¿ØÖƼĴæÆ÷µØÖ· ;*************************************************************** IOY3 EQU 30C0H ;ƬѡIOY3¶ÔÓ¦µÄ¶Ë¿ÚʼµØÖ·

DA0832 EQU IOY3+00H*4 ;DA0832µÄ¶Ë¿ÚµØÖ· ;***************************************************************

STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS

DATA1 SEGMENT

SINBUF DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H ;SINBUFÕýÏÒ²¨64µã²ÉÑùÖµ DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH DB 0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH DB 0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H DB 7FH,73H,67H,5AH,4FH,43H,38H,2EH DB 25H,1DH,15H,0FH,09H,05H,02H,00H DB 00H,02H,05H,09H,0FH,15H,1DH,25H DB 2EH,38H,43H,4FH,5AH,67H,73H,7FH

SANBUF DB 00H,08H,10H,18H,20H,28H,30H,38H ;SANBUFÈý½Ç²¨64µã²ÉÑùÖµ

µÚ12Ò³

DB 40H,48H,50H,58H,60H,68H,70H,78H

DB 80H,88H,90H,98H,0A0H,0A8H,0B0H,0B8H

DB 0C0H,0C8H,0D0H,0D8H,0E0H,0E8H,0F0H,0F8H DB 0F8H,0F0H,0E8H,0E0H,0D8H,0D0H,0C8H,0C0H DB 0B8H,0B0H,0A8H,0A0H,98H,90H,88H,80H DB 78H,70H,68H,60H,58H,50H,48H,40H DB 38H,30H,28H,20H,18H,10H,08H,00H

FANBUF DB 32 DUP(0),32 DUP(0FFH) ;FANBUF·½²¨64µã²ÉÑùÖµ

LEDTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;¹²Òõ¼«ÊýÂë¹Ü0-F¶ÔÓ¦ÊäÈëÂëÖµ DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' ;ÌáʾÓïÈÎÒâ°´¼üÍ˳öDOS ϵͳ MESS1 DB 0DH,0AH,'SQUARE-------------1',0DH,0AH ;¹¦ÄܼüÌáʾÓï DB 'TRIANGLE-----------2',0DH,0AH DB 'SINE---------------3',0DH,0AH

DB 'CHANGE THE FREQZ--4',0DH,0AH DB 'EXIT---------------5',0DH,0AH,'$'

MESS2 DB 0DH,0AH,'INPUT THE FREQZ:',0Ah,0DH,'$' ;ÌáʾÊäÈëÁùλƵÂÊ

FLAG4 DB 0H ;ÅжÏÊÇ·ñ³õ´ÎÖ´ÐÐÏÔʾƵÂÊ FLAG5 DB 0H ;ÅжÏÊÇ·ñ³õ´ÎÖ´ÐÐÊäÈëÆµÂÊ CHOOSE DB 0H ;±£´æÊäÈëµÄ¹¦Äܼü

JISHU DW 0H ;±£´æ²¨ÐÎÒѾ­Êä³öµÄƵÂÊ FREQZ DW ? ;±£´æÊäÈëµÄƵÂÊ

COUNT DW ? ;±£´æ¸ù¾ÝÊäÈëÆµÂÊËù¼ÆËãµÃµÄ¼ÆÊý³õÖµ COUNT1 DB ? ;¼ÆÊý³õÖµµÍ°Ëλ COUNT2 DB ? ;¼ÆÊý³õÖµ¸ß°Ëλ

SHUJU DB 10 DUP(0) ;±£´æÊäÈëÆµÂÊÿλµÄÕæÊµÖµ DATA1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA1

START: MOV AX,DATA1 ;½«DATA1·ÅÈëÊý¾Ý¶Î MOV DS,AX P1: CALL INPUT

MOV DX,MY8254_MODE ;³õʼ»¯8254¹¤×÷·½Ê½ MOV AL,34H ;¼ÆÊýÆ÷0£¬·½Ê½2 OUT DX,AL

MOV DX,MY8254_COUNT0 ;×°Èë¼ÆÊý³õÖµ

MOV AL,COUNT1 ;×°Èë¼ÆÊý³õÖµµÍ×Ö½Ú OUT DX,AL

MOV AL,COUNT2 ;×°Èë¼ÆÊý³õÖµ¸ß×Ö½Ú OUT DX,AL

CMP FLAG5,1 ;ÅжÏÊÇ·ñ³õ´ÎÖ´ÐÐÊäÈëÆµÂÊ JZ AA ;²»ÊÇÔòÌø×ªµ½µÈ´ýÊäÈ빦Äܼü

µÚ13Ò³

CALL DISPLY ;µ÷ÓÃÊýÂë¹ÜÏÔʾÊäÈëÆµÂʳÌÐò KL: CMP FLAG4,1 ;ÅжÏÊÇ·ñ³õ´ÎÖ´ÐÐÏÔʾƵÂÊ JZ AA ;²»ÊÇÔòÌø×ªµ½µÈ´ýÊäÈ빦Äܼü LEA DX,MESS1 ;ÏÔʾÊäÈëÆµÂʵÄÌáʾÓï MOV AH,09H INT 21H

QUERY1:MOV DX,MY8259_ICW1 ;³õʼ»¯ÊµÑéϵͳÖÐ8259µÄICW1 MOV AL,13H ;±ßÑØ´¥·¢¡¢µ¥Æ¬8259¡¢ÐèÒªICW4 OUT DX,AL

MOV DX,MY8259_ICW2 MOV AL,08H OUT DX,AL

MOV DX,MY8259_ICW4 MOV AL,01H OUT DX,AL

MOV DX,MY8259_OCW1 MOV AL,0FCH QUERY: MOV AH,1 INT 16H

JNZ AA MOV DX,MY8259_OCW3 MOV AL,0CH OUT DX,AL

IN AL,DX TEST AL,80H JZ QUERY AND AL,03H CMP AL,00H

JE IR0ISR JMP QUERY

QUIT: MOV AX,4C00H INT 21H

AA: MOV FLAG4,0H MOV FLAG5,0H MOV AH,01H INT 21H

MOV CHOOSE,AL JMP QUERY1

DISPLY PROC NEAR MOV DX,MY8255_MODE MOV AX,10000000B

;³õʼ»¯ÊµÑéϵͳÖÐ8259µÄICW2 ;³õʼ»¯ÊµÑéϵͳÖÐ8259µÄICW4 ;·Ç×Ô¶¯½áÊøEOI ;³õʼ»¯ÊµÑéϵͳÖÐ8259µÄOCW1 ;´ò¿ªIR0ºÍIR1µÄÆÁ±Îλ ;ÅжÏÊÇ·ñÓа´¼ü°´Ï ;Óа´¼üÔòÍ˳ö

;Ïò8259µÄOCW3·¢ËͲéѯÃüÁî ;¶Á³ö²éѯ×Ö

;ÅжÏÖжÏÊÇ·ñÒÑÏìÓ¦

;ûÓÐÏìÓ¦Ôò¼ÌÐø²éѯ ;ÈôΪIR0ÇëÇó£¬Ìøµ½IR0´¦Àí³ÌÐò ;Èô²»ÊÇÔòÌø»Ø¼ÌÐøµÈ´ý ;½áÊø³ÌÐòÍ˳ö ;½«±ê־λÇåÁãÒÔ±ãÏ´ÎÅÐ¶Ï ;½«±ê־λÇåÁãÒÔ±ãÏ´ÎÅÐ¶Ï ;ÊäÈ빦Äܼü ;½«¹¦Äܼü±£´æ ;Ìø×ªµ½µÈ´ý³ÌÐò ;ÊýÂë¹ÜÏÔʾ³ÌÐò ;¸ø8255дÈë¿ØÖÆ×Ö ;·½Ê½0£¬A¿ÚB¿ÚÊä³ö

µÚ14Ò³

OUT DX,AL

AA0: MOV AH,1 ;ÅжÏÊÇ·ñÓа´¼ü°´Ï INT 16H

JNZ KL ;Óа´¼üÔò·µ»Ø

MOV SI,OFFSET SHUJU ;½«±£´æÆµÂʵÄÄÚ´æµØÖ·¸øSI MOV AH,0FEH ;λѡ³õÖµ MOV CX,0006H ;λѡ´ÎÊý AA1: MOV AL,AH ;AL±£´æÎ»Ñ¡ MOV DX , MY8255_A ;¶Ë¿ÚµØÖ·Î»²Ù×÷ OUT DX,AL

ROL AL,01H MOV AH,AL MOV AL, [SI] MOV BX ,OFFSET LEDTAB XLAT MOV DX , MY8255_B OUT DX,AL

CALL DELAY INC SI LOOP AA1 JMP AA0 DISPLY ENDP

IR0ISR: MOV AL,CHOOSE CMP AL,'1' JZ SQUARE

CMP AL,'2' JZ TRIANGLE CMP AL,'3' JZ SINE CMP AL,'4' JZ X5

CMP AL,5' JZ QUIT

X5: MOV FLAG5,1 JMP P1

SQUARE: MOV SI,JISHU MOV AL,[FANBUF+SI] MOV DX,DA0832 OUT DX,AL

;ÏÂÒ»¸öλµØÖ· ;AH±£´æÎ»Ñ¡

;[µØÖ·]È¡´ýÏÔʾÄÚÈÝ ;½«Êý×Ö»»³ÉÏÔʾµÄÆß¶ÎÂë ;ÊýÂë¹ÜÊäÈëµÄ¶Ë¿ÚµØÖ· ;Ö´ÐÐÑÓʱ ;Ö¸ÏòÏÂÒ»¸öÄÚ´æµ¥Ôª ;Ñ­»·µãÁÁÏÂÒ»¸öLED ;ÖжϷþÎñ³ÌÐò

;½«ÊäÈëµÄ¹¦ÄܼüÈ¡³öÖÁAL ;ÈôΪ1Êä³ö·½²¨ ;ÈôΪ2Êä³öÈý½Ç²¨

;ÈôΪ3Êä³öÕýÏÒ²¨

;ÈôΪ4ÔòÌøµ½X5 ;ÈôΪ5ÔòÍ˳ö ;±ê־λÖÃ1 ;·½²¨²úÉú³ÌÐò ;½«¼ÆÊýÖµ·ÅÈëSI

;½«Êä³öµÄÊýÖµ·ÅÈëAL ;½«Êä³öֵдÈë0832 µÚ15Ò³