實驗七:
;Tio.asm
;基本I/O接口電路設計實驗
;***************根據CHECK配置信息修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
IOY1 EQU 0A040H ;片選IOY1對應的端口始地址
;*****************************************************************
MYIO_A EQU IOY0+00H*4 ;基本輸入輸出單元A組端口地址
MYIO_B EQU IOY1+00H*4 ;基本輸入輸出單元B組端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MYIO_A ;讀寫基本I/O單元A組的端口
IN AL,DX
OUT DX,AL
MOV DX,MYIO_B ;讀寫基本I/O單元B組的端口
IN AL,DX
OUT DX,AL
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ START ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;返回到DOS
INT 21H
CODE ENDS
END START
實驗八:
;T138.asm
;地址譯碼電路設計實驗
;***************根據CHECK配置信息修改下列符號值*******************
IOY0 EQU 9C00H ;片選IOY0對應的端口始地址
;*****************************************************************
Y6 EQU IOY0+0C0H ;譯碼電路輸出Y6對應的端口地址
Y7 EQU IOY0+0E0H ;譯碼電路輸出Y7對應的端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,Y6 ;讀寫片選接Y6的端口
IN AL,DX
OUT DX,AL
MOV DX,Y7 ;讀寫片選接Y7的端口
IN AL,DX
OUT DX,AL
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ START ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;返回到DOS
INT 21H
CODE ENDS
END START
實驗九:
;Led.asm
;LED顯示實驗
;***************根據CHECK配置信息修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
IOY1 EQU 0A040H ;片選IOY1對應的端口始地址
;*****************************************************************
MYIO_A EQU IOY0+00H*4 ;基本輸入輸出單元A組端口地址
MYIO_B EQU IOY1+00H*4 ;基本輸入輸出單元B組端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MYIO_B
MOV AL,00H
OUT DX,AL
MOV DX,MYIO_A ;操作LED行顯示
MOV BL,01H
MOV CX,8
LOOP1: MOV AL,BL
OUT DX,AL
ROL BL,1
CALL DALLY
LOOP LOOP1
MOV DX,MYIO_A
MOV AL,0FFH
OUT DX,AL
MOV DX,MYIO_B ;操作LED列顯示
MOV BL,0FEH
MOV CX,8
LOOP2: MOV AL,BL
OUT DX,AL
ROL BL,1
CALL DALLY
LOOP LOOP2
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ START ;無按鍵則跳回繼續循環,有則退出
MOV DX,MYIO_A
MOV AL,00H
OUT DX,AL
QUIT: MOV AX,4C00H ;返回到DOS
INT 21H
DALLY PROC NEAR ;軟件延時子程序
PUSH CX
PUSH AX
MOV CX,3FFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
實驗十一:
;T8255-1.asm
;8255基本輸入輸出實驗
;****************根據查看端口資源修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
;*****************************************************************
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,82H ;工作方式0,A口輸出,B口輸入
OUT DX,AL
LOOP1: MOV DX,MY8255_B ;讀B口
IN AL,DX
MOV DX,MY8255_A ;寫A口
OUT DX,AL
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
CODE ENDS
END START
;T8255-2.asm
;8255流水燈顯示實驗
;****************根據查看端口資源修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
;*****************************************************************
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
LA DB ? ;定義數據變量
LB DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE ;定義8255工作方式
MOV AL,80H ;工作方式0,A口和B口爲輸出
OUT DX,AL
MOV DX,MY8255_A ;寫A口發出的起始數據
MOV AL,80H
OUT DX,AL
MOV LA,AL
MOV DX,MY8255_B ;寫B口發出的起始數據
MOV AL,01H
OUT DX,AL
MOV LB,AL
LOOP1: CALL DALLY
MOV AL,LA ;將A口起始數據右移再寫入A口
ROR AL,1
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL
MOV AL,LB ;將B口起始數據左移再寫入B口
ROL AL,1
MOV LB,AL
MOV DX,MY8255_B
OUT DX,AL
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
DALLY PROC NEAR ;軟件延時子程序
PUSH CX
PUSH AX
MOV CX,3FFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
實驗十二
;T0809.asm
;A/D轉換實驗
;****************根據查看端口資源修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
;*****************************************************************
AD0809 EQU IOY0+00H ;AD0809的端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
STR1 DB 'AD0809:IN0 $' ;定義顯示的字符串
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LOOP1: MOV DX,AD0809 ;啓動A/D轉換
OUT DX,AL
CALL DALLY
MOV DX,OFFSET STR1 ;顯示字符串AD0809:IN0
MOV AH,9
INT 21H
MOV DX,AD0809 ;讀出轉換結果
IN AL,DX
MOV CH,AL ;分析結果進行顯示
AND AL,0F0H
MOV CL,04H
SHR AL,CL ;取出數據的十位
CMP AL,09H
JG A1
ADD AL,30H
JMP A2
A1: ADD AL,37H ;對A~F的處理
A2: MOV DL,AL ;對0~9的處理
MOV AH,02H
INT 21H
MOV AL,CH
AND AL,0FH ;取出數據的個位
CMP AL,09H
JG A3
ADD AL,30H
JMP A4
A3: ADD AL,37H ;對A~F的處理
A4: MOV DL,AL ;對0~9的處理
MOV AH,02H
INT 21H
MOV DL,0DH ;回車,置光標到行首
MOV AH,02H
INT 21H
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
DALLY PROC NEAR ;軟件延時子程序
PUSH CX
PUSH AX
MOV CX,4000H
D1: MOV AX,0600H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
實驗十三
;T0832-1.asm
;D/A轉換實驗,產生方波
;****************根據查看端口資源修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
;*****************************************************************
DA0832 EQU IOY0+00H*4 ;DA0832的端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
STR1 DB 'DA0832: Square Wave $' ;定義顯示的字符串
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1 ;顯示字符串
MOV AH,9
INT 21H
LOOP1: MOV DX,DA0832 ;寫00H,輸出低電平
MOV AL,00H
OUT DX,AL
CALL DALLY
MOV DX,DA0832 ;寫7FH,輸出高電平
MOV AL,7FH
OUT DX,AL
CALL DALLY
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
DALLY PROC NEAR ;軟件延時子程序
PUSH CX
PUSH AX
MOV CX,0050H
D1: MOV AX,5000H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
;T0832-2.asm
;D/A轉換實驗,產生鋸齒波
;****************根據查看端口資源修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
;*****************************************************************
DA0832 EQU IOY0+00H*4 ;DA0832的端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
STR1 DB 'DA0832: JUCHI Wave $' ;定義顯示的字符串
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1 ;顯示字符串
MOV AH,9
INT 21H
LOOP1: MOV AL,00H ;D/A轉換起始值
UP: MOV DX,DA0832 ;啓動D/A轉換
OUT DX,AL
CALL DALLY
INC AL
CMP AL,7FH
JNE UP
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
DALLY PROC NEAR ;軟件延時子程序
PUSH CX
PUSH AX
MOV CX,0010H
D1: MOV AX,0100H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
;T0832-2.asm
;D/A轉換實驗,產生三角波
;****************根據查看端口資源修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的端口始地址
;*****************************************************************
DA0832 EQU IOY0+00H*4 ;DA0832的端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
STR1 DB 'DA0832: Triangle Wave $' ;定義顯示的字符串
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1 ;顯示字符串
MOV AH,9
INT 21H
LOOP1: MOV AL,00H ;D/A轉換起始值
UP: MOV DX,DA0832 ;啓動D/A轉換
OUT DX,AL
CALL DALLY
INC AL
CMP AL,7FH
JNE UP
DOWN: MOV DX,DA0832
OUT DX,AL
CALL DALLY
DEC AL
CMP AL,00H
JNE DOWN
MOV AH,1 ;判斷是否有按鍵按下
INT 16H
JZ LOOP1 ;無按鍵則跳回繼續循環,有則退出
QUIT: MOV AX,4C00H ;結束程序退出
INT 21H
DALLY PROC NEAR ;軟件延時子程序
PUSH CX
PUSH AX
MOV CX,0010H
D1: MOV AX,0100H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START