《微機原理接口與技術》(8086彙編)期末考試、考研常見考題、習題,題型彙總、知識點總結、專周(十二)

實驗三:並行接口芯片8255A的應用

實驗器材:
在這裏插入圖片描述

電路圖:
在這裏插入圖片描述
仿真視頻:

《微機原理接口與技術》(8086彙編)期末考試、考研常見考題、習題,題型彙總、知識點總結、專周(十二)之並行接口芯片8255A的應用

程序源碼:

;author:liuxianfei0810
IO3 EQU 0030H
CODE  SEGMENT 'CODE'
    ASSUME CS:CODE,DS:CODE
MAIN PROC FAR
START:MOV AX,CODE
      MOV DS,AX
	  ;author:liuxianfei0810
L:    MOV AL,10000001B
; D7:置放向字1有效 D6-5:方式0 D4:端口A輸出
; D3:端口C上半部分輸出 D2:方式0 D1:端口B輸出 D0:端口C下半部分輸入
; 端口C上半部分 PC7-4  
      MOV DX,IO3+6;0110 數據總線->控制字寄存器 配合OUT指令
      OUT DX,AL
	  ;author:liuxianfei0810
      MOV DX,IO3+4;0100 數據總線->端口C 配合OUT指令
      MOV AL,00
      OUT DX,AL;端口C上半部分輸出0000即:PC7-4=0000
	  ;author:liuxianfei0810
	  ;MOV DX,IO3+4;0100 端口C->數據總線  配合IN指令
NOKEY:IN AL,DX    ;採集端口C低 四位數據
      AND AL,0FH  
      CMP AL,0FH  ;判斷是否有按鍵按下
      JZ NOKEY     
      CALL DELAY10;延時消抖
	  ;author:liuxianfei0810
      IN AL,DX    ;進一步 判斷是否有按鍵按下
      MOV BL,0
      MOV CX,4
	  ;author:liuxianfei0810
LP1:  SHR AL,1;右移一位,將最低位移到C標誌中
      JNC LP2  ;判斷C標誌,檢測哪個按鍵按下,檢測到跳轉到LP2
      INC BL   ;狀態標誌加一,用於後續判斷
      LOOP LP1 ;沒檢測到按鍵,繼續檢測
	  ;author:liuxianfei0810
LP2:  MOV AL,10001000B
; D7:置放向字1有效 D6-5:方式0 D4:端口A輸出
; D3:端口C上半部分輸入  D2:方式0 D1:端口B輸出 D0:端口C下半部分輸出
; 端口C上半部分 PC7-4
      MOV DX,IO3+6;0110 數據總線->控制字寄存器 配合OUT指令
      OUT DX,AL
	  ;author:liuxianfei0810
      MOV DX,IO3+4;0100 數據總線->端口C  配合OUT指令
      MOV AL,00   ;端口C下半部分輸出 0000即:PC3-0=0000
      OUT DX,AL
	  ;author:liuxianfei0810
      IN AL,DX  ;採集端口C高 四位數據
      AND AL,0F0H
      CMP AL,0F0H ;判斷是否有按鍵按下
      JZ L		  ;ZF=1 說明無按鍵按下。跳轉到L處,重新檢測按鍵
	  ;author:liuxianfei0810
      MOV BH,0
      MOV CX,4
	  ;author:liuxianfei0810
LP3:  SHL AL,1  ; 左移一位,將最高位送到C中
      JNC LP4   ;判斷C標誌,檢測哪個按鍵按下,檢測到跳轉到LP2
      INC BH
      LOOP LP3
	  ;author:liuxianfei0810
LP4:  MOV AX,4
      MUL BH
      ADD AL,BL
      MOV DX,IO3+2;0010 數據總線->端口B  配合OUT指令
      OUT DX,AL
	  ;author:liuxianfei0810
      MOV BX,OFFSET SEGDATA
      XLAT
      MOV DX,IO3;0000 數據總線->端口A  配合OUT指令
      OUT DX,AL
	  ;author:liuxianfei0810
      MOV CX,0
J1:   LOOP J1;65536*17/fclk
      JMP L
      RET
MAIN  ENDP
;author:liuxianfei0810
;延時子程序
DELAY10 PROC
      MOV CX,882
      LOOP $;一個loop執行週期17個時鐘週期
      RET
DELAY10 ENDP
;共陰數碼管
SEGDATA DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
CODE ENDS
 END START

(有關8255A芯片講解見後文)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章