1. 程式人生 > 其它 >西電網信院微機原理實驗(七)

西電網信院微機原理實驗(七)

實驗七 基於8255的開關狀態顯示實驗

1、編寫程式,設定8255的PA口為開關量輸入,PC口為開關量輸出,要求能隨時將PA口的開關狀態通過PC口的發光二極體顯示出來。

8255晶片:

圖1 8255晶片引腳圖

  CPU對8255的讀/寫操作,是對哪個埠的讀/寫操作,是通過CS,A1和A0三個引腳的狀態來識別的,讀寫操作是通過WR和RD訊號控制的。

表1 8255 的定址

  8255有三種基本工作方式,A組可採用方式0到方式2,而B組只能採用方式0和方式1,這是由8255的方式控制暫存器控制。

題目分析:
  假設8255的埠地址為0200H(埠A),0202H(埠B),0204H(埠C),0206H(控制埠)。CPU地址線A2連線8255引腳A1,CPU地址線A1連線8255引腳A0。

  a) 設定8255引腳A1=1,A0=1,當D0—D7輸入為1001 0000B,即為90H時,控制方式為A組工作方式為方式0,表示基本的輸入/輸出操作。A口表示輸入,C口表示輸出。
  b) 設定8255引腳A1=0,A0=0,選中埠A,接受輸入,D0—D7為A埠輸入值。
  c) 設定8255引腳A1=1,A0=0,選中埠C,D0—D7的值將在埠C輸出。
  CPU不斷改變輸出的地址,以便達到將埠A讀入資料輸出到埠C的目的。
  由於發光二極體採用共陽極接法,故將埠A讀入資料取反後輸出到埠C。

彙編程式碼:

CODE SEGMENT
   ASSUME CS:CODE
START:        
   MOV AL,90H ;
控制A輸入C輸出 MOV DX,206H OUT DX,AL RUN: MOV AL, 0H MOV DX, 200H IN AL, DX ;埠A讀入 NOT AL MOV DX, 204H OUT DX, AL ;埠C輸出 JMP RUN CODE ENDS END START

電路連線圖:

實驗部分過程截圖:

2、用8255A實現一電子秒錶,計時範圍0-99.99秒,應具有“START”,“STOP”,“CLEAR”三個按鍵,分別完成開始,停止,清零功能。

題目分析:

  假設8255的埠地址為0200H(埠A),0202H(埠B),0204H(埠C),0206H(控制埠)。CPU地址線A2連線8255引腳A1,CPU地址線A1連線8255引腳A0。

  初始化:設定8255引腳A1=1,A0=1,當D0—D7輸入為1000 1001B,即為89H時,控制方式為A組工作方式為方式0,B組為方式0,表示基本的輸入/輸出操作。A口表示輸出,B口表示輸出,C口表示輸入。
  設定埠地址為0202H,即選中埠B時,準備輸出AL=40H,數字0。
  START:在埠地址0200H,依次輸出AL=0001B、0010B、0100B、1000B選中1,2,3,4數碼管。在埠地址0202H,依次輸出0到9的數字。每一次四個數碼管顯示結束,都需要判斷是否出現進位。
  判斷按鍵狀態:設定埠地址0204H,讀入C埠的資料,從而判斷此時按鍵的狀態。
  STOP:通過判斷C埠的資料,當輸入為 0000 0110 時,表示暫停。此時顯示當前計時即可。當檢測到C埠輸入為 0000 0101 時,表示繼續計時。
  CLEAR:當C埠輸入為0000 0011時,數碼管上的數字全部清零,重新開始計時。

電路連線說明:

程式流程圖:

彙編程式碼:

DATA SEGMENT
    NUMBER DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
    MIN1 DB 0
    MIN2 DB 0
    SEC1 DB 0
    SEC2 DB 0
    CIR DW 800
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX, DATA
    MOV DS, AX
    MOV AL, 89H
    MOV DX, 206H  ;初始化
    OUT DX, AL    ;A,B輸出,C輸入
    MOV BX, 0H  
    LEA SI, NUMBER
    
OUTPUT: 
    MOV AL, 00000001B
    MOV DX, 200H    ;選中第4個數碼管
    OUT DX, AL    
    MOV BL, SEC2    ;輸出SEC2
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S4:
    LOOP S4
    
    MOV AL, 00000010B
    MOV DX, 200H    ;選中第3個數碼管
    OUT DX, AL              
    MOV BL, SEC1
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S3:
    LOOP S3
    
    MOV AL, 00000100B
    MOV DX, 200H    ;選中第2個數碼管
    OUT DX, AL              
    MOV BL, MIN2
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S2:
    LOOP S2
    
    MOV AL, 00001000B
    MOV DX, 200H    ;選中第3個數碼管
    OUT DX, AL              
    MOV BL, MIN1
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S1:
    LOOP S1      
    ;四個數碼管顯示結束,判斷C埠狀態
    MOV DX, 204H
    IN AL, DX
    CMP AL, 06H
    JE STOP    ;STOP暫停計時
    CMP AL, 03H 
    JE TAIL1   ;CLEAR清零計時
   
    ;沒有按按鍵或者按了STRAT,增加秒數並判斷是否進位
    INC SEC2                            
    CMP SEC2, 10
    JNZ OUTPUT
    
    ;SEC2 = 10,進位
    MOV SEC2, 0H
    INC SEC1
    CMP SEC1, 10
    JNZ OUTPUT
    
    ;SEC1 = 10,進位
    MOV SEC1, 0H
    INC MIN2
    CMP MIN2, 10
    JNZ OUTPUT
    
    ;MIN2 = 10, 進位
    MOV MIN2, 0H
    INC MIN1
    CMP MIN1, 10
    JNZ OUTPUT
    
    ;MIN1 = 10,清零
    MOV MIN1, 0H
    JMP OUTPUT

STOP:
    MOV AL, 00000001B
    MOV DX, 200H    ;選中第4個數碼管
    OUT DX, AL          
    MOV BL, SEC2
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S8:
    LOOP S8
    
    MOV AL, 00000010B
    MOV DX, 200H    ;選中第3個數碼管
    OUT DX, AL          
    MOV BL, SEC1
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S7:
    LOOP S7
    
    MOV AL, 00000100B
    MOV DX, 200H    ;選中第2個數碼管
    OUT DX, AL          
    MOV BL, MIN2
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S6:
    LOOP S6
    
    MOV AL, 00001000B
    MOV DX, 200H    ;選中第1個數碼管
    OUT DX, AL          
    MOV BL, MIN1
    MOV AL, [SI+BX]
    MOV DX, 202H
    OUT DX, AL
    MOV CX, CIR
S5:
    LOOP S5 
    ; 判斷是繼續計時、暫停還是清零
    MOV DX, 204H
    IN AL, DX
    CMP AL, 05H ;START按鍵按下
    JE  OUTPUT
    CMP AL, 03H ;CLEAR按鍵按下
    JE TAIL2
    JMP STOP

TAIL1:
    CALL ZERO
    JMP OUTPUT     
TAIL2:
    CALL ZERO
    JMP STOP    
ZERO PROC
    MOV SEC2, 0H
    MOV SEC1, 0H
    MOV MIN1, 0H
    MOV MIN2, 0H
    RET
ZERO ENDP
CODE ENDS
END START

電路連線圖:

實驗部分過程截圖:

參考文獻:

《微型計算機原理及應用(第三版)》李伯成、侯伯亨等編著