⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 13_8237.asm

📁 可作为接口实验的参考教材
💻 ASM
字号:
;//****************************************************************
;文件名: 8237 for 8088

;功能: 8237可编程DMA控制实验

;接线: 用导线连接8237模块的CS_8237到CPU模块的200H;
;      8237模块的DMAAEN、AEN互连;
;      用导线连接SRAM模块的CS_RAM到GND。
;//****************************************************************

CH0A   EQU   200H    ;通道0地址寄存器
CH0C   EQU   201H    ;通道0字节计数器
CH1A   EQU   202H    ;通道1地址寄存器
CH1C   EQU   203H    ;通道1字节计数器
COST   EQU   208H    ;状态寄存器/命令寄存器
REQ    EQU   209H    ;请求寄存器
MODE   EQU   20BH    ;模式寄存器
CLRF   EQU   20CH    ;先/后触发器
LACH   EQU   20DH    ;暂存器
MASK   EQU   20FH    ;多通道屏蔽寄存器
;==================================================

Z8279    EQU       239H
D8279    EQU       238H
LEDMOD   EQU       00       ;左边输入,八位显示外部译码八位显示
LEDFEQ   EQU       38H      ;扫描频率
LEDCLS   EQU       0C1H     ;清除显示 RAM
;==================================================

DSEG    SEGMENT
        DIS_BUFFER0   DB  ?      ;显示缓冲0
        DIS_BUFFER1   DB  ?      ;显示缓冲1
        DIS_BUFFER2   DB  ?      ;显示缓冲2
        DIS_BUFFER3   DB  ?      ;显示缓冲3       
        DIS_BUFFER4   DB  ?      ;显示缓冲4
        DIS_BUFFER5   DB  ?      ;显示缓冲5         
        DIS_BUFFER6   DB  ?      ;显示缓冲6
        DIS_BUFFER7   DB  ?      ;显示缓冲7         
DSEG    ENDS

CODE    SEGMENT
        ASSUME  CS: CODE,DS:CODE
START:    
        PUSH   CS        
        POP    DS 
        CALL   INIT8279    ;初始化8279
        
        MOV    AL,0
        MOV    DX,LACH     ;发复位命令
        OUT    DX,AL
        MOV    DX,CLRF     ;清先/后触发器
        OUT    DX,AL
        
        CALL   BUF1
        CALL   DISPLAY
        
;对DMAC(8237)的4个通道的基地址寄存器与当前地址寄存器、基字节数寄存器及当前字节数寄存器先写入FFFFH,
;再读出比较,看读写操作是否正确。若正确,再写入0000H,同样读出校验,若仍正确则认为DMAC工作正常,就开始对其初始化。
;若比较时发现有错,则执行停机指令     
        MOV    AL,0F0H        
TEST1:
    	MOV    BL,AL
    	MOV    BH,AL
    	MOV    CX,08
    	MOV    DX,CH0A 
TEST2:
	    OUT    DX,AL
		PUSH   AX
		OUT    DX,AL
		NOP
		NOP
		IN     AL,DX
		MOV    AH,AL
		IN     AL,DX
		CMP    BX,AX
		JE     TEST3
        JMP    ERR
        	
TEST3:
	    INC    DX
	    LOOP   TEST2
	    INC    AL
	    JZ     TEST1 
        
        MOV    SI,1000H    ;源地址
        MOV    DI,2000H    ;目标地址
        MOV    CX,07FFH    ;字节数
        
        MOV    AL,0
        MOV    DX,LACH     ;发复位命令
        OUT    DX,AL
        MOV    DX,CLRF     ;清先/后触发器
        OUT    DX,AL
        
        MOV    DX,CH0A     ;通道0基地址1000H
        MOV    AX,SI
        OUT    DX,AL
        MOV    AL,AH
        OUT    DX,AL

        MOV    DX,CH1A     ;通道1基地址2000H
        MOV    AX,DI
        OUT    DX,AL
        MOV    AL,AH
        OUT    DX,AL      
        
        MOV    AX,CX       ;通道0传送字节数7FF+1
        MOV    DX,CH0C     
        OUT    DX,AL
        MOV    AL,AH
        OUT    DX,AL        
        
        MOV    AX,CX       ;通道1传送字节数7FF+1
        MOV    DX,CH1C     
        OUT    DX,AL
        MOV    AL,AH
        OUT    DX,AL          
        
        MOV    AL,88H      ;模式:通道0,数据块传送,地址增一,禁止自动预置,读传送
        MOV    DX,MODE
        OUT    DX,AL        
     
        MOV    AL,85H      ;模式:通道1,数据块传送,地址增一,禁止自动预置,写传送
        MOV    DX,MODE
        OUT    DX,AL  
        
        MOV    AL,0        ;清除所有通道屏蔽位
        MOV    DX,MASK
        OUT    DX,AL 
        
        MOV    AL,1        ;存储器到存储器传送
        MOV    DX,COST     ;写命令寄存器
        OUT    DX,AL        
        
        MOV    AL,04H      ;请求存储器到存储器传送
        MOV    DX,REQ      ;写请求寄存器
        OUT    DX,AL        
                

        MOV    CX,8000H  
        LOOP   $
        CALL   BUF2
        CALL   DISPLAY        ;结束
OK:     JMP    OK
      
ERR:    CALL   BUF3           ;出错   
        CALL   DISPLAY
 ELP:   JMP    ELP
        
INIT8279:                     ;初始化8279
        MOV     DX,Z8279 
        MOV     AL,LEDMOD
        OUT     DX,AL
        MOV     AL,LEDFEQ
        OUT     DX,AL
        MOV     AL,LEDCLS     ;清除显示
        OUT     DX,AL
        RET
 
;显示字符子程序
;输入: AH,位置   AL,值
DISLED: 
        PUSH    AX
        OR      AH,80H       ;加显示位置偏移量
        PUSH    AX
        MOV     AL,AH
        MOV     DX,Z8279        
        OUT     DX,AL        ;设定显示位置
        POP     AX
        LEA     BX,TABLE
        XLAT                 ;查表取值
        MOV     DX,D8279        
        OUT     DX,AL        ;显示数据  
        POP     AX   
        RET 
        
DISPLAY:
        MOV     CX,8
        MOV     AH,0         ;显示位置  
 DLOOP: MOV     AL,AH            
        LEA     BX,DIS_BUFFER0
        XLAT
        CALL    DISLED
        INC     AH
        LOOP    DLOOP  
      
        RET

TABLE:
        DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB     7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
        DB     40H,00H,6FH,5CH,5EH,50H       ;'-, ,g,o,d,r

BUF1:   MOV    DIS_BUFFER7,8       ;8
        MOV    DIS_BUFFER6,2       ;2        
        MOV    DIS_BUFFER5,3       ;3
        MOV    DIS_BUFFER4,7       ;7 
        MOV    DIS_BUFFER3,16      ;-
        MOV    DIS_BUFFER2,16      ;-        
        MOV    DIS_BUFFER1,17      ;
        MOV    DIS_BUFFER0,17      ;        
        RET
        
BUF2:   MOV    DIS_BUFFER3,18      ;g
        MOV    DIS_BUFFER2,19      ;o        
        MOV    DIS_BUFFER1,19      ;o
        MOV    DIS_BUFFER0,20      ;d
        RET
        
BUF3:   MOV    DIS_BUFFER3,17      ; 
        MOV    DIS_BUFFER2,0EH     ;E        
        MOV    DIS_BUFFER1,21      ;r
        MOV    DIS_BUFFER0,21      ;r
        RET
        
CODE    ENDS
        END    START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -