ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/10/4 11:20:25ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£
¿É±à¼°æ
ʵÑé°Ë ¿É±à³Ì¶¨Ê±Æ÷£¯¼ÆÊýÆ÷£¨ 8253/8254 £©
Ò»¡¢ÊµÑéÄ¿µÄ
Ñ§Ï°ÕÆÎÕ8253ÓÃ×÷¶¨Ê±Æ÷µÄ±à³ÌÔÀí£»
¶þ¡¢ÊµÑéÔÀíºÍÄÚÈÝ
£¨Ò»£©ÊµÑéÔÀí
8253ºÍ8254¶¼Êǿɱà³Ì¼ÆÊýÆ÷£¬ËüÃǵÄÒý½Å¼æÈÝ£¬¹¦ÄÜÓëʹÓ÷½·¨Ïàͬ¡£8254ÊÇ8253µÄ¸Ä½øÐÍ¡£
1£®8253³õʼ»¯
ʹÓÃ8253ǰ£¬Òª½øÐгõʼ»¯±à³Ì¡£³õʼ»¯±à³ÌµÄ²½ÖèÊÇ£º
¢Ù Ïò¿ØÖƼĴæÆ÷¶Ë¿ÚдÈë¿ØÖÆ×Ö¶ÔʹÓõļÆÊýÆ÷¹æ¶¨ÆäʹÓ÷½Ê½µÈ¡£ ¢Ú ÏòʹÓõļÆÊýÆ÷¶Ë¿ÚдÈë¼ÆÊý³õÖµ¡£
2£®8253¿ØÖÆ×Ö
D7D6£½00£ºÊ¹ÓÃ0ºÅ¼ÆÊýÆ÷£¬D7D6£½01£ºÊ¹ÓÃ1ºÅ¼ÆÊýÆ÷ D7D6£½10£ºÊ¹ÓÃ2ºÅ¼ÆÊýÆ÷£¬D7D6£½11£ºÎÞЧ D5D4£½00£ºËø´æµ±Ç°¼ÆÊýÖµ
D5D4£½01£ºÖ»Ð´µÍ8루¸ß8λΪ0£©£¬¶Á³öʱֻ¶ÁµÍ8λ D5D4£½10£ºÖ»Ð´¸ß8루µÍ8λΪ0£©£¬¶Á³öʱֻ¶Á¸ß8λ D5D4£½11£ºÏȶÁ/дµÍ8룬ºó¶Á/д¸ß8λ¼ÆÊýÖµ
D3D2D1£½000£ºÑ¡Ôñ·½Ê½0£¬D3D2D1£½001£ºÑ¡Ôñ·½Ê½1 D3D2D1£½X10£ºÑ¡Ôñ·½Ê½2£¬D3D2D1£½X11£ºÑ¡Ôñ·½Ê½3 D3D2D1£½100£ºÑ¡Ôñ·½Ê½4£¬D3D2D1£½101£ºÑ¡Ôñ·½Ê½5 D0£½0£º¼ÆÊý³õֵΪ¶þ½øÖÆ£¬D0£½1£º¼ÆÊý³õֵΪBCDÂëÊý
£¨¶þ£©ÊµÑéÄÚÈÝ
1£®Íê³ÉÒ»¸öÒôÀÖ·¢ÉúÆ÷£¬Í¨¹ýÀ®°È»ò·äÃùÆ÷·Å³öÒôÀÖ£¬²¢ÔÚÊýÂë¹ÜÉÏÏÔʾÀ֯ס£
2£®À©Õ¹²¿·Ö£ºÀûÓÃС¼üÅÌʵÏÖµ¯ÇÙ¹¦ÄÜ£¬²¢ÏÔʾµ¯×àµÄÀ֯ס£ ×¢Ò⣺8253ÊäÈëÆµÂÊӦСÓÚ2MHz¡£
3¡¢½ÓÏߣº CS /8253 ½Ó Y0 /IO µØÖ·
GATE0 /8253 ½Ó +5V CLK0 /8253 ½Ó 1MʱÖÓ
WordÍêÃÀ¸ñʽ
¿É±à¼°æ
OUT0 /8253 ½Ó À®°È»ò·äÃùÆ÷
Èý¡¢Ó²¼þ½ÓÏßͼºÍÈí¼þ³ÌÐòÁ¬½Óͼ
1¡¢Ó²¼þ½ÓÏßͼ
2.Èí¼þÁ÷³Ìͼ
WordÍêÃÀ¸ñʽ
¿É±à¼°æ
¿ªÊ¼ ³õʼ»¯8254 8255£¬A¿Ú½ÓÊýÂë¹ÜÏÔʾ£¬B¿ÚλѡÊýÂë¹Ü£¬C¿Ú½ÓС¼üÅÌÊäÈë ɨÃè¼üÅÌ ÅжÏÊäÈë ÊäÈëΪ0 ÊäÈë1~8 ÊäÈëΪ9 ²¥·ÅÒôÀÖ£¬ÊýÂë¹ÜÏÔʾÏàÓ¦µÄÒô·û ·¢³ö¶ÔÓ¦µÄÒô£¬ÊýÂë¹ÜÏÔʾÒô·û ϨÃðÊýÂë¹Ü£¬·µ»Ødos ·ñ ÊÇ·ñ²¥·Å½áÊø °´¼üÊÇ·ñµ¯Æð ÊÇ ÊÇ Í£Ö¹·¢Òô£¬³õʼ»¯8254 ½áÊø
ËÄ¡¢Ô´³ÌÐò
DATA SEGMENT
FENPIN DW 0001H,3906,3472,3125,2932,2604,2344,2083,1953 ;·ÖƵ±È DIGITAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;ÊýÂë¹Ü MUSIC DB 1,2,3,1,1,2,3,1,0,3,4,5,0,3,4,5,0,5,6,5,4,3,1,0,5,6,5,4,3,1,0,1,5,1,0,1,5,1,0 ;´æ·Å²¥·ÅµÄÀÖÇúÒô·û
NUM DB 00H,070H,0B0H,0D0H,0E0H ;¼ì²â¼üÅÌÊäÈë DATA ENDS
STACK SEGMENT STACK 'STACK'
WordÍêÃÀ¸ñʽ
¿É±à¼°æ
DB 100 DUP(?) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
DELAY PROC NEAR ;ÑÓʱ×Ó³ÌÐò PUSH CX
MOV CX,100H WAIT0: LOOP WAIT0 POP CX RET DELAY ENDP
DELAY1 PROC NEAR ; PUSH MOV WAIT1: LOOP POP RET DELAY1 ENDP
KEY PROC NEAR ; PUSH AX ; PUSH CX PUSH DX MOV CX,01H
CHECK: MOV DX,28AH ;C MOV BX,OFFSET NUM ADD BX,CX MOV AL,[BX] OUT DX,AL
IN AL,DX ; MOV AH,AL CALL DELAY IN AL,DX
CMP AL,AH ; JNZ CHECK ; AND AL,0FH ; CMP AL,0FH JZ NEXT CMP AL,0EH JZ NEXT1 CMP AL,0DH
ÑÓʱ×Ó³ÌÐò2 CX
CX,0FFFFH WAIT1 CX »ñÈ¡¼üÅÌÊäÈëÖµµÄ×Ó³ÌÐò ±£»¤ÏÖ³¡ ¿ÚµØÖ·¸øDX ÅжÏÊÇ·ñÓмüÅ̰´Ï ·À¶¶
²»ÏàµÈ˵Ã÷Ϊ¶¶¶¯£¬ÖØÐ¼ì²âÅжϰ´ÏµÄÁÐ WordÍêÃÀ¸ñʽ
¿É±à¼°æ
JZ NEXT2 CMP AL,0BH JZ NEXT3 MOV BX,01H JMP GOT
NEXT: INC CX ;Ð޸ıäÁ¿É¨ÃèÏÂÒ»ÐÐ CMP CX,05H JNZ JUMP1 MOV CX,01H JUMP1: JMP CHECK NEXT1: MOV BX,04H JMP GOT NEXT2: MOV BX,03H JMP GOT NEXT3: MOV BX,02H
GOT: SUB CX,01H ; MOV AL,CL MOV DL,04H MUL DL ADD BL,AL
SUB BL,01H ; POP DX ; POP CX POP AX RET KEY ENDP
START: MOV MOV MOV DX,283H ;8253 MOV AL,36H OUT DX,AL
MOV DX,28BH ;8255 MOV AL,81H ;C OUT DX,AL
MOV MOV AL,01H OUT DX,AL
LOOP1: CALL KEY ; CMP BX,0 ; JZ PLAY0
CMP BX,9 ; JZ EXIT
MOV CX,BX ; ¼ÆË㰴ϼüÅ̵ÄÊýÖµ ´ËʱBXÖÐËù´æ¼´Îª¶ÔÓ¦µÄÆ«ÒÆÁ¿»Ö¸´ÏÖ³¡ AX,DATA DS,AX
³õʼ»¯ ³õʼ»¯ ¿ÚÊäÈë DX,289H ;B¿ÚλѡÊýÂë¹Ü ɨÃè¼üÅÌ
°´0²¥·ÅÒôÀÖ °´9Í˳ö °´1~8·¢³ö¶ÔÓ¦Òô
WordÍêÃÀ¸ñʽ