標籤:
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實驗