現代電腦介面實驗 (三)8255實驗

來源:互聯網
上載者:User

標籤:

1、A 口工作在方式0 輸入方式,接8 個開關,B 口工作在方式0 輸出方式,接8 個LED, PC7 接單脈衝發生器,輸入負脈衝時,讀一次A 口,存在TABLE 單元中,同時在B 口顯示,讀10 次結束。

;8255cs  288H~28BH
 ;pc7凹
 ;pB7~pB0-L7~L0
 ;pa7~pa0-k7~k0
 ;
 ;
 DATA SEGMENT
    PA EQU 288H
    PB EQU 289H
    PC EQU 28AH
    CTL55 EQU 28BH
    LTABLE DB 10 DUP(?)
DATA ENDS

STACK1 SEGMENT PARA STACK
    DW 20H DUP(0)
STACK1 ENDS

CSEG SEGMENT 
    ASSUME CS:CSEG,DS:DATA

START:
    MOV AX,DATA
    MOV DS,AX
    MOV CX,10
    MOV SI,0
    MOV DX,CTL55
    MOV AL,10011000B
    OUT DX,AL

WAT:   
    MOV DX,PC ;讀C口
    IN AL,DX
    AND AL,80H ;檢測PC7
    JNZ WAT

    MOV DX,PA ;PC7=0,讀A口
    IN AL,DX
    MOV DX,PB ;送B口
    OUT DX,AL 
    MOV LTABLE[SI],AL;將讀取的開關值存放到記憶體單元TABLE中
    INC SI

WAT1:    
    MOV DX,PC ;讀C口
    IN AL,DX
    AND AL,80H ;檢測PC7
    JZ WAT1
    LOOP WAT
    MOV AH,4CH
    INT 21H
CSEG ENDS
    END START

 

2、A 口工作在方式0 輸入方式,接8 個開關,B 口工作在方式0 輸出方式,接

8 個LED, PC0 接產生1s脈衝的8253, 8253 輸入負脈衝時,讀一次A 口,同時在B 口顯示。

 ;8255cs  288H~28BH

 ;8253cs-280H~283H
 ;CLK0-2MHZ  ; CLK1-OUT0;  OUT1-PC0;
 ;pB7~pB0-L7~L0
 ;pa7~pa0-k7~k0
 ;
 ;
 DATA SEGMENT
    T0 EQU 280H ;T0--CTL為計數器0--控制寄存器的地址
    T1 EQU 281H
    T2 EQU 282H
    CTL1 EQU 283H
    PA EQU 288H
    PB EQU 289H
    PC EQU 28AH
    CTL55 EQU 28BH
    LTABLE DB 10 DUP(?)
 
DATA ENDS

STACK1 SEGMENT PARA STACK
    DW 20H DUP(0)
STACK1 ENDS

CSEG SEGMENT 
    ASSUME CS:CSEG,DS:DATA

START:
    MOV AX,DATA
    MOV DS,AX
 
    MOV DX,CTL55
    MOV AL,10010001B;PC上輸出PC下輸入
    OUT DX,AL
    CALL Init_8253
    
WAT:   
 
    MOV DX,PC ;讀C口
    IN AL,DX
    AND AL,01H ;檢測PC0
    JNZ WAT

    MOV DX,PA ;PC7=0,讀A口
    IN AL,DX
    MOV DX,PB ;送B口
    OUT DX,AL

WAT1:     
    MOV DX,PC ;讀C口
    IN AL,DX
    AND AL,01H ;檢測PC0
    JZ WAT1

    JMP WAT
    MOV AH,4CH
    INT 21H;初始化8253
Init_8253 PROC
    PUSH DX
    PUSH AX
    ;/*8253產生1s的連續方波
    MOV DX,CTL1
    MOV AL,00100101B ;選擇通道0,寫入高位元組,方式2,用BCD碼
    OUT DX,AL
    MOV DX,T0
    MOV AL,20H
    OUT DX,AL
 
    MOV DX,CTL1
    MOV AL,01100111B ;選擇通道1,寫入高位元組,方式3,用BCD碼
    OUT DX,AL
    MOV DX,T1
    MOV AL,10H
    OUT DX,AL
    ;8253產生1S的連續方波*/

    POP AX
    POP DX
    RET
Init_8253 ENDP
CSEG ENDS
    END START

 

 

3、A 口工作在方式0,輸入,接8 個開關,B 口工作在方式0,輸出,接八段

顯示器;由8253 產生1S 的脈衝,PC7 接該脈衝,來個脈衝將讀取A 口,顯示在

螢幕上,同時;顯示在八段顯示器上,PC0,PC1 作為位碼訊號。

 ;8253cs-280H~283H
;8255cs288H~28BH
;8255pa7pa0-k7-k0;pb6~b0-gfedcba
;CLK0-2MHZ  ; CLK1-OUT0;  OUT1-PC7;PC0-S0;PC1-S1; 
;
DATA SEGMENT
    T0 EQU 280H ;T0--CTL為計數器0--控制寄存器的地址
    T1 EQU 281H
    T2 EQU 282H
    CTL1 EQU 283H
    PA EQU 288H
    PB EQU 289H
    PC EQU 28AH
    CTL EQU 28BH
    LTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 
                DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
                ;儲存0~F的段碼
    DAT DB 21H
DATA ENDS

CODE SEGMENT 
    ASSUME CS:CODE,DS:DATA

;主程式
START:
    MOV AX,DATA
    MOV DS,AX

    CALL Init_8253
    CALL Init_8255
AGAIN:
    CALL READ_PA
    CALL DISP_DAT
    JMP AGAIN

    MOV AH,4CH
    INT 21H

;數位顯示字元程式
LED_1 PROC 
    LEA SI,LTABLE
    ADD SI,BX
    MOV AL,[SI]
    AND AL,7FH ;最高位設為0,以不顯示小數點
    MOV DX,PB
    OUT DX,AL
    RET
LED_1 ENDP

LED_S PROC
    PUSH CX
    PUSH BX;儲存

    MOV DX,PC ;熄位碼
    MOV AL,0H
    OUT DX,AL;數位管熄滅
   

    MOV BH,0
    AND BL,0FH ;顯示低四位~8421~0-F
    CALL LED_1
    MOV DX,PC ;選擇低四位,即PC0置為1
    MOV AL,1H
    OUT DX,AL
    
    MOV DX,PC ;熄位碼
    MOV AL,0H
    OUT DX,AL;數位管熄滅

    POP BX;調回儲存的數,備用
    PUSH BX;重新儲存

    MOV BH,0
    MOV CL,4
    SHR BL,CL
    AND BL,0FH ;顯示高四位
    CALL LED_1
    MOV DX,PC ;選擇高四位,即PC1置為1
    MOV AL,02H
    OUT DX,AL

    MOV DX,PC ;熄位碼
    MOV AL,0H
    OUT DX,AL

    POP BX
    POP CX
    RET
LED_S ENDP

;讀取A口資料
READ_PA PROC
    PUSH DX
    PUSH AX

LOOP_CHECK:
    MOV BH,0
    MOV BL,DAT
    CALL LED_S
    MOV DX,PC ;8255 C口讀入
    IN AL,DX
    TEST AL,80H ;判斷1s脈衝
    JNZ LOOP_CHECK
    MOV DX, PA
    IN AL,DX
    MOV DAT,AL

    POP AX
    POP DX
    RET
READ_PA ENDP

;電腦終端顯示字元程式
DISP_DAT PROC
    PUSH DX
    PUSH AX
    PUSH CX

    MOV AL,DAT
    MOV CL,4
    SHR AL,CL
    AND AL,0FH

    CMP AL,0AH;和10比較
    JC S1;BCD碼 修正 ;〈10直接S1
    ADD AL,7H;>9 要+7,用於進位
S1:
    ADD AL,30H;加上0的ASCII碼
    MOV DL,AL ;高四位顯示在螢幕上
    MOV AH,02H
    INT 21H

    MOV AL,DAT
    AND AL,0FH
    CMP AL,0AH
    JC S2
    ADD AL,7H
S2:
    ADD AL,30H
    MOV DL,AL ;低四位顯示在螢幕上
    MOV AH,02H
    INT 21H
    MOV DL,‘ ‘ ;顯示空格
    MOV AH,02H
    INT 21H

    POP CX
    POP AX
    POP DX
    RET
DISP_DAT ENDP

;初始化8253
Init_8253 PROC
    PUSH DX
    PUSH AX
    ;/*8253產生1s的連續方波
    MOV DX,CTL1
    MOV AL,00100101B ;選擇通道0,寫入高位元組,方式2,用BCD碼
    OUT DX,AL
    MOV DX,T0
    MOV AL,20H
    OUT DX,AL
    ;
    MOV DX,CTL1
    MOV AL,01100111B ;選擇通道1,寫入高位元組,方式3,用BCD碼
    OUT DX,AL
    MOV DX,T1
    MOV AL,10H
    OUT DX,AL
    ;8253產生1S的連續方波*/

    POP AX
    POP DX
    RET
Init_8253 ENDP

;初始化8255
Init_8255 PROC
    PUSH DX
    PUSH AX

    MOV DX,CTL ;8255方式字控制字控制;10011000
    MOV AL,98H
    OUT DX,AL

    POP AX
    POP DX
    RET
Init_8255 ENDP

CODE ENDS
    END START

 

4、A 口工作在方式0 輸入方式,接4 個開關,B 口工作在方式0 輸出方式,

接1 個七段顯示器,PC7 接單脈衝發生器,輸入負脈衝時,讀一次A 口,同時

在B 口顯示,讀16 次結束。

 ;8253cs-280H~283H
;8255cs288H~28BH
;8255pa3pa0-k3-k0;pb6~b0-gfedcba
;8255PC7-凹,PC0-S1;
;
DATA SEGMENT
    T0 EQU 280H ;T0--CTL為計數器0--控制寄存器的地址
    T1 EQU 281H
    T2 EQU 282H
    CTL1 EQU 283H
    PA EQU 288H
    PB EQU 289H
    PC EQU 28AH
    CTL EQU 28BH
    LTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 
                DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
                ;儲存0~F的段碼
    DAT DB 21H
DATA ENDS

CODE SEGMENT 
    ASSUME CS:CODE,DS:DATA

;主程式
START:
    MOV AX,DATA
    MOV DS,AX
    
    MOV CX,16
    CALL Init_8255
AGAIN:
    CALL READ_PA
    CALL DISP_DAT
    LOOP  AGAIN

    MOV AH,4CH
    INT 21H

;數位顯示字元程式
LED_1 PROC 
    LEA SI,LTABLE
    ADD SI,BX
    MOV AL,[SI]
    AND AL,7FH ;最高位設為0,以不顯示小數點
    MOV DX,PB
    OUT DX,AL
    RET
LED_1 ENDP

LED_S PROC
    PUSH CX
    PUSH BX;儲存
    MOV DX,PC ;熄位碼
    MOV AL,0H
    OUT DX,AL;數位管熄滅
   

    MOV BH,0
    AND BL,0FH ;顯示低四位~8421~0-F
    CALL LED_1
    MOV DX,PC ;選擇低四位,即PC0置為1
    MOV AL,1H
    OUT DX,AL
    
    MOV DX,PC ;熄位碼
    MOV AL,0H
    OUT DX,AL;數位管熄滅

   ; POP BX;調回儲存的數,備用
   ; PUSH BX;重新儲存

    
    POP BX
    POP CX
    RET
LED_S ENDP

;讀取A口資料
READ_PA PROC
    PUSH DX
    PUSH AX
    PUSH CX

LOOP_CHECK:
    MOV BH,0
    MOV BL,DAT
    CALL LED_S
    MOV DX,PC ;8255 C口讀入
    IN AL,DX
    TEST AL,80H ;判斷PC7
    JNZ LOOP_CHECK
    
    MOV DX,PA
    IN AL,DX
    MOV DAT,AL
   
   LOOP_C:
    MOV BH,0
    MOV BL,DAT
    CALL LED_S
    MOV DX,PC ;8255 C口讀入
    IN AL,DX
    TEST AL,80H ;判斷PC7
    JZ  LOOP_C
   
   
    POP CX
    POP AX
    POP DX
    RET
READ_PA ENDP

;電腦終端顯示字元程式
DISP_DAT PROC
    PUSH DX
    PUSH AX
    PUSH CX

    MOV AL,DAT
    MOV CL,4
    SHR AL,CL
    AND AL,0FH

    CMP AL,0AH;和10比較
    JC S1;BCD碼 修正 ;〈10直接S1
    ADD AL,7H;>9 要+7,用於進位
S1:
    ADD AL,30H;加上0的ASCII碼
    MOV DL,AL ;高四位顯示在螢幕上
    MOV AH,02H
    INT 21H

    MOV AL,DAT;DFFGGFG
    AND AL,0FH
    CMP AL,0AH
    JC S2
    ADD AL,7H
S2:
    ADD AL,30H
    MOV DL,AL ;低四位顯示在螢幕上
    MOV AH,02H
    INT 21H
    MOV DL,‘ ‘ ;顯示空格
    MOV AH,02H
    INT 21H

    POP CX
    POP AX
    POP DX
    RET
DISP_DAT ENDP

 

;初始化8255
Init_8255 PROC
    PUSH DX
    PUSH AX

    MOV DX,CTL ;8255方式字控制字控制;10011000
    MOV AL,98H
    OUT DX,AL

    POP AX
    POP DX
    RET
Init_8255 ENDP

CODE ENDS
    END START

現代電腦介面實驗 (三)8255實驗

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.