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

📄 3_flashm.asm

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

;功能: 闪存读写实验

;接线: 用导线连接闪存模块的CS_FLASH到地。
;      扩展输出模块的CS_273到CPU模块的200H;
;      扩展输出模块的JD1C到八位逻辑电平显示模块的JD4B。
;//*****************************************************
ADDR1   EQU     0000H
ADDR2   EQU     0010H
D273    EQU     200H 

data   segment
data   ends 

stack  segment
       sta   dw    50 dup(?)
       top   equ   length sta
stack ends

CODE    SEGMENT
ASSUME  CS:CODE,DS:DATA,SS:STACK,ES:DATA


START:	
	    PUSH    CS
	    POP     DS
	    NOP
	    NOP
	    CALL    CHIP_ERASE	   ; 芯片擦除
        CALL    DELAY 	
        
        NOP                    ; 运行到这一行,观察附加段数据
            	
	    MOV     BX,ADDR1
   	    MOV     AH,55H         ; 向设定的位置写入55H
 	    CALL    BYTE_WRITE
 	    
        NOP                    ; 运行到这一行,观察附加段ADDR1数据 
               
	    MOV     BX,ADDR1    	
        MOV     DL,ES:[BX]     ; 读数据1
        
        NOP                    ; 运行到这一行,观察DL数据 
          	       
        MOV     AL,DL
        MOV     DX,D273        ; 并行输出口地址
        OUT     DX,AL          ; 输出数据1
      
        NOP                    ; 运行到这一行,LED显示数据1      
      
	    MOV     BX,ADDR2
   	    MOV     AH,0AAH        ; 向设定的位置写入0AAH 
	    CALL    BYTE_WRITE
	    
        NOP                    ; 运行到这一行,观察附加段ADDR2数据 	    
	    
	    MOV     BX,ADDR2    	
        MOV     DL,ES:[BX]     ; 读数据2
        
        NOP                    ; 运行到这一行,观察DL数据 
          	           
        MOV     AL,DL
        MOV     DX,D273        ; 并行输出口地址
        OUT     DX,AL          ; 输出数据2        
        
        NOP                    ; 运行到这一行,LED显示数据2 
	    JMP     $
	
	 
;**********************************************************************************
;                             芯片擦除
CHIP_ERASE  proc  near
        push    bx
        push    dx
CE_START:
        MOV     AX,5000H
    	MOV     ES,AX	
	
    	MOV     BX,5555H
    	MOV     DL,0AAH
        MOV     ES:[BX],DL    ;5555H/AAH
        MOV     BX,2AAAH
    	MOV     DL,55H
        MOV     ES:[BX],DL    ;2AAAH/55H
        MOV     BX,5555H
    	MOV     DL,80H
        MOV     ES:[BX],DL    ;5555H/80H
        MOV     BX,5555H
    	MOV     DL,0AAH
  	    MOV     ES:[BX],DL    ;555H/AAH
        MOV     BX,2AAAH
	    MOV     DL,55H
        MOV     ES:[BX],DL    ;2AAAH/55H
        MOV     BX,5555H
    	MOV     DL,10H
        MOV     ES:[BX],DL    ;5555H/10H
CE_WAIT:	
     	MOV     AL,ES:[BX]
	    TEST    AL,80H
	    JNZ     CE_OK
	    TEST    AL,20H
	    JZ      CE_WAIT	      ;等待擦除完成
	    MOV     AL,ES:[BX]
	    TEST    AL,80H
	    JNZ     CE_OK
	    MOV     DL,0F0H	 	  ;擦除不成功,复位
	    MOV     ES:[BX],DL    
	    JMP     CE_START	  ;重试
CE_OK:	 
	    NOP
 	    POP     DX
	    POP	    BX
 	    RET
CHIP_ERASE      ENDP
	
;**********************************************************************************
BYTE_WRITE   PROC  NEAR;处理字节写入前的命令序列 
	    PUSH    BX
	    PUSH	AX

	    MOV     AX,5000H
	    MOV     ES,AX
	    MOV     BX,5555H
	    MOV     DL,0AAH
        MOV     ES:[BX],DL     ;5555H/AAH
	    MOV     BX,2AAAH
	    MOV     DL,55H 	
        MOV     ES:[BX],DL     ;2AAAH/55H
	    MOV     BX,5555H
	    MOV     DL,0A0H 	
        MOV     ES:[BX],DL     ;5555H/A0H
	    POP     AX
    	POP     BX
    	MOV     DL,AH
        MOV     ES:[BX],DL	   ;向设定的位置写入AH

	    NOP
	    RET
BYTE_WRITE      ENDP
;***************************************************************************************

DELAY   PROC    NEAR
        PUSH    CX
        MOV     CX,0F000H
 DL:    LOOP    DL
        POP     CX
        RET
DELAY   ENDP
        
CODE    ENDS
        END     START

⌨️ 快捷键说明

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